« 2016年8月 | トップページ | 2017年3月 »

2016年9月

2016年9月 4日 (日)

視線操縦ロボット

ROBOT JAPAN の一発芸部門に参加したロボットです。参加時は仮の名前でDirect Eyeとして登録していました。

解説用の映像を作成しました。

1diagram2robot3console

PCとロボットの間の通信は無線LANです。外出先で運用しやすいよう、ロボットのRaspberry Piを無線LANのアクセスポイントとしてラップトップPCをそこに接続するようにしました。

このロボットは2つの機能からなっています。カメラの映像をリアルタイムで配信する受信系の機能と、視線入力をもとにモーターを動かす送信系の機能です。

受信系にはオープンソースプロジェクトのcamp をそのまま使用しました。これはRaspberry Pi上にでHTTPサーバーとして働き、クライアント側Webブラウザに表示するものです。このようなリアルタイム制御を考慮したものではないためか、フレームレートと遅延についてはベストな状態ではありませんでしたが大会直前ということで採用しました。

4consoledetail

操縦に使う視線検出センサーとしてTheEyeTribeのEye Tribe Trackerを使用しました。これが今回のプロジェクトの要です。ハードウェアを用いての視線検出部分は専用ソフトウェアが提供されています。EyeTribe Serverがセンサーからの情報を元に視線を検出、ローカルでTCPサーバーとして働き、JSON形式でデータを連続して取得することができるようになっています。その後は次のようにつながっています。

PC --[Wi-Fi/TCPIP]-- Raspbery Pi --[シリアル]-- VS-WRC003LV

Raspberry Pi自体にはDCモータードライバは備わっていないため、何らかの電子回路を拡張する必要がありました。今回はVS-WRC003LVのモータードライバ回路を利用しました。VS-WRC003LVはシリアルモードにするとUSB-シリアルポートデバイスとして稼働します。これをRaspberry PiのUSBポートに接続し、シリアル通信によって連携させました。

視線からロボットのモーターへの指令への変換はすべてPC側プログラムで処理しています。残りの2箇所のプログラムは開発効率の関係上極力単純にしました。VS-WRC003LV側のファームウェアは、シリアル通信から2つのモーターの回転方向とDuty比を受け取ってモーターに反映するだけというものです。ただし、通信切れ時の暴走を防ぐため、一定時間データが来なければ停止するようにしました。Raspbbery Pi上のプログラムはTCP(ここはUDPの方がより適していましたが)で受け取ったデータをそのままシリアルポートに送信するだけのものです。

5feedback

このロボットを作ろうと思った理由は、ロボットからのライブ映像と視線入力によって人間とロボットの機械系をひとつのフィードバックループにしたらどのような感覚が得られるだろうかという興味からです。

機械と環境で完結しているシステム、例えばライントレースロボットであれば

  1. センサーが線を感知
  2. フィードバック制御プログラムがモーターに指令
  3. ロボットの機械が動く、センサーも動く
  4. センサーが新たな線の位置を感知 (1に戻る)
という形でフィードバックループを形成します。この視線操縦ロボットの場合は
  1. カメラが景色を撮影
  2. ライブ映像を人間が目で追う
  3. ロボットの機械が動く、カメラも動く
  4. 移動により映像が変化する(1に戻る)
という形で人間が組み込まれたフィードバックループを形成するといえます。PID制御等のフィードバック制御系では各要素のゲインや遅延等が全体の安定性を決定する、ということがありますが、この場合は人間の反応の遅れに起因して発振が始まる、というようなことも起こるかもしれません、というあたりが面白そうなところです。

ただ、今のところはまだ人間以外の要因(特に映像配信)の遅延が大きいため、人間という要素はあまり影響していません。というよりは、ロボットを遅くして遅延による影響で不安定にならないように調整してあるというのが実際のところです。そのためか、まずまず自然な感じで操縦できたのではないかと思います。

ロボットの移動は視線の移動幅に対して比例するように作ってあります。これにより操縦者が映像内の物体を目で追うと、PID制御のP成分と同様の働きをします。右にあるものを見るとロボットが右を向き、映像では物体は左に移動していきます。そのため右に曲げる勢いも小さくなり、最終的にはその物体がロボット真正面付近に来た時平衡します。前後方向についても同様のことがいえます。この原理によって、「行き先を見る」だけで大体その近辺までロボットを誘導することができるのです。

次作りなおす機会があれば、まずは映像の伝送を改善して、ロボットをより高速に移動できるようにしてみたいと思います。

| | コメント (0) | トラックバック (0)

« 2016年8月 | トップページ | 2017年3月 »