上一篇 | 目录 | 下一篇 |
本文描述了当切换到自动模式时,直升机、飞机和多旋翼所支持的任务命令。
警告:这是一个开发中的工作,并没有得到充分的审查。在这里找到更多多旋翼的资料。
MavLink协议定义了大量的Mav_cmd 航点指令(在MavLink_mission_item_message中发送),ArduPilot实现了对命令和参数的处理,这些命令必须对飞行器都是相关和有意义的,发送到不被飞控支持的命令将被被忽略。
本文列出并描述了命令和参数对每种飞行器都支持。飞控不支持的命令和参数变成灰色并被忽略。但它们仍然有日志记录,以明确哪些MAV_CMD协议不被飞控所执行。
有些命令和命令参数是没有用的,因为它们与飞行器无关(例如“MAV_CMD_NAV_TAKEOFF”命令对于飞机和直升机来说是有意义的,但对多旋翼没意义,俯仰参数只对飞机才有用)。还有一些可能有用的命令参数没有得到处理,因为消息大小有限制,只处理优先的参数忽略消息太大的参数。
在任务中有几种不同类型的命令可以使用:
导航(NAV)命令用于控制飞行器的运动,包括起飞、向航点移动和盘旋、改变高度和降落。
Do命令用于辅助功能,不会对飞行器的位置有影响置(例如,设置摄像头触发距离,或设置伺服值)。
条件(Condition)命令用于延迟Do命令直到满足某些条件,例如无人机到达一定的高度或距离航路点的距离。
在执行任务期间,最多一个“导航”命令和一个“做”或“条件”命令可以同时运行。典型的任务可能设置一个航点(导航命令)和一个条件命令,在距离目的地一定距离(MAV_CMD_CONDITION_DISTANCE)时候执行条件命令,条件命令完成后按顺序执行一些Do命令(例如MAV_CMD_DO_SET_CAM_TRIGG_DIST:定期拍照)。
注意:条件命令和Do命令与上述导航命令相关联;如果无人机在执行这些命令之前到达下一个航路点,则加载下一个NAV命令,跳过这些命令。
许多命令(特别是导航命令)包括位置/位置信息。信息是相对于一个特定的“参考系”提供的,该“参考系”是在消息的参考系字段中指定的。直升机和多旋翼使用MAV_CMD_DO_SET_HOME命令在全局坐标系(MAV_FRAME_GLOBAL)中设置“起始(home)位置”。WGS84坐标系,其中海拔高度是相对于平均海平面的。所有其他命令都使用MAV_FRAME_GLOBAL_RELATIVE_ALT FRAME,使用相同的纬度和经度,但将高度设置为相对于起始位置(起始高度=0)。
飞机命令还可以使用MAV_FRAME_GLOBAL_turrain_ALT参照系。这同样具有相同的WGS84参考系纬度/经度,但指定相对于地面高度的高度(在地形数据库中定义)。
注意:有些在MAVLink协议中定义的其它参考系(参见MAV_FRAME),在任务命令中不被支持。
如果一个命令或参数被标记为受支持,那么很可能(但不能保证)它将按照指示的方式运行。如果没有列出命令或参数(或标记为不支持),那么很可能ArduPilot上不支持该命令或参数。
原因是这些信息主要是通过检查命令处理的消息推断出来:
检查AP_Mission::mavlink_to_mission_cmd中的switch语句,以确定哪些命令由所有飞行器平台处理,以及存储消息中的哪些参数。
每种飞行器类型(飞机、直升机、多旋翼)的命令处理程序开关告诉我们每种飞行器可能支持哪些命令,哪些参数被传递给处理程序。
上面的检查非常准确地说明了哪些命令和参数不被支持。它们对可能支持的命令/参数给出了相当准确的描述。然而,这个指示不能保证是准确的,因为命令处理程序可以丢弃所有的信息(我们还没有完全检查所有这些)。
每个命令的参数在表格中显示。参数名使用“粗体”表示协议中定义的参数,不支持的参数变成灰色。
这允许用户/开发人员查看ArduPilot中支持什么及不支持什么协议字段。
Mission Planner(MP)公开ArduPilot支持的命令和参数的列表,但只显示与当前连接的飞行器相关的命令和参数。将MP命令映射到这个文档很简单,因为它只是使用完整命令名的简化版本来命名命令(例如使用DO_SET_SERVO而不是完整命令名:MAV_CMD_DO_SET_SERVO)。此外,本文档还方便地在每个参数旁边列出了Mission Planner使用的列标签。
其它地面站(APM Planner 2、Tower等)可能支持其它命令/参数,并使用其它的名称/标签。在大多数情况下,映射应该是明显的。
导航命令用于控制飞行器的运动,包括起飞、向导航点移动和盘旋已经降落。
导航指令具有最高优先级。当一个导航命令被加载时,任何没有被执行的Do和条件命令都会被跳过(例如,如果一个航点完成,另一个航点的导航命令被加载,而与第一个航点相关的未执行的Do/条件命令会被删除。
支持:直升机、飞机、多旋翼
导航到指定位置。
支持:直升机、飞机、多旋翼
在指定位置盘旋并且无时间限制。
支持:直升机、飞机、多旋翼
在指定位置盘旋一定时间(秒)。
支持:直升机、飞机、多旋翼
如果距离较近,返回起始(Home)位置或者最近的点。起始(Home)位置是在飞行器起飞的位置(如果有GPS,是解锁后获得GPS坐标的位置)。
MAV_CMD_DO_JUMP
支持:直升机、飞机、多旋翼
跳转到任务列表中的指定命令。跳转命令可以重复指定的次数,也可以无限期地重复。
提醒:尽管名字如此,这个命令实际上是一个“(导航)NAV_”命令,而不是“DO_”命令。条件命令如CONDITION_DELAY不会影响DO_JUMP(它总是在到达命令时执行跳转)。
注意:一个任务中最多可以有15个跳转命令,否则新的DO_JUMP命令将被忽略。
命令参数
命令字段 | MP字段 | 描述 |
param1 | WP# | 要跳转到的命令索引/序列号。 |
param2 | Repeat# | 在跳转到下一个顺序命令之前执行DO_JUMP命令的次数。如果该值为零,则立即执行下一个命令。值为-1将导致命令无限重复。 |
param3 | Empty | |
param4 | Empty | |
param5 | Empty | |
param6 | Empty | |
param7 | Empty |
直升机:任务计划设置DO_JUMP命令
在上面的例子中,飞行器将在航点1和航点2之间来回飞行3次,然后再飞向航点4。
条件命令控制Do命令的执行。例如,条件命令可让Do命令延迟一段时间,直到飞行器到达一定的高度,或到下一个目标位置的指定距离才执行。
在这种情况下,将跳过与最后一个航点相关的任何未执行的Do命令。
MAV_CMD_CONDITION_DELAY
支持:直升机、飞机、多旋翼
到达一个航点后,将下一个条件“_DO_”命令的执行延迟到指定的秒数(例如,MAV_CMD_DO_SET_ROI)。
注意:如果飞行器在延迟计时器完成之前到达下一个航点,延迟的“_DO_”命令将永远不会触发。
命令参数
命令字段 | MP字段 | 描述 |
param1 | Time (sec) | 延时秒数(十进制)。 |
param2 | Empty | |
param3 | Empty | |
param4 | Empty | |
param5 | Empty | |
param6 | Empty | |
param7 | Empty |
直升机:任务计划设置CONDITION_DELAY 命令
在上面的例子中,命令#4 (DO_SET_ROI)被延迟,以便在车辆通过路径点#2 5秒后启动。
MAV_CMD_CONDITION_DISTANCE
支持:直升机、飞机、多旋翼
延迟下一个“_DO_”命令的开始,直到飞行器距离下一个航点的指定数米距离以内。
注意:该命令不会停止飞行器:它只影响Do命令。
命令字段 | MP字段 | 描述 |
param1 | Dist (m) | 在执行Do命令之前距离下个一个航点的距离(米)。 |
param2 | Empty | |
param3 | Empty | |
param4 | Empty | |
param5 | Empty | |
param6 | Empty | |
param7 | Empty |
直升机:任务计划设置CONDITION_DISTANCE命令
在上面的例子中,命令#4 (DO_SET_ROI)被延迟,所以只有当飞行器在航点5号半径点50米以内时才会启动。
“Do”或“Now”命令运行一次以执行某些操作。所有与航点相关的Do命令都会立即执行。
支持:直升机、飞机、多旋翼。
设置系统模式(飞行前,解锁,上锁等)
命令字段 | MP字段 | 描述 |
param1 | 模式,定义为`MAV_MODE`__ | |
param2 | 自定义模式-这是特定系统所定义,请参考个别飞控说明书。 | |
param3 | Empty | |
param4 | Empty | |
param5 | Empty | |
param6 | Empty | |
param7 | Empty |
支持:直升机、飞机、多旋翼。
改变飞行器的水平速度/油门。在大多数情况下立即生效,直到再次更改或设备重新启动。
支持:直升机、飞机、多旋翼。
把起始(Home)位置设置为当前位置或在命令中指定的位置。对于无人机仿真系统(SITL),这里的输入高度需要参考绝对高度,并考虑SRTM海拔高度。
注意:对于飞机和多旋翼,如果不能获得准确的GPS定位,该命令无效。对于直升机,如果所有位置参数都设置为0,该命令也会尝试使用当前位置。命令中的位置信息仅在靠近EKF原点时使用。
命令字段 | MP字段 | 描述 |
param1 | Current | 设置起始(home)位置: 1=Set home为当前位置。0=使用消息参数中指定的位置 |
param2 | Empty | |
param3 | Empty | |
param4 | Empty | |
param5 | Empty | |
param6 | Empty | |
param7 | Empty |
直升机:任务计划设置do_set_home命令
支持:直升机、飞机、多旋翼。
设置继电器引脚的电压高(开)或低(关)。
命令字段 | MP字段 | 描述 |
param1 | Relay No | 继电器编号。 |
param2 | off(0)/on(1) | 1:设置继电器电压高/开(Pixhawk上为3.3V,APM为5V)。0:设置继电器电压低/关(0v) |
param3 | Empty | |
param4 | Empty | |
param5 | Empty | |
param6 | Empty | |
param7 | Empty |
直升机:使命计划设置DO_SET_RELAY命令
支持:直升机、飞机、多旋翼。
切换继电器指定的引脚电压/状态,并指定多少时间内重复的次数。执行一次就开打,再执行一次就关闭,如此循环。
命令字段 | MP字段 | 描述 |
param1 | Relay No | 继电器编号。 |
param2 | Repeat # | 周期次数-继电器应切换的次数 |
param3 | Delay(s) | 周期时间(秒,十进制)-继每次切换之间的时间。 |
param4 | Empty | |
param5 | Empty | |
param6 | Empty | |
param7 | Empty |
直升机:任务计划设置DO_RELAY_REPEAT命令
在上面的例子中,假设继电器一开始是关闭的,它将被设置为高,然后在3秒后它将再次被切换为低。
支持:直升机、飞机、多旋翼。
设置给定的伺服引脚输出PWM值。
命令字段 | MP字段 | 描述 |
param1 | Ser No | .伺服编号-目标伺服输出引脚/通道编号。 |
param2 | PWM | .输出的PWM值,以微秒为单位(通常为1000到2000)。 |
param3 | Empty | |
param4 | Empty | |
param5 | Empty | |
param6 | Empty | |
param7 | Empty |
直升机:任务计划设置DO_SET_SERVO命令
在上面的例子中,将伺服的通道8的PWM值设置为1700(一般PWM值在1000到2000之间)。
注意:从固件版本4.0及更高版本开始,可以通过SERVOx_FUNCTION命令设置为0、1或51-66(禁用或RC传递)输出。
支持:直升机、飞机、多旋翼。
定时一定的次数,设置伺服指定的引脚的PWM值,让其在中间值和指定值之间循环改变。
中间值是在通道的RCn_TRIM参数中指定的(下面截图中的RC8_TRIM)。缺省值是1500。
命令字段 | MP字段 | 描述 |
param1 | Ser No | 伺服编号-目标伺服输出引脚/通道。 |
param2 | PWM | 输出的PWM值,以微秒为单位(通常为1000到2000)。 |
param3 | Empty | |
param4 | Empty | |
param5 | Empty | |
param6 | Empty | |
param7 | Empty |
直升机:任务计划设置DO_REPEAT_SERVO命令
在上面的例子中,伺服通道8的PWM设置为1700,等待4秒,回到中间值(一般是1500),再过4秒它将再次改为1700,最后再过4秒它将恢复到中间值。
支持:直升机、飞机、多旋翼。
为传感器或飞行器设置一个感兴趣区域(ROI)。这样飞行器控制系统就可以使用它来控制飞行器姿态和各种传感器的姿态,如摄像头。
支持:直升机、飞机、多旋翼。
配置飞行器的摄像头控制系统。
如果有摄像头控制板,参数被发送到摄像头控制系统(如3DR摄像头控制器)。
命令字段 | MP字段 | 描述 |
param1 | Mode | 设置相机模式:1:程序自动;2:光圈优先;3:快门优先;4:手动模式;5:智能模式;6:高级自动 |
param2 | Shutter Speed | 快门速度(秒数)。所以如果速度是1/60秒,输入的值就是60。支持的最慢快门触发器是1秒。快门值(秒数)。如果值是1/60秒,则输入60。支持的最慢快门值是1秒。 |
param3 | Aperture | 光圈大小 |
param4 | ISO | ISO值,例如:80、100、200等。 |
param5 | ExposureMode | 曝光类型枚举器 |
param6 | CommandID | 命令序号 |
param7 | Engine Cut-Off | 摄像头触发前主机关闭时间(秒/10)(0表示不关闭)。 |
支持:直升机、飞机、多旋翼。
按摄像头快门一次。此命令不接受其它参数。
命令字段 | MP字段 | 描述 |
param1 | On/Off | 会话控制(开/关或显示/隐藏镜头):0:关闭摄像头/隐藏镜头1:打开摄像头/显示镜头 |
param2 | Zoom Position | 变焦倍数。2x、3x、10x等 |
param3 | Zoom Step | 从当前放大倍数放大步长值。 |
param4 | Focus Lock | ISO值,例如:80、100、200等。 |
param5 | Shutter Cmd | 对焦锁定、解锁或重锁定:0:忽略1:解锁2:锁定 |
param6 | CommandID | 快门命令,任何非零的值都会触发摄像头按快门。 |
param7 | Empty |
直升机:任务计划设置DO_DIGICAM_CONTROL命令。
支持:直升机、飞机、多旋翼。
控制摄像头或天线架的任务指令。
此命令允许你把横滚、俯仰和旋转数据发送到摄像头云台。这个可用于在不同时间将摄像头指向特定方向。
命令字段 | MP字段 | 描述 |
param1 | 俯仰(度) | |
param2 | 横滚(度) | |
param3 | 旋转(度) | |
param4 | Empty | |
param5 | Empty | |
param6 | Empty | |
param7 | Empty |
直升机:任务计划设置DO_MOUNT_CONTROL命令
支持:直升机、飞机、多旋翼。
在有规律的距离间隔中触发摄像头快门,通常用在测量任务中。在Do命令中把param3设置为1就按一次摄像头快门。从ArduPilot 4.1开始,修改param3立即触发快门。
注意:把距离设置为0将停止摄像头快门被触发。
命令字段 | MP字段 | 描述 |
param1 | Dist (m) | 摄像头触发距离间隔(米)。设置为0表示关闭触发。 |
param2 | Empty | |
param3 | ? | 立即触发一次。1表示打开,0表示关闭。 |
param4 | Empty | |
param5 | Empty | |
param6 | Empty | |
param7 | Empty |
直升机:任务计划设置DO_SET_CAM_TRIGG_DIST命令
上述配置将导致摄像头的快门在飞行器每行驶5米后触发。
支持:直升机、飞机、多旋翼。
任务命令开启飞行围栏,直升机/多旋翼开启或者关闭圆形围栏。
命令字段 | MP字段 | 描述 |
param1 | 设置围栏启用状态(0=禁用,1=启用,2=仅禁用楼层(仅限飞机))。 | |
param2 | Empty | |
param3 | Empty | |
param4 | Empty | |
param5 | Empty | |
param6 | Empty | |
param7 | Empty |
支持:直升机、飞机、多旋翼。
设置任务在中断后重新启动时候的回退距离。有关此功能的详细说明,请访问任务重启页面。在任务中设置回退距离后,将距离设置为零表示关闭该功能。
命令字段 | MP字段 | 描述 |
param1 | 以米为单位回退距离 | |
param2 | Empty | |
param3 | Empty | |
param4 | Empty | |
param5 | Empty | |
param6 | Empty | |
param7 | Empty |