You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现ROS1 Noetic与ROS2 Humble跨机器话题发布订阅通信?

ROS1 Noetic与ROS2 Humble跨机器话题通信方案

可行,官方提供的ros1_bridge工具可以实现ROS1和ROS2跨版本跨机器的话题通信,以下是具体实现步骤和注意事项:

一、前提准备

  • 两台机器处于同一局域网,能互相ping通,建议在各自的/etc/hosts文件中添加对方的IP与主机名映射,避免DNS解析问题。
  • 选择一台机器(可以是机器1、机器2或第三台独立机器)作为桥接节点,该机器需要同时安装ROS1 Noetic和ROS2 Humble环境。

二、桥接节点配置

  1. 安装双ROS环境:
    在桥接机器上分别安装ROS1 Noetic和ROS2 Humble,可临时手动加载环境变量:

    source /opt/ros/noetic/setup.bash
    source /opt/ros/humble/setup.bash
    
  2. 安装ros1_bridge:
    通过apt安装适配ROS2 Humble的桥接工具:

    sudo apt install ros-humble-ros1-bridge
    

三、启动通信流程

  1. 机器1(ROS1 Noetic)操作:

    • 设置ROS环境变量,启动roscore和Publisher1节点:
      export ROS_MASTER_URI=http://<机器1IP>:11311
      export ROS_IP=<机器1IP>
      roscore &
      # 启动你的Publisher1节点,示例:
      rosrun <你的包名> Publisher1
      
  2. 桥接节点操作:

    • 配置ROS1环境变量指向机器1的roscore,同时配置ROS2环境变量:
      export ROS_MASTER_URI=http://<机器1IP>:11311
      export ROS_IP=<桥接机器IP>
      export ROS_DOMAIN_ID=0  # 需与机器2的ROS2环境DOMAIN_ID一致
      export ROS_LOCALHOST_ONLY=0
      
    • 启动动态桥接(自动识别并桥接所有兼容的话题):
      ros2 run ros1_bridge dynamic_bridge
      
      若仅需桥接指定话题,可使用静态桥接(以std_msgs/String类型为例):
      ros2 run ros1_bridge ros1_bridge --bridge-topic /sampletopic std_msgs/String
      
  3. 机器2(ROS2 Humble)操作:

    • 设置ROS2环境变量,启动Subscriber1节点:
      export ROS_DOMAIN_ID=0
      export ROS_LOCALHOST_ONLY=0
      # 启动你的Subscriber1节点,示例:
      ros2 run <你的包名> Subscriber1
      

四、关键注意事项

  • 消息类型兼容性:仅支持ROS1和ROS2中定义一致的消息类型(如标准消息std_msgs、sensor_msgs等)。若使用自定义消息,需在ROS1和ROS2环境中分别编译相同的消息包,确保消息字段、类型完全匹配。
  • 网络稳定性:跨机器通信依赖局域网稳定性,若出现丢包延迟,需检查网络连接质量。
  • 环境变量冲突:同时加载ROS1和ROS2环境时,部分命令可能存在命名冲突,建议通过终端临时加载环境变量,而非长期写入~/.bashrc。

内容的提问来源于stack exchange,提问作者NatiCog

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 15:15:42