2014年12月7日日曜日

7.3 Twistメッセージによるロボットの移動

ROSでは base controller へのモーションコマンドとして Twist型のメッセージを使います。
頻繁に見かけるのは、以下の様な例です。
「”command velocities"と呼ばれる/cmd_vel ノードにTwistが型のメッセージを配信する」


7.3.1 Twist型メッセージの例
以下のコマンドでTwist型メッセージの詳細が表示されます
$ rosmsg show geometry_msgs/Twist
geometry_msgs/Vector3 linear
float64 x
float64 y
float64 z
geometry_msgs/Vector3 angular
float64 x
float64 y
float64 z
geometry_msgs/Twist 型は二つのサブメッセージから成り、それぞれ float64型が3つからなるベクター(配列)型です。
geometry_msgs/Vector3 linear  は並進方向の速度を意味し、それぞれ x, y, z 方向の速度をメートル毎秒で与えます。
また、geometry_msgs/Vector3 angular  は回転方向の速度を意味し、それぞれ x, y, z 軸回りの回転速度をラジアン毎秒で与えます。

例えば、ロボットを0.1メートル/秒で前進させたいときには、

'{linear: {x: 0.1, y: 0, z: 0}, angular: {x: 0, y: 0, z: 0}}'

※ここで、サブメッセージ内の3つの値のデリミタは「コロン+スペース」なのを注意して下さい。
x: 0.1 (x + : +  スペース+数値)です。:の後にスペースを忘れないように。

同様に、ロボットをその場で反時計方向に回転させるには以下のようにします。

'{linear: {x: 0.0, y: 0, z: 0}, angular: {x: 0, y: 0, z: 0.1}}'

実際にROSのコマンドでロボットを移動させるには以下の様に入力します。
$rostopic pub -r 10 /cmd_vel geometry_msgs/Twist '{linear: {x: 0.1, y: 0, z: 0}, angular: {x: 0, y: 0, z: -0.5}}'
時計方向に0.5ラジアン毎秒で回転しながら、0.1メートル毎秒で移動します。




0 件のコメント:

コメントを投稿