当前位置: 首页 > news >正文

用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*

如果看到video0video1两个设备节点,说明双相机已被系统识别。接下来我们可以测试每个相机是否正常工作:

# 测试左相机(video0) DISPLAY=:0.0 gst-launch-1.0 nvarguscamerasrc sensor-id=0 ! 'video/x-raw(memory:NVMM), width=3280, height=2464, format=(string)NV12, framerate=(fraction)20/1' ! nvoverlaysink -e # 测试右相机(video1) DISPLAY=:0.0 gst-launch-1.0 nvarguscamerasrc sensor-id=1 ! 'video/x-raw(memory:NVMM), width=3280, height=2464, 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.isp

1.2 ROS环境安装与配置

视觉SLAM系统通常基于ROS(Robot Operating System)框架开发,我们需要在Jetson Nano上安装ROS Melodic版本(对应Ubuntu 18.04)。以下是安装步骤:

  1. 设置软件源:

    sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
  2. 添加密钥并更新:

    sudo apt install curl curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add - sudo apt update
  3. 安装完整版ROS:

    sudo apt install ros-melodic-desktop-full
  4. 初始化ROS环境:

    echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc source ~/.bashrc
  5. 安装依赖工具:

    sudo apt-get install python-pip sudo pip install -U rosdep sudo rosdep init rosdep update
  6. 创建工作空间:

    mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src catkin_init_workspace cd ~/catkin_ws catkin_make source ~/catkin_ws/devel/setup.bash

2. 相机驱动与标定

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.launch

2.2 双目相机标定

相机标定是SLAM系统获得准确结果的关键步骤。我们需要分别对左右相机进行内参标定,然后进行双目外参标定。

  1. 安装标定工具:

    sudo apt-get install ros-melodic-camera-calibration
  2. 打印标定棋盘格(A4纸打印即可),并测量每个方格的物理尺寸(通常为2-3cm)

  3. 左相机标定:

    rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.024 image:=/left/image_raw camera:=/left
  4. 右相机标定:

    rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.024 image:=/right/image_raw camera:=/right
  5. 双目相机标定:

    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.yamlost.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

  1. 安装依赖:

    sudo apt-get install libglew-dev libpython2.7-dev libeigen3-dev
  2. 克隆源码:

    cd ~/catkin_ws/src git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2
  3. 修改编译配置: 由于Jetson Nano使用ARM架构,需要修改ORB_SLAM2/CMakeLists.txt

    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -O3 -march=armv8-a")
  4. 编译:

    cd ORB_SLAM2 chmod +x build.sh ./build.sh
  5. 下载ORB词袋模型:

    wget https://github.com/raulmur/ORB_SLAM2/blob/master/Vocabulary/ORBvoc.txt.tar.gz tar -xvzf ORBvoc.txt.tar.gz

3.3 运行ORB-SLAM2双目版本

  1. 创建启动文件~/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
  2. 修改相机参数文件EuRoC.yaml,填入之前标定得到的相机内参和畸变系数

  3. 赋予执行权限并运行:

    chmod +x run_stereo.sh ./run_stereo.sh
  4. 同时打开另一个终端,启动相机节点:

    roslaunch jetson_nano_csi_cam jetson_nano_csi_cam.launch

4. 系统优化与性能调优

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 reboot

4.2 ORB-SLAM2参数调优

编辑ORB_SLAM2/Examples/Stereo/EuRoC.yaml,调整以下关键参数:

# ORB特征点数量,减少可提升速度 ORBextractor.nFeatures: 1000 # 图像金字塔层数,减少可提升速度 ORBextractor.nLevels: 5 # 特征点提取尺度因子 ORBextractor.scaleFactor: 1.2 # 关键帧插入频率,增大可减少计算量 KeyFrameInsertionFrequency: 2.0

4.3 可视化与调试

使用RViz可以实时查看SLAM系统的运行状态:

  1. 安装RViz:

    sudo apt-get install ros-melodic-rviz
  2. 创建RViz配置文件orb_slam2.rviz,配置以下显示项:

    • 相机位姿(TF)
    • 特征点云(PointCloud2)
    • 关键帧路径(Path)
    • 地图点(MarkerArray)
  3. 启动RViz:

    rosrun rviz rviz -d orb_slam2.rviz

5. 实际应用与扩展

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.bin

5.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:=true
  • VINS-Fusion:如果相机带有IMU,可以获得更鲁棒的结果

    git clone https://github.com/HKUST-Aerial-Robotics/VINS-Fusion.git

在实际项目中,我发现IMX219-83双目相机在室内环境中表现良好,但在强光直射或极低光照条件下,特征提取会变得困难。这种情况下,可以考虑添加红外补光灯或使用曝光补偿技术来改善图像质量。

http://www.jsqmd.com/news/664188/

相关文章:

  • 深度学习篇---矩阵的魔法
  • 构建可持续迭代的 Agent:反馈闭环怎么做
  • AI 术语通俗词典:矩阵范数
  • 别再只会用QTcpSocket了!聊聊QAbstractSocket那些被忽略的实用信号与状态管理
  • Layui tab选项卡如何动态根据ID值进行程序化切换
  • UWPHook完整指南:轻松将Windows商店游戏整合到Steam平台
  • 别再为PS2手柄时序头疼了!STM32CubeIDE调试PS2通讯的3个实用技巧与避坑指南
  • Python篇---# -*- coding: utf-8 -*- 声明
  • STM32CubeMX配置CRC避坑指南:Modbus/RTU校验从‘跑不通’到‘一次过’
  • 手把手教你用51单片机驱动DS18B20测温(附完整代码与常见时序问题排查)
  • CSS如何实现根据滚动进度触发的过渡效果_配合JS修改类名触发transition
  • 终极指南:5个核心方案彻底优化AEUX插件连接体验
  • 5G NR时频结构解析:从SCS到无线帧的物理层设计
  • 开源项目突然崩溃?SITS2026紧急预警:这6类“幽灵依赖”正在 silently hijack 你的构建流程!
  • Python篇---#!/usr/bin/env python3开头
  • AI 术语通俗词典:范数
  • 深度学习篇---图像标号与实例分割标注
  • “这个PR能合吗?”——SITS2026专家现场演示:实时接入GitHub Actions的AI影响分析沙箱(限免通道将于2024Q3关闭)
  • AI 眼镜“百镜大战”正酣,巨头各施所长,谁能跨越“戴得上”到“离不开”分水岭?
  • 代码推荐已死?不——它正与生成模型在AST语义层深度共生(LLM+RAG+Graph Neural Recommender三体架构首曝)
  • Python文件管理自动化:用glob.iglob()处理海量文件,内存不爆的秘密
  • SQL插入数据时忽略错误行_使用错误日志表暂存失败条目
  • 为什么OpenAI、DeepMind、中科院脑智卓越中心同时缺席2026奇点大会主论坛?(意识伦理红线白皮书内部版泄露)
  • STM32F103C8T6 ADC采样率上不去?手把手教你调时钟树和TIM触发,从857k冲到1M
  • IDEA隐藏无关文件
  • 从“1+1=2”到“1+1=10”:程序员如何用Python模拟哥德巴赫猜想验证
  • STM32F103C8T6 HAL库驱动HC-SR04避坑指南:双通道输入捕获如何避免溢出和负值?
  • Linux系统管理员必备:getent命令在用户管理和网络排错中的实战技巧
  • ESP32开发环境搭建避坑实录:从Gitee镜像、子模块更新到串口权限那些“坑”
  • mysql行锁是如何实现的_mysql底层机制解析