高通导航器软件开发包使用指南(16)
10 基于视觉的应用
本章进一步详细介绍了与 Qualcomm Navigator 集成的基于视觉的应用程序。
10.1 光流(DFT)
要进入依赖于光流的任何模式,snav_dft_app 必须在应用程序处理器上运行。 此应用程序从相机驱动程序获取帧数据,处理帧上的光流,并将结果数据传递给飞行控制器的 Qualcomm Navigator。
运行以下命令将 Qualcomm Navigator 配置为使用 Optic Flow:
$ sudo /etc/snav/configure_dft.sh
Qualcomm Navigator 在向下摄像头上启用 Optic Flow 的情况下重新启动。
查看所有可用选项:
$ sudo /etc/snav/configure_dft.sh -h
警告:光流 (DFT) 仅支持朝下的相机。 不要尝试在相机倾斜 45 度的情况下运行此过程。
注意:光流 (DFT) 仅支持具有工作声纳的飞行器。
默认启用相机参数调整,因此相机曝光和增益会在运行时根据环境进行调整。 因此,飞行器可以在不同的照明场景下以光流飞行,从昏暗的室内照明到明亮的室外阳光。 当飞越纹理非常少的表面时,性能可能会下降。
10.2 视觉惯性里程计(VIO)
要进入 VIO 模式,snav_dft_vio_app 必须在应用程序处理器上运行。 此应用程序从相机驱动程序获取帧数据,处理帧上的 VIO 数据,并将结果数据传递给飞控的 Qualcomm Navigator。
运行以下命令将 Qualcomm Navigator 配置为使用 VIO:
$ sudo /etc/snav/configure_vio.sh
Qualcomm Navigator 在向下倾斜 45 度的摄像头上启用 VIO 后重新启动。
查看所有可用选项:
$ sudo /etc/snav/configure_vio.sh -h
通过运行以下命令,可以在严格朝下的相机上使用 VIO:
$ sudo /etc/snav/configure_vio.sh -c downward
注意:使用倾斜 45 度的向下摄像头时,VIO 性能会提高。
默认启用相机参数调整,因此相机曝光和增益会在运行时根据环境进行调整。 因此,从昏暗的室内照明到明亮的室外阳光,飞行器可以在不同的照明场景下与 VIO 一起飞行。 当飞越纹理非常少的表面时,性能可能会下降。
警告:在尝试以 VIO 模式飞行之前,请确保通过 /etc/snav/mount.snav_dft_vio_app.xml 中的参数准确捕获相机和 IMU 之间的平移和旋转。 该文件是为 VIO 配置系统时设置的符号链接。
注意:VIO 是在为 8x96 板安装 Qualcomm Navigator 时自动配置的。
10.3 视觉避障(VOA)
要使用 VOA,snav_voa_app 必须在应用程序处理器上运行。 此外,此应用程序依赖于来自 VIO 的有效姿态估计,因此 snav_dft_vio_app 也必须在应用程序处理器上运行。 VOA 应用程序从立体相机接收图像并计算深度估计。 生成的深度图和来自 VIO 的姿势用于确定在障碍物附近导航时的安全速度。
运行以下命令将 Qualcomm Navigator 配置为使用 VOA:
$ sudo /etc/snav/configure_voa.sh
Qualcomm Navigator 重新启动,并在倾斜 45 度的向下摄像头上启用 VOA 处理立体图像和 VIO。
查看所有可用选项:
$ sudo /etc/snav/configure_voa.sh -h
通过运行以下命令,可以在严格朝下的相机上使用 VOA 和 VIO:
$ sudo /etc/snav/configure_voa.sh -c downward
注意:使用倾斜 45 度的向下摄像头时,VIO 性能会提高。
警告:VOA 需要准确的立体声校准。 在未先执行充分的立体相机校准之前,请勿尝试运行此应用程序。 校准后,使用校准参数编辑 /etc/snav/app_params.snav_voa_app.xml 和/或 /etc/snav/calibration.stereo.xml。
10.4 视觉相关应用的参数
Qualcomm Navigator有多个视觉相关的应用,包括snav_dft_app、snav_dft_vio_app、snav_voa_app。 这些应用程序具有相应的参数文件,用于设置与每个应用程序关联的参数,位于 /etc/snav/app_params.<app_name>.xml 中。
10.4.1 一般应用参数
- enable_dft 启用 (1) 或禁用 (0) DFT
- enable_vio 启用 (1) 或禁用 (0) VIO
- enable_srw_writer 启用 (1) 或禁用 (0) 记录图像序列。 请参阅第 3.1.2 节。
10.4.2 DFT 特有的参数
- mv_dft_max_nr – 强制作为光流输入的特征的最大数量。 更多功能提供更高的稳定性,但运行速度更慢。
- mv_dft_min_nr – 强制作为光流输入的最小特征数。 较少的特征会导致纹理较差区域的稳定性降低。
10.4.3 特定于 VIO 的参数
这些参数将在稍后记录。
10.4.4 VOA 特有的参数
这些参数将在稍后记录。
10.4.5 相机配置参数
以下参数可在相应的相机文件 /etc/snav/camera.<camera_name>.xml 中找到。
- pixel_width – 用于配置的相机分辨率宽度。
- pixel_height – 用于配置的相机分辨率高度。
- memory_stride – 用于配置的相机图像步幅。
- fps – 每秒帧数。
- default_exposure – 归一化到 [0.0, 1.0] 的范围。
- default_gain – 归一化到 [0.0, 1.0] 的范围。
以下参数与自动相机参数调整(CPA)有关。 - enable_cpa – 启用 (1) 或禁用 (0) CPA 过程。
- mv_cpa_type – Legacy (0) or cost-based (1).
- mv_cpa_filter_size – 用于曝光和增益变化的内部过滤器尺寸(过滤器尺寸越大,收敛越慢(0 = 无过滤))。
- mv_cpa_exposure_cost – 增加曝光的代价。
- mv_cpa_gain_cost – 增加增益的代价。
增益代价和曝光代价的总和影响亮度代价的加权程度。 MV SDK 为基于代价的方法定义了如下指南:
- 如果增益代价加上曝光代价大于 1.0,则最小化增益和曝光值的权重高于亮度目标。
- 如果总和小于1.0,则亮度目标的权重更高。
mv_cpa_gain_cost 和 mv_cpa_exposure_cost 的比率是增益值和曝光值之间的比率。
10.4.6 相机标定参数
这些参数位于相应的校准文件 /etc/snav/calibration.<camera_name>.xml 中。
- calib_pixel_width – 用于校准的相机分辨率宽度。
- calib_pixel_height – 用于校准的相机分辨率高度。
- calib_memory_stride – 用于校准的相机图像步幅。
- principal_point_x – X 轴上的相机主点偏移。
- principal_point_y – Y 轴上的相机主点偏移。
- focal_length_x – X 轴上的相机焦距(以像素为单位)。
- focal_length_y – Y 轴上的相机焦距(以像素为单位)。
- distortion_model – 无 (0)、多项式模型(4、5、8)或鱼眼模型 (10)。
- distortion_<0-7> – 失真系数。