はじめに
物理構成は前回書いた通り.
今回はこれまで行ってきた技術検証を参考に適当な制御プログラムを書く.
システム構成
適当に書いた構成はこんな感じ.適当過ぎてコンポーネント図?オブジェクト図?なにこれ?
インターネット上には HTTP ベースの操作画面を作っている人の記事がいくつかあるが,イマイチ操作性が悪そう.今回はソケットを使って母艦 PC から CamRobo へ TCP でカムロボ制御コマンドを投げる.Agent プログラムが Commander プログラムから受信したカムロボ制御コマンドを適当に解釈して PCA9685 などのコンポーネントを制御する.ストリーミング周りは改良予定(仮).
途中の通信経路は,RasPi にグローバル IP 割り当てられるように通信モジュールを接続するか,拠点間を適当に VPN 接続すればいい.
ソースコードはこちら.とりあえずこの記事を書いた時点ではベータ版なので,エラーハンドリングが不十分だったり,セキュリティ全く考えてないコードになっている.一部 IP アドレスやパスも環境に合わせて変更する必要がある.また制御コマンドを送信する PC のキーボードはカムロボの操作に専有されるので,他の作業をしながら遠隔操作は出来ない.(専用コントローラー作るか...?)なお,PC の OS は Linux 前提.
制御ソフト導入
CamRobo 側
Agent プログラムは TCP で受け取ったコマンドを解釈して,I2C の制御やプログラムの呼び出しなどを行う.
ソースコードを拾ってくる.
$ git clone URL
コンパイルする.
$ cd CamRobo
$ g++ -o CamRoboAgent CamRoboAgent.cpp PCA9685.cpp
実行して,接続待受状態にしておく.
$ ./CamRoboAgent
PC 側
Commander プログラムでは,Agent プログラムに対してコマンドを投げてカムロボを操作する.TUI を作りたかったが,とりあえず動けばいいので一旦保留.
ソースコードを拾ってくる.
$ git clone URL
環境に合わせて IP アドレスなど変更したらコンパイルする.
$ g++ -o CamRoboCommander CamRoboCommander.cpp
実行する.キーボードを専有するため root 権限が必要.
$ sudo ./CamRoboCommander
動作している様子はこんな感じ.左右のクローラー,腕やカメラの角度,目の色など,ローカル環境ではほぼリアルタイムに操作できる.
おわりに
いい感じにカムロボを遠隔操作できるようになった.残る問題はビデオストリーミング...
仕組みが分かると楽しさ N 倍.ソケットプログラミングやポーリングの説明をしておきたいところだけど,長くなりそうなので気が向いたら書く(かも).
Windows?なにそれ?
コメント