# 视觉惯性测距(VIO)
视觉惯性测距 (VIO) 是一个 计算机视觉 用于估算三轴 姿势 (局部位置和方向)和 速度 行驶中的载具相对于 当地 起始位置。它通常用于在没有全球定位系统或全球定位系统不可靠的情况下(如在室内或在桥下飞行时)为载具导航。
VIO 使用 视觉测距 (打开新窗口) 估算载具 姿势 根据相机图像,结合载具 IMU 的惯性测量(以纠正因载具快速移动导致图像捕捉不佳而产生的误差)。
本主题介绍如何设置 PX4 和配套计算机,以便使用 支持 VIO 设置。
TIP
Auterion 产品视频 (打开新窗口) 上面显示的是使用 支持的设置.
备注
这种(受支持的)解决方案使用 ROS 将 VIO 信息路由到 PX4。PX4 本身并不关心信息的来源,只要这些信息是通过适当的 MAVLink 接口.
# 支持的设置
支持的设置使用 T265 英特尔 Realsense 跟踪摄像机 和 ROS(在配套计算机上运行)向 PX4 提供里程测量信息。Auterion VIO 桥接器 ROS 节点 (打开新窗口) 提供了连接该(特定)相机和 ROS 的桥梁。
# 摄像机安装
将相机连接到配套电脑并安装到框架上:
- 连接 T265 英特尔 Realsense 跟踪摄像机 使用随附的电缆。
- 尽可能将镜头朝下安装摄像机(默认)。
- 相机对振动非常敏感;建议采用软安装(例如使用隔振泡沫)。
# ROS/VIO 设置
设置网桥、ROS 和 PX4:
在配套计算机上安装和配置 马弗罗斯.
获取 Auterion VIO 桥接器 ROS 节点 (打开新窗口):
- 在你的 catkin 工作区中克隆该版本库。
cd ~/catkin_ws/src git clone https://github.com/Auterion/VIO.git
- 构建软件包:
cd ~/catkin_ws/src catkin build px4_realsense_bridge
- 在你的 catkin 工作区中克隆该版本库。
如有需要,请配置摄像头方向:
- 如果摄像机安装时镜头朝下(默认情况),则无需对 VIO 桥进行任何配置。
- 对于任何其他方向,请修改 bridge_mavros.launch (打开新窗口) 在下面的章节中:
<;网站 包=";tf"; 类型=";静态转换发布者"; 名字=";tf_baseLink_cameraPose"; 参数=";0 0 0 0 1.5708 0 base_link camera_pose_frame 1000";/>;
这是一个静态变换,用于连接摄像机 ROS 帧
相机姿态框
到马夫罗斯无人机框架基本链接
.- 前三个
参数
具体说明 译文 x,y,z 从飞行控制器中心到摄像机的距离,单位为米。例如,如果摄像头在控制器前方 10 厘米、上方 4 厘米处,则前三个数字为:[0.1, 0, 0.04,...] 。 - 下三个
参数
指定以弧度为单位的旋转(偏航、俯仰、滚动)。因此[... 0, 1.5708, 0]
是指俯仰 90 度(面向地面)。面向正前方则是[...... 0 0 0]。
按照说明操作 低于 用于调整 PX4 EKF2 估计器。
通过调用
玫瑰发射
使用适当的启动文件:cd ~/catkin_ws/src roslaunch px4_realsense_bridge bridge_mavros.launch
启动文件选项有
- bridge_mavros.launch (打开新窗口):大多数情况下在载具上使用(启动桥梁和 MAVROS)。
- bridge.launch (打开新窗口):在其他组件负责启动 MAVROS 时使用(仅启动桥接器)
- bridge_mavros_sitl.launch (打开新窗口)用于模拟(启动桥、MAVROS、SITL)
验证与飞行控制器的连接。
TIP
您可以使用 QGroundControl MAVLink 检查员 (打开新窗口) 以验证您正在获取
奥数
或视觉位置估计
消息(或检查心跳
组件 id 197 (mav_comp_id_visual_inertial_odometry
)).验证 VIO 设置是否正确 在第一次飞行之前!
# PX4 调校
使用 EKF2 时,必须设置以下参数才能使用外部位置信息。
参数 | 外部位置估计设置 |
---|---|
EKF2_AID_MASK | 设置 视觉位置融合, 视觉速度融合, 视觉偏航融合 和 外视旋转 根据您所需的融合模式。 |
EKF2_HGT_MODE | 设置为 愿景 将视觉作为高度估计的主要来源。 |
EKF2_EV_DELAY | 设置为测量时间戳与实际捕捉时间之差。更多信息,请参阅 低于. |
EKF2_EV_POS_X, EKF2_EV_POS_Y, EKF2_EV_POS_Z | 设置视觉传感器相对于车身框架的位置。 |
这些可以在 QGroundControl >; 载具设置> 参数> EKF2 (切记重新启动飞行控制器,以使参数更改生效)。
有关更多详细信息,请参阅: ECL/EKF 概览&;调整>;外部视觉系统.
# 调整 EKF2_EV_DELAY
EKF2_EV_DELAY 是 视觉位置估计器相对于 IMU 测量的延迟.换句话说,它是视觉系统时间戳与 IMU 时钟(EKF2 的基准时钟)记录的实际捕获时间之间的差值。
从技术上讲,如果 MoCap 和(例如)ROS 计算机之间有正确的时间戳(不只是到达时间)和时间同步(如 NTP),则可以将其设置为 0。在现实中,这可能需要一些经验性的调整,因为通信链中的延迟是非常具体的。很少有系统的设置是完全同步的!
通过检查 IMU 速率与电动汽车速率之间的偏移,可以从日志中大致估算出延迟时间:
备注
外部数据与机载估计值(如上所述)的对比图可以通过以下方法生成 飞行图 或类似的飞行分析工具。
可以通过改变参数进一步调整该值,以找到在动态机动过程中 EKF 创新最小的值。
# 检查/核实 VIO 估值
执行以下检查以验证 VIO 是否正常工作 之前 您的第一次飞行
- 设置 PX4 参数
MAV_ODOM_LP
为 1。然后,PX4 会将接收到的外部姿态以 MAVLink 格式回流 奥数 (打开新窗口) 信息。您可以使用 QGroundControl MAVLink 检查员 (打开新窗口) - 使载具偏转,直至
奥数
信息非常接近单位四元数(w=1,x=y=z=0)。- 此时,身体框架与外部姿势系统的参考框架对齐。
- 如果您无法在载具不滚动或俯仰的情况下获得接近单位四元数的四元数,那么您的坐标系可能仍然存在俯仰或滚动偏移。如果是这种情况,请不要继续,再次检查您的坐标框架。
- 对齐后,你可以将载具从地面拾起,这时你会看到位置的 Z 坐标在减小。向前移动载具,位置的 x 坐标会增加。向右移动载具则会增加 y 坐标。
- 检查报文中的线性速度是否用 FRD 体框架参照系。
- 设置 PX4 参数
MAV_ODOM_LP
回到 0。奥数
回信。
如果这些步骤保持一致,您就可以尝试第一次飞行了:
将载具放在地面上,开始流水作业
奥数
反馈(同上)。放下油门杆,启动发动机。此时,将左摇杆置于最低位置,切换到位置控制。此时绿灯亮起。绿灯表示位置反馈可用,位置控制已激活。
将油门杆置于中间位置(死区),使载具保持其高度。抬高油门杆会增加参考高度,而降低数值则会降低参考高度。同样,另一个摇杆也会在地面上改变位置。
增大油门杆的数值,载具就会起飞,然后马上放回中间位置。
确认载具可以保持其位置。
# 故障排除
首先确保 MAVROS 能够成功连接到飞行控制器。
如果连接正常,常见的问题/解决方案有
问题 无人机飞行时会出现漂移或偏航,但当我把螺旋桨卸下随身携带时就不会出现这种情况。
- 如果使用 T265 尝试软安装(这种相机对高频振动非常敏感)。
问题 当启用 VIO 时,我就会在马桶上打滚。
- 确保相机的方向与启动文件中的变换一致。使用 QGroundControl MAVLink 检查员 (打开新窗口) 以验证
奥数
来自 MAVROS 的信息与 FRD 坐标系对齐。
- 确保相机的方向与启动文件中的变换一致。使用 QGroundControl MAVLink 检查员 (打开新窗口) 以验证
问题 我想使用视觉位置进行循环关闭,还想运行 GPS。
- 这确实很难,因为当它们出现分歧时,EKF 就会混淆。从测试结果来看,只使用视觉速度更可靠(如果您想出了让这种配置更可靠的方法,请告诉我们)。
# 开发商信息
有兴趣扩展该实现(或编写不依赖于 ROS 的其他实现)的开发人员请参阅 使用视觉或运动捕捉系统进行位置估算.
本主题还介绍了如何配置 VIO 以与 LPE 估算器(已废弃)配合使用。