在Jetson Orin Nano上使用实时VSLAM的自主无人机,通过视觉惯性传感和机载地图导航GPS拒绝区域
扫描二维码
随时随地手机看文章
无GPS环境下的自主导航是当今无人驾驶飞行器(UAV)系统面临的最关键挑战之一。从城市峡谷到地下隧道和茂密的森林,许多现实世界的环境使GPS不可靠或完全不可用。为了让无人机在这些条件下安全有效地运行,无论是执行搜救任务、军事侦察还是工业检查,它们都必须依靠机载感知和测绘能力。
该项目提出了一种无人机平台,使用Isaac ROS VSLAM,集成MAVROS和PX4飞行堆栈,由视觉同步定位和测绘(VSLAM)提供动力。通过融合视觉惯性数据和利用Jetson Orin Nano的边缘计算能力,该系统可以实现实时定位和地图构建,使无人机无需GPS即可自主导航。
通过这种实现,无人机能够保持态势感知,动态映射未知环境,实现高精度自主飞行。这项工作不仅证明了在资源受限的平台上部署实时VSLAM的可行性,而且还强调了其在扩大关键的gps拒绝场景中自主系统的覆盖范围和可靠性方面的更广泛影响。
VSLAM无人机在PX4 (v1.15.4)飞行控制器、英特尔D435i相机和Jetson Orin Nano (JetPack 6.2)配套计算机上得到支持。
如果您还没有这样做,请使用入门指南为Jetson Orin Nano安装JetPack 6.2。
杰森·奥林纳米装置
布线
本教程使用飞行控制器的TELEM2端口与同伴计算机通信。
理论上,Jetson Orin Nano应该能够通过GPIO引脚与飞行控制器通信。然而,在测试中,Jetson Orin Nano由于可能存在噪声数据链路而难以与飞行控制器进行通信。我建议使用USB转UART适配器与飞行控制器通信。
将飞行控制器的TELEM2TX/RX引脚连接到USB转UART适配器上的互补RXD/TXD引脚。
确保D435i相机通过USB连接到Jetson Orin Nano。
Jetson Orin Nano还需要一个独立的7-20V电源,最大功耗为36W。电源应连接到Jetson Orin Nano的桶孔或USB-C端口,如下所示:
软件设置
执行以下命令确认已安装正确的Jetpack版本:
确认输出中包含R36 (release), REVISION: 4.3,这表明您正在运行Jetpack 6.2。
接下来,将GPU和CPU时钟设置为max:
然后,执行如下命令将上电模式设置为MAXN SUPER模式。
JetPack预装了Docker。但是,您需要将您的用户添加到docker组中,以便在没有sudo的情况下运行docker命令。执行如下命令:
SSD的设置
Jetson Orin Nano需要一个SSD来存储容器映像和rosbag文件。
按照以下步骤在Jetson Orin Nano上安装SSD:
•关闭Jetson:从Jetson开发工具包中拔下电源和任何外围设备。
•安装SSD:将NVMe SSD卡物理安装到Jetson开发工具包的载体板上。确保连接器安装到位,并拧紧螺钉。
•重新连接外设:重新连接之前未插入的外设。
•启动Jetson:重新连接电源以打开Jetson开发工具包。
一旦系统启动,通过运行以下命令验证您的Jetson在PCI总线上识别了一个新的内存控制器:
你应该看到类似下面的一行:
要格式化SSD设备,首先要查看SSD设备名称。执行如下命令:
识别与您的SSD对应的新设备,通常为nvme0n1。
接下来,用ext4文件系统格式化SSD。将nvme0n1替换为SSD的实际设备名称:
挂载到目录/ SSD下:
为了确保SSD在引导时自动挂载,需要在/etc/fstab文件中增加一条记录。
首先,获取SSD的UUID:
找到与您的SSD对应的行,并记录UUID。
接下来,将SSD添加到/etc/fstab文件中,替换为SSD的实际UUID:
最后,修改/ssd目录的归属。
挂载完成后,将Docker数据目录迁移到该SSD上。
首先停止Docker服务:
接下来,将Docker data目录移动到SSD上:
修改Docker服务配置,使其指向Docker数据目录的新位置:
重命名旧的Docker数据目录:
最后,重启Docker服务:
Isaac ROS设置
VSLAM无人机采用Isaac ROS框架进行VSLAM。该框架构建在ROS2之上,并提供了一组用于构建机器人应用程序的工具和库。
首先安装Git-LFS和其他依赖项:
然后,为Isaac ROS创建一个工作空间:
接下来,克隆Isaac ROS存储库:
为RealSense摄像头配置Isaac ROS Docker镜像:
生成CDI规格的GPU:
克隆VSLAM-UAV存储库并下载所需的资产:
确保您的RealSense相机连接到Jetson Orin,并运行以下命令来构建Isaac ROS docker映像:
需要使用RealSense固件版本5.13.0.50。任何其他版本可能无法与Isaac ROS Docker映像一起工作。
一旦映像构建并运行,您可以通过运行以下命令来测试RealSense相机:
这将打开RealSense查看器并显示摄像机馈送。
如果你的RealSense摄像头没有被检测到,你可能需要在一个单独的终端上运行以下命令来更新udev规则:
摄像头IMU设置
IMU校准(可选)
为了最好地利用VSLAM,必须将IMU数据合并到VSLAM管道中。您可以使用英特尔D435i相机的内置IMU。IMU从工厂预校准,但建议校准IMU,以确保准确的测量。
要校准IMU,您可以使用随Librealsense附带的IMU校准工具。首先,你需要构建一个真正意义上的docker镜像:
注意:安装librealesnes git到工作空间
这将构建映像并在容器中运行它。容器运行后,您可以运行IMU校准工具:
只需按照命令行说明校准IMU。以下是校准过程的图像,以帮助指导您完成该过程。
位置1:直立朝外
位置2:USB线朝上朝外
位置3:面朝外倒立
位置4:USB线朝下
位置5:观看方向朝下
位置6:观看方向朝上
确保将校准结果写入相机的eeprom。
IMU参数估计
校准内部IMU后,您需要估计IMU的参数。IMU的参数是加速度计和陀螺仪的噪声和偏置不稳定性。您可以通过从IMU收集数据并使用Allan Variance来估计这些参数。
首先,您需要从IMU记录一段较长时间(至少3小时)的静态数据。打开Isaac ROS Realsense Docker容器,运行Realsense节点,从摄像头开始流式传输数据:
这将打开真正意义上的ros节点。接下来,打开一个新的终端并连接到集装箱上:
在附带的容器中,执行如下命令记录IMU数据:
至少3小时后,用CTRL+C停止录制。
进入运行realsense-node.sh脚本的终端,使用“CTRL+C”停止realsense ros节点。
有了我们的IMU数据,您现在可以继续估计IMU参数。这可以在ROS2框架中通过allan_ros2轻松完成。
首先,您需要在桌面计算机上克隆VSLAM-UAV存储库:
接下来,需要将IMU数据复制到桌面计算机。
首先将IMU rosbag文件从docker容器复制到Jetson Orin Nano的主目录。在Jetson Orin Nano的新终端中,运行以下命令:
在桌面计算机上打开一个新的终端,并运行以下命令:
您在jetson上的用户名和IP地址在哪里。
接下来,您需要在桌面计算机上构建分析docker映像:
这将构建映像并在容器中运行它。容器运行之后,必须修改配置以指向IMU rosbag文件。执行如下命令:
接下来,运行allan_node计算原始偏差值:
在得到DONE消息后,通过CTRL+C退出并运行analysis.py脚本来计算IMU参数:
这将输出IMU参数并将其保存到IMU中。yaml文件。
现在,我们可以在VSLAM管道中使用这些参数。在Jetson Orin Nano上的新终端中,修改isaac_ros_vslam_realsense.py脚本以包含IMU参数。在文本编辑器中打开脚本:
使用imu中的值更新gyro_noise_density、gyro_random_walk、accel_noise_density和accel_random_walk参数。您之前生成的Yaml文件。
飞行控制器设置
PX4参数
假设您已经安装了最新的PX4固件(v1.15.4),在QGroundControl中更改以下参数,使同伴计算机能够通过TELEM2端口与飞行控制器通信:
此外,为了在没有GPS的情况下使用视觉姿态估计,您必须设置以下PX4参数:
测试连接
MAVLink是用于PX4的默认且稳定的通信接口。
你可以测试Jetson Orin Nano和飞行控制器通过MAVLink GCS (MAVProxy)相互通信。
在Jetson Orin Nano上运行以下命令,将用户添加到dialout组:
然后,重新启动Jetson Orin Nano以应用更改。
您可以通过发出以下命令来检查串口是否可用:
该命令的结果应该包括RX/TX连接/dev/ ttyusb0
接下来,安装MAVProxy:
运行MAVProxy,设置端口连接/dev/ttyUSB0,波特率匹配飞行控制器(921600):
Jetson Orin Nano上的MAVProxy现在应该通过其RX/TX引脚连接到PX4飞行控制器。CTRL+C退出。
飞行演示
这个演示展示了Isaac ROS VSLAM节点的作用,允许四轴飞行器使用视觉SLAM进行姿态估计,自主飞行指定模式。四轴飞行器将利用MAVROSPY节点来接收姿态估计和控制飞行模式。
要运行飞行演示,首先启动Isaac ROS docker容器:
在容器内部,导航到vslam目录:
接下来,启动Issac ROS VSLAM节点:
在一个新的终端中,启动mavrospy docker容器:
在mavrospy容器中,启动mavrospy节点:
如果您希望确保正确发布VSLAM姿态估计,您可以在新终端中运行以下命令:
您还可以检查飞行控制器是正确地解释姿态估计通过测试飞行的位置飞行模式。
最后,将四轴飞行器切换到OFFBOARD模式并观看它飞行!
您可以通过pattern参数指定飞行模式。如果未指定,则默认为正方形。
可用的模式:square、square_head、circle、circle_head、figure8、figure8_head、spiral和spiral_head。其中_head将指定在运动方向上要面对的无人机。
可视化
如果你想在RViz中可视化VSLAM输出,你可以在一个新的终端中运行以下命令:
由于性能问题,通常不建议在远程桌面上运行RViz。即使使用X11转发也可能很慢,这取决于您的网络连接。
相反,可以考虑使用ros2 bag record -a命令记录演示,然后可视化记录的数据。
本文编译自hackster.io