Skip to main content

ROS2接口使用文档


(1)ROS2接口说明

功能说明

  • 本项目主要用于实现 ROS1(Noetic)与 ROS2(Foxy)之间的通信桥接,通过消息(ROS Topic)和服务(ROS Service)的双向转发,使机器人底层运行在 ROS1 的节点能够与上层 ROS2 应用无缝交互。

  • 项目基于官方的 ros1_bridge 进行扩展,结合 Docker 容器环境,提供了一键构建和运行的脚本,方便开发者快速启动桥接服务。
    开发者可以在 ROS2 侧使用示例程序(如速度控制、位置控制、轨迹规划、单步控制等),同时保持与 ROS1 控制端的兼容,满足机器人在运动控制、传感器数据处理、手臂与头部控制等多种应用场景下的需求。

版本说明(⚠️重要⚠️)

  • 目前本项目仅适配最新的master分支, 对下位机1.2.2及之前的tag会存在部分不兼容
  • 若用户本地的kuavo-ros-opensource版本为1.2.2及以前,用户使用前需要更新下位机代码仓库,或自行将kuavo_ros2_to_ros1_bridge中的ros1/src/kuavo_msgs功能包替换为与自己下位机本地的kuavo-ros-opensource/src/kuavo_msgs完全一致,再进行使用

(2)环境准备

⚠️⚠️注意:以下操作均需要在机器人上位机运行,之后不在赘述⚠️⚠️

拉取代码仓库

git clone https://gitee.com/leju-robot/kuavo_ros2_to_ros1_bridge.git

下载docker容器

# 下载docker容器压缩包
wget https://kuavo.lejurobot.com/docker_images/ros_foxy_bridge.tar.gz
# 下载md5文件
wget https://kuavo.lejurobot.com/docker_images/ros_foxy_bridge.md5
# 检验下载是否成功(若下载失败, 需要重新下载docker容器压缩包)
md5sum -c ros_foxy_bridge.md5
# 若输出`ros_foxy_bridge.tar.gz: OK` 则说明压缩包下载成功
# 加载容器
docker load -i ros_foxy_bridge.tar.gz

ros通信配置

查询本机有线ip地址

  • 终端输入ifconfig | grep 192.168.26
  • 终端示例输出:
inet 192.168.26.1  netmask 255.255.255.0  broadcast 192.168.26.255
  • 记录inet的值,一般为192.168.26.1192.168.26.12,记住这个值

修改环境变量

  • 进入docker容器
cd ~/kuavo_ros2_to_ros1_bridge
sudo ./docker/run_bridge.sh
  • 若查询到的inet值为192.168.26.1,则依次输入
echo -e "192.168.26.12\tkuavo_master" | sudo tee -a /etc/hosts
echo 'export ROS_MASTER_URI=http://kuavo_master:11311/' >> ~/.bashrc
echo 'export ROS_IP=192.168.26.1' >> ~/.bashrc
  • 若查询到的inet值为192.168.26.12,则依次输入
echo -e "192.168.26.1\tkuavo_master" | sudo tee -a /etc/hosts
echo 'export ROS_MASTER_URI=http://kuavo_master:11311/' >> ~/.bashrc
echo 'export ROS_IP=192.168.26.12' >> ~/.bashrc

(3)docker配置

⚠️⚠️注意:以下操作均需要在kuavo_ros2_to_ros1_bridge路径下运行,之后不在赘述⚠️⚠️

1. 构建 msg 和 bridge(仅需运行一次)

sudo ./docker/run_bridge.sh
./build_msg_and_bridge.sh

2. 检查 ROS1 和 ROS2 的消息对(msg pairs)

source bridge_ws/install/setup.bash
ros2 run ros1_bridge dynamic_bridge --print-pairs | grep kuavo_msgs

3. 运行桥接(Bridge)

  • 以下命令任选其一运行即可,注意运行后不要退出该终端

  • 初次使用建议选择全部 topic 桥接

  • 全部 topic 桥接:

source bridge_ws/install/setup.bash
ros2 run ros1_bridge dynamic_bridge --bridge-all-topics
  • 指定 topic 桥接:
source /opt/ros/noetic/setup.bash
rosparam load ros1/src/bridge.yaml
source bridge_ws/install/setup.bash
ros2 run ros1_bridge parameter_bridge

4. 检查桥接结果

  • 新建一个终端
sudo ./docker/run_bridge.sh
  • 查看 ROS2 topic 列表:
source bridge_ws/install/setup.bash
ros2 topic list
  • 查看 ROS1 topic 列表:
source /opt/ros/noetic/setup.bash
source ros1/install_isolated/setup.bash
rostopic list

(4)ROS2 代码编译

1. 更新 ROS2 GPG 密钥

```bash
./docker/run_bridge.sh
./docker/update_ros2_GPG_key.sh
apt-get update
apt-get install python3-pip
```

2. 初始化 rosdep(第一次需要)

```bash
sudo rosdep init # 仅首次执行
sudo rosdep update
rosdep install --from-paths kuavo_example/src --ignore-src -r -y
```

3. 安装依赖项

```bash
export ROS_DISTRO=foxy
sudo apt-get install ros-$ROS_DISTRO-tf-transformations
pip3 install -r kuavo_example/src/kuavo_example_py/requirements.txt
```

4. 构建 kuavo_example

```bash
cd kuavo_example
colcon build --symlink-install
```

(5)运行 ROS2 控制示例

⚠️注意⚠️:

  • 确保机器人下位机已经启动仿真或实机程序
  • 确保 bridge 已经启动
  • 每次示例运行完后,再次运行前需要重新启动 bridge

控制机器人行走跟踪

  • 注意:以下两个终端均需要保持运行状态

  • 终端一:

source /opt/ros/foxy/setup.bash
source ros2/install/setup.bash
source kuavo_example/install/setup.bash
ros2 run kuavo_example_py mpc_path_tracer
  • 终端二:
source /opt/ros/foxy/setup.bash
source ros2/install/setup.bash
source kuavo_example/install/setup.bash
ros2 run kuavo_example_py path_generator --action start --path-type circle

usage: path_generator [-h] [--action {start,stop}]
[--path-type {circle,square,triangle,line,scurve}]

Path Generator Node

optional arguments:
-h, --help show this help message and exit
--action {start,stop}
Action to perform (default: start)
--path-type {circle,square,triangle,line,scurve}
Type of path to generate (default: circle)

机器人行走-速度控制

# 首次运行需要安装依赖
pip3 install rich
source /opt/ros/foxy/setup.bash
source ros2/install/setup.bash
source kuavo_example/install/setup.bash
ros2 run kuavo_example_py cmd_vel

机器人行走-位置控制

  • 基于机器人自身坐标的位置控制
source /opt/ros/foxy/setup.bash
source ros2/install/setup.bash
source kuavo_example/install/setup.bash
ros2 run kuavo_example_py cmd_pose
  • 基于世界坐标的位置控制
source /opt/ros/foxy/setup.bash
source ros2/install/setup.bash
source kuavo_example/install/setup.bash
ros2 run kuavo_example_py cmd_pose_world

机器人行走-单步控制

source /opt/ros/foxy/setup.bash
source ros2/install/setup.bash
source kuavo_example/install/setup.bash
ros2 run kuavo_example_py single_step_control

手臂移动轨迹控制

  • 通过线性插值的轨迹控制
source /opt/ros/foxy/setup.bash
source ros2/install/setup.bash
source kuavo_example/install/setup.bash
ros2 run kuavo_example_py arm_traj_control
  • 通过贝塞尔曲线的平滑轨迹控制
source /opt/ros/foxy/setup.bash
source ros2/install/setup.bash
source kuavo_example/install/setup.bash
ros2 run kuavo_example_py arm_plan_traj_bezier

手臂逆运动学(IK)

source /opt/ros/foxy/setup.bash
source ros2/install/setup.bash
source kuavo_example/install/setup.bash
ros2 run kuavo_example_py ik_fk

灵巧手手势控制

source /opt/ros/foxy/setup.bash
source ros2/install/setup.bash
source kuavo_example/install/setup.bash
ros2 run kuavo_example_py hand_gesture

头部控制

source /opt/ros/foxy/setup.bash
source ros2/install/setup.bash
source kuavo_example/install/setup.bash
ros2 run kuavo_example_py head_control

(6)常见问题

  1. md5不匹配报错:
  • 报错截图: md5不匹配报错
  • 问题原因:对于下位机本地的kuavo-ros-opensource代码与上位机本地的kuavo_ros2_to_ros1_bridge代码,二者的kuavo_msgs功能包中存在不一致的消息类型
  • 解决方案:使用下位机的kuavo-ros-opensource/src/kuavo_msgs功能包替换掉上位机的kuavo_ros2_to_ros1_bridge/ros1/kuavo_msgs功能包
  1. 运行桥接(Bridge)报错:
  • 报错截图: ROS连接master失败
  • 问题原因:ROS通信中下位机为主机,需要下位机先让机器人站立
  • 解决方案:先在下位机启动实机或仿真,再在上位机运行桥接