资讯中心

RDK X5 + ROS2机器人实战:从系统烧录到SLAM导航部署全记录

📅 2026/10/1 23:37:34
RDK X5 + ROS2机器人实战:从系统烧录到SLAM导航部署全记录
RDK X5刚到手的时候我第一反应其实是有点懵的。以前用树莓派做机器人跑个SLAM就已经风扇狂转再想把YOLO之类的视觉检测塞进去基本是奢望整个项目只能从一个模块到另一个模块反复折腾。换到RDK X5之后算力、接口、模型部署链路线路都顺畅了不少配合ROS2做完整的小车平台从硬件接线到算法动起来整个流程我踩了不少坑也总结了不少经验。这篇文章就把我完整搭建一辆RDK X5 ROS2机器人的过程记录下来从系统烧录、ROS2安装、外设配置到相机检测、SLAM建图避障部署尽量做到照着抄就能跑通。如果你正打算用RDK X5做毕设、竞赛或者个人机器人项目这篇文章应该能帮你省下至少一周的试错时间。我会把每一段都拆开讲清楚包括选型原因、具体命令、参数含义和容易翻车的细节。1. 项目整体设计与硬件选型思路1.1 为什么选RDK X5而不是树莓派或JetsonRDK X5本质上是一块面向机器人场景的嵌入式计算平台核心亮点是地瓜自研的BPU脑处理单元不是普通的CPU或GPU。这颗BPU在目标检测、分类、分割这类CNN模型上非常擅长能以较低的功耗推理YOLOv5s、YOLOv8s、ResNet这类主流模型标称AI算力在10 TOPS左右。这个量级对一台家用机器人来说刚好够用既能跑视觉感知又能承担SLAM和导航的全部计算。我拿它和树莓派5对比过。树莓派5的CPU性能其实不差但它的GPU生态面向图形渲染跑AI模型要么走低效的CPU推理要么依赖额外的NPU加速卡驱动和工具链都非常零散。Jetson Orin Nano倒是强可价格贵、货源不稳定、散热套件又大又吵对个人玩家不太友好。RDK X5的成本、尺寸、功耗控制和机器人专用接口在这三者里最均衡而且地瓜官方提供了专门的ROS2功能包支持这一点在国产硬件里比较少见意味着你不用自己从头写底层驱动适配。1.2 机器人平台的系统架构拆解在开始动手之前我先把整台机器人的软件框架想清楚了一共分成四层。硬件层移动底盘两个直流减速电机加驱动板、激光雷达、摄像头、电池和稳压模块这是机器人感知和移动的物理基础。系统层RDK X5刷Ubuntu 22.04安装ROS2 Humble。ROS2负责把各个硬件的数据统一成标准话题方便上层算法调用。感知层摄像头采集图像BPU做目标检测激光雷达输出激光扫描数据用于建图和避障。运动层订阅感知结果经过SLAM或导航算法处理后转发指令到电机驱动板控制底盘前进、转弯。这个架构和工厂里AGV小车的结构几乎一样只是把工业部件换成了教育级硬件。RDK X5作为整个系统的唯一主控不需要额外再挂一台电脑这一点在实际调试时非常省事。1.3 选ROS2的核心原因ROS2和旧版ROS1最大的区别是取消了Master中心节点改用DDS分布式通信协议每一个节点都可以独立运行、动态发现彼此。这意味着我可以把建图、导航、视觉识别分别跑在不同进程里哪个崩溃了就重启哪个不影响整机运行。对真实机器人这种需要长时间运行的场景来说稳定性比ROS1高很多。另外RDK X5官方镜像默认就是为ROS2准备的自带很多硬件加速插件比如视频编码、BPU推理接口等和我用的Ubuntu 22.04 ROS2 Humble版本正好匹配。如果强行装ROS1反而会失去这套硬件加速能力所以ROS2是唯一合理的选择。2. 硬件配置与ROS2环境搭建实战2.1 系统烧录与核心初始化RDK X5拿到手是一块板子或准系统套件我自己的做法是先烧录系统再考虑接线避免在硬件和软件都没准备好的情况下反复排查。烧录过程不复杂去地瓜官网下载RDK X5的Ubuntu 22.04官方镜像准备好一张32GB以上的高速TF卡和读卡器用balenaEtcher把镜像写入TF卡。重点提醒一下TF卡建议选A2或者U3级别的普通C10卡在写入系统时很稳定但后续装ROS2和编译功能包时会明显变慢甚至导致I/O卡顿。系统烧录完成后把TF卡插入板卡接上HDMI显示器和键鼠上电开机。首次启动会进入系统初始化界面创建用户、设置密码。之后建议立刻做三件事。第一固定IP。开发过程中需要频繁使用SSH登录板卡动态IP会让连接变得很不稳定。在系统的网络设置里把有线网卡配成静态IP例如192.168.1.100子网掩码255.255.255.0网关指向路由器地址这样开发机就能稳定访问。第二更新软件源。RDK X5的镜像虽然自带了很多工具但ROS2功能包和系统组件仍需从软件源拉取先执行系统更新比较稳妥。sudo apt update sudo apt upgrade -y sudo apt install net-tools htop vim git curl -y第三关闭自动休眠和设置高性能模式。开发板上没有传统意义上的屏幕休眠但为了长时间运行算法稳定我习惯把CPU的省电策略改为高性能同时对系统负载做一次检查确认内存与CPU温度在正常范围。2.2 安装ROS2 Humble全流程RDK X5官方镜像其实已经预装了不少ROS2基础组件但为了保险起见我还是完整走了一遍标准安装流程。ROS2 Humble对应Ubuntu 22.04是长期支持版本社区活跃度和功能包兼容性都更好。首先确保系统语言环境是UTF-8。locale sudo apt install locales sudo locale-gen en_US en_US.UTF-8 sudo update-locale LC_ALLen_US.UTF-8 LANGen_US.UTF-8 export LANGen_US.UTF-8然后添加ROS2的软件源。sudo apt install software-properties-common sudo add-apt-repository universe sudo apt update sudo apt install curl -y sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg echo deb [arch$(dpkg --print-architecture) signed-by/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release echo $UBUNTU_CODENAME) main | sudo tee /etc/apt/sources.list.d/ros2.list /dev/null sudo apt update接着安装桌面版ROS2。如果只是跑算法安装ros-humble-ros-base就够了但我项目中需要看图像可视化、调试话题所以直接装完整桌面版。sudo apt install ros-humble-desktop python3-colcon-common-extensions python3-rosdep -y安装完成后把ROS2环境变量写进bashrc否则每次开终端都要重新source。echo source /opt/ros/humble/setup.bash ~/.bashrc source ~/.bashrc验证安装是否成功最直观的方法是跑小乌龟。ros2 run turtlesim turtlesim_node另一个终端执行ros2 run turtlesim turtle_teleop_key如果小乌龟窗口能正常打开并且方向键可以控制移动说明ROS2的核心通信已经通了。这里有个小坑第一次跑小乌龟时如果提示缺少turtlesim包需要单独执行sudo apt install ros-humble-turtlesim2.3 外接传感器与电机驱动板的接入系统就绪后我开始把外设一个一个接上板卡。第一类外设是电机驱动板我的底盘采用两个直流减速电机驱动板通过串口和RDK X5通信。接线时要注意共地问题驱动板的GND必须和RDK X5的GND相连否则串口通信会出现乱码或者完全无响应。串口设备在Linux下的默认名称通常是/dev/ttyUSB0或/dev/ttyACM0插入后先用ls /dev/tty*查看设备是否被识别。识别不到时大概率是驱动板没有供电或者串口线松了优先排查这两点。权限问题也是高频坑默认情况下普通用户没有访问串口的权限运行节点时会报Permission denied。把当前用户加入dialout组后重新登录即可sudo usermod -aG dialout $USER第二类外设是激光雷达我用的是UART接口的RPLIDAR A1。它的驱动包在ROS2下可以直接编译但每次插拔后设备名可能变化导致launch文件失效。我的做法是用udev规则给雷达固定一个设备名。在/etc/udev/rules.d/目录下新建规则文件KERNELttyUSB*, ATTRS{idVendor}10c4, ATTRS{idProduct}ea60, MODE:0666, SYMLINKlidar重新加载udev后雷达会被固定映射到/dev/lidar再也不用担心设备名漂移。第三类外设是摄像头。MIPI接口相机需要RDK官方镜像里额外的摄像头驱动USB摄像头则简单得多插上就能在/dev/video0看到设备。我建议新手从USB摄像头入手驱动成熟、兼容性好等流程全部跑通再换MIPI相机也不迟。供电是整个硬件环节里最容易忽视的部分。RDK X5工作电流不低加上激光雷达、电机驱动板同时工作如果用普通充电宝供电很容易出现电压跌落导致板卡突然重启。我最后选用了一块支持5V/3A以上输出的电池组并通过DC-DC稳压模块独立给电机驱动板供电主控和电机电源完全隔离问题才彻底解决。3. 算法部署与功能打通3.1 建立ROS2工作空间与最小通信验证硬件都接入后算法部署的第一步是建立一个干净的ROS2工作空间后面所有的功能包都会集中在这里管理。mkdir -p ~/rdk_ws/src cd ~/rdk_ws colcon build echo source ~/rdk_ws/install/setup.bash ~/.bashrc source ~/.bashrccolcon是ROS2默认的构建工具它会自动递归编译src目录下的所有功能包。第一次执行可能时间较长因为要生成构建环境。如果编译过程中提示内存不足可以在colcon build后面加上--parallel-workers 1限制并行编译进程数。在往里塞复杂功能包之前我习惯先写一个最简单的发布订阅节点验证通信链路。创建一个自定义包cd ~/rdk_ws/src ros2 pkg create test_comm --build-type ament_python --dependencies rclpy std_msgs然后在test_comm下新建一个简单的发布节点定时发送字符串消息再用命令行订阅确认ros2 run test_comm talker ros2 topic echo /chatter能看到Hello World字符串不断刷新说明工作空间、编译系统、节点通信全部正常。这一步是整个算法链路的基石千万不要跳过直接上复杂功能。3.2 图像采集与话题可视化机器人要“看见”世界首先得把摄像头数据变成ROS2话题。对于USB摄像头我直接用官方提供的usb_cam包。sudo apt install ros-humble-usb-cam ros2 run usb_cam usb_cam_node_exe启动之后用话题工具检查ros2 topic list ros2 topic hz /image_raw如果/ image_raw的频率稳定在30Hz左右说明图像采集正常。要实时查看画面可以用rqt_image_view。ros2 run rqt_image_view rqt_image_view在界面上选择/image_raw话题就能看到实时视频流。这一步我踩过一个很经典的坑摄像头输出分辨率过大时RDK X5通过USB传输带宽会被占满导致图像卡顿。解决方法是在usb_cam的launch参数里把图像尺寸改为1280x720或640x480这个分辨率对后续BPU推理也足够用了。如果你的相机是MIPI接口建议直接用RDK官方提供的hobot_usb_cam或hobot_cam包它们针对BPU做了优化还能直接把图像编码成H.264流节省系统开销。3.3 在BPU上部署目标检测模型RDK X5最吸引我的地方就是可以把自己训练好的模型部署到BPU上。地瓜官方提供了一套完整的模型转换工具链可以把ONNX、Caffe等格式的模型转换并量化为BPU可执行的格式。这里我说一下我的习惯直接用官方 model zoo 里已经量化好的YOLOv8模型跑通流程再换成自己的数据集重新训练这样可以先把部署链路拉通。目标检测通常使用YOLO系列模型。RDK X5上部署的流程是这样的准备模型从地瓜模型库下载YOLOv8目标检测模型或者把自训练的YOLO模型导出为ONNX。模型转换在开发机上使用地瓜提供的工具链D-Robotics工具链或Pipeline工具对ONNX模型进行量化与编译输出一个可在BPU上运行的模型文件。这里最主要的是设置好输入尺寸和量化精度int8或fp16RDK X5默认推荐int8量化推理速度更快。运行推理RDK官方在ROS2中提供了hobot_dnn推理功能包它可以订阅图像话题自动调用BPU进行推理并把识别结果目标框、类别、置信度发布出去。hobot_dnn的基本使用方式并不复杂把它编译安装到工作空间后指定模型文件和订阅的图像话题即可。启动后可以用命令行直接查看推理结果的话题发布频率ros2 topic hz /hobot_dnn_result我的实测数据是YOLOv8s输入640x640分辨率int8量化完成后BPU推理速度大约在几十毫秒一帧完全满足机器人实时避障的要求。相比纯CPU推理速度快了好几倍这是RDK X5最核心的竞争力。要可视化检测框可以用官方自带的web展示端或者在rviz2中叠加显示Box消息前者更直观后者适合和雷达、地图数据放在同一个坐标系里观察。3.4 激光雷达SLAM建图与导航机器人要自主行走建图和导航才是落地的关键。我采用的是激光雷达SLAM方案先用cartographer建图再用Nav2做路径规划与避障。雷达驱动启动后先确认/scan话题正常输出ros2 topic hz /scan然后开始建图。cartographer在ROS2 Humble下可以直接安装。sudo apt install ros-humble-cartographer sudo apt install ros-humble-cartographer-ros启动cartographer后用遥控器或者键盘控制小车在房间里慢慢移动让雷达扫描周围环境。建图时最忌讳的是移动速度过快LIDAR在快速转弯时点云会畸变地图会模糊。我一般保持直线速度0.2m/s左右转弯角度一次不超过30度扫出来的地图非常干净。地图完成后保存两份文件.pgm图像地图和.yaml配置文件。ros2 run nav2_map_server map_saver_cli -f ~/map/myroomNav2导航需要加载这份地图同时负责定位和路径规划。我用的Nav2参数文件主要是调整机器人半径、速度上限、代价地图的膨胀范围这些参数。导航中最容易出问题的还是TF坐标变换。机器人底盘、激光雷达、里程计之间的坐标系必须完全正确否则在rviz2里会看到地图和雷达点云错位导航自然无法启动。我当时的做法是在rviz2里添加TF坐标显示逐帧检查base_link、laser_frame、odom之间的关系。激光雷达安装位置必须在配置文件里准确写明比如雷达装在底盘中心上方0.1m处那么laser_frame到base_link的平移和旋转就按实际尺寸填差一厘米都不行。Nav2启动后在rviz2里使用Nav2 Goal工具点一个目标点机器人就会自主规划路径并移动过去。规划过程中如果遇到障碍物代价地图会实时更新机器人会重新规划绕行。跑通这一步整条从硬件到算法的链路就算闭环了。4. 常见问题与排查技巧实录4.1 系统启动与连接类问题RDK X5使用过程中最让人抓狂的一类问题是板卡启动失败或SSH连不上。如果上电后HDMI没有画面先检查TF卡是否插到位、镜像是否烧录成功。我遇到过镜像烧录工具提示成功但板卡无法启动的情况最后发现是TF卡读取速度不达标换了一张好卡就正常了。SSH连不上时不要急着重刷系统先确认开发机和板卡是否在同一个网段用ping命令测试一下再检查SSH服务是否已启动sudo systemctl status ssh如果服务正常但还是连不上大概率是防火墙拦截了22端口执行sudo ufw allow 22基本能解决。4.2 编译与包依赖类问题ROS2环境下功能包编译失败是最常见、也最耗时的坑。colcon build报错时首先要区分是代码问题还是依赖缺失。依赖缺失的典型特征是会提示找不到某个头文件或某个CMake包rosdep install --from-paths src --ignore-src -r -y这条命令会根据package.xml自动安装所有缺失依赖。编译过程中如果板卡内存不够会出现c编译器被直接杀死Killed的提示这时需要限制编译并发并增加交换空间cd ~/rdk_ws colcon build --parallel-workers 1 sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile增加swap后再编译大功能包很少再报Killed。4.3 DDS通信与多机协作问题我经常用开发机远程给RDK X5启动节点在分布式环境下发现两台机器的话题完全互通。ROS2底层使用DDS发现机制默认依赖组播通信如果路由器开启了AP隔离或者两个设备不在同一个VLANROS2节点之间会互相发现不了。排查手段是先确认两个设备的ROS_DOMAIN_ID相同echo $ROS_DOMAIN_ID然后再确认用的DDS实现版本是否一致例如都使用默认的Fast DDS。来源不同的功能包如果依赖不同的DDS实现也会导致通信参数不匹配。最直接的解决办法是统一在两台设备上执行export RMW_IMPLEMENTATIONrmw_fastrtps_cpp并写入bashrc。4.4 传感器数据异常排查传感器类问题就像玄学但实际上大多数都有明确根因。让我整理一个速查表供参考。现象可能原因排查命令或操作解决方案/dev/ttyUSB0不存在驱动未加载或线材损坏ls /dev/tty*重新插拔更换数据线打开串口报Permission denied用户不在dialout组groups $USERsudo usermod -aG dialout $USER 并重新登录激光雷达点云中间断裂供电电压不足或转速波动ros2 topic hz /scan 观察频率使用独立稳压电源提高串口波特率匹配图像话题频率很低USB带宽不足或分辨率过高ros2 topic hz /image_raw降低分辨率为640x480关闭其他占用带宽的节点雷达数据话题有但建图无数据TF树错误ros2 run tf2_tools view_frames检查base_link到laser_frame的TF变换导航时机器人原地抖动里程计校准不准确ros2 topic echo /odom重新测量轮距、编码器参数校准线速度系数4.5 我的几个独家避坑经验除了以上技术问题还有几个经验是跑了多次项目后才悟出来的。第一建图环境比算法参数更重要。建图前把地面上的杂物收拾干净把机器人可能经过的空间尽量留出余量地图质量会肉眼可见地提升。地图都没建好后面Nav2再怎么调也没用。第二不要一上来就用MIPI相机。虽然MIPI相机的延迟和画质都更好但底层驱动和hobot适配问题会让你在环境搭建阶段浪费大量时间。先用USB相机把整个流程跑通硬件能力后续再升级不迟。第三机器人实验最好用有线连接或局域网连接不要依赖公共无线网络。公共场所的AP通常会隔离设备DDS的组播发现会被阻断节点互相找不到的情况会让你误以为代码出了问题。第四保存一切配置参数。我维护了一个参数草稿本每次调好的Nav2参数、雷达配置、机械尺寸都记下来。因为重刷系统是机器人开发中最常见的事情参数丢失之后重新调一遍时间成本远高于记录成本。最后再分享一个小技巧调试ROS2机器人时别只顾着看topic输出rviz2里把TF树、激光点云、代价地图、路径信息叠加在一起看能帮你快速定位80%以上问题。实际项目里很多“灵异现象”最后都指向同一个根因坐标系没对齐。先把坐标系理顺机器人才能真正跑起来。

看完文章,想为自己的企业也做一次专业网站诊断?

尧图顾问免费为您评估现有网站,并给出建站/改版建议与报价方案。

免费获取方案