ROS入門 (39) - Gazeboのシミュレーション結果をrvizで確認
Gazeboのシミュレーション結果をrvizで確認する方法をまとめました。
前回
1. Gazeboとrviz
「Gazebo」と「rviz」は、ロボットを3D表示しているので見た目は似ていますが、用途は異なります。「Gazebo」は現実世界の代わりにロボットを動作させるシミュレーション空間で、「rviz」は文字列でログ出力する代わりに3Dで情報をわかりやすく表示するツールになります。
2. Gazeboとrvizの起動
「ROS入門 (37) - toio風ロボットをURDFで作成して、Gazeboに配置して、ROSコマンドで操作」で作成したシミュレーション空間の情報をrvizで確認してみます。
(1) Gazeboの起動。
$ roslaunch hello toio_style.launch
(2) rvizの起動。
$ rviz
(3) 「Display → Global Option → Fixed Frame」に「odom」を指定。
これによって、ロボットの表示時にオドメトリ原点の相対座標として表示されるようなります。
(4) 「Display」のAddボタンを押し、「RobotModel」を選択し、「OK」ボタンを押す。
RobotModelが追加されますが、エラーが表示されています。
URDFのJointStateの情報が不足しているエラーになります。rvizで表示するには、URDFで使われている全てのJointのJointStateが必要になります。
(5) rvizのメニュー「File → Save Config」でrvizの状態を保存。
あとで「File → Open Config」で復帰できます。
3. JointStateの確認
以下のコマンドでパブリッシュされているJointStateを確認します。
$ rostopic echo /joint_states
---
header:
seq: 8713
stamp:
secs: 43
nsecs: 653000000
frame_id: ''
name:
- right_wheel_joint
- left_wheel_joint
position: [-0.0023643814565899035, -0.00205102525916967]
velocity: []
effort: []
---
header:
seq: 8715
stamp:
secs: 43
nsecs: 662000000
frame_id: ''
name:
- right_wheel_joint
- left_wheel_joint
position: [-0.002379459825475827, -0.0020567221593479346]
velocity: []
effort: []
---
:
「left_wheel_joint」「right_wheel_joint」は配信されていますが、「front_wheel_joint」「back_wheel_joint」は配信されてないことがわかります。差動駆動プラグインで設定されてなため配信されていないようです。
4. JointStateパブリッシャーの追加
(1) URDFにJointStateパブリッシャープラグインを追加します。
更新レートは1Hzにしてます。
・toio_style.urdf
<robot>
:
<!--Gazeboプラグイン-->
<gazebo>
:
<!--JointStateパブリッシャープラグイン-->
<plugin name="joint_state_publisher" filename="libgazebo_ros_joint_state_publisher.so">
<jointName>front_wheel_joint, back_wheel_joint</jointName>
<updateRate>1</updateRate>
</plugin>
</gazebo>
</robot>
(2) launchファイルにRobotStateパブリッシャーを追加します。
GazeboがパブリッシュしたJointStateを/tfに変換するノードになります。
・toio_style.launch
<launch>
:
<!--robot_state_publisherの起動-->
<node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" />
</launch>
5. 動作確認
再度Gazeboとrvizの起動します。
$ roslaunch hello toio_style.launch
$ rviz
正しく表示されるようになりました。「teleop-twist-keyboard」で操作すると同期していることがわかります。
次回
この記事が気に入ったらサポートをしてみませんか?