Просмотр исходного кода

update: 增加 vk_obstacle_distance 消息说明

LiuYang 2 недель назад
Родитель
Сommit
23f28a73c0
1 измененных файлов с 53 добавлено и 2 удалено
  1. 53 2
      readme.md

+ 53 - 2
readme.md

@@ -2021,6 +2021,53 @@ VKins 系统的状态数据自定义消息, 主要用于一些自定状态的传
 | flag      | 工作状态, 0-无效 1-里程计参考系定位有效 2-NED 参考系定位有效 3-WGS84 定位有效 |
 | reset_cnt | 融合器重置计数                                                                |
 
+### 8.4 VK_OBSTACLE_DISTANCE
+
+72方向障碍扫描消息, 消息 ID 为 **53032**, 用于 OA72 水平避障限速. 一帧扫描拆成两个分片, 每片包含36个方向, 每片消息载荷162字节. 本格式与旧的非分片格式不兼容, 发送端、飞控和地面站需使用一致的 `msg_definitions/VKFly.xml` 生成协议代码.
+
+#### 方向与字段
+
+方向相对机头顺时针递增, 全局方向索引 `i` 的中心角为 `i * 5°`, 覆盖中心两侧各2.5°. 索引0为前方、18为右方、36为后方、54为左方. 每格报告该扇区最近障碍的**水平距离**及该障碍对应的重力方向垂直位移, 水平距离不是斜距.
+
+| 字段 | 类型 | 说明 |
+| ---- | ---- | ---- |
+| source_sequence | uint64_t | 完整扫描序号, 两片相同, 正常运行时单调递增; 来源超时后允许重新从小序号开始 |
+| source_age_ms | float | 发送本片时源数据距采样的年龄, ms, 必须有限且非负, 包含传感处理耗时; 两片可不同 |
+| distances | uint16_t[36] | 水平距离, cm; 与本片垂直位移数组逐项对应, 哨兵规则见下文 |
+| min_distance_cm | uint16_t | 最小可测水平距离, cm, 大于0且不大于最大量程, 两片一致 |
+| max_distance_cm | uint16_t | 最大可测水平距离, cm, 不大于65533, 两片一致 |
+| fragment_index | uint8_t | 仅0或1; 0对应全局方向0至35, 1对应36至71; 数组下标j对应全局索引 `fragment_index * 36 + j` |
+| status | uint8_t | 0为来源健康, 非0为来源失效; 已绑定来源的失效包立即使扫描失效, 不等待另一片 |
+| gravity_projected_body_z | int16_t[36] | 对应障碍的垂直位移, cm, 下正上负; `INT16_MAX`为垂直未知, 必须保留负值 |
+
+`distances` 的取值约定:
+
+- `0`: 接触障碍.
+- `1`至`max_distance_cm`: 存在障碍; 小于最小量程的值仍保守保留.
+- `max_distance_cm + 1`: 明确确认量程内无障碍, 不代表量程外安全.
+- `UINT16_MAX`或其他大于`max_distance_cm + 1`的值: 未知方向, 禁止向该方向接近. 不可用未知值表示无障碍.
+
+#### 组帧、时效与失效恢复
+
+- 两片必须来自同一 MAVLink system/component, 使用相同扫描序号和量程. 支持乱序接收, 仅收齐两片才发布完整扫描; 建议至少10Hz完整扫描.
+- 重复片、旧序号及缺片不能刷新完整帧有效期. 来源超时后允许重新绑定来源或重置序号.
+- 完整扫描年龄取两片中较大的“源年龄 + 本地等待时间”, 此后继续累加本地经过时间. `OA72_TIMEOUT`同时用于完整扫描有效期及组帧/来源超时.
+- 已绑定来源的非零状态或非法年龄/量程会立即发布失效通知. 故障状态包即使使用相同或更旧序号也会使扫描失效; 恢复时发送更新序号的健康完整帧.
+- `source_age_ms`未包含的链路传输延迟需由`OA72_CTRL_DELAY`保守覆盖, 不可只按接收后的本地时间评估新鲜度.
+
+#### OA72行为与使用边界
+
+OA72沿用`OBAVOID_ACT`开关, 非0启用; 解锁且离地后在水平速度闭环中生效, 纯姿态模式不受保护. OA72仅等比例缩小水平目标速度, 不主动绕行或爬升; 原有避障逻辑仍保留原行为. 参数见[旋翼版本参数](#91-旋翼版本参数).
+
+- 使用`OBAVOID_DIST`作为停止距离, 不减去旧算法的0.5m偏移; 应覆盖机体、桨叶及测量误差.
+- `abs(gravity_projected_body_z) <= OA72_Z_MARGIN`的障碍参与水平约束, 含边界; 垂直未知时不排除障碍. 注意单位换算: 消息为cm, 参数为m.
+- 高度带外回波当前按水平最大量程内清空处理. 上游必须保证碰撞高度带覆盖, 避免较近的高处/低处回波遮蔽更远的同高度障碍.
+- 制动包络使用可靠制动减速度及扫描年龄、额外延迟裕量; 适配层另计一个控制周期. 制动减速度还受XY加速度和倾角对应加速度上限约束.
+- 数据缺失、过期或关键INS输入无效时输出水平零速目标, **不代表飞机瞬时停车**. 限速介入时清除外部加速度前馈, 但闭环、滤波及jerk限制仍影响实际制动响应, 不能将目标速度限幅视为实际速度的硬限制.
+- 当前采用完整帧接收时航向, 而非采样时航向; 延迟期间的转向、接收前侧向位移及垂直运动误差未完整补偿.
+
+默认参数仅供开发验证. 上机前必须验证传感覆盖、最差制动能力和端到端延迟; 初始停车距离不足时无法保证避免碰撞.
+
 ## 9 飞控参数说明
 
 飞控参数名作为确认飞控参数用途的唯一识别码, 不可随意修改. 在新增参数时应注意不要与已有参数重名, 保持向前兼容性.
@@ -2047,8 +2094,12 @@ VKins 系统的状态数据自定义消息, 主要用于一些自定状态的传
 | FUEL_LOW1_VAL      | 一级ecu油量低阈值                    | FLOAT  | 范围 1~100, 单位%                                                                                  |
 | FUEL_LOW2_VAL      | 二级ecu油量低阈值                    | FLOAT  | 范围 1~100, 单位%                                                                                  |
 | VOLT_PROT_CH       | 电压保护通道                         | UINT16 | 范围0~10, 触发电压保护的通道, 默认0飞控供电                                                        |
-| OBAVOID_DIST       | 障碍悬停距离                         | FLOAT  | 范围2~8, 单位m                                                                                     |
-| OBAVOID_ACT        | 避障动作                             | UINT8  | 范围0~2,0-不开启 1-悬停 2-爬高                                                                     |
+| OBAVOID_DIST       | 障碍停止距离                         | FLOAT  | 默认4, 范围2~15, 单位m; OA72直接作为停止距离, 不减去旧算法的0.5m偏移 |
+| OBAVOID_ACT        | 避障动作/开关                        | UINT8  | 默认0, 范围0~2; 0-关闭, 1-旧逻辑悬停, 2-旧逻辑爬高; 非0同时启用OA72水平限速, OA72自身不爬升 |
+| OA72_Z_MARGIN     | OA72垂直高度带半宽                   | FLOAT  | 默认1, 范围0.1~20, 单位m; 垂直位移绝对值不超过该值的障碍参与约束, 垂直未知不排除 |
+| OA72_BRAKE_ACC    | OA72可靠水平制动减速度               | FLOAT  | 默认1, 范围0.1~10, 单位m/s²; 按实测最差制动能力保守设置, 还受XY加速度及倾角上限约束 |
+| OA72_TIMEOUT      | OA72扫描有效期及组帧/来源超时        | FLOAT  | 默认300, 范围50~2000, 单位ms; 扫描年龄包含源年龄和本地经过时间, 重复片不续期 |
+| OA72_CTRL_DELAY   | OA72额外控制延迟裕量                 | FLOAT  | 默认200, 范围0~1000, 单位ms; 覆盖源年龄未计入的链路传输及控制器/执行机构延迟, 适配层另计一个控制周期 |
 | GCS_DISC_CRUISE    | 航线中是否启用地面站失联             | UINT8  | 范围0~1,0-不启用 1-启用                                                                            |
 | FS_CONF_A          | 失控保护设置                         | UINT32 | 参考enum FS_ACTION. 每4bit为一类保护动作设置                                                       |
 | CIR_RAD_DFLT       | 默认环绕/盘旋半径                    | FLOAT  | 范围1~10000m                                                                                       |