launchファイルからrostopic pubする


launchファイルを起動するたびにロードしたいメッシュファイルなどのマーカがある場合,別のターミナルから rostopic pub を使ってpublishするのが面倒だったため,launchファイルに記述できないかを調査した.

環境

  • Ubuntu 18.04
  • ROS Melodic (rviz: 1.13.13-1bionic)

やりかた

pkg="rostopic", type="rostopic"args にJSONを指定すれば可能.このとき " で全体を括る必要がある.

launchファイルのサンプル

この例は, world 座標系に紐付けて球形(楕円体)のマーカをpublishする.見易さのためにインデントを付けているが,全て一行に記述しても問題はない.

なお,type の数字を変えることで別のジオメトリを表示することが可能.
http://wiki.ros.org/rviz/DisplayTypes/Marker

<?xml version="1.0"?>
<launch>
  <node name="rviz" pkg="rviz" type="rviz" />

  <node name="marker_publisher" pkg="rostopic" type="rostopic"
    args="pub -s /markers visualization_msgs/MarkerArray &quot;{
      'markers': [
        {
          'header': {
            'stamp': 'now',
            'frame_id': 'world',
            'seq': 0
          },
          'ns': 'sample',
          'id': 0,
          'type': 2,
          'action': 0,
          'pose': {
            'position': { 'x': 0.1, 'y': 0, 'z': 0.25 },
            'orientation': { 'x': 0, 'y': 0, 'z': 0, 'w': 1 }
          },
          'scale': { 'x': 1.5, 'y': 0.5, 'z': 0.5 },
          'color': {
            'r': 0.93, 'g': 0.67, 'b': 0.61, 'a': 0.75
          }
        }
      ]
    }&quot;" />
</launch>