目录

智航韧境:面向开放环境的无人机具身操作系统韧性增强技术

智航韧境是一套运行于 openKylin 的无人机具身系统韧性服务。它面向人员闯入、感知链路停更、任务心跳超时与消息丢失等开放环境异常,将分散的运行事件统一映射为可审计状态,按风险持续时间生成分级安全动作请求,并在进入 PX4 接口前完成独立安全许可、短时效校验、可靠交付和防重放检查。

系统形成“异常汇聚—状态分级—动作请求—安全许可—结果确认—恢复观察—审计回放”的组件级闭环。WebGL/PC 端 VR 画面承担任务交互和仿真态势可视化;openKylin 服务、原始 JSONL、测试日志和实验汇总共同构成工程证据。

人员风险 / 链路超时 / 任务异常
              ↓
     openKylin 韧性服务
  五态引擎 · 恢复观察 · 审计
              ↓
  版本化动作信封 + 有界重试
              ↓
     独立安全闸门与执行适配
              ↓
      ACK / 终态 / 失败记录

核心能力

  • 五态韧性引擎NORMALDEGRADEDSAFE_HOLDRTLRECOVERY,相同配置和事件序列产生可复现轨迹。
  • 分级安全响应:将异常持续时间和业务风险映射为 LIMIT_SPEEDHOLD_POSITIONRTL_REQUEST,故障解除后先进入稳定观察窗。
  • 可靠动作交付:动作请求具有 PENDING → ACKED / FAILED / EXPIRED 生命周期,按 TTL 和重试预算有界重发。
  • 会话级防重放:以“来源标识、会话标识、序号”组成会话序列键,持久化请求接受记录与执行终态;重复请求不会重复执行。
  • 独立安全许可:飞行侧闸门综合遥测新鲜度、人工接管、PX4 failsafe、解锁/着陆和位置有效性决定是否放行。
  • 最小权限部署:使用独立低权限 systemd 账户、受控 Unix-domain socket、只读系统保护、空 capability 集和事务式安装/回滚。
  • 可核验证据链:源码提交号、配置哈希、运行 ID、原始记录、汇总结果、systemd 日志和安装文件哈希能够相互对应。

四层架构

层级 主要职责 关键实现
任务交互与仿真态势层 巡检任务交互、风险区域和状态变化可视化 WebGL / PC 端 VR
ROS 2 事件与交付层 人员事件、话题/任务心跳、动作信封、ACK integrations/ros2/
openKylin 韧性服务层 统一事件、五态引擎、恢复观察、审计、systemd src/resilience_daemon/
PX4 安全许可与执行适配层 TTL、会话防重放、飞行条件闸门、VehicleCommand/ACK 接口 px4_action_executor_node.py

系统与 PX4 原生姿态控制和 failsafe 分工协同:韧性引擎形成安全意图,飞行侧闸门独立许可,执行器关联 PX4 命令接口,各层职责清晰、相互校验。

状态与动作

状态 运行语义 可生成请求
NORMAL 关键链路健康 NONE
DEGRADED 异常进入性能降级阶段 LIMIT_SPEED
SAFE_HOLD 风险需要立即止损 HOLD_POSITION
RTL 异常持续,需要返航请求 RTL_REQUEST
RECOVERY 故障已清除,进入稳定观察 RECOVERY_PENDING / RESUME_ALLOWED

动作证据按以下四级记录:

  1. ACTION_REQUEST_GENERATED:韧性引擎生成动作请求;
  2. GUARD_ALLOWED:飞行侧软件闸门许可;
  3. PX4_ACK_ACCEPTED:PX4 接受 VehicleCommand
  4. STATE_EFFECT_CONFIRMED:独立飞行状态证据确认动作生效。

正式实验对组件决策、安全许可、消息交付终态和安全闸门矩阵进行量化验证;PX4 适配器通过 VehicleCommandVehicleCommandAck 与飞行状态接口,对命令发布、确认和状态证据进行分级关联。

openKylin 正式验证

  • 正式版本源码提交:3713d1a7a626ba6cf2564ae2683dcf5144db0d99
  • 环境:openKylin 2.0 SP2 / Python 3.12.2 / x86_64
  • 组件实验运行 ID:20260718T170752Z
  • 交付实验运行 ID:delivery_20260718T170752Z
  • systemd 生命周期取证时间:2026-07-21T14:56:38Z

自动化质量门

  • openKylin 源码归档环境 46/46 项测试通过;
  • Unix-domain socket 真实往返测试通过;
  • API 文档中的 JSON 示例全部经过实现级自动测试;
  • Python 编译、Shell 语法、冲突标记、尾随空白、非 LF 文本和缓存文件检查通过;
  • 正式运行后未遗留 .pyc__pycache__

完整日志:results/formal/3713d1a7a626/quality/quality-checks.txt

systemd 生命周期证据

正式版本源码在 openKylin 上完成安装、服务重启、指定快照回滚与重装验证。取证脚本核对的已安装源码提交与正式版本提交一致;最终服务为 enabledactive/runningNRestarts=0ExecMainStatus=0。服务以独立账户 zhihang-resilience 运行,配置目录为组内只读,Unix-domain socket 权限为 0660。生命周期日志包含 LIFECYCLE_VERIFICATION_OK,最终普通服务账户健康查询返回 ok: true

完整原始记录:results/formal/3713d1a7a626/systemd/。其中 metadata.txt 保存版本目录、源码提交、取证时间和回滚快照;lifecycle.txt 保存安装—重启—回滚—重装全过程;systemd-state.txtpermissions.txtjournal.txt 和两份查询 JSON 保存最终运行状态与权限证据。

