手の傾きを検知して動くローバーを作った

だいぶ時間がたってしまったが学校の課外活動で製作したローバーについてのまとめ。以下に実際に制作したものの動画を貼りました。leapmotionを使用しているので手の傾きを検知して制御することができます。後部にはled matrixがついていてブレーキランプっぽい挙動をしてくれる。 (ワイヤレスでの制御をこだわっていたのだが、デモの時にちょうどモバイルバッテリーの電源がなくなってしまったので人に持ってもらっている。。。)

youtu.be

構成・設計

全体の概観を以下に示す

f:id:sakakendo0321:20181203222459p:plain

リポジトリは以下

github.com

gpioの制御にraspberry pi 3bを使用、gpioの制御ライブラリは pigpio library を使用した。 leapmotionのrespberry pi上での実行はサポートされていないようだったので母艦pcを別で用意してudpでモーターのpwm値を送り付けるようにした。guiからの制御をするためにtkinterを使用している。母艦側ではtkinterのlistenerとleapmotionのlistenerがブロッキングであったためthreadを二つに分けている。raspberry pi側でもudp serverとmotorの制御をそれぞれ無限ループで回しているためthreadを二つ用意している。ハードウェアは基本的にアマゾンで購入したタミヤの工作キットをベースにしている。

総括

チームメンバーは4人で初めてのプロジェクトマネージャーの経験であった。少人数での開発だったので課題が勝手に解決するなんてことはなく、ちゃんと動くものを作るためにはとにかく問題点を洗い出して一つ一つ片づけていくことが大切だと感じた。言ってしまえば当たり前のようでもあるが、このプロジェクトに関して言えばスレッド間でデータの共有、母艦とraspberry pi間の通信ラグなどの問題に突き当たってだいぶ苦しい思いをした。特に母艦の処理の速さにラズパイの処理能力が追い付かずキャパを超えてしまい処理待ちのデータが溜まっていくなんて言う問題があった。本質的な問題はpythonのライブラリが解決してくれたけど副次的な問題のほうが根深いなぁなんてことを思ったりした。そういうつらさもあって自分で一からものを作り上げれた達成感ことはとてもよかった。ただ気負いすぎていたところもあるようで実際にはハードウェアやleapmotionの制御などの自分があまりわからないところはチームメンバーに解決してもらってとても感謝している。

写真

せっかくなので開発中に撮影して気に入った写真を置いておく

f:id:sakakendo0321:20181203220904p:plain

f:id:sakakendo0321:20181203220940p:plain

f:id:sakakendo0321:20181203220402p:plain

f:id:sakakendo0321:20181203220428p:plain