ROS服务如何传递不同类型的数组?

时间:2016-07-04 13:23:11

标签: ros

是否可以进行ROS服务调用,如下所示(数组中包含不同的数据类型)?

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

相应的ROS消息会是什么样的?

3 个答案:

答案 0 :(得分:1)

我找到了解决办法。 通过

调用服务
bson_error_t error;
char **strv;
unsigned i;

if((strv = mongoc_database_get_collection_names (database, &error))) 
{
    for(i = 0; strv [i]; i++)
        printf ("%s\n", strv [i]);
    bson_strfreev (strv);
} 
else
{
  fprintf(stderr, "Command failed: %s\n", error.message);
}

.srv文件可以写成

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

并且必须稍后在C ++或Python中解析字符串。很像

背后的想法
string[] parameter

答案 1 :(得分:0)

这是不可能的。 ROS消息中的数组始终是固定类型。

答案 2 :(得分:0)

如果你有比复杂的字符串,整数和浮点数更复杂的数据类型,你可以使用诸如

之类的消息
int8 type
Type1 field1
Type2 field2
...

其中Type1Type2,...是您要使用的不同数据类型,type包含要使用这些字段的信息。如果您将此消息命名为VariableTypes,则您的服务文件可能如下所示:

VariableTypes[] parameters
---

因此,当调用服务时,您必须检查parameters每个元素使用哪种类型,然后选择相应的字段。

但是,当然,这种方法的缺点是你可以用这种方式产生很多开销。