Bristlebotはご存知だろうか?
歯ブラシに振動モータをつけることで、振動でブルブル進むという、至ってシンプルなロボット(おもちゃ?)である。
基本的にはモーターは一つで、リモコンがないので、進行方向は操作できない。
そこで、今回はそれを、プロジェクターを使って動かしてみようと思い試作。
構想としては、
・ソーラーパネルをBristlebotに載せる。
・2つ連結する。(右と左に進む動力を用意することで向きを変えることを意図)
・Webカメラで位置を特定する
・プロジェクターで左右のソーラーモジュールの位置を狙って光を当てる。
というのが主な実装である。
1.ソーラー電池をBristlebotに乗せる
そもそも、振動モーターを室内照明で動かせるぐらいのソーラー電池がどんなもんなんだかいまいちわからない。
とりあえず、家にある、振動モーターやソーラー電池をいくつか試した所、45mm角ぐらいの、ソーラーモジュール(やや重たいやつ)ならなんとか、振動モーターが回転する事がわかったので、それを購入した。
しかし、いざ乗せてみると、まっすぐ進まない。
調べてみると、ブラシを斜めにカットしてやると、前進するらしい。
2.連結する。
この辺は色々試したが、まだ正解はない。とにかく連結した。
3.Webカメラで位置を特定する。
位置を特定するのは、左右の太陽光モジュールを別々に狙って光を当てたいからである。
位置特定にはARマーカーを使用した。
ちなみにコードを作成するのに、arucoというpythonモジュールを使いたかったのだが、macではうまくいかず、Raspiで作成。
Webカメラから位置を把握するプログラムを用意してこのパートは一旦完了。
4.プロジェクターで光をあてる。
上で用意した位置検出情報を今度は、別ウィンドウに黒いパレットを用意しそこに左右の大きな丸を描画。要は左と右と別のスポットライトをあてる要領である。
いまいち言葉だとイメージしずらいと思うが、黒い画面に二つの白い円がリアルタイムに描画されていると思ってください。
では、実食。
まず最初に困ったのが、プロジェクターの光がARマーカーに当たると白飛びしてしまい、位置情報を検出できない。
かといって、プロジェクターで投影される、スポットライト的な光が太陽光モジュールにしっかり当たらないと、びくともしない。
この調整は結構苦戦。今日のところはこのぐらいという所で、
一応雰囲気的に動いている動画はこちら。
ゆっくり過ぎて動いているように見えないかもしれないがゆっくり動いている。
ARマーカーを読み取り、一応なんとかスポットライト(プロジェクターによる白い円の投影)追随している。
ただし、方角については実装していいないのでXY 方向に進むだけで、ドローンでいうYAWに関しての考慮はされていない。
床に上からプロジェクターでデスクトップを表示させている。中央の黒いウィンドウが
Bristlebotを動かすプログラムとして実装したウィンドウ(見づらいが、白い円を左右に描画している)
課題
かろうじて前には進めたが、もう少し確実に前進できるよう、Bristlebotの実装を工夫する必要があるかと思う。
もう少しちゃんと動くようになったら、YAWの追随や、目的地とのギャップから左右のスポットライトを制御するようにしたい。
使用したWebカメラのスペックが悪く、検出率に影響していると考えられるので、そこも改善が必要だと思う。