サマーブートキャンプ


2010年8月9日,10日にnaistのオープンキャンパスの一種であるサマーブートキャンプが開催されました.その時のシステム制御・管理講座の出し物は,「ハーフマウスの支部サーキットモードを作ろう!」でした.どんなかんじで体験コーナーを開いたかをメモします.(福井の覚書,メモ書きです.)

企画概要

  • 担当者:中村先生,福井
  • テーマ名:マイクロマウスのフィードバック制御入門
  • 概要:ニコニコ動画でも大人気のマイクロマウスロボットの制御を行います。マイクロマウスロボットはフィードバック制御をしないとすぐに壁に衝突してしまいます。直線では壁に衝突せずまっすぐに走り、コーナーではコースに沿って曲がるような制御則の開発を体験してみましょう。
  • 受講条件:C言語プログラム経験
  • 受け入れ人数:2人

受講生はともに大学4年相当で,次年度から院に進むことを想定している.

プログラム能力は2人とも「ある程度かけます」と言うに相応しいレベルに達している.(立命館大学情報理工学部の基準,他基準はよくわかりません・・・)プログラミング演習をしっかりと履修しており,自分で新しいルーチンを0からかりかりと書くことができる.ただし,ばりばりプログラミングコンテストで戦えますというレベルには達していない.本人達も,コンテスト最前線でばりばりとコードを書く「お化け人類」を見て,「こいつらにはかなわん」と挫折を経験しているようだ.

マイコンプログラミングは1人はなし,1人はPICやAVRで遊んだ経験あり.ロボット作成はライントレースをかじったことがある程度.ものづくり経験値的には完全に素人ではないが,スーパーマンでもないレベルだった.

勉強量は私学のレベルで平均的.普通に授業を履修・理解し,成績は安定してB以上.当たりどころによって,時々A+やCにぶれる程度と思われる.競技のようにA+を狙いに行くタイプの学生ではない.

つまり,今回の受講生は,1人で全日本大会エキスパートクラスで戦える「お化け人種」ではない.しかし,普通の学部生よりは明らかに優秀な素養を持ち,かつ,マイクロマウスに関しては真っ白な状態.先生側から見ると,最高の初期状態を持つ受講生といえる.(大変貴重!)

先生役の福井としては,この2人の「0からコードを書ける能力」に大分助けられました.

配布したレジュメ

  • 目的:フィードバック制御の実装を通じてマイクロマウスの製作を体験する
  • 最終目標:サーキット競技(マイクロマウス迷路の外周を右回りに3周するのにかかる時間を競う競技.)を行うマイクロマウスロボットの制御プログラムを実装する
  • 実習時間
    • 8月09日13:00-16:50(17:00-17:30 は研究科紹介(入試部会))
    • 8月10日09:20-12:20(12:30-13:30 に懇親会(参加者,TA,その他))
    • 13:30-17:00(17:30から修了証書授与式(研究科長),18:00に閉会)
  • 実習の流れ
    • 1. 自己紹介(名前,興味のあること,各種ロボット作成の経験など)
    • 2. マイクロマウスロボット「Pico」の概要説明
    • 3. LED,スイッチ,ブザーを使いこなそう
    • 4. 内部変数をprintf関数で表示してみよう.
    • 5. マイクロマウスをゆっくり直進させよう.
    • 6. 直進時のロータリーエンコーダ出力を確認しよう.
    • 7. マイクロマウスを5[cm]直進させ停止させよう.また,停止後の目標値との誤差を示してみよう.
    • 8. マイクロマウスを左右に90度回転させよう.また,停止後の目標値との誤差を示してみよう.
    • 9. 壁が1[cm],2[cm],3[cm]前方にあるときの前壁センサの値を確認しよう.
    • 10. 左右に壁があるときに,壁に衝突せず直進するようなプログラムを書こう.
    • 11. 前壁を確認すると右に回るプログラムを書こう.
    • 12. サーキットモード完成!周回時間を短くしてみよう.
  • 余力がある人は

余力がある人は左手法による迷路探索走行モードを作ってみよう.左手法:左側の壁をずっと伝い続ける方法.つまり,左に壁があるときは直進,前に壁があり直進できなければ右回り,左に壁がなければ左回り,を繰り返してゴールを探す方法.

1日目

Picoに慣れてもらう作業に終始した.と,いうより,準備がいい加減でそれしかできなかった.

  • LEDの点灯,SWの扱い(チャタリングを解説)
  • SCI通信でのデバック

かなり不評だった.不評っぷりから中村先生より指導が入る.

何を最終目標にして,何の作業をさせるかを考えた.全部説明するとちんぷんかんぷんになってしまうので,どこの説明をスルーし,どこの説明を簡素化するかを考える.作業効率化のために,本質的な作業以外はあらかじめ作っておくことにした.コードの可読性向上と,プログラムの書き込み回数低減が重要

  • picoに内在されているバグを直した
  • パラメーターチューニング用のOSもどきを作って置いた
  • 受講者は制御則v,omega部分をかえるだけ状態になるようにした

Picoにデフォルトで入っているSCI通信ルーチンにはバグがある.すなわち,SCI_printfなどの送信関数はきちんと動作するが,SCI_getcなどの受信関数は動かない.月並亭で公開されているSCI通信モジュールを組み込むことにした.

teratermから数値をマイコンに入力できるような関数を準備した.すなわち,各種パラメータをSCI通信で調整できるようなモジュールを追加した.

picoでデフォルトに入っている制御ループは,どこが何の制御部分かが分かりにくい.でかでかとコメントを書き,どこを直せばいいかを補足した.Picoの制御ループは,速度入力v,角速度入力omegaを設計してからそれを右モータ速度入力,左モータ速度入力に変換する仕様に(厳密には)なっていない.制御式を修正し,v,omega変数に制御入力をつっこむと,後は下位の速度PI制御が勝手に動くようにした.これにより,受講者がv,omega入力設計に集中できるような環境を整えた.ここまでの作業で大体3時間相当の時間がかかった.

2日目

厳密に議論するには非線形制御論が必要で大変すぎる.各種近似を繰り返し,線形制御論で壁トレース制御を解析し,その解析内容を説明した.

  • ロボットは速度入力,角速度入力ロボットとみなせる
  • 原点近傍だけ考える.sinθはθに近似,センサーに線形性を仮定する

このへんの近似を繰り返すと,通路のまん中を走る制御は,二次の遅れ系に近似できることを示した.

  • 二次の遅れ系はPD制御じゃないとだめと言われていると強弁.(古典制御論を勉強しないとこのへんはわからないので,ここは言い切ってしまう.PDでなければ自由な極配置ができないとも.)
  • 以下のことが古典制御では成り立つことを説明した
    • P制御だけでは固有値の虚部が消せず,振動が残る
    • D制御だけでは固有値の実部をマイナスにできず,まん中を走れない
  • 理論で成り立っていることをpicoロボットを実際に動かして確認してもらった
    • PD制御はあらかじめ記述しておき,パラメータをチューニングすればよいだけの状態にしておいた
    • P制御だけにしたい場合はD制御のゲインを0にすればよい.逆も同様.
    • Pゲインをきつくるすと収束ははやくなるが,虚部項がでかくなるので振動することを確認した.
    • D制御だけだと,θは進行方向に収束するが,迷路との距離は補正できないことを,物理的に考察した.物理的な考察と制御論的な考察の2種類を行った.
  • 迷路のまん中を走れるようになると,走行し終わりの際に,前壁との距離を適切にできるような制御をかいてもらった.
    • 制御則は,速度入力v=-K(現在のセンサー値-適切な距離にロボットをおいたときのセンサー値)
    • picoデフォルトの制御則は,壁ぎれルーチン+急停止だが,位置決め制御をいれることで安定性が向上した.
  • これらを組み合わせてサーキットモードを走ってもらった.
    • パラメータ調整実験により,パラメータは洗礼された値になっており,かつ,位置決めにより正確な停止を行っているため,安定度が劇的に向上したものができた
  • この段階で残り30分くらい.
  • まだづつきをやりたそうなので,スラローム走行について説明.
    • 右モータと左モータの速度比を,回転半径から求める
    • どれくらいのステップだけ動かせば90度30mm半径スラロームになるか計算
    • 15mm直進,30mmスラローム,15mm直進を書いてもらった
    • 当然外側に膨れたものができあがる
    • 今までは問題にならなかった,下位のモーター速度PI制御が問題になること,遠心力が問題になることなどを説明して終了
    • つづきがしたかったらPICOを買って下さい.関西支部にきてくれると歓迎するよと最後に宣伝した.
  • 開発のコツは,計測70%,制御の工夫30%のようだ.計測をしっかりやっていると制御部分は簡素なものですむため,開発速度が向上することが分かった.換言すると,計測をしっかりやった上で限界を感じてから制御部分の工夫をすることがコツのようだ.
  • パラメータチューニングのときは,理論で大体の値を求めておいて,後は気合で微調整の方針でやってもらった.

2人とも局地旋回を使った支部サーキットモード完成.2人のロボットの軌道は微妙に違う.同じ制御・プログラムでもパラメーターチューニング法には個性が出るようだ.1人はスラロームターンにも取り組み始めたが,途中で実習時間は終了した.スラロームに取り掛かった受講者はつづきをやりたげな空気だった.かなり好評.こんなかんじのイベントを支部で開けばマウサー人口が増えるだろうなぁと思った.

つづきをやりたいと思わせて,少しやらせて終了させるのが社長の仕事だそうです.やりたい,やりたいとがまんさせて,次の日も猛烈にがんばらせるみたいな.

2日目開始時の状態.zip
SCI受講者最終状態.zip