東京連合2011 第1回
(2011/6/18)
外乱光対策にまいまい式を使おう
大西洋平@東京連合
まいまい式って知ってますか?
 東京地区の会場は、外乱光対策が重要と言
われている(理由は後述)。
 この外乱光対策の有力候補が「まいまい式」。
 ※信号処理を応用したやり方が他にあるので、
唯一のやり方ではない。
 まいまい式をうまく使えれば、外乱光に悩まさ
れることはなくなる!(・・・はず)。
今日のアジェンダ




光センサーの仕組み
外乱光対策が必要なわけ
まいまい式のしくみ
本番でまいまい式をうまく使う上での工夫
あらかじめお詫び
 ハード・エレキの知識が乏しいので、ハード・エ
レキがらみの話をかなりぼやかしています。
 詳しい人いましたら、突っ込みお願いします。
 あくまでも、まいまいの計算を速くする案を話
すだけで、バッチリ走行できるレベルには至っ
ていません。
光センサーの仕組み(1/2)
(1) 外乱光含む反射光の強さを測定 (2) 出力電圧は反射光の強さに反比例
※内蔵のフォトトランジスタの特性
すねいるさんのブログより引用: http://www.chihayafuru.jp/
光センサーの仕組み(2/2)
(3) (入射光が一定なら)反射光の強さは
コースの反射率に比例する
光量
(光の強さ)
反射率 =
反射光の強さ / 入射光の強さ
(4) 反射率は色と
相関がある。
地面の反射率
まとめると
 光センサの出力電圧を見ると、コースの反射
光の強さが分かる。
 「反射率 = 反射光の強さ / 入射光の強さ」な
ので、入射光の強さが一定とすると、コースの
反射光の強さが分かれば、コースの反射率も
分かる。
 コースの色の明度(明るさ)と反射率は相関が
あるので、反射率から色を推定できる。
では、なぜ外乱光対策が必要のか?
 東京地区の会場は太陽光がコースに降り注ぐ
場合があり、外乱光の影響を無視できない。
 太陽光が降り注ぐ場所は外乱光がまばらに入
射するので、入射光の強さが一定という前提
が成り立たない。
 地面の反射率が高い(ラインの色が明るい)のか、
外乱光が強いのか区別できない。
 外乱光の影響を取り除かないと、コースの色
の明度を正確に推定できない。
まいまい式の仕組み
LED点灯時と消灯時の光センサ測定値の差分を計算し、
外乱光の影響を取り除き、LEDの反射光成分だけ測
定できる。
LEDの反射光
光センサ
測定値
点
消
外乱光
点
20ミリ秒
消
点
20ミリ秒
時間
実際にやってみると差分計算が速くできな
いらしい
16ミリ秒ごとにLEDを点滅させた時の光センサ測定値
光
セ
ン
サ
測
定
値
たまに測定が
抜ける?
明るさの変化
がゆるやか
明るさの変化のタ
イミングが不規則
に遅れる
相対時刻 [ミリ秒]
すねいるさんのブログより引用:
http://www.chihayafuru.jp/
まいまい式の技術的課題
 光センサ測定値の変化がゆるやかで差分計
算を速くできない。
 20ms点灯 → 20ms消灯 → 20ms点灯・・・
 倒立制御の周期(4ms)に対し、光センサの周
期が長すぎるので、走行速度を上げるとライン
トレースの追従性が悪くなる。
 障害物競走をしているのに、5歩おきに目を開
けて歩いている状況に近い。
(仮説)どこかにボトルネックがある?
 ハード・エレキの問題
 ハードかエレキの反応が遅い
 LED光の点滅周期が遅い
 光センサ測定値の取得周期が遅い
 測定値の干渉
 光センサがLED光の点滅の影響を受ける
 ソフトの問題
 差分計算の計算量が多い
 その他のオーバヘッドが大きい
LEDの明滅周期はたぶんOK???
 HASH UFOさんの昨年のモデルによると
 「NXTのセンサは高速起動できない」。
 一方、メーカー出身の先輩によると
 回路図とデバドラを見てもLED光の明滅に数ミリ秒
かかるような実装になっていない。
 少なくともマイクロ秒のオーダー。
 エレキの問題があるのかもしれないが・・
センサ値の取得周期にはボトルネックがある
が、倒立制御には問題ないレベル
みなさんのプログラム
はこっち(書換可)
光センサ
計測0.1ミリ秒
2ms周期
3ms周期
デバドラはAVR側のFlashメ
モリにある。規約上、筐体を
開けて書き換えは不可。
(引用元)ECRobot C API リファレンス http://lejos-osek.sourceforge.net/ecrobot_c_api_frame_jp.htm
光センサがLED光の点滅の影響を受ける?
 可能性はあるが確証は得られていない。
 LED光の点滅とセンサ値測定がほぼ同時に実行され
ると、LED光の強さが変化する途中で光センサ値を
測定してしまう可能性がある。
 厳密にやるなら、LED光の点滅と光センサ値の測定
は時間的に分けておけると安心。
差分計算の計算量に問題なし
 光センサの実測値からまいまい式の差分計算
を行うためには、いろいろ計算が必要。
 しかし、差分計算の計算量を抑えるために近
似値を求める工夫をしている。
 詳しくはすねいるさんのブログ参照。
RTOSのオーバヘッドは改善の余地あり?
 仕事の量は少ないがタスクが6つある。
 初期化、倒立制御、LED点灯、LED消灯、輝度計
算、ログ取得
 タスクの生成と破棄を毎周期ごとに繰り返して
いる。
RTOSのオーバヘッド軽くするなら
 初期化タスクと周期タスクのみ
 タスクの破棄はしない
 周期タスクの中で以下を順番にやる




光センサ値の測定
差分計算
倒立制御
LED点灯(もしくは消灯)
検討結果
 ハード・エレキの問題
 ハードかエレキの反応が遅い
 [ ? ] LED光の点滅周期が遅い
 [OK] 光センサ測定値の取得周期が遅い
 測定値の干渉
 [ ? ] 光センサがLED光の点滅の影響を受ける
 ソフトの問題
 [OK] 差分計算の計算量が多い
 [NG] その他のオーバヘッドが大きい
ここだけ改善
してみた
オリジナルの実装より結果が改善
(モータは止めたまんまですが・・・)
光センサ測定結果
(センサ測定周期4ミリ秒、LED明滅周期 8ミリ秒)
900
点
光センサ測定値
850
点
点
点
点
点
800
750
消
700
消
消
消
消
消
時間[ミリ秒]
650
1304
1296
1288
1280
1272
1264
1256
1248
1240
1232
1224
1216
1208
1200
LED光点滅周期を4ミリ秒にすると駄目
光センサ測定結果
(光センサ測定周期4ミリ秒、LED明滅周期4ミリ秒)
900
光センサ測定値
850
800
750
700
時間[ミリ秒]
650
1304
1296
1288
1280
1272
1264
1256
1248
1240
1232
1224
1216
1208
1200
確認結果
 ハード・エレキの問題
 ハードかエレキの反応が遅い
 [ ? ] LED光の点滅周期が遅い
 [OK] 光センサ測定値の取得周期が遅い
ここが駄目?
 測定値の干渉
 [ ? ] 光センサがLED光の点滅の影響を受ける
 ソフトの問題
 [OK] 差分計算の計算量が多い
 [OK] その他のオーバヘッドが大きい
ここは改善
もしLED光明滅の影響を受けているなら?
 光センサ値測定とLED光点滅の順序が保証さ
れるような設計にする(実現方法はおまかせ)。
 光センサ値測定
 まいまい式差分計算
 倒立制御
 LED光点灯(消灯)
ここは一緒でいい
ここはなるべく間隔を
空ける
まとめ
 外乱光対策のまいまい式の仕組みを紹介した。
 まいまい式を使うにはLED点灯時と消灯時の
センサ値の差分を速く計算することが重要。
 RTOSなどオーバヘッドを軽くすることで、計算
速度がいくらか改善する。
 さらに倒立制御に支障がないレベルまで点滅
周期を短くするには、LED光点滅の影響を受
けないような設計上の工夫が必要になる。
ダウンロード

大西さん発表資料 765KB