前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >掌握Jetson Orin NANO上的视觉SLAM教程

掌握Jetson Orin NANO上的视觉SLAM教程

作者头像
GPUS Lady
发布2023-07-08 15:39:56
7910
发布2023-07-08 15:39:56
举报
文章被收录于专栏:GPUS开发者GPUS开发者

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卡的配置方式如下:

  1. 刷写官方的SD卡镜像
    • Jetson Orin Nano开发套件的JetPack 5.1.1 SD卡镜像
  2. RAM磁盘设置 参考此文档
  3. 卸载一些Debian软件包
代码语言:javascript
复制
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)设置文档进行操作

  • Isaac ROS开发环境设置
  • Isaac ROS开发环境设置 - Jetson
  • Isaac ROS RealSense设置
  • 使用集成IMU的RealSense相机进行视觉SLAM的教程

5.在run_dev.sh中自动设置ROS_DOMAIN_ID

6.注册isaac_ros_container命令别名

7.清除所有敏感的历史记录和配置信息

代码语言:javascript
复制
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卡映像分区自动调整大小

代码语言:javascript
复制
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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-06-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 GPUS开发者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档