ros2 humble中使用 discovery server时如何将该服务放在远程主机上
-
A电脑:ros2 humble
B电脑:无ros2, 仅有fastdds
当discovery服务部署在A电脑时,ros的talker和listener节点可正常收发;
当discovery服务部署在A电脑时,B电脑的publisher和subscriber程序可正常首发;当把discovery服务部署在B电脑时,B电脑的publisher和subscriber程序可正常首发,但是,A电脑的talker和listener节点不能正常通讯,不符合预期。discovery服务都是通过fastdds discovery -i 0 -l 0.0.0.0 -p 11811命令启动。
求教ros2节点连接外部的发现服务需要什么特别配置吗?为什么我的ros节点无法连接外部的discovery服务? A电脑的eprosima fastdds版本时humble默认的(2.6/2.7?) B电脑的是2.14(按理说不应该是版本不匹配的问题)
-
总结一下:ros2humble中默认是fastdds2.6.x,该版本的fastdds不能使用2.14版本的发现服务。即为版本兼容问题。
另外,ros2jazzy中默认使用fastdds2.14.0,也就是说不同版本的ros2也很有可能是不兼容的
-
当在ROS 2中使用Discovery Server(如Fast DDS Discovery Server)并且希望将其部署在远程主机上时,确实需要确保ROS 2节点能够正确地连接到这个外部的发现服务。针对你提出的问题,以下是一些可能的原因和解决方案:
-
网络配置:
- 确保A电脑和B电脑之间的网络连接是通畅的,没有防火墙或其他网络设备阻止它们之间的通信。
- 当你启动Discovery Server时,使用
-l 0.0.0.0
意味着它将在所有可用的网络接口上监听。但是,你需要确保Discovery Server的监听地址是可达的,也就是说,A电脑上的ROS 2节点能够解析并访问B电脑上Discovery Server的IP地址和端口。
-
Discovery Server配置:
- 确认Discovery Server的配置是正确的,特别是与DDS相关的配置,比如域ID(Domain ID)等。ROS 2节点和Discovery Server必须配置为使用相同的域ID才能相互发现。
-
ROS 2节点配置:
- ROS 2节点可能需要特定的配置来连接到外部的Discovery Server。这通常是通过环境变量或命令行参数来设置的。例如,ROS 2可能有一个环境变量或参数来指定Discovery Server的IP地址和端口。
- 在ROS 2中,节点通常通过DDS(Data Distribution Service)进行发现和通信。如果Discovery Server在外部,那么DDS的配置可能需要指向这个外部的服务器。
-
版本兼容性:
- 尽管你提到B电脑的Fast DDS版本(2.14)与A电脑的不完全一致,但通常版本之间的差异不会导致发现失败,除非存在不兼容的API更改或行为差异。然而,为了排除版本问题,可以考虑在B电脑上使用与A电脑相同的Fast DDS版本。
-
日志和调试:
- 查看ROS 2节点和Discovery Server的日志输出,以获取关于为什么它们不能相互发现的更多信息。这可能会提供关于网络问题、配置错误或其他潜在问题的线索。
-
具体配置步骤:
- 如果ROS 2和Fast DDS没有直接提供配置外部Discovery Server的选项,你可能需要手动设置DDS的实现(如eProsima Fast DDS)来指向外部的服务器。这可能涉及到修改DDS的配置文件或使用特定的命令行参数。
- 另一个可能的解决方案是使用Docker或其他容器技术来封装ROS 2环境和Discovery Server,并确保它们在相同的网络环境中运行。这可以简化配置和部署过程。
-
参考文档和社区资源:
- 查阅ROS 2和Fast DDS的官方文档,了解如何配置和使用Discovery Server。
- 在ROS 2和Fast DDS的社区论坛、GitHub仓库或其他相关资源中搜索类似的问题和解决方案。
最后,请注意,具体的配置步骤和选项可能因ROS 2和Fast DDS的版本、发行版以及使用的DDS实现而有所不同。因此,建议详细阅读相关文档并参考最新的资源来获取准确的指导。
以上为生成回答,仅供参考~
-
-
@minemyemails 这个说不定真的和版本有关系,建议先排除下版本问题
-
果然是版本兼容性问题
-
@小鱼 请问怎么标记为已解决呢?
-
@minemyemails 选择一个你认为的答案,然后点右下角的 三个点,里面有标记为已解决
-
总结一下:ros2humble中默认是fastdds2.6.x,该版本的fastdds不能使用2.14版本的发现服务。即为版本兼容问题。
另外,ros2jazzy中默认使用fastdds2.14.0,也就是说不同版本的ros2也很有可能是不兼容的
-