string - 修改 ROS2 IDL 中的最大字符串长度
问题描述
我目前正在通过 RTI Connector for python 将 ROS2 与本机 RTI DDS Connext 连接。
在我的 ROS2 节点中,我有一个自定义消息类型,它使用header
来自std_msgs
包的消息。现在标题有一个成员string frame_id_
。当为这个 msg 生成 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
还有其他解决方法吗?
解决方案
尝试从 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 的应用程序(例如分区、主题名称前缀等)进行互操作还需要一些其他特定于版本的设置。
你看到其他问题了吗?
推荐阅读
- apache-spark - spark中1个工作节点集群的配置
- java - Android过滤项目列表
- google-sheets - 从雅虎财经获取信息
- python-3.x - 如何在python列表中访问字典中的数据
- angular - minDate 在 bsDatepicker 中引发错误
- mysql - MySQL information_schema.tables UPDATE_TIME refresh on specific column change with ANALYZE TABLE
- firebase - Azure AD SSO for independent App Registrations
- r - system2("bash", "ls") -> 无法执行二进制文件
- reactjs - 解析错误:意外的令牌,预期的“,” - 与 Typescript 反应
- javascript - React state update issue