文章目录
前言
5 配置ArduPilot
6 地面测试:飞行前验证
7 飞行测试
8 实验
9 数据闪存记录
前言
本文介绍如何将英特尔 Realsense 深度摄像头(Intel Realsense Depth Camera)与 ArduPilot 配合使用,以实现避障(obstacle avoidance)。该方法使用在配套计算机上运行的 Python 脚本(非 ROS)向 ArduPilot 发送距离信息。
5 配置ArduPilot
用地面站(如 Mission Planner)连接自动驾驶仪,检查是否设置了以下参数:
- SERIAL2_PROTOCOL = 2(MAVLink2)。请注意,这是假定配套计算机连接到 AutoPilot "Telem2"端口;
- SERIAL2_BAUD = 921 (921600 baud)。
启用你自己选择的任何避障(obstacle avoidance)行为。本 wiki 将以简单的避障行为(Simple avoidance behavior)(停止/滑行)为例:
下面是第一个接近传感器的设置示例:
- PRX1_TYPE = 2: for MAVLink;
- AVOID_ENABLE = 7:"全部",使用所有障碍物信息源,包括"接近"传感器。
Loiter 和 AltHold 模式的具体示例:
- AVOID_MARGIN =1.5:飞行器在距离障碍物多少米处会尝试停车或沿障碍物滑行;
- AVOID_BEHAVE = 1:飞行器应在障碍物前停止 (1),还是绕过障碍物滑行 (0);
- AVOID_DIST_MAX = 1.5:在 AltHold 状态下,飞行器开始偏离障碍物的距离;
- AVOID_ANGLE_MAX = 3000:飞行器尽量偏离障碍物的程度。
可选项:你可以指定一个 RC 开关来启用"避让",而不是默认的始终打开。在 Mission Planner 中设置 RC7 以打开"避让"的示例:
修改参数后,重新启动自动驾驶仪。
6 地面测试:飞行前验证
要验证 APSync 映像是否正常工作以及一切配置是否正确,请确保 ArduPilot 接收到 OBSTACLE_DISTANCE 消息,在 Mission Planner 上:按下 Ctrl+F 并单击 "Mavlink Inspector"(Mavlink 检查器),你应该可以看到输入的数据:
- 如果遥测连接稳定,OBSTACLE_DISTANCE 信息的数据频率应接近 15hz。如果不是,请使用 USB 电缆连接 AP 和 GCS,确保 AP 按预期接收到避障数据后再继续操作。
在 Mission Planner 中,打开 Proximity view (Ctrl-F > Proximity):
- 将飞行器/深度摄像头置于一些障碍物前方,检查距离最近的障碍物的距离是否准确,并显示在"接近"视图中;
- 近距离视图会将弧度在 45 度以内的所有距离集中在一起(飞行器周围共有 8 个象限),因此在任何时候,近距离窗口上最多只能显示 3 个最近的障碍物(因为摄像机的视场角小于 90 度)。
7 飞行测试
第一次飞行:
- 测试过程: 起飞 -> AltHold / Loiter -> 向障碍物移动;
- 只能轻推飞行器并观察其反应;
- 预期行为:飞行器应在距离障碍物一定距离(根据飞行模式由 AVOID_MARGIN/AVOID_DIST_MAX 设置)时停止/滑行(由 AVOID_BEHAVE 设置)。
如果一切正常,下一步就是测试特定传感器/飞行器/环境的安全系数:
- 由于摄像头的视场角和最小/最大深度范围有限,因此必须测试其极限值,以确保飞行器在实际环境中的安全;
- 飞行员应该对这些余量有一个粗略的估计,并在飞行任务计划中加入一些开销。
8 实验
首次手动测试:确认存在障碍物时的预期行为,以及飞行器和摄像机的视场角和安全裕度。飞行在 Loiter 模式下进行:
自主飞行测试:下面的视频短片总结了实际实验中的主要步骤以及工作系统应该如何运行。在此示例中,飞行器将尝试按照方形模式飞行,但会在任何障碍物前停下。
9 数据闪存记录
深度相机的相关信息是 PRX.CAn 和 PRX.CDist,分别代表最近物体的角度和距离。
你还可以查看每个象限(D0、D45 和 D315,即 0 度、45 度和 315 度)的距离数据。请注意,CAn 的数值范围是 360 度,而 CDist 和其他 Dangle 的数值范围只有几米,因此你可能需要分别查看。