1. RK3562单板机嵌入式ROS2开发环境搭建
作为一名长期从事嵌入式开发的工程师,我最近在RK3562单板机上完成了ROS2 Foxy版本的开发环境搭建。这个配置过程虽然不算复杂,但有几个关键点需要特别注意,否则很容易踩坑。
1.1 硬件准备与系统选型
我们使用的硬件平台是RK3562开发板,配置为2GB LPDDR4X内存和16GB eMMC存储。这个配置对于运行ROS2 Foxy来说已经足够,但要注意以下几点:
- 显示输出:建议使用欣瑞达XT070YTA23R_A6 LVDS电阻屏作为显示设备,这是经过验证的兼容性最好的显示屏
- 调试接口:DEBUG串口是主要的调试接口,波特率通常设置为1500000
- 启动方式:默认从eMMC启动系统,这也是最稳定的启动方式
注意:不同批次的开发板可能有细微差异,建议先确认硬件版本号
1.2 开发环境配置
对于开发环境,我们采用双系统方案:
Windows环境:
- Windows 10 64位(推荐)或Windows 7 64位
- 主要用于终端访问和文件传输
Linux环境:
- VMware Workstation 16.2.5
- Ubuntu 20.04.6 LTS 64位
- 系统镜像:rk3562-Tronlong-Desktop-20.04-sysroot-[版本号].tar.gz
在Ubuntu中需要安装以下基础工具:
bash复制sudo apt update
sudo apt install -y git curl build-essential cmake
1.3 ROS2 Foxy安装
ROS2 Foxy的安装有几个关键步骤容易出错:
- 设置软件源:
bash复制sudo apt install -y software-properties-common
sudo add-apt-repository universe
sudo apt update
- 安装ROS2 Foxy:
bash复制sudo apt install -y ros-foxy-desktop
- 环境变量设置:
bash复制echo "source /opt/ros/foxy/setup.bash" >> ~/.bashrc
source ~/.bashrc
常见问题:如果遇到依赖冲突,可以先尝试
sudo apt autoremove清理旧包
2. ROS2系统测试与验证
2.1 Python节点通信测试
我们先从最简单的Python节点测试开始,这是验证ROS2是否正常工作的第一步。
- 创建日志目录:
bash复制mkdir -p ~/.ros/log
- 启动监听节点(后台运行):
bash复制ros2 run demo_nodes_py listener &
- 启动发布节点:
bash复制ros2 run demo_nodes_py talker
你应该能在终端看到类似这样的输出:
code复制[INFO] [listener]: I heard: "Hello World: 1"
[INFO] [listener]: I heard: "Hello World: 2"
调试技巧:如果看不到输出,先检查
ros2 topic list确认话题是否存在
2.2 C++节点通信测试
C++节点的测试流程类似,但编译过程需要注意:
- 启动监听节点:
bash复制ros2 run demo_nodes_cpp listener &
- 启动发布节点:
bash复制ros2 run demo_nodes_cpp talker
关键区别:
- C++节点启动时间稍长
- 消息格式完全相同,但底层实现不同
2.3 小海龟仿真测试
这是最直观的功能测试,需要图形界面支持:
- 启动小海龟仿真器:
bash复制ros2 run turtlesim turtlesim_node &
- 控制小海龟运动:
bash复制ros2 topic pub --rate 1 /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}"
参数说明:
linear.x: 前进速度(2.0 m/s)angular.z: 旋转速度(1.8 rad/s)--rate 1: 每秒发布一次命令
图形界面问题:如果看不到小海龟,请检查LVDS连接和显示驱动
3. ROS2工程开发实践
3.1 开发环境搭建
在Ubuntu中需要安装以下开发工具:
bash复制sudo apt install -y python3-pip python3-rosdep2 python3-rosinstall-generator python3-vcstool build-essential
pip3 install -U colcon-common-extensions
pip3 install empy==3.3.4
特别注意:
- empy必须使用3.3.4版本,新版可能不兼容
- colcon是ROS2的构建工具,替代了catkin
3.2 创建工作空间
标准工作空间结构如下:
code复制ros2_ws/
src/ # 源代码
build/ # 构建中间文件
install/ # 安装目录
log/ # 编译日志
初始化步骤:
bash复制mkdir -p ~/ros2_ws/src
cd ~/ros2_ws
colcon build
3.3 创建自定义包
以Python包为例:
- 创建包:
bash复制cd ~/ros2_ws/src
ros2 pkg create --build-type ament_python my_package
-
添加节点代码:
编辑my_package/my_package/node.py,实现你的功能 -
修改setup.py:
确保entry_points中包含你的节点:
python复制entry_points={
'console_scripts': [
'my_node = my_package.node:main',
],
}
- 编译运行:
bash复制cd ~/ros2_ws
colcon build --packages-select my_package
source install/setup.bash
ros2 run my_package my_node
4. 常见问题与解决方案
4.1 编译问题排查
- 依赖缺失:
bash复制rosdep install --from-paths src --ignore-src -y
- 内存不足:
- 增加swap空间
- 使用
-jN参数限制并行编译任务数
- Python版本冲突:
- 确保使用Python3.8
- 检查PYTHONPATH环境变量
4.2 运行时问题
- 节点无法通信:
bash复制ros2 topic list # 检查话题列表
ros2 topic echo /topic_name # 查看话题内容
- 权限问题:
bash复制sudo chmod -R 777 ~/.ros # 临时解决方案
- 图形界面问题:
- 确认DISPLAY环境变量
- 尝试使用
-v参数增加日志输出
4.3 性能优化建议
- 减少系统负载:
- 关闭不需要的ROS2节点
- 使用轻量级消息类型
- 实时性优化:
- 设置进程优先级
- 使用实时内核(需要重新编译)
- 内存管理:
- 定期检查内存泄漏
- 使用
rqt_graph监控节点关系
在实际项目中,我发现RK3562的性能足够运行多个ROS2节点,但需要注意资源分配。建议使用ros2 run --prefix "taskset -c 1"将关键节点绑定到特定CPU核心。
