ros2 dds
问题1: fastdds发布的类型,ros2接收不到
原因: 在QoS相互兼容情况下,无法通信是由于idl类型没有使用兼容ros2的格式。如用
ros2 topic list -t
查看时,会发现同一个topic有两个不同的类型,如DDS会显示:myclass::people::Name 而ros2会显示: myclass/people/Name,这就早成类型部匹配,ros2无法解析。
解决方法:
- 手动更改($msg_name)PubSubTypes.cxx文件中的构造函数,更改setName(..)函数如:
setName("myclass::msg::Name"); //更改为: setName("myclass::msg::dds_::Name_");
- 使用fastddsgen命令加入 '-typeros2'参数,重新生成新的idl源文件:
fastddsgen -replace -typeros2 myclass.idl
参考文档:
Topic and Service name mapping to DDS
Use ros2-FastRTPS with standalone FastRTPS programs - ROS Answers: Open Source Q&A Forum