NVIDIA在其GitHub代码库上提供了Isaac ROS Visual Visual SLAM,这是一款领先的VSLAM(视觉同时定位与建图)ROS 2软件包。
它接收立体相机图像(可选带有IMU数据),并生成里程计输出,同时提供其他可视化和诊断数据。
http://mpvideo.qpic.cn/0b2e24aeeaaavyaga4uiprsfbv6dillqaqqa.f10002.mp4?
什么是Isaac ROS Visual SLAM?
这个软件包提供了一种高性能、一流的ROS 2 VSLAM(视觉同时定位与建图)软件包,用于机器人的实时导航。通过使用带有惯性测量单元(IMU)的立体相机来估计里程计,这个软件包利用GPU加速,实现了机器人应用中的实时、低延迟结果。VSLAM为移动机器人(地面机器人)提供了额外的里程计来源,并且可以成为无人机的主要里程计来源。
VSLAM提供了一种通过视觉来估计机器人相对起始位置的方法,即视觉里程计(VO)。在GPS不可用(如室内环境)或间断(如城市中有建筑物遮挡GPS卫星信号)的环境中,这种方法尤其有用。VSLAM使用左右立体相机帧和IMU作为输入,通过在左右图像中找到匹配的关键点来估计距离。利用两个连续的立体图像对,VSLAM可以跟踪关键点的三维运动,从而估计相机的三维运动,然后将其用于计算里程计,作为导航的输出。与经典的VSLAM方法相比,这种方法利用GPU加速实时查找和匹配更多的关键点,并进行微调以最小化整体重投影误差。
关键点依赖于左右相机图像中的独特特征,这些特征在大小、方向、透视、光照和图像噪声等方面具有重复可检测性。在某些情况下,关键点的数量可能有限或完全不存在;例如,如果相机视野只朝着一个大块单色墙壁,可能无法检测到任何关键点。如果关键点不足,该模块使用IMU感知到的运动来提供运动的传感器,通过测量运动可以估计里程计。这种方法被称为VIO(视觉惯性里程计),在场景中缺乏独特特征以进行视觉运动跟踪时,它可以改善估计性能。
SLAM(同时定位与建图)是基于VIO构建的,它创建了一个关键点地图,用于确定是否曾经看到过某个区域。当VSLAM确定一个区域以前曾被看到时,它会减小地图估计中的不确定性,这被称为循环闭合。VSLAM使用统计方法来进行循环闭合,具有更高的计算效率,提供实时解决方案,改善循闭合的收敛性。
在导航中,有多种方法可以估计里程计。然而,这些方法都不是完美的,因为传感器提供的观测存在系统性缺陷,比如黑色表面吸收LIDAR返回的数据、车轮在地面上打滑导致轮子里程计不准确,或者场景中缺乏独特特征限制了相机图像中的关键点。一种实用的方法是使用多个传感器和不同的方法来跟踪里程计,这样可以通过一个方法的系统性问题来进行补偿。通过使用三个独立的里程计估计,可以检测到单个方法的失败,并将多个方法融合为单个更高质量的结果。VSLAM提供了一种基于视觉和IMU的估计里程计的解决方案,与常见的使用LIDAR和轮子里程计的做法不同。甚至可以通过在不同方向上放置多个立体相机来提高多样性,从而提供多个并行的视觉里程计估计。
使用这个高性能的VSLAM软件包,在机器人的实时导航中,你可以实现基于视觉的定位和建图,准确估计机器人的位置,并在缺乏GPS信号的环境中实现导航。无论是地面机器人还是无人机,VSLAM都为你提供了强大的视觉里程计解决方案。通过GPU加速,它能够提供实时的、低延迟的结果,帮助你的机器人在复杂环境中更准确地定位和导航。无论是室内环境、城市中的建筑群还是其他缺乏可靠GPS信号的场景,这个VSLAM软件包将成为你的得力助手,帮助你的机器人实现精确的定位和高效的导航。
注意:
该软件包经过设计和测试,与在Jetson或搭载NVIDIA GPU的x86_64系统上运行的ROS 2 Humble兼容。
性能:
下表总结了使用该软件包的示例图表的各平台性能统计数据,并包含了完整基准测试输出的链接。这些基准配置来自Isaac ROS基准测试集合,基于ros2_benchmark框架。
在Jetson Orin NANO上的安装教程:
SD卡的配置方式如下:
udo apt purge firefox thunderbird libreoffice-common
sudo apt purge libcudnn8-dev libcublas-dev-11-4 libcufft-dev-11-4 libcusparse-dev-11-4 libcusolver-dev-11-4 libnpp-dev-11-4 libcurand-dev-11-4
4. 按照Isaac ROS Visual SLAM (DP3)设置文档进行操作
5.在run_dev.sh中自动设置ROS_DOMAIN_ID
6.注册isaac_ros_container命令别名
7.清除所有敏感的历史记录和配置信息
docker logout
git config --global --unset user.name
git config --global --unset user.email
git config --global --edit
sudo rm /etc/NetworkManager/system-connections/*
rm ~/.bash_history
8. 准备SD卡映像分区自动调整大小
sudo touch /etc/nv/nvautoconfig
9.关闭Jetson Orin Nano开发套件,取出SD卡,并将其插入PC的SD卡插槽中
10. 在PC上运行GParted来调整APP分区大小
11.从jetcard中运行host_make_expandable_image.sh,使用GParted中记录的"Last sector"号码
完整资料(含镜像下载),请访问:
https://nvidia-ai-iot.github.io/jetson_isaac_ros_visual_slam_tutorial/index.html