LoginSignup
3
2

Ignition Gazebo チュートリアル - インストールとROS 2との連携

Last updated at Posted at 2023-06-23

Igniton Gazeboとros_ign_bridgeのインストール

すでにROS2 Humbleがインストール済みとする

Ignition本体のインストール

sudo apt install ignition-fortress

インストールするバージョンに注意
ROS2のバージョンと対応するIgnition Gazebo の対応は以下を参照

ros_ign_bridgeのインストール

IgnitionのメッセージとROS2 メッセージを相互に変換するためのもの

sudo apt install ros-humble-ros-ign 

サンプルのワールドで差動2輪ロボットを動かす

このページでいろいろなワールドが公開されているので、適当な差動2輪ロボットが動くWorldファイルをダウンロードする。
今回はtugbot_depot.sdfを使用

こちらのページからtugbot_depot.sdfファイルをダウンロードして起動

ign gazebo tugbot_depot.sdf

image.png

Ignitionからトピックを送って動かす

Ignition のGUIから動かす

・右上からTeleopと検索してTeleopのGUIを表示させる。
・Topic を/model/tugbot/cmd_velに変更する。
・左下の再生ボタンを押してからTeleopのボタンを押すとロボットが動く。

image.png

コマンドから動かす

ign topic コマンドで/model/tugbot/cmd_velに直接値を入力して動かす。

ign topic -t "/model/tugbot/cmd_vel" -m ignition.msgs.Twist -p "linear: {x: 1.0}"

ROS2からトピックを送って動かす

ros_ign_bridgeを起動してTwist型の/model/tugbot/cmd_velをbridgeする

ros2 run ros_ign_bridge parameter_bridge /model/tugbot/cmd_vel@geometry_msgs/msg/Twist@ignition.msgs.Twist

ros2 topic pub コマンドでトピックを送る

ros2 topic pub --once /model/tugbot/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 1.0}}"

センサのトピックをROS2で見る

Velodyneの点群をrviz2で見る

ros2 run ros_ign_bridge parameter_bridge /world/world_demo/model/tugbot/link/scan_omni/sensor/scan_omni/scan/points@sensor_msgs/msg/PointCloud2@ignition.msgs.PointCloudPacked

rviz2を起動
Fixed Frameをtugbot/scan_omni/scan_omni にして、PointCloud2を表示

rviz2

image.png

カメラの画像をrqt_image_viewで見る

ros2 run ros_ign_bridge parameter_bridge /world/world_demo/model/tugbot/link/camera_front/sensor/color/image@sensor_msgs/msg/Image@ignition.msgs.Image

rqt_image_viewを起動して画像を見る

ros2 run rqt_image_view rqt_image_view

image.png

TFの変換

ignition gazeboのDiff Drive pluginから出力されるTF 情報(odom <-> base_link)をROS2側で使えるようにする。
Gazebo側のトピック名/model/tugbot/tf/tfにremapする。

 ros2 run ros_ign_bridge parameter_bridge /model/tugbot/tf@tf2_msgs/msg/TFMessage@ignition.msgs.Pose_V --ros-args --remap /model/tugbot/tf:=/tf

ROS2側でrqt_tf_treeを実行した結果

image.png

これでbase_linkから必要なセンサのframeのTFをstatic_transform_publisherなどで出力すれば、
ROS2側でSLAMしたり、Nav2で動かしたりできる。

おわりに

Igniton Gazeboとros_ignをインストールして、公開されているsdfを使用してROS2と連携して動かした。
間違っている点があればコメントでご指摘ください。

参考

その他

ignitionのコマンドメモ

ros2 topicコマンドと同じ感覚で操作できる

トピック一覧を見る

 ign topic -l

指定したトピックに値を送信

ign topic -t /model/[model_name]/cmd_vel -m ignition.msgs.Twist -p '[command_values]':

トピックの値を見る

ign topic -e -t /model/[model_name]/cmd_vel

ros_ign_bridgeを起動するlaunchファイルの例

1つのトピックに対してros_ign_bridgeを起動するのは面倒くさいので、launchファイルでまとめて起動する例。
引数に複数のトピックを指定することで、1つのノードで複数のトピックをbridgeできる。

sample.launch.py
from launch import LaunchDescription
from launch_ros.actions import Node

def generate_launch_description():
    return LaunchDescription([
        Node(
            package='ros_ign_bridge',
            executable='parameter_bridge',
            name='bridge_node',
            arguments=[
                '/model/tugbot/cmd_vel@geometry_msgs/msg/Twist@ignition.msgs.Twist',
                '/world/world_demo/model/tugbot/link/scan_omni/sensor/scan_omni/scan/points@sensor_msgs/msg/PointCloud2@ignition.msgs.PointCloudPacked',
                '/world/world_demo/model/tugbot/link/camera_front/sensor/color/image@sensor_msgs/msg/Image@ignition.msgs.Image',
                '/model/tugbot/tf@tf2_msgs/msg/TFMessage@ignition.msgs.Pose_V'
            ],
            remappings=[
                ('/model/tugbot/tf', '/tf')
            ],
            output='screen'
        )
    ])

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2