CM3588 Plus 部署 ROS 2 Jazzy:TARKBOT R750 底盘、A2M7 雷达与 RViz2 联调记录

1. 项目背景

本文记录在 FriendlyElec CM3588 Plus 上部署 ROS 2 Jazzy,并完成 TARKBOT R750 全向底盘、A2M7 激光雷达与 RViz2 可视化联调的全过程。

最终目标是让板载 CM3588 作为机器人上位机,直接完成底盘通信、雷达采集、传感器数据发布和后续 SLAM 建图。

2. 硬件与软件环境

项目 配置
上位机 FriendlyElec CM3588 Plus
系统 Ubuntu 24.04.4 LTS,aarch64
内核 6.1.141 Rockchip/FriendlyElec 适配内核
ROS ROS 2 Jazzy
机器人底盘 TARKBOT R750 全向移动底盘,OpenCTR H60 控制器
激光雷达 A2M7,CH340 串口芯片
底盘通信 USB CDC ACM,/dev/ttyACM0
雷达通信 USB CH340,/dev/ttyUSB0
ROS 中间件 Cyclone DDS

CM3588 通过网线连接 Windows,并使用 Windows Internet Connection Sharing 获取网络,板端地址为:

192.168.137.2

3. 确认系统与网络

首先确认系统版本:

uname -a
cat /etc/os-release

系统为 Ubuntu 24.04.4 LTS,架构为 ARM64,因此不能直接使用在 x86_64 WSL 中编译出的 ROS 可执行文件,必须将源码迁移到板端重新编译。

Windows ICS 环境下,默认 DNS 有时会解析异常。可临时切换 DNS:

sudo resolvectl dns eth0 223.5.5.5 1.1.1.1
sudo resolvectl flush-caches

验证网络:

sudo ping -c 3 1.1.1.1

注意:普通用户运行 ping 出现 missing cap_net_raw,属于系统权限配置问题,使用 sudo ping 即可,不影响 ROS。

4. 安装 ROS 2 Jazzy

通过鱼香 ROS 安装器安装 ROS 2 Jazzy,并使用国内镜像源。

安装后验证:

source /opt/ros/jazzy/setup.bash
echo $ROS_DISTRO
ros2 --help

输出 jazzy 说明 ROS 环境可用。

安装工作空间构建依赖:

sudo apt install -y build-essential \
  python3-colcon-common-extensions \
  python3-rosdep \
  python3-vcstool \
  python3-serial \
  libboost-thread-dev \
  ros-jazzy-rmw-cyclonedds-cpp

初始化 rosdep:

sudo rosdep init
rosdep update

配置环境变量:

echo 'source /opt/ros/jazzy/setup.bash' >> ~/.bashrc
echo 'export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp' >> ~/.bashrc
echo 'source ~/ros2_ws/install/setup.bash' >> ~/.bashrc
source ~/.bashrc

这里使用 Cyclone DDS,是为了保证后续多终端 ROS 2 通信稳定。

5. 迁移并编译机器人 ROS 功能包

从电脑 WSL 中复制源码到 CM3588:

tarkbot_robot
sllidar_ros2

在板端创建工作空间并编译:

cd ~/ros2_ws
rosdep install --from-paths src --ignore-src -r -y
colcon build --symlink-install
source install/setup.bash

最终构建结果:

Finished <<< sllidar_ros2
Finished <<< tarkbot_robot
Summary: 2 packages finished

关键点:WSL 是 x86_64,CM3588 是 aarch64。只能迁移 src 源码目录,不能迁移 buildinstalllog 或已编译程序。

6. 检查 USB 串口设备

连接底盘和雷达后检查:

ls -l /dev/ttyACM* /dev/ttyUSB* 2>/dev/null
dmesg | tail -30

识别结果:

/dev/ttyACM0  # OpenCTR H60 底盘控制器
/dev/ttyUSB0  # A2M7 激光雷达 CH340

将当前用户加入串口权限组:

sudo usermod -aG dialout $USER

执行后必须重新登录 SSH,权限才会生效。

7. 启动并验证激光雷达

启动 A2M7 雷达节点:

ros2 launch tarkbot_robot lidar_a2m7_py.launch.py

正常启动日志如下:

GET_INFO reply bytes=26
GET_HEALTH reply bytes=10
scan descriptor=a55a0500004081
A2M7 python scan bridge started on /dev/ttyUSB0 @ 256000

说明串口、波特率、协议解析均正常。

检查雷达话题:

ros2 topic echo --no-daemon /scan --once

可看到:

frame_id: laser
angle_min: 0.0
angle_max: 6.283185
range_min: 0.05
range_max: 16.0

.inf 表示该方向未收到有效回波或距离超出范围,是正常数据,不代表雷达故障。

8. 启动并恢复底盘通信

启动底盘节点:

ros2 launch tarkbot_robot robot.launch.py

启动日志显示:

Set serial /dev/ttyACM0 at 230400 baud
is Connected to OpenCTR board
setup publisher on odom
setup publisher on imu
setup publisher on bat_vol
setup subscriber on cmd_vel
initialization completed, is Running!

初期执行:

ros2 topic echo --no-daemon /odom --once

会一直等待,没有输出。原因不是 ROS 节点崩溃,而是控制器尚未开始回传数据。

向底盘发送一次零速度安全指令:

ros2 topic pub --once /cmd_vel geometry_msgs/msg/Twist \
"{linear: {x: 0.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.0}}"

该命令不会驱动机器人移动,但会触发控制器通信状态进入正常工作模式。

随后成功收到 /odom

ros2 topic echo --no-daemon /odom --once

也成功收到 /imu

ros2 topic echo --no-daemon /imu --once

9. 验证底盘与 IMU 发布频率

使用以下命令:

timeout 6s ros2 topic hz /imu
timeout 6s ros2 topic hz /odom

实测结果:

/imu  : 约 50.1 Hz
/odom : 约 50.1 Hz

频率稳定、抖动很小,说明底盘控制器、串口、ROS 驱动和 CM3588 性能均正常。

注意:ros2 topic hz 不支持 --no-daemon 参数。正确写法是:

ros2 topic hz /odom

10. 安装 RViz2 并解决图形库问题

系统最初仅安装了 ROS 基础组件,执行 rviz2 时提示找不到命令。

安装 RViz2:

sudo apt update
sudo apt install -y ros-jazzy-rviz2

不建议执行:

sudo apt upgrade

因为板子带有 FriendlyElec/Rockchip 定制内核、图形和多媒体软件包,整机升级风险较高。

安装完成后若出现:

libOgreMain.so.1.12.10: cannot open shared object file

原因是当前终端仍是安装前加载的 ROS 环境。重新加载环境即可:

source /opt/ros/jazzy/setup.bash
source ~/ros2_ws/install/setup.bash
rviz2

11. RViz2 显示雷达和 TF

在 MobaXterm 开启 X11 Forwarding 后,通过 SSH 运行:

rviz2

RViz 默认 Fixed Framemap,会报错:

Frame [map] does not exist

因为当前尚未运行 SLAM 建图节点,系统中还没有 map 坐标系。

将 RViz 的 Fixed Frame 改为:

odom

然后添加:

  • TF
  • /scan 对应的 LaserScan

此时可看到坐标关系:

odom -> base_footprint -> laser

以及雷达的二维障碍物点云。

建议将右上角视角从 Orbit 改为 TopDownOrtho,更适合查看二维雷达数据。

12. 最终联调结果

本次部署完成后,CM3588 已具备以下能力:

  • ROS 2 Jazzy ARM64 原生运行
  • 底盘 /odom 稳定发布,约 50 Hz
  • IMU /imu 稳定发布,约 50 Hz
  • A2M7 雷达 /scan 正常发布
  • TF 坐标树连通
  • RViz2 可实时显示坐标系和雷达点云
  • 底盘与雷达均直接接入板端,无需再通过 Windows WSL 的 USB/IP 转发

13. 后续计划

下一步将在当前基础上安装并配置 slam_toolbox,完成:

  1. 雷达 SLAM 实时建图
  2. /map -> odom -> base_footprint -> laser 坐标树建立
  3. 保存地图文件
  4. 后续接入导航与自主移动功能

至此,机器人已经从“电脑 WSL 临时调试”过渡到“板端 CM3588 独立运行”的架构。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