修改ROS2 IDL中的最大字符串长度

时间:2018-08-01 12:40:14

标签: string idl data-distribution-service ros2

我目前正在通过RTI连接器(用于python)将ROS2与本机RTI DDS Connext接口。

在我的ROS2节点中,我有一个自定义消息类型,该类型使用header包中的std_msgs条消息。现在,标题具有成员string frame_id_。当为此消息生成idl时,字符串的大小分配为2147483647 bytes。我可以在RTI Admin console中看到这一点。现在要匹配本机DDS和ROS2中的类型,我需要通过QoS.xml文件在RTI Connext中提供相同的字符串大小。但是问题是,RTI太大了,无法处理,程序崩溃了。

作为一种解决方法,我将header_.idl中位于ROS2中的ROS2_base_ws/install/std_msgs/dds_connext/Header_.idl修改为string<255> frame_id_,即,我限制了此字符串的最大大小。

我重新编译并运行了相同的节点,但是它始终具有先前的大小,即2147483647 bytes

还有其他解决方法吗?

1 个答案:

答案 0 :(得分:0)

尝试完全从IDL文件中删除尺寸规格,因此外观如下:

module std_msgs {
    module msg {
        module dds_ {
            struct Header_ {
                builtin_interfaces::msg::dds_::Time_ stamp_;
                string frame_id_;
            };
            //@Extensibility EXTENSIBLE_EXTENSIBILITY
        }; // end of 'dds_' module
    }; // end of 'msg' module
}; // end of 'std_msgs' module

ROS2使用无限制的字符串和序列;在管理控制台中显示为<2147483617>(0x7FFFFFFF)。为包含字符串或序列的类型生成支持代码时,请确保在RTI代码生成器中启用“无限”支持。

顺便说一句,您定位到哪个版本的ROS2? 要使ROS2与仅DDS的应用程序(例如分区,主题名称前缀等)互操作,还需要一些其他特定于版本的设置。

您还有其他问题吗?