以下のようなROSサービスコールを行うことは可能ですか(配列内に異なるデータ型を使用して)?ROSサービス異なるタイプの配列を渡すには?
rosservice call /node_name/srv_name 'parameter: [one 2 3.3 four 5 6.6]'
、対応するROSのメッセージは次のように何を求めますか?
以下のようなROSサービスコールを行うことは可能ですか(配列内に異なるデータ型を使用して)?ROSサービス異なるタイプの配列を渡すには?
rosservice call /node_name/srv_name 'parameter: [one 2 3.3 four 5 6.6]'
、対応するROSのメッセージは次のように何を求めますか?
これはできません。 ROSメッセージの配列は常に固定型です。
回避策が見つかりました。 .srvファイルが
string[] parameter
と1のように書くことができ
rosservice call /node_name/srv_name 'parameter: ["one" "2" "3.3" "four" "5" "6.6"]'
を介してサービスを呼び出すことによって は、C++やPythonの後の文字列を解析する必要があります。アイデアの後ろによく似ている
int main(int argc, char** argv)
あなただけの文字列、整数および浮動小数点数よりも複雑なデータ型を持っている場合は、メッセージを使用することができType1
は、Type2
は、...あなたが使用したい、異なるデータ型であるような
int8 type
Type1 field1
Type2 field2
...
type
は、これらのフィールドのどちらを使用するかの情報を保持します。このメッセージVariableTypes
という名前の場合は、サービス・ファイルには、次のようになります。
VariableTypes[] parameters
---
とサービスが呼び出されたとき、あなたはそれが使用するタイプparameters
の各要素をチェックしてから対応を選択する必要がありますフィールド。
もちろん、この方法の欠点は、この方法で多くのオーバーヘッドを生成できることです。
直接にはできませんが、おそらく同様のものを実現できます。私は私の答えを拡張しますが、最初に私はいくつかの明確化が必要です:あなたの配列は '[some_string1、some_int1、some_float1、some_string2、some_int2、some_float2、...]'のようなものです。私は、スティングの各トリプル、intとフロートが一緒に属していると仮定しますが、これは正しいですか? – luator