功能基线与韧性模式对照

基线为可运行的单阈值 HOLD_POSITION 请求生成器,不具备迟滞、恢复观察、动作身份或 ACK 跟踪;韧性模式启用五态策略、恢复观察和动作去重。

场景 单阈值基线 韧性模式
人员风险固定重放 平均 2 次请求,连续冗余 1 次 平均 1 次请求,连续冗余 0 次
链路中断固定重放 平均 3 次同类请求,连续冗余 2 次 平均 3 次分级请求,连续冗余 0 次
人员突发 + 30% 观测丢失,30 个固定种子 平均 2.667 次请求,冗余 1.667 次 平均 1.000 次请求,冗余 0 次
心跳停更 + 丢包/时序抖动,30 个固定种子 平均 18.400 次请求,冗余 17.400 次 平均 2.033 次分级请求,冗余 0 次

上述四组中,两种模式的安全请求覆盖率均为 100%。对照结果说明韧性模式在保持触发覆盖的同时抑制重复请求,并在链路异常场景给出分级处置语义。

安全闸门预设矩阵 7/7 通过。本机 TCP 回环 100/100 成功,平均往返 0.621 ms、P95 0.760 ms。原始数据和汇总位于 results/formal/3713d1a7a626/component/

可靠交付对照

固定随机种子 20260718,每个条件、每种模式 500 轮。单次发送与“有界重试 + 幂等终态”对照如下:

软件扰动条件 单次发送:终态 ACK 有界重试:终态 ACK 重复执行
30% 请求丢失 67.6% 99.2% 0
30% 请求丢失 + 30% ACK 丢失 50.4% 91.0% 0
350 ms 暂态遥测缺口 0.0% 100.0% 0
混合开放环境扰动 0.0% 86.2% 0

该实验评价组件消息交付、ACK 可观察性和幂等执行,不等同于飞行动作成功率。原始逐轮数据和汇总位于 results/formal/3713d1a7a626/delivery/

快速开始

本地开发模式

export PYTHONPATH="$PWD/src"
python3 -m resilience_daemon.cli serve --config config/resilience.json

另开终端查询或注入人员风险事件:

export PYTHONPATH="$PWD/src"
python3 -m resilience_daemon.cli status --host 127.0.0.1 --port 8765
python3 -m resilience_daemon.cli send --host 127.0.0.1 --port 8765 \
  --event-file examples/person_alert.json

reset 默认关闭,仅能在受控测试中通过 serve --allow-reset 显式启用。

openKylin 安装与生命周期验证

sudo bash scripts/install.sh
systemctl status zhihang-resilience.service --no-pager
sudo -u zhihang-resilience env PYTHONPATH=/opt/zhihang-resilience/src \
  python3 -m resilience_daemon.cli status \
  --unix-socket /run/zhihang-resilience/daemon.sock

指定快照回滚:

sudo bash scripts/rollback.sh SNAPSHOT_ID

正式安装—重启—回滚—重装证据采集:

sudo bash scripts/capture_formal_systemd_evidence.sh

ROS 2 / PX4 集成保护模式

python3 integrations/ros2/resilience_bridge_node.py --ros-args \
  -p daemon_unix_socket:=/run/zhihang-resilience/daemon.sock
python3 integrations/ros2/px4_action_executor_node.py --ros-args \
  -p dry_run:=true -p execution_enabled:=false

LIMIT_SPEEDHOLD_POSITIONRTL_REQUEST 分别映射至 PX4 VEHICLE_CMD_DO_CHANGE_SPEEDVEHICLE_CMD_NAV_LOITER_UNLIMVEHICLE_CMD_NAV_RETURN_TO_LAUNCH

复现实验

PYTHONDONTWRITEBYTECODE=1 python3 scripts/run_quality_checks.py
PYTHONDONTWRITEBYTECODE=1 python3 scripts/run_component_experiment.py \
  --trials 30 --tcp-samples 100 --seeds 30
PYTHONDONTWRITEBYTECODE=1 python3 scripts/run_delivery_reliability_experiment.py \
  --trials 500 --seed 20260718

原创代码与第三方边界

本仓库自行开发的核心包括韧性状态引擎、事件模型、可靠交付、动作安全闸门、持久化防重放与执行终态账本、openKylin 安装/回滚/systemd 服务、ROS 2 事件桥、PX4 动作执行适配器、实验工具、自动测试和证据控制台。

openKylin、ROS 2、PX4、AirSim 和 YOLO 分别作为操作系统、消息中间件、飞控/仿真环境与上游感知组件,通过公开接口和消息定义接入;项目自研代码聚焦韧性决策、可靠交付、安全许可、部署恢复与验证工具。详细边界见 第三方组件与代码来源说明

目录与文档

src/resilience_daemon/       状态引擎、服务、可靠交付、安全闸门与客户端
integrations/ros2/           ROS 2 事件桥与 PX4 动作执行适配器
config/                      韧性策略配置
systemd/                     openKylin 服务单元
console/                     正式实验记录回放控制台
scripts/                     安装、回滚、实验、导出与质量检查
tests/                       单元、接口、文档一致性和 Unix Socket 测试
docs/                        架构、API、用户手册、测试和第三方边界
results/formal/              与源码提交号绑定的正式原始数据和系统证据

项目自行开发代码采用 Apache-2.0 许可证。

关于
317.9 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802047560号