鱼香ROS社区
    • 版块
    • 最新
    • 未解决
    • 已解决
    • 群组
    • 注册
    • 登录
    紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
    提问前必看的发帖注意事项: 社区问答规则(小鱼个人)更新 | 高质量帖子发布指南

    ROS2的多机调度中数据传输问题

    已定时 已固定 已锁定 已移动 已解决
    综合问题
    调度 ros2 humble tcp和udp dds
    5
    6
    671
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 1
      1540302317
      最后由 编辑

      你好,我想请问一下,ROS2的多机调度中,需要通过TCP或者UDP数据传输协议进行数据传输吗?可不可以通过ros话题进行数据传输?就比如,如果设备设置相同域名为8,“export ROS_DOMAIN_ID=8”,就能共享节点。那是不是说明可以进行话题传输数据,而不需要TCP等数据传输协议来传输数据了?也许我的理解是错的,因为我也不太熟悉DDS和TCP或UDP,希望有人能够解答一下我的疑惑。

      小鱼小 1 条回复 最后回复 回复 引用 0
      • 小伊小
        机器人小伊
        最后由 编辑

        在ROS2(Robot Operating System 2)中,多机调度和数据传输的确是一个重要的议题,特别是当涉及到跨机器通信时。ROS2设计之初就考虑到了分布式系统的需求,它通过一种称为DDS(Data Distribution Service)的中间件来实现节点之间的通信。下面我会详细解答你的问题。

        1. ROS2中的DDS与TCP/UDP

        ROS2并没有直接使用TCP或UDP作为底层的通信协议,而是使用DDS(或其实现之一,如RTPS - Real-Time Publish Subscribe)作为通信中间件。DDS是一个为实时系统设计的中间件,它支持发布/订阅(Pub/Sub)模型,并提供了数据分发、发现、同步和持久化等功能。DDS的设计允许系统在高动态、低延迟和高可靠性的环境中运行。

        2. ROS2中的话题(Topics)与通信

        在ROS2中,节点通过话题(Topics)进行通信。当节点发布一个话题时,它会将数据发送到该话题上,任何订阅了该话题的节点都可以接收到这些数据。这种通信方式是透明的,节点不需要知道其他节点的位置或网络细节。

        3. ROS_DOMAIN_ID的作用

        设置相同的ROS_DOMAIN_ID环境变量确实允许在同一网络中的不同机器上的ROS2节点发现彼此并共享话题。这个ID定义了一个逻辑上的通信域,只有属于同一个域的节点才能相互通信。这并不意味着ROS2不使用任何网络通信协议,而是说DDS(或其RTPS实现)负责在底层处理这些细节,包括可能使用TCP或UDP作为传输层协议(这取决于DDS的具体实现和配置)。

        4. 是否需要TCP/UDP?

        从应用层的角度看,ROS2用户不需要直接关心TCP/UDP。DDS作为中间件,已经封装了这些底层的通信细节。然而,从系统架构和网络设计的角度来看,理解底层使用的协议(如TCP或UDP)对于性能调优、网络配置和故障排查等方面可能是有帮助的。

        总结

        在ROS2的多机调度中,你可以通过设置相同的ROS_DOMAIN_ID来允许节点之间的话题通信,而不需要直接关注TCP或UDP等底层传输协议。ROS2通过DDS(或其实现)来处理这些通信细节,提供了高效、可靠和透明的分布式通信能力。


        以上为生成回答,仅供参考~

        我是小伊,已接入ChatGpt,所有回复,仅供参考~

        1 1 条回复 最后回复 回复 引用 0
        • 1 1540302317 将这个主题标记为已解决,在
        • 1 1540302317 将这个主题标记为已解决,在
        • 1
          1540302317 @小伊
          最后由 编辑

          @小伊 chatgpt回答的应该没错吧

          1 条回复 最后回复 回复 引用 0
          • 小鱼小
            小鱼 技术大佬 @1540302317
            最后由 编辑

            @1540302317 ROS的话题本质还是TCP/UDP,所以可以使用ROS,也可以使用TCP/UDP

            新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

            1 条回复 最后回复 回复 引用 0
            • I
              Ironson6
              最后由 编辑

              我现在遇到个问题,一边是Jetson Orin板子 Arm64架构 Ubuntu22.04 ROS2 humble,另一边是windows下docker拉取的fishros2:humble,我在同网络下,能ssh连接,ping通,域id也都是默认的0,另外docker也是用的host网络模式,但就是检测不到对方的话题/节点。。。有大佬救一下什么情况吗🙏 bbb689d5-df17-4d70-a625-2aee5c555583-5943385aaf5f47bbf7681b386ad536c.png

              castonC 1 条回复 最后回复 回复 引用 0
              • castonC
                caston @Ironson6
                最后由 编辑

                @Ironson6 可以尝试官方文档里面提到的配置daemon为SUPER CLIENT的方式。没设置之前amd和arm无法通信,设置之后可以成功通信。补充:我没用docker。

                1 条回复 最后回复 回复 引用 0
                • 第一个帖子
                  最后一个帖子
                皖ICP备16016415号-7
                Powered by NodeBB | 鱼香ROS