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 "{
'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
}
}
]
}"" />
</launch>