首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >修改ROS2 IDL中的最大字符串长度

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

Stack Overflow用户
提问于 2018-08-01 20:40:14
回答 1查看 244关注 0票数 0

我目前正在通过python的RTI连接器将ROS2与原生RTI DDS Connext连接起来。

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

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

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

是否有其他解决方法?

EN

Stack Overflow用户

发布于 2018-08-02 06:30:24

尝试从IDL文件中完全删除size spec,这样它将如下所示:

代码语言:javascript
运行
复制
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代码生成器中启用“Unbounded”支持。

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

您是否看到了其他问题?

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51633532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档