更新说明书
# 基于 OpenHarmony 的异常感知、安全决策与可信恢复组件
OH-Resilience 是一个基于 OpenHarmony 的异常感知、安全决策与可信恢复组件。项目面向无真实硬件条件下的开发与验证,使用 OpenHarmony ArkTS 应用作为端侧 Resilience Agent,使用 FastAPI 构建主机侧韧性决策引擎,并通过 WSL2 Ubuntu 中的 ROS 2 / Gazebo / Nav2 仿真环境模拟机器人任务执行、环境异常、恢复动作与运行时反馈。
项目目标是帮助机器人或具身智能系统在面对开放环境异常、任务执行失败、通信异常或安全风险时,具备以下能力:
环境异常可感知 执行失败可恢复 安全风险可约束 恢复过程可追踪 错误经验可沉淀 无硬件条件下可验证
当前工程已经打通了以下闭环:
OpenHarmony ResilienceClient ↕ HTTP FastAPI 韧性决策引擎 ↕ ROS 2 Topic / Action / Service Gazebo / Nav2 / TurtleBot3 仿真环境
OpenHarmony ArkTS 端侧 Dashboard
NORMAL / DEGRADED / RECOVERY / SAFE_MODE
FastAPI 韧性决策引擎
/health
/api/resilience/state
/api/client/event
/api/recovery/action
/api/recovery/result
ROS 2 / Gazebo 仿真接入
ros_bridge_node
ros_state_collector
fault_injector
open_environment_scenario_runner
ros_recovery_executor
Windows 端工程:
E:\Project\ResilienceClient2 ├── AppScope/ # OpenHarmony 应用级配置 ├── entry/ # OpenHarmony entry 模块 │ └── src/main/ets/pages/Index.ets # ResilienceClient 主页面 ├── resilience_engine/ # FastAPI 韧性决策引擎 │ ├── anomaly/ # 规则异常检测 │ ├── api/ # HTTP API 路由 │ ├── attribution/ # 错误归因 │ ├── experience/ # 经验沉淀与复用 │ ├── models/ # Pydantic 数据模型 │ ├── perception/ # 外部环境感知接口 │ ├── policy/ # 策略选择与安全校验 │ ├── recovery/ # 任务结果验证与恢复记录 │ ├── safety/ # 运行时安全约束 │ └── storage/ # 内存/SQLite 存储 ├── tests/ # 后端 API 与模块测试 ├── docs/ # 阶段设计、接口和执行文档 ├── resilience_server.py # FastAPI app 导出入口 ├── run_server.py # 后端启动脚本 └── requirements.txt # Python 依赖
WSL2 ROS 2 工作空间:
/home/ojs/ResilienceClient2/ros2_ws └── src/oh_resilience_sim ├── oh_resilience_sim/ │ ├── fault_injection/ # 故障注入与开放环境场景 │ ├── recovery_execution/ # ROS/Nav2 恢复执行 │ ├── ros_bridge/ # ROS 2 与 FastAPI 桥接 │ └── state_collector/ # 仿真状态采集 ├── config/ # ROS 2 参数配置 ├── launch/ # ROS 2 launch 文件 ├── scripts/ # 验证与启动脚本 └── docs/ # ROS 2 阶段文档
本项目当前在 WSL2 Ubuntu + ROS 2 Jazzy 环境下开发验证。
在 Windows PowerShell 中进入工程目录:
cd E:\Project\ResilienceClient2
安装 Python 依赖:
pip install -r requirements.txt
启动 FastAPI 后端:
python run_server.py
默认监听:
http://127.0.0.1:8088
健康检查:
http://127.0.0.1:8088/health
状态接口:
http://127.0.0.1:8088/api/resilience/state
也可以使用 uvicorn 直接启动:
python -m uvicorn resilience_server:app --host 0.0.0.0 --port 8088 --reload
E:\Project\ResilienceClient2
选择 entry 模块。
entry
选择 OpenHarmony 模拟器。
执行:
Build -> Make Project Run -> Run entry
http://10.0.2.2:8088
说明:10.0.2.2 通常用于模拟器访问 Windows 主机。如果模拟器无法访问该地址,可改为 Windows 主机局域网 IP,例如:
10.0.2.2
http://192.168.x.x:8088
进入 WSL2 Ubuntu:
wsl
进入 ROS 2 工作空间:
cd /home/ojs/ResilienceClient2/ros2_ws source /opt/ros/jazzy/setup.bash
构建 ROS 2 包:
colcon build --symlink-install --packages-select oh_resilience_sim source install/setup.bash
检查 TurtleBot3 / Nav2 依赖:
./src/oh_resilience_sim/scripts/check_stage03_step02_deps.sh ./src/oh_resilience_sim/scripts/check_stage03_step03_nav2.sh
启动 TurtleBot3 Gazebo:
./src/oh_resilience_sim/scripts/start_turtlebot3_gazebo.sh
启动 Nav2:
./src/oh_resilience_sim/scripts/start_turtlebot3_nav2.sh
发布初始位姿:
./src/oh_resilience_sim/scripts/publish_initial_pose.sh
发送导航目标:
./src/oh_resilience_sim/scripts/send_nav2_goal.sh 1.5 0.5 0.0 1.0
启动 ROS-FastAPI 桥接节点:
ros2 launch oh_resilience_sim ros_bridge.launch.py
启动状态采集节点:
./src/oh_resilience_sim/scripts/start_state_collector.sh
启动恢复执行节点,默认 mock 模式:
./src/oh_resilience_sim/scripts/start_recovery_executor.sh
启动真实 Nav2 恢复模式:
./src/oh_resilience_sim/scripts/start_recovery_executor.sh mock_execution:=false
检查真实 Nav2 接口:
./src/oh_resilience_sim/scripts/check_real_nav2_interfaces.sh
单次故障注入:
./src/oh_resilience_sim/scripts/inject_navigation_timeout.sh ./src/oh_resilience_sim/scripts/inject_sensor_delay.sh ./src/oh_resilience_sim/scripts/inject_sensor_noise.sh
手动发布故障事件:
./src/oh_resilience_sim/scripts/inject_fault.sh NAVIGATION_TIMEOUT HIGH
查看内置开放环境场景:
./src/oh_resilience_sim/scripts/list_open_environment_scenarios.sh
运行动态障碍组合场景:
./src/oh_resilience_sim/scripts/run_dynamic_obstacle_scenario.sh 4.0
运行指定开放环境场景:
./src/oh_resilience_sim/scripts/run_open_environment_scenario.sh dynamic_obstacle_navigation 4.0 ./src/oh_resilience_sim/scripts/run_open_environment_scenario.sh sensor_drift_navigation 3.0 ./src/oh_resilience_sim/scripts/run_open_environment_scenario.sh communication_and_resource_pressure 3.0 ./src/oh_resilience_sim/scripts/run_open_environment_scenario.sh safety_risk_navigation 3.0
启动恢复执行节点真实模式:
手动触发安全停止:
./src/oh_resilience_sim/scripts/test_real_nav2_recovery.sh SAFE_STOP EVT-SAFE-STOP
手动触发 costmap 清理:
./src/oh_resilience_sim/scripts/test_real_nav2_recovery.sh CLEAR_COSTMAP EVT-CLEAR-COSTMAP
手动触发全局重规划:
./src/oh_resilience_sim/scripts/test_real_nav2_recovery.sh TRIGGER_GLOBAL_REPLAN EVT-REPLAN 1.5 0.5 0.0 1.0
查看恢复结果:
ros2 topic echo /recovery_result
Refresh State
Simulate Navigation Timeout
Report Recovery Success
Report Recovery Failed
EVENT_SENT
POLICY_SELECTED
STATE_CHANGED
RECOVERY_REPORTED
ros_bridge
/fault_event
/recovery_action
/recovery_result
ros_recovery_executor mock_execution:=false
TRIGGER_GLOBAL_REPLAN
RECOVER_NAVIGATION
/api/recovery/results
示例:上报导航超时事件。
Invoke-RestMethod ` -Method POST ` -Uri http://127.0.0.1:8088/api/client/event ` -ContentType 'application/json' ` -Body '{"source":"manual-test","eventType":"NAVIGATION_TIMEOUT","severity":"HIGH","message":"Navigation timeout in dynamic obstacle scenario."}'
在 Windows PowerShell 中执行:
cd E:\Project\ResilienceClient2 pytest
如果只验证基础 API:
pytest tests/test_stage2_api_flow.py tests/test_recovery_result_api.py
data/*.db
__pycache__/
.venv/
oh_modules/
.hvigor/
ros2_ws/src/oh_resilience_sim
更多设计和执行细节见:
docs/工程说明文档.md docs/软件设计文档_SDD.md docs/stage03_5_oh_client_state_machine_design.md docs/stage03_5_oh_client_evidence_chain_design.md docs/stage03_5_real_nav2_recovery_design.md /home/ojs/ResilienceClient2/ros2_ws/src/oh_resilience_sim/docs/
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
# 基于 OpenHarmony 的异常感知、安全决策与可信恢复组件
作品简介
OH-Resilience 是一个基于 OpenHarmony 的异常感知、安全决策与可信恢复组件。项目面向无真实硬件条件下的开发与验证,使用 OpenHarmony ArkTS 应用作为端侧 Resilience Agent,使用 FastAPI 构建主机侧韧性决策引擎,并通过 WSL2 Ubuntu 中的 ROS 2 / Gazebo / Nav2 仿真环境模拟机器人任务执行、环境异常、恢复动作与运行时反馈。
项目目标是帮助机器人或具身智能系统在面对开放环境异常、任务执行失败、通信异常或安全风险时,具备以下能力:
当前工程已经打通了以下闭环:
核心功能
OpenHarmony ArkTS 端侧 Dashboard
NORMAL / DEGRADED / RECOVERY / SAFE_MODE。FastAPI 韧性决策引擎
/health、/api/resilience/state、/api/client/event、/api/recovery/action、/api/recovery/result等接口。ROS 2 / Gazebo 仿真接入
ros_bridge_node、ros_state_collector、fault_injector、open_environment_scenario_runner、ros_recovery_executor等节点。技术栈
目录结构
Windows 端工程:
WSL2 ROS 2 工作空间:
环境要求
Windows 侧
WSL2 / Ubuntu 侧
本项目当前在 WSL2 Ubuntu + ROS 2 Jazzy 环境下开发验证。
后端运行说明
在 Windows PowerShell 中进入工程目录:
安装 Python 依赖:
启动 FastAPI 后端:
默认监听:
健康检查:
状态接口:
也可以使用 uvicorn 直接启动:
OpenHarmony App 运行说明
选择
entry模块。选择 OpenHarmony 模拟器。
执行:
说明:
10.0.2.2通常用于模拟器访问 Windows 主机。如果模拟器无法访问该地址,可改为 Windows 主机局域网 IP,例如:ROS 2 / Gazebo 仿真运行说明
进入 WSL2 Ubuntu:
进入 ROS 2 工作空间:
构建 ROS 2 包:
检查 TurtleBot3 / Nav2 依赖:
启动 TurtleBot3 Gazebo:
启动 Nav2:
发布初始位姿:
发送导航目标:
ROS 2 与 FastAPI 联动运行
启动 ROS-FastAPI 桥接节点:
启动状态采集节点:
启动恢复执行节点,默认 mock 模式:
启动真实 Nav2 恢复模式:
检查真实 Nav2 接口:
故障注入与开放环境场景
单次故障注入:
手动发布故障事件:
查看内置开放环境场景:
运行动态障碍组合场景:
运行指定开放环境场景:
真实 Nav2 恢复动作验证
启动恢复执行节点真实模式:
手动触发安全停止:
手动触发 costmap 清理:
手动触发全局重规划:
查看恢复结果:
典型验证流程
1. OpenHarmony 与后端通信闭环
Refresh State。Simulate Navigation Timeout。Report Recovery Success或Report Recovery Failed。EVENT_SENT、POLICY_SELECTED、STATE_CHANGED、RECOVERY_REPORTED。2. ROS 2 仿真闭环
ros_bridge。ros_recovery_executor。/fault_event、/recovery_action、/recovery_result。3. 真实 Nav2 恢复动作闭环
ros_recovery_executor mock_execution:=false。TRIGGER_GLOBAL_REPLAN或RECOVER_NAVIGATION。/recovery_result。常用 API
/health/api/resilience/state/api/client/event/api/recovery/action/api/recovery/result/api/recovery/results示例:上报导航超时事件。
测试
在 Windows PowerShell 中执行:
如果只验证基础 API:
已实现阶段
注意事项
http://10.0.2.2:8088。data/*.db、__pycache__/、.venv/、oh_modules/、.hvigor/等本地运行产物不应提交到远端仓库。ros2_ws/src/oh_resilience_sim同步到仓库目录后提交源码、配置、脚本和文档。参考文档
更多设计和执行细节见: