2016-07-04 34 views
0

以下のようなROSサービスコールを行うことは可能ですか(配列内に異なるデータ型を使用して)?ROSサービス異なるタイプの配列を渡すには?

rosservice call /node_name/srv_name 'parameter: [one 2 3.3 four 5 6.6]'

、対応するROSのメッセージは次のように何を求めますか?

+0

直接にはできませんが、おそらく同様のものを実現できます。私は私の答えを拡張しますが、最初に私はいくつかの明確化が必要です:あなたの配列は '[some_string1、some_int1、some_float1、some_string2、some_int2、some_float2、...]'のようなものです。私は、スティングの各トリプル、intとフロートが一緒に属していると仮定しますが、これは正しいですか? – luator

答えて

0

これはできません。 ROSメッセージの配列は常に固定型です。

1

回避策が見つかりました。 .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) 

0

あなただけの文字列、整数および浮動小数点数よりも複雑なデータ型を持っている場合は、メッセージを使用することができType1は、Type2は、...あなたが使用したい、異なるデータ型であるような

int8 type 
Type1 field1 
Type2 field2 
... 

typeは、これらのフィールドのどちらを使用するかの情報を保持します。このメッセージVariableTypesという名前の場合は、サービス・ファイルには、次のようになります。

だから、
VariableTypes[] parameters 
--- 

とサービスが呼び出されたとき、あなたはそれが使用するタイプparametersの各要素をチェックしてから対応を選択する必要がありますフィールド。

もちろん、この方法の欠点は、この方法で多くのオーバーヘッドを生成できることです。

関連する問題