1. 项目概述
在边缘计算和机器人开发领域,NVIDIA Jetson系列开发板因其强大的AI算力和紧凑的尺寸备受开发者青睐。最近我在Jetson Orin NX平台上部署Ubuntu 22.04系统后,需要安装ROS2 Humble版本用于机器人项目开发。这个过程看似简单,但实际上在ARM架构的嵌入式平台上会遇到不少特有的问题。
Jetson Orin NX作为NVIDIA新一代边缘AI计算设备,搭载了Ampere架构GPU和6核ARM Cortex-A78AE CPU,性能较前代有显著提升。而ROS2 Humble则是专为Ubuntu 22.04设计的长期支持版本(LTS),两者结合能为移动机器人、无人机等设备提供强大的开发环境。
2. 环境准备
2.1 系统基础配置
在开始安装ROS2之前,必须确保系统处于最新状态。Jetson Orin NX预装的Ubuntu 22.04镜像通常不是完全最新的,需要先执行以下命令:
bash复制sudo apt update
sudo apt upgrade -y
sudo reboot
升级完成后,建议检查内核版本是否为5.10.104-tegra或更高。这个内核版本对Orin NX的硬件支持最为完善:
bash复制uname -r
2.2 区域设置配置
ROS2对locale设置有一定要求,特别是需要确保en_US.UTF-8 locale已生成。这在嵌入式平台上有时会被忽略:
bash复制sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8
注意:如果不设置正确的locale,在后续编译ROS2包时可能会遇到奇怪的编码错误。
2.3 添加ROS2软件源
由于Jetson Orin NX采用ARM64架构,不能直接使用x86平台的ROS2二进制包。需要添加ARM专用的ROS2仓库:
bash复制sudo apt install curl gnupg2
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
3. ROS2 Humble安装
3.1 基础安装
更新软件源并安装ROS2基础包:
bash复制sudo apt update
sudo apt install ros-humble-desktop
这个命令会安装ROS2的核心组件、工具和基础依赖。在Orin NX上,这个过程大约需要15-20分钟,具体取决于网络速度。
3.2 环境变量设置
安装完成后,需要设置环境变量以便系统能够找到ROS2命令:
bash复制source /opt/ros/humble/setup.bash
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
为了验证安装是否成功,可以运行一个简单的测试:
bash复制ros2 run demo_nodes_cpp talker
在另一个终端中运行:
bash复制ros2 run demo_nodes_py listener
如果能看到talker发送消息并被listener接收,说明基础安装成功。
4. 关键组件安装与配置
4.1 安装构建工具
为了能够从源代码构建ROS2包,需要安装colcon等构建工具:
bash复制sudo apt install python3-colcon-common-extensions python3-rosdep
sudo rosdep init
rosdep update
4.2 配置ROS_DOMAIN_ID
在多设备通信场景中,设置ROS_DOMAIN_ID可以避免网络中的消息干扰:
bash复制echo "export ROS_DOMAIN_ID=<你的ID>" >> ~/.bashrc
建议选择0-101之间的数字作为你的唯一ID。
4.3 安装额外依赖
根据具体项目需求,可能需要安装一些常用组件:
bash复制sudo apt install ros-humble-navigation2 ros-humble-nav2-bringup \
ros-humble-turtlebot3* ros-humble-gazebo-ros-pkgs
5. 性能优化与问题排查
5.1 GPU加速配置
Jetson Orin NX的强大GPU性能可以通过以下方式为ROS2所用:
bash复制sudo apt install ros-humble-vision-opencv \
ros-humble-nvidia-deepstream-ros2
安装完成后,需要配置GPU内存分配:
bash复制sudo /usr/bin/jetson_clocks
5.2 常见问题解决
问题1:安装过程中出现依赖冲突
解决方案:先尝试修复损坏的依赖关系
bash复制sudo apt --fix-broken install
如果问题依旧,可以尝试清除ROS2相关包后重新安装:
bash复制sudo apt remove ros-humble-* && sudo apt autoremove
sudo apt install ros-humble-desktop
问题2:ROS2节点启动缓慢
在Jetson平台上,首次启动ROS2节点可能会比较慢。可以通过预加载相关库来改善:
bash复制echo "export LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libgomp.so.1" >> ~/.bashrc
问题3:RVIZ2显示异常
如果RVI2显示有问题,可以尝试使用软件渲染:
bash复制export LIBGL_ALWAYS_SOFTWARE=1
6. 开发环境配置建议
6.1 VS Code配置
对于ROS2开发,推荐使用VS Code作为IDE:
bash复制sudo apt install code
code --install-extension ms-iot.vscode-ros
code --install-extension ms-python.python
安装完成后,在VS Code中设置ROS2工作区,可以大大提高开发效率。
6.2 创建工作空间
标准的ROS2开发工作流程通常从创建工作空间开始:
bash复制mkdir -p ~/ros2_ws/src
cd ~/ros2_ws
colcon build
6.3 实时内核考虑(可选)
对于需要实时性能的应用,可以考虑安装RT内核:
bash复制sudo apt install linux-rt-tegra
但需要注意,实时内核可能会影响GPU性能,需要根据具体应用场景权衡。
7. 实际应用测试
7.1 TurtleBot3仿真测试
安装TurtleBot3相关包后,可以运行以下命令测试完整功能:
bash复制export TURTLEBOT3_MODEL=waffle_pi
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
7.2 图像处理测试
测试OpenCV和摄像头功能:
bash复制ros2 run image_tools cam2image
ros2 run image_tools showimage
7.3 性能监控
使用jetson_stats工具监控系统资源:
bash复制sudo -H pip install -U jetson-stats
jtop
8. 长期维护建议
8.1 定期更新
保持ROS2环境更新:
bash复制sudo apt update
sudo apt upgrade
rosdep update
8.2 备份关键配置
建议备份以下目录和文件:
- ~/.bashrc
- /etc/apt/sources.list.d/
- 工作空间中的package.xml和CMakeLists.txt
8.3 社区资源利用
Jetson和ROS2都有活跃的社区,遇到问题时可以查阅:
- ROS Answers (https://answers.ros.org)
- NVIDIA Developer Forums
- GitHub上的相关issue
在Jetson Orin NX上使用ROS2 Humble进行开发时,我发现最大的挑战是ARM架构下某些包的兼容性问题。通过交叉编译或者从源码构建通常能解决大部分问题。另外,合理利用Orin NX的GPU加速可以显著提升图像处理和深度学习相关节点的性能。
