OpenRoadsでロボットアプリケーションを作る
_SSR_CMD_SERVOパケット
例えば「センサーの示す方向へ首だけを向ける」といった制御を行いたい場合に、あらかじめ決めたポーズやモーションを実行するという制御方法は現実的ではありません。そのような場合はこのパケットを用いることによって、サーボ単体の角度と移動時間を指定して動かします。例えば、図2-1の_SSR_CMD_SERVOパケットの例はID2(首)のサーボを10°の位置に1秒で動かすことを示しています。初期位置がどこにあろうとも1秒で10°の位置に動こうとすることに注意してください。
------------------------------------
typedef struct _SSR_LAN_FILE { char sFileName[16]; /* ファイル名 */ unsigned short type; /* ファイル種別 */ unsigned short index; /* インデックス */ unsigned short length; /* データ部の長さ */ unsigned char data[_SSR_MAX_DATA] ; /* データ本体 */ } SSR_LAN_FILE; |
図2-2:_SSR_CMD_FILEパケットの構造
------------------------------------
パケット名 (太字が応答パケット) |
内容 |
---|---|
_SSR_CMD_STICK | ジョイスティックのデータを送信 |
_SSR_CMD_FILE | ファイルの送信 |
_SSR_CMD_FILE_ACK | ファイルの受信応答 |
_SSR_RCMD_POSE_FILE | ポーズの実行命令 |
_SSR_RCMD_MOTION_FILE | モーションの実行命令 |
_SSR_RCMD_MOTION | 登録モーションの実行命令(ID指定) |
_SSR_CMD_SERVO | サーボの個別制御命令(ID指定) |
_SSR_CMD_SERVO_NAME | サーボの個別制御命令(サーボ名指定) |
_SSR_CMD_GET_SERVO_NAME | サーボの個別情報を要求する命令 |
_SSR_CMD_SERVO_INFO | サーボ個別情報の応答 |
_SSR_CMD_GET_ROBOT | ロボットの情報を要求する命令 |
_SSR_CMD_ROBOT_INFO | ロボット情報の応答 |
図2-3:パケットの一覧
_SSR_CMD_FILEパケットとの組み合わせ
ポーズファイルやモーションファイルをパソコンから_SSR_CMD_FILEパケットで複数のパケットに分割 して送信し、その後、_SSR_RCMD_POSE_FILEパケットや、_SSR_RCMD_MOTION_FILEパケットで実行命令を出すことがで きます。
1パケットあたりのファイルデータの最大容量は256バイトです。それを超える容量のファイルを転送する場合は_SSR_CMD_FILEパケットを用 いて256バイトごとに分割して送ります。_SSR_CMD_FILEパケットには、ファイル名、ファイル種別、ファイルインデックス、パケットに含まれ るデータ部の長さ、データ本体という5種類の情報が含まれています。図2-2に、_SSR_CMD_FILEパケットの構造を示します。
受信側(ロボット)は、_SSR_CMD_FILEパケットを受信するたびに、指定されたファイルをオープンし、データを書き込み、そしてクローズしま す。インデックスが0の場合、ファイルを新規書き込みモードでオープンし、0以外の場合はアペンドモードでオープンします。これにより、複数のパケットに 分けて送られたファイルが、受信側で1つのファイルにまとめられるのです。
パソコンからポーズやモーションをロボットに転送する場合、まず一時ファイルを_SSR_CMD_FILEパケットで送信した後に、そのファイル名を指 定した_SSR_RCMD_POSE_FILEパケットや_SSR_RCMD_MOTION_FILEパケットを送信します。これを受信したロボットは、 直前に転送されたファイルに基づいて、関節の動作やLEDの点灯/消灯、サウンドデータの再生などを行います。
以上、ロボットに命令する系統の制御を見てきましたが、OpenRoadsにはロボットからの応答パケットも何種類か規定されています。図2-3に命 令・応答含めたすべてのパケットを示します。
応答パケットの中にもおもしろいものが含まれていることに気づきましたか?例えば、ロボットを手で押したりすると、 _SSR_CMD_SERVO_INFOパケットでサーボの負荷を読み、それに応じた命令を与えて、ロボットが「痛い! やめて~」などと人間的な反応をすることも可能なのです。
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- インターネット経由でロボットを動かす
- 加速度センサーやジャイロスコープセンサーを使った、3つのセンサーサンプル
- Leap Motionで画像のトリミングと保存を行うためのサンプルプログラムを作る
- 画面上の図形を5本の指で操作する基本的なLeap Motionプログラムを作る
- モーションセンサーとShareStatusTask、MediaPlayerLauncherを使う
- Leap Motionのスクリーン・タップを使った音声の再生と画像の表示
- マウス・カーソルで指定した画像の一部を拡大表示するLeap Motionプログラム
- 手の動きに合わせて画面上のキャラクターを操作するLeap Motionプログラムを作る
- VNC環境とRaspberry Piで簡単電子工作(3)
- 張子の虎をキー・タップすると頭が上下に動くLeap Motionプログラムを作る