1年ほど前に”mbed + Wi-Fiカメラ”で、”PS Vitaで操縦するロボット”を作った。
今回はRaspberry Piの勉強のために、”Raspberry Pi + USBカメラ”で同じものを作ってみることにした。
Raspberry Piには、VNCサーバを入れ、無線LAN経由で操作できるようにしてあるので、キーボード、マウス、ディスプレイは接続していない。
ロボットの車体は前回のものを流用することにした。
PS Vita側のソフトも前回のものをベースにする。
(PS Vitaのアプリを作るのにはPSMパブリッシャー・ライセンスが必要だが、現在は期間限定で無料)
新しく作る必要があるのは、
・Raspberry PiでRCサーボモータの制御
・PS VitaとRaspberry Pi間のTCP通信
・Raspberry PiからUSBカメラ映像のmjpegストリーミング配信
・PS Vitaでmjpegストリーミング映像表示(前回は静止画を連続して読みだして表示していた)
になる。
【1】Raspberry PiでRCサーボモータを制御
ここを参考にさせてもらった。簡単だった。
・Raspberry Pi OpenCV Pan & Tilt Face Tracker
・Raspberry PiでRCサーボを動かすドライバー ServoBlaster
動作確認はコマンドラインから
echo 0=120 > /dev/servoblaster
【2】PS VitaとRaspberry Pi間のTCP通信
ここの、”TCPとシリアルポート間で通信を行うプログラム”を参考にさせてもらった。
まず、TCPとシリアルポート間の通信は問題なく動いた。
次は、PS VitaからRaspberry PiにつないだRCサーボをTCP経由で動かしてみる。
シリアルポート”/dev/ttyAMA0”の代わりに、サーボ制御の”/dev/servoblaster”を使う用に改造した。
(ただし、コマンドを書き込んだ後、flush()する必要がある。)
これで、PS VitaからTCP経由でRaspberry PiにつないだRCサーボを動かせるようになった。
PS VitaからTCP接続して”0=120”と送信すれば、Raspberry PiのRCサーボが動く。
PS Vita側のプログラムは以前作ったものを改造した。
とりあえず、PS VitaにはWi-FiカメラAi-Ballの画像を表示している。
動画はこちら。
PS Vita + Raspberry Pi + RC Servo + Ai-Ballの実験
製作中のRaspberry Pi搭載ロボットは、基本的にはこれに走行用回転サーボを追加しただけ。
【3】Raspberry PiからUSBカメラ映像のmjpegストリーミング
ここを参考にさせてもらった。
起動時に”failed to start”になるが、一応動いているようだ。
・Raspberry Pi から Android へ Web Cam 映像ストリーミング
【4】PS Vitaでmjpegストリーミング映像表示
ここを参考にさせてもらった。ただし、遅れが大きいので改良の余地あり。
・DCamViewer for Playstation Vita
改良して遅れはほとんど気にならない程度になった。これならロボットに搭載できそうだ。
改良点 : このように修正して通信効率を上げた。
// val = socket.Receive(readBuffer,data_ptr,512,SocketFlags.None);
val = socket.Receive(readBuffer,data_ptr,readBuffer.Length - data_ptr,SocketFlags.None);
動画はこちら。
Raspberry Pi から PS Vita へ Web Cam Motion Jpeg streaming
【5】ロボット側の回路
ロボット側の回路はシンプル。PWM RCサーボを4個つなぐだけ。
カメラのパンチルト用2個と車輪用の360°回転タイプ2個。
ここを参考にさせてもらった。(RCサーボの電源はRaspberry Piからとらずに、別の電源を付けている)
・Raspberry Pi OpenCV Pan & Tilt Face Tracker
360°回転タイプのサーボ、私は買ったが、普通のRCサーボを改造して作ることもできるようだ。
電源は、Rasberry Pi用のモバイルバッテリーとRCサーボ用のエネループ4本。
【6】完成
これが完成したPlayStation Vitaで操縦するRasberry Pi搭載ロボット。
搭載したUSBカメラのストリーミング映像をPS Vitaに表示できる。
ちなみに、USBカメラを使わずWi-FiカメラAi-Ballからのmjpegストリーミング映像でも表示できる。
動画はこちら。
PlayStation Vitaで操縦するRasberry Pi搭載ロボット。
【7】その後
ロボットが実験中に机から転落して大破してしまった!((((;゚Д゚)))
でも...主要なバーツは両面テープで固定していただけなので、3分後には全面復旧。(^^)/
−以上―
関連する記事
・Raspberry Pi に USB Camera をつないでいろいろやってみた。
参考リンク
・AndroidでWifiカメラからのMJPEGストリームを表示する