2021年7月25日日曜日

ROSのtopicでFloat32MultiArray型をコマンドでpublishするいくつかの書き方


背景

ROSとはロボットの制御に利用可能なミドルウェアです。
それのtopicという概念の通信では型を利用した配信ができ、その型の1つにFloat32MultiArray型があります。

このFloat32MultiArray型はdataの他にlayoutという情報を持っていて、他のStringやInt16などのように「--」に値を渡すのでは配信できませんでした。
書き方を忘れた時に再度調べ直して試行錯誤する気がするので、備忘録を兼ねて把握した書き方を記事に残します。

動作環境

Ubuntu 20.04
ROS Noetic

書き方

紹介する例ではtest_topicというトピックに長さ2の配列を配信します。

layoutに空の情報を入れて配信

rostopic pub -1 /test_topic std_msgs/Float32MultiArray "layout:
dim: []
data_offset: 0
data: [40.0, 50.0]"

上記の情報を中括弧「{}」で括りカンマ「,」区切りで繋げれば1行で書けます。
rostopic pub -1 /test_topic std_msgs/Float32MultiArray "{layout: {dim: [], data_offset: 0}, data: [40.0, 50.0]}"

layoutは定義せずdataキーだけで配信

Float32MultiArrayの入力情報が間違っていると、下記のようなエラーが表示されます。
ERROR: Not enough arguments:
* Given: [[40.0, 50.0]]
* Expected: ['layout', 'data']

Args are: [layout.dim layout.data_offset data]

しかしながら、dataキーのみの記述でもtopicを配信できました。
rostopic pub -1 /test_topic std_msgs/Float32MultiArray "data: [40.0, 50.0]"

まとめ

Float32MultiArrayはdataキーに加えてlayoutキーに空の情報を記述するか、layoutは無しでdataキーのみを記述すれば、rostopic pub コマンドで配信可能と分かりました。

参考

publish arrays to a topic on the command line
    

0 件のコメント :