見出し画像

ROS入門 (44) - Unityから/tfトピックをパブリッシュ

Unityから/tfをパブリッシュする方法をまとめました。

・Galactic
・Unity 2020.3

前回

1. Unityから/tfトピックをパブリッシュ

Unityから/tfトピックをパブリッシュするには、URDFモデルに「Robotics-Nav2-SLAM-Example」の 「ROSTransformTreePublisher」を追加します。これによって、外部でURDFモデルの姿勢を取得できます。

(1) 「Robotics-Nav2-SLAM-Example」の 以下のファイルをダウンロードし、UnityのAssetsに配置。

・Clock.cs
・ROSTransformTreePublisher.cs
・TimeStamp.cs
・TransformExtensions.cs
・TransformTreeNode.cs

(2) URDFモデル(toio_style)に空のGameObjectを追加し、名前「ROSPublishers」を指定。

(3) 「ROSPublishers」に「ROSTransformTreePublisher」を追加し、以下のように設定。
「Robot Game Object」には、URDFモデルのbase_linkをドラッグ&ドロップします。

・Publish Rate Hz : 10
・Global Frame Ids : map
・Robot Game Object : base_link

2. ROS2コマンドでの/tfトピックの確認

ROS2コマンドでの/tfトピックの確認手順は、次のとおりです。

(1) エンドポイントの起動。

$ ros2 run ros_tcp_endpoint default_server_endpoint --ros-args -p ROS_IP:=0.0.0.0

(2) /tfトピックが存在することを確認。

$ ros2 topic list
/cmd_vel
/parameter_events
/rosout
/tf

(3) /tfトピックの中身の確認。

$ ros2 topic echo /tf
transforms:
- header:
    stamp:
      sec: 35
      nanosec: 864012140
    frame_id: map
  child_frame_id: base_link
  transform:
    translation:
      x: 0.0036436456721276045
      y: -3.143894957702287e-07
      z: 0.12480859458446503
    rotation:
      x: -6.655823767687252e-07
      y: -3.76763296117133e-07
      z: 9.396488167112693e-06
      w: -1.0
- header:
    stamp:
      sec: 35
      nanosec: 864012140
    frame_id: base_link
  child_frame_id: left_wheel
  transform:
    translation:
      x: 2.148539124391391e-09
      y: 0.1250000149011612
      z: -0.09999997913837433
    rotation:
      x: 0.7061359286308289
      y: -0.037066373974084854
      z: -0.03706619143486023
      w: -0.7061333060264587
- header:
    stamp:
      sec: 35
      nanosec: 864012140
    frame_id: base_link
  child_frame_id: right_wheel
  transform:
    translation:
      x: 2.103767826611147e-09
      y: -0.1250000149011612
      z: -0.09999997913837433
    rotation:
      x: 0.7061364650726318
      y: -0.03705677390098572
      z: -0.03705659508705139
      w: -0.7061338424682617
- header:
    stamp:
      sec: 35
      nanosec: 864012140
    frame_id: base_link
  child_frame_id: back_wheel
  transform:
    translation:
      x: -0.09999999403953552
      y: 4.364437700132839e-09
      z: -0.10000000894069672
    rotation:
      x: 0.706138551235199
      y: -0.03701629117131233
      z: -0.037016112357378006
      w: -0.7061359286308289
- header:
    stamp:
      sec: 35
      nanosec: 864012140
    frame_id: base_link
  child_frame_id: front_wheel
  transform:
    translation:
      x: 0.10000003129243851
      y: 4.607613846019376e-09
      z: -0.09999999403953552
    rotation:
      x: 0.7061392068862915
      y: -0.03700389340519905
      z: -0.03700371831655502
      w: -0.7061365842819214
        :

3. rviz2での/tfトピックの確認

rviz2での/tfトピックの確認手順は、次のとおりです。

(1) URDFを表示するlaunchファイルの準備。

(2) launchファイルの「joint_state_publisher_node」「joint_state_publisher_gui_node」をコメントアウト。
今回は、Unityから送信する/tfトピックを使います。

・urdf_tutorial/launch/display.launch.py

        :
    return LaunchDescription([
        gui_arg,
        model_arg,
        rviz_arg,
        # joint_state_publisher_node,
        # joint_state_publisher_gui_node,
        robot_state_publisher_node,
        rviz_node
    ])

(3) rviz2を起動。

$ ros2 launch urdf_tutorial display.launch.py model:=toio_style.urdf

(4) Displaysの「Global Options → Fixed Frame」に「map」を指定。
原点を「map」に固定します。

(5) DisplaysのAddで「tf」を追加。
/tfの軸が表示されるようになります。「teleop-twist-keyboard」でURDFモデルを操作すると動くことがわかります。

(6) DisplaysのAddで「RobotModel」を追加し、「Description Souce」に「Topic」、「Description Toic」に「/robot_description」を指定。

次回



この記事が気に入ったらサポートをしてみませんか?