# 视觉惯性测距(VIO)
视觉惯性测距 (VIO) 是一个 计算机视觉 用于估算三轴 姿势 (局部位置和方向)和 速度 行驶中的载具相对于 当地 起始位置。它通常用于在没有全球定位系统或全球定位系统不可靠的情况下(如在室内或在桥下飞行时)为载具导航。
VIO 使用 视觉测距 (打开新窗口) 估算载具 姿势 根据相机图像,结合载具 IMU 的惯性测量(以纠正因载具快速移动导致图像捕捉不佳而产生的误差)。
本主题介绍如何为 VIO 设置配置 PX4 和配套计算机。
备注
建议的设置使用 ROS 将 VIO 信息路由到 PX4。不过,PX4 本身并不关心信息的来源,只要这些信息是通过适当的 MAVLink 接口.
# 建议设置
下面的章节介绍了 VIO 的硬件和软件设置,以说明如何将 VIO 系统与 PX4 连接起来。它使用一台现成的跟踪相机和一台运行 ROS 的配套计算机。ROS 用于从相机读取里程测量信息,并将其提供给 PX4。
一个合适的跟踪摄像机例子是 英特尔® RealSense™ 追踪摄像机 T265.
# 摄像机安装
将相机连接到配套电脑并安装到框架上:
- 尽可能将镜头朝下安装摄像机(默认)。
- 相机通常对振动非常敏感;建议采用软安装(例如使用隔振泡沫)。
# 同伴设置
设置 ROS 和 PX4:
在配套计算机上安装和配置 马弗罗斯.
实施并运行 ROS 节点,从相机读取数据,并使用 MAVROS 发布 VIO 测速结果。
- 参见 VIO ROS 节点 有关该节点要求的详细信息,请参阅下面的章节。
按照说明操作 低于 用于调整 PX4 EKF2 估计器。
验证与飞行控制器的连接。
TIP
您可以使用 QGroundControl MAVLink 检查员 (打开新窗口) 以验证您正在获取
奥数
或视觉位置估计
消息(或检查心跳
组件 id 197 (mav_comp_id_visual_inertial_odometry
)).验证 VIO 设置是否正确 在第一次飞行之前!
# ROS VIO 节点
在这种建议的设置中,ROS 节点需要
- 与所选相机或传感器硬件的接口、
- 生成包含位置估计值的测距信息,并通过 MAVROS 发送给 PX4,以及
- 发布信息,显示 VIO 系统状态。
ROS 节点的实现将针对所使用的相机,需要开发使用适合相机的接口和驱动程序。
里程测量信息的类型应为 导航_msgs/几何
(打开新窗口) 并发表到专题 /mavros/odometry/out
.
系统状态信息类型 mavros_msgs/CompanionProcessStatus
(打开新窗口) 应按主题发表 /mavros/companion_process/status
.这些应将组件标识为 mav_comp_id_visual_inertial_odometry
(197) 并指出 国
系统的状态。建议的状态值为
mav_state_active
当 VIO 系统按预期运行时、mav_state_critical
当 VIO 系统正常运行但可信度较低时,以及飞行终止状态
当系统出现故障或估计置信度低到无法接受的程度时。
# PX4 调校
使用 EKF2 时,必须设置以下参数才能使用外部位置信息。
参数 | 外部位置估计设置 |
---|---|
EKF2_EV_CTRL | 设置 水平位置融合, 垂直视觉融合, 速度融合和 偏航融合 根据您所需的融合模式。 |
EKF2_HGT_REF | 设置为 愿景 将视觉作为高度估计的参考传感器。 |
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 估算器(已废弃)配合使用。