ROS2节点通信实现零拷贝
-
@dongwu_li ROS2官方的这个示例是在一个进程中跑两个节点。然后节点间通讯实现零拷贝。这个效果和ROS1中的nodelet是一样的。官方没有不同进程间零拷贝通讯的例子。估计是没有这个功能的。但TogetherROS(地平线基于foxy优化的ROS2版本)中的rclcpp实现了进程间的零拷贝通讯。
-
@首飞Kevin ROS2官方确实没有提这个,这部分工作其实在dds中有做,比如你用fastdds,需要修改dds配置文件可以实共享内存通信。
若要在进程间启用数据共享,需要在 XML 和设置上具有以下各项RMW_FASTRTPS_USE_QOS_FROM_XML=1
<data_writer profile_name="topic_name">
<qos>
<data_sharing>
<kind>AUTOMATIC</kind>
</data_sharing>
</qos>
</data_writer><data_reader profile_name="topic_name">
<qos>
<data_sharing>
<kind>AUTOMATIC</kind>
</data_sharing>
</qos>
</data_reader>关于XML配置的具体使用:https://fast-dds.docs.eprosima.com/en/latest/fastdds/xml_configuration/xml_configuration.html
-
@首飞Kevin 这是共享内存吗?
-
@young 感觉不是共享内存。因为没有涉及到不同进程。
-
@首飞Kevin 我也这么认为,互相共享对象地址,某种意义上说也是共享内存了哈哈
-
@首飞Kevin 我现在用国产芯片 他们移植的cyberrt
也加入了零拷贝 不过是进程间的 cyberrt本身进程内就是共享内存的
-
@李东武 cyberrt是Apollo的那套通讯框架吗?
-
@首飞Kevin 是的
-
所以他没有走中间层,对吗?这个性能 怎么测试呢?
-
你好,use_intra_process_comms没有Python版本的吗?