文章目录
前言
7.6.1 配置
7.6.2 工作原理
7.6.3 局限性
前言
本页介绍了什么是"任务继续时后退"功能以及如何使用该功能。
!Note
从 4.1 版起,Plane、Copter 和 Rover 均可使用此功能。
在某些应用或运行区域,为了消除冲突,通常会中断任务,方法是切换到另一种模式,并使飞行器偏离计划的任务路径。当准备继续执行任务时,飞行器的正常行为是直接飞行/驾驶到任务中加载的最后一个"活动"航点。这种行为如下图所示:
可以看出,这使得计划飞行任务的很大一部分要么被错误的航迹和航向覆盖,要么根本没有覆盖。这对于数据收集任务(如勘测)来说是个问题,导致需要重复执行任务。
恢复时倒带(rewind-on-resume)功能可以纠正这种行为。后退距离由操作员定义。当飞行任务恢复时,飞行器将在飞行任务中断点后方所需的距离内返回飞行任务轨道。这样,飞行器在到达最初中断的位置之前,就有足够的时间达到所需的轨道和航向。这种行为如下所示:
7.6.1 配置
通过设置 DO_SET_RESUME_REPEAT_DIST 任务项,可以启用恢复时倒带功能。有两种方法可供选择:
1) 地面控制站识别DO_SET_RESUME_REPEAT_DIST任务项目
- 在任务中希望启用该功能的位置添加 DO_SET_RESUME_REPEAT_DIST 任务项;
- 将第一列数据设置为任务恢复时的倒带距离(以米为单位)。
2) 地面控制站无法识别DO_SET_RESUME_REPEAT_DIST任务项目
- 从希望启用该功能的任务点添加一个 UNKNOWN 任务项目,并将 MAVLink ID 设置为 215;
- 将第一列数据设置为任务恢复时的倒带距离(以米为单位)。
!Note
必须将 MIS_RESTART 参数设置为零,以防止飞行任务重新启动,这项功能才能起作用。
要检查飞行任务中是否正确设置了倒带距离,请监控地面控制站的信息输出。当飞行器注册该命令时,将显示以下信息: "恢复重复距离设置为 <DISTANCE> m"。
在整个任务过程中,可以设置多个 DO_SET_RESUME_REPEAT_DIST 命令。这使操作员能够在整个任务过程中改变倒带距离或开关该功能,因为在某些任务路段操纵飞行器时需要非常小心和准确。
可以通过设置距离为零的 DO_SET_RESUME_REPEAT_DIST 任务项来关闭这一功能。
!Tip
在确定所需的恢复距离时,对大多数飞行器来说,一个合理的值是最小转弯半径的两倍。唯一的例外是可以原地转向的飞行器(多旋翼飞行器和某些无人车),在这种情况下,合理的距离应为 WP_RADIUS 的两倍。
7.6.2 工作原理
一旦启用,ArduPilot 将开始记录成功加载为"活动"的航点。最多可存储七个航点的历史记录。任务恢复后,将搜索任务历史记录,直到以下任一情况:
- 在任务轨道中找到一个满足倒带距离要求的位置;
- 找到已存储任务历史记录的终点,在这种情况下,恢复位置将是历史记录中存储的最后一个航点。
然后,飞行器将恢复到任务轨道上的该位置,并按计划继续执行任务。
!Note
恢复位置会考虑高度因素。如果飞行器沿任务航迹恢复飞行,而飞行器的高度正在发生变化,则恢复位置的高度将在两个相邻航点之间进行线性插值。
!Note
为防止飞行器存储模糊的历史记录并重新回到意外位置,如果使用地面控制站或脚本中的设定航点功能更改任务,则历史记录将被重置。这可以防止飞行器将任务倒带回到历史记录被重置的位置。
!Note
该功能与 DO_JUMP 命令配合使用,在飞行器继续执行任务时,跳跃次数不会递增。
7.6.3 局限性
1) 任务航段短:如果任务中的航点间距很近,而请求的后退距离大于最后通过的六个航点的距离,那么飞行器将在存储的"最旧"航点上继续前进。
2) 曲线航点:该功能可与曲线航点一起使用。不过,由于距离计算是基于导航命令位置之间的直线,因此恢复距离的精确度会降低。
3) 非航点导航命令:该功能适用于非航点导航命令,例如 LOITER_TURNS。但是,距离计算并不考虑这些命令中的飞行器航迹距离。以前面的例子为例,距离计算不考虑徘徊中的飞行距离。