CM3588 Plus 部署 ROS 2 Jazzy:TARKBOT R750 底盘、A2M7 雷达与 RViz2 联调记录
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 源码目录,不能迁移 build、install、log 或已编译程序。
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 Frame 是 map,会报错:
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,完成:
- 雷达 SLAM 实时建图
/map -> odom -> base_footprint -> laser坐标树建立- 保存地图文件
- 后续接入导航与自主移动功能
至此,机器人已经从“电脑 WSL 临时调试”过渡到“板端 CM3588 独立运行”的架构。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)