获取和设置参数

ArduPilot 有数百个参数,允许用户配置飞行器飞行/驱动方式的许多方面,包括姿态控制增益、在返航模式下飞行时返航的最低安全高度等。

本页介绍地面站或配套计算机如何从飞行控制器检索参数列表,然后对其进行更改。通用 MAVLink 参数协议描述如下.

大多数地面站(又称 GCS)都会向用户提供一份可编辑的参数列表,以便用户定制飞行器。下面是人机可读参数名称、描述和有效范围的链接,但请注意,不同类型的飞行器参数不同,而且每次固件发布时都会略有变化,因此地面站和配套计算机应直接从飞行控制器获取参数列表。许多 GCS 还会解析机器可读参数列表(链接如下),为用户提供说明和有效范围。

载具

人类可读

机器可读

天线跟踪器

网页

apm.pdef.xml

旋翼飞行器

网页

apm.pdef.xml

固定翼飞行器

网页

apm.pdef.xml

无人车UGV

网页

apm.pdef.xml

潜水艇

不可用

apm.pdef.xml

检索所有参数

接收所有参数的最有效方法是发送一个 参数请求列表 信息,其中包括以下字段

  • 目标系统 :载具的 MAVLink 系统 ID(通常为 "1")。

  • 目标组件 通常为 "1"

载具应作出许多单独的响应 PARAM_VALUE 消息(系统中的每个参数都有一条)。的字段。 PARAM_VALUE 这些信息是

  • param_id :参数名称,16 个字符的字符串(如果少于 16 个字符,则以空字符结束)。

  • 参数值 :参数值(所有参数值均以浮点形式发送)

  • 参数类型 :"...... MAV_PARAM_TYPE.请注意,ArduPilot 仅支持 MAV_PARAM_TYPE_INT8、MAV_PARAM_TYPE_INT16、MAV_PARAM_TYPE_INT32 和 MAV_PARAM_TYPE_REAL32(又称 float)类型。

  • 参数数量参数索引 字段来确定是否已成功接收所有参数

MAVLink 不保证数据包的送达,因此如果某些参数值未送达,请使用以下说明重新请求缺失的参数。

检索参数

要检索单个参数,请发送 参数读取请求 信息,其中包括以下字段

  • 目标系统 :载具的 MAVLink 系统 ID(通常为 "1")。

  • 目标组件 通常为 "1"

  • param_id 参数名:16 个字符的参数名(如果已知)。如果不知道,只要 param_index 设置为非负数,该字段可以是任何内容

  • 参数索引 :参数索引号,如果使用 "param_id "字段,则使用-1。请注意,最好使用 param_id 字段,因为如果 "隐藏 "参数被公开,该索引可能会发生变化(见下文)。

载具应发出 PARAM_VALUE 信息,如上一节所述。

设置参数

要设置单个参数的值,请发送 参数设置 信息,其中包括以下字段

  • 目标系统 :载具的 MAVLink 系统 ID(通常为 "1")。

  • 目标组件 通常为 "1"

  • param_id 参数名称:16 个字符的可读参数名称

  • 参数值 :参数的新值,用浮点表示

  • 参数类型 :"...... MAV_PARAM_TYPE 的参数。这必须与 AutoPilot 中的参数类型相匹配,并且将是 MAV_PARAM_TYPE_INT8、MAV_PARAM_TYPE_INT16、MAV_PARAM_TYPE_INT32 或 MAV_PARAM_TYPE_REAL32(ArduPilot 支持的唯一类型)。将 "param_type "字段从 PARAM_VALUE 飞行控制器为该参数发送的信息。

如果参数值更新成功,载具将发出 PARAM_VALUE 消息,并将 "param_value "字段设置为新值。

如果因为参数是只读参数(如 MISSION_COUNT)而导致保存不成功,载具会响应 消息A PARAM_VALUE 消息,并将 "param_value "字段设置为新值,后续的 PARAM_VALUE 参数值 "字段设置为原始值。实施这种奇怪的行为,是为了应对某些 GCS 的不良行为,这些 GCS 会反复尝试设置参数,直到收到它们所期望的数字为止。

隐藏参数

为了减少下载参数的时间,ArduPilot 会在某些子系统被禁用时隐藏其参数。

例如,用户可以选择在 ArduPlane 中使用 QuadPlane 功能,但 Q_ENABLE 默认为禁用,因此其所有参数都被隐藏。一旦将 Q_ENABLE 参数设置为 "1",其余 Q_xxx 参数就会变为可见。

从地面站或配套计算机的角度来看,这意味着参数总数将发生变化,即 PARAM_VALUE 参数数量 但也要注意 参数索引 可能会发生变化。这意味着最好不要依赖 参数索引 field.