1. 环境准备与硬件配置
在Jetson Nano上部署ORB_SLAM2之前,首先要确保硬件环境正确配置。我实测发现,很多初学者的问题都出在基础环境搭建阶段。Jetson Nano的ARM架构与普通x86电脑有本质区别,这会导致依赖库编译和系统配置上的差异。
建议先执行以下基础检查:
- 确认已刷写Ubuntu20.04镜像到Jetson Nano(建议使用官方JetPack 4.6+版本)
- 连接稳定的5V 4A电源(性能模式需要足够供电)
- 准备兼容的USB双目摄像头(推荐使用免驱的UVC协议摄像头)
关键配置命令:
bash复制# 查看系统版本
cat /etc/os-release
# 检查摄像头识别情况
ls /dev/video*
v4l2-ctl --list-devices
# 启用最大性能模式
sudo nvpmodel -m 0
sudo jetson_clocks
特别要注意的是,Jetson Nano的USB3.0接口带宽有限。如果使用高分辨率摄像头(如1080p),建议:
- 降低摄像头分辨率到640x480
- 使用USB2.0接口(实测更稳定)
- 在
/etc/udev/rules.d下添加USB带宽优化规则
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. ROS1 Noetic安装优化
虽然网上有很多ROS安装教程,但在Jetson Nano上需要特别注意依赖项的ARM版本兼容性。我推荐使用小鱼一键安装脚本的修改版:
bash复制wget https://gitee.com/ohhuo/fishros/raw/noetic_jetson/install -O fishros && chmod +x fishros && ./fishros
这个版本主要优化了:
- 自动跳过不兼容的x86架构包
- 替换国内镜像源加速下载
- 预配置Jetson专用环境变量
安装完成后务必执行:
bash复制# 初始化rosdep时使用国内源
sudo rosdepc init
rosdepc update --include-eol-distros
# 测试ROS核心功能
roscore &
rosrun rospy_tutorials talker
常见问题解决方案:
- 如果遇到
python3-empy报错,手动安装:bash复制sudo apt install python3-pip pip3 install empy -i https://pypi.tuna.tsinghua.edu.cn/simple - 图形化工具rqt需要额外依赖:
bash复制sudo apt install ros-noetic-rqt*
3. 关键依赖库编译技巧
ORB_SLAM2需要Pangolin和OpenCV3的支持,在Jetson上编译这两个库有特殊技巧。
3.1 Pangolin编译优化
使用这个修改版的编译命令可以避免内存溢出:
bash复制git clone -b jetson_nano https://gitee.com/ohhuo/Pangolin.git
cd Pangolin
mkdir build && cd build
# 关键配置参数
cmake .. -DCMAKE_BUILD_TYPE=Release \
-DBUILD_TESTS=OFF \
-DBUILD_EXAMPLES=OFF \
-DBUILD_PANGOLIN_PYTHON=OFF
make -j2 # Jetson Nano建议不超过2线程
sudo make install
验证安装成功:
bash复制cd ../examples/HelloPangolin
mkdir build && cd build
cmake ..
make
./HelloPangolin
3.2 OpenCV3定制编译
Jetson Nano自带OpenCV4,但ORB_SLAM2需要OpenCV3。推荐从源码编译时使用这些参数:
bash复制git clone -b 3.4.15 --depth 1 https://gitee.com/mirrors/opencv.git
cd opencv
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=RELEASE \
-DCMAKE_INSTALL_PREFIX=/usr/local/opencv3 \
-DBUILD_TESTS=OFF \
-DBUILD_PERF_TESTS=OFF \
-DBUILD_EXAMPLES=OFF \
-DWITH_GTK=ON \
-DWITH_OPENGL=ON \
-DENABLE_NEON=ON \
-DENABLE_VFPV3=ON
make -j2
sudo make install
配置环境变量:
bash复制echo '/usr/local/opencv3/lib' | sudo tee /etc/ld.so.conf.d/opencv3.conf
sudo ldconfig
echo 'export PKG_CONFIG_PATH=/usr/local/opencv3/lib/pkgconfig:$PKG_CONFIG_PATH' >> ~/.bashrc
source ~/.bashrc
4. ORB_SLAM2的Jetson适配
直接从GitHub克隆的ORB_SLAM2通常无法在Jetson上直接编译,需要这些关键修改:
-
修改
CMakeLists.txt:cmake复制set(CMAKE_CXX_STANDARD 14) # 必须使用C++14 add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0) # 兼容旧版ABI -
调整
Thirdparty/DBoW2/CMakeLists.txt:cmake复制if(ARM) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=armv8-a") endif() -
关键编译命令:
bash复制cd ~/catkin_ws/src/ORB_SLAM2 chmod +x build.sh ./build.sh -
ROS接口编译特别注意:
bash复制# 先修改ROS接口的CMakeLists.txt sed -i 's/c++11/c++14/g' CMakeLists.txt ./build_ros.sh
我整理了一个已经适配好的版本,可以直接使用:
bash复制git clone -b jetson_nano https://gitee.com/ohhuo/ORB_SLAM2.git
5. 双目摄像头实战配置
针对常见的USB双目摄像头,需要特殊配置才能被ORB_SLAM2正确使用。
5.1 摄像头驱动配置
安装优化版的usb_cam驱动:
bash复制cd ~/catkin_ws/src
git clone -b noetic-jetson https://gitee.com/ohhuo/usb_cam.git
cd ..
catkin_make
配置摄像头参数(以640x480分辨率为例):
xml复制<!-- 修改usb_cam-test.launch -->
<param name="video_device" value="/dev/video0" />
<param name="image_width" value="640" />
<param name="image_height" value="480" />
<param name="pixel_format" value="yuyv" />
<param name="framerate" value="30"/>
5.2 双目图像分割
创建专门的双目处理包:
bash复制cd ~/catkin_ws/src
catkin_create_pkg camera_split roscpp image_transport cv_bridge
关键代码修改点:
- 在
camera_split_node.cpp中调整图像截取区域 - 修改
camera_split_no_calibration.launch中的话题名称
实测有效的参数配置:
yaml复制left_x: 0
left_y: 0
right_x: 640 # 根据实际摄像头分辨率调整
right_y: 0
image_width: 640
image_height: 480
6. 系统集成与性能优化
将所有组件集成运行时,需要特别注意资源分配。
6.1 启动流程优化
建议的启动顺序:
- 先启动摄像头驱动
- 再启动图像分割节点
- 最后启动ORB_SLAM2
优化后的启动命令:
bash复制# 终端1:摄像头驱动
roslaunch usb_cam usb_cam-test.launch
# 终端2:图像分割(添加延迟确保摄像头就绪)
sleep 5 && roslaunch camera_split camera_split.launch
# 终端3:SLAM系统(配置CPU亲和性)
taskset -c 1,2 rosrun ORB_SLAM2 Stereo \
Vocabulary/ORBvoc.txt \
Examples/Stereo/EuRoC.yaml \
false
6.2 Jetson专属优化技巧
-
内存管理:
bash复制sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile -
GPU加速:
修改ORB_SLAM2代码,启用CUDA加速:cpp复制// System.cc 中添加 #include <cuda_runtime.h> -
实时性优化:
bash复制sudo apt install linux-rt sudo systemctl disable graphical.target sudo systemctl set-default multi-user.target
7. 实时建图与调试技巧
当系统成功运行后,还需要掌握这些实用技巧:
-
建图质量优化:
- 修改
EuRoC.yaml中的关键参数:yaml复制Camera.fps: 20 # 根据实际帧率调整 ORBextractor.nFeatures: 800 # Jetson上建议减少特征点
- 修改
-
性能监控命令:
bash复制# 查看CPU/GPU使用率 tegrastats # 查看ROS节点计算耗时 rostopic hz /ORB_SLAM2/Frame -
常见问题解决:
- 如果出现地图漂移,尝试:
bash复制export OMP_NUM_THREADS=1 - 遇到段错误时,检查内存泄漏:
bash复制
valgrind --tool=memcheck ./Stereo
- 如果出现地图漂移,尝试:
-
可视化工具推荐:
bash复制sudo apt install rviz rosrun rviz rviz -d `rospack find ORB_SLAM2`/rviz/orbslam2.rviz
经过这些优化后,我的Jetson Nano能够稳定运行在15-20fps的双目视觉SLAM,足够用于室内机器人导航等场景。最关键的是要保持环境光照充足,摄像头帧率稳定。
