用IMX219-83双目相机和Jetson Nano搭建你的第一个视觉SLAM demo

张开发
2026/4/19 4:36:55 15 分钟阅读

分享文章

用IMX219-83双目相机和Jetson Nano搭建你的第一个视觉SLAM demo
从零搭建基于IMX219-83双目相机与Jetson Nano的视觉SLAM系统当我们需要让机器理解周围环境并自主导航时视觉SLAM技术就像是为机器装上了一双会思考的眼睛。IMX219-83双目相机与Jetson Nano的组合为开发者提供了一个高性价比的硬件平台能够快速验证SLAM算法原型。本文将带你完整走过从硬件配置到算法实现的每一步让你在一天内就能看到自己的SLAM系统实时构建环境地图。1. 硬件准备与环境配置在开始之前我们需要确保所有硬件组件正确连接并正常工作。IMX219-83是一款基于索尼IMX219传感器的双目相机模组具有800万像素分辨率和83度广角视野非常适合SLAM应用中对宽视野和高分辨率的需求。1.1 硬件连接与检测将IMX219-83双目相机的两条CSI排线插入Jetson Nano的CSI接口注意排线金属触点朝向散热器方向。连接完成后启动Jetson Nano并打开终端输入以下命令检查设备是否被正确识别ls /dev/video*如果看到video0和video1两个设备节点说明双相机已被系统识别。接下来我们可以测试每个相机是否正常工作# 测试左相机(video0) DISPLAY:0.0 gst-launch-1.0 nvarguscamerasrc sensor-id0 ! video/x-raw(memory:NVMM), width3280, height2464, format(string)NV12, framerate(fraction)20/1 ! nvoverlaysink -e # 测试右相机(video1) DISPLAY:0.0 gst-launch-1.0 nvarguscamerasrc sensor-id1 ! video/x-raw(memory:NVMM), width3280, height2464, format(string)NV12, framerate(fraction)20/1 ! nvoverlaysink -e提示如果看到的图像呈现红色调可能需要安装相机校正文件。执行以下命令下载并安装校正文件wget https://www.waveshare.com/w/upload/e/eb/Camera_overrides.tar.gz tar zxvf Camera_overrides.tar.gz sudo cp camera_overrides.isp /var/nvidia/nvcam/settings/ sudo chmod 664 /var/nvidia/nvcam/settings/camera_overrides.isp sudo chown root:root /var/nvidia/nvcam/settings/camera_overrides.isp1.2 ROS环境安装与配置视觉SLAM系统通常基于ROS(Robot Operating System)框架开发我们需要在Jetson Nano上安装ROS Melodic版本(对应Ubuntu 18.04)。以下是安装步骤设置软件源sudo sh -c echo deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main /etc/apt/sources.list.d/ros-latest.list添加密钥并更新sudo apt install curl curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add - sudo apt update安装完整版ROSsudo apt install ros-melodic-desktop-full初始化ROS环境echo source /opt/ros/melodic/setup.bash ~/.bashrc source ~/.bashrc安装依赖工具sudo apt-get install python-pip sudo pip install -U rosdep sudo rosdep init rosdep update创建工作空间mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src catkin_init_workspace cd ~/catkin_ws catkin_make source ~/catkin_ws/devel/setup.bash2. 相机驱动与标定2.1 安装相机ROS驱动为了让双目相机在ROS中工作我们需要安装专门的CSI相机驱动。推荐使用jetson_nano_csi_cam_ros驱动cd ~/catkin_ws/src git clone https://github.com/rt-net/jetson_nano_csi_cam_ros.git cd ~/catkin_ws catkin_make source ~/catkin_ws/devel/setup.bash驱动安装完成后可以通过以下命令启动相机节点roslaunch jetson_nano_csi_cam jetson_nano_csi_cam.launch2.2 双目相机标定相机标定是SLAM系统获得准确结果的关键步骤。我们需要分别对左右相机进行内参标定然后进行双目外参标定。安装标定工具sudo apt-get install ros-melodic-camera-calibration打印标定棋盘格(A4纸打印即可)并测量每个方格的物理尺寸(通常为2-3cm)左相机标定rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.024 image:/left/image_raw camera:/left右相机标定rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.024 image:/right/image_raw camera:/right双目相机标定rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.024 right:/right/image_raw left:/left/image_raw right_camera:/right left_camera:/left标定过程中需要移动棋盘格到相机视野的不同位置和角度直到CALIBRATE按钮变为绿色方可点击计算标定参数。标定完成后将生成的ost.yaml和ost.txt文件保存备用。3. SLAM算法选择与部署3.1 SLAM算法比较针对Jetson Nano的算力限制我们需要选择计算效率较高的SLAM算法。以下是几种适合的算法对比算法名称类型计算需求特点适用场景ORB-SLAM2特征点法中精度高回环检测优秀中小规模环境RTAB-Map直接法中高支持RGB-D建图效果好三维重建VINS-Fusion视觉惯性中支持IMU融合鲁棒性强动态环境DROID-SLAM深度学习高端到端无需特征提取复杂光照条件对于初次尝试推荐从ORB-SLAM2开始它在精度和性能之间取得了良好平衡。3.2 安装ORB-SLAM2安装依赖sudo apt-get install libglew-dev libpython2.7-dev libeigen3-dev克隆源码cd ~/catkin_ws/src git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2修改编译配置 由于Jetson Nano使用ARM架构需要修改ORB_SLAM2/CMakeLists.txtset(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -stdc11 -Wall -O3 -marcharmv8-a)编译cd ORB_SLAM2 chmod x build.sh ./build.sh下载ORB词袋模型wget https://github.com/raulmur/ORB_SLAM2/blob/master/Vocabulary/ORBvoc.txt.tar.gz tar -xvzf ORBvoc.txt.tar.gz3.3 运行ORB-SLAM2双目版本创建启动文件~/catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/run_stereo.sh#!/bin/bash rosrun ORB_SLAM2 Stereo \ /home/$USER/catkin_ws/src/ORB_SLAM2/Vocabulary/ORBvoc.txt \ /home/$USER/catkin_ws/src/ORB_SLAM2/Examples/Stereo/EuRoC.yaml \ false \ /left/image_raw:/left/image_raw \ /right/image_raw:/right/image_raw修改相机参数文件EuRoC.yaml填入之前标定得到的相机内参和畸变系数赋予执行权限并运行chmod x run_stereo.sh ./run_stereo.sh同时打开另一个终端启动相机节点roslaunch jetson_nano_csi_cam jetson_nano_csi_cam.launch4. 系统优化与性能调优4.1 Jetson Nano性能优化为了在资源有限的Jetson Nano上获得更好的SLAM性能可以进行以下优化启用最大性能模式sudo nvpmodel -m 0 sudo jetson_clocks增加交换空间sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile echo /swapfile none swap sw 0 0 | sudo tee -a /etc/fstab关闭图形界面可选sudo systemctl set-default multi-user.target sudo reboot4.2 ORB-SLAM2参数调优编辑ORB_SLAM2/Examples/Stereo/EuRoC.yaml调整以下关键参数# ORB特征点数量减少可提升速度 ORBextractor.nFeatures: 1000 # 图像金字塔层数减少可提升速度 ORBextractor.nLevels: 5 # 特征点提取尺度因子 ORBextractor.scaleFactor: 1.2 # 关键帧插入频率增大可减少计算量 KeyFrameInsertionFrequency: 2.04.3 可视化与调试使用RViz可以实时查看SLAM系统的运行状态安装RVizsudo apt-get install ros-melodic-rviz创建RViz配置文件orb_slam2.rviz配置以下显示项相机位姿TF特征点云PointCloud2关键帧路径Path地图点MarkerArray启动RVizrosrun rviz rviz -d orb_slam2.rviz5. 实际应用与扩展5.1 地图保存与重利用ORB-SLAM2支持将构建的地图保存到文件并在后续运行时加载# 保存地图 rosservice call /orb_slam2/save_map map_path: /home/$USER/map.bin # 加载地图运行 rosrun ORB_SLAM2 Stereo \ /home/$USER/catkin_ws/src/ORB_SLAM2/Vocabulary/ORBvoc.txt \ /home/$USER/catkin_ws/src/ORB_SLAM2/Examples/Stereo/EuRoC.yaml \ true \ /left/image_raw:/left/image_raw \ /right/image_raw:/right/image_raw \ map_file:/home/$USER/map.bin5.2 与机器人系统集成将SLAM系统与机器人控制系统集成通常需要发布以下ROS话题/tf相机坐标系到世界坐标系的变换/orb_slam2/camera_pose相机当前位姿/orb_slam2/map_points稀疏地图点云可以通过robot_localization包将视觉SLAM位姿与IMU数据进行融合获得更稳定的定位结果。5.3 尝试其他SLAM算法当熟悉了ORB-SLAM2后可以尝试部署其他SLAM算法RTAB-Map更适合三维重建场景sudo apt-get install ros-melodic-rtabmap-ros roslaunch rtabmap_ros rtabmap.launch stereo:trueVINS-Fusion如果相机带有IMU可以获得更鲁棒的结果git clone https://github.com/HKUST-Aerial-Robotics/VINS-Fusion.git在实际项目中我发现IMX219-83双目相机在室内环境中表现良好但在强光直射或极低光照条件下特征提取会变得困难。这种情况下可以考虑添加红外补光灯或使用曝光补偿技术来改善图像质量。

更多文章