Repository files navigation # Rotor Safety Engine — 面向具身智能的物理安全实时判定引擎
> **Real-time Robot Safety Middleware — with Dynamic Contact Area, Impulse Boundary & Reaction Force Stability**
>
> 面向协作机器人与人形机器人的 Physical AI 安全层。ISO 10218 / ISO/TS 15066 对齐,七级风险粒度 · 动宾不可能组合校验。
>
> 纯确定性物理 · 动力学驱动 · 单文件零依赖 · 亚毫秒级 · 边缘推理就绪
**当前版本:v4.3.0(社区版)**
---
## 这是什么
Rotor Safety Engine 是一款面向协作机器人与人形机器人的 **实时安全中间件(real-time safety middleware)**,也是 VLA 推理管线中的 **VLA safety layer**,连接 AI 规划与运动执行。
不同于静态阈值检查器,它引入了 **动态接触面积(Dynamic Contact Area)** 用于软物压强建模、**冲量安全边界(Impulse Safety Boundary)** 用于重物运动控制、以及 **反作用力稳定性(Reaction Force Stability)** 约束用于移动操作机器人底盘稳定性判定。
设计对齐 **ISO 10218** 与 **ISO/TS 15066** 安全标准,提供 **Power and Force Limiting (PFL)** 力与功率限制能力,搭配 **七级风险粒度(7-level risk granularity)**,纯 **零依赖 Python(zero-dependency Python)** 实现,适合 **边缘推理(edge inference)** 实时控制场景。
**一句话定位:不理解你的任务,只保证你的动作在物理上是安全的。**
---
## 版本选择
| 功能 | 社区版(Community) | 企业版(Pro) |
|------|-------------------|--------------|
| 版本 | v4.3.0 | v4.3.1+ |
| 四层安全判定 | ✅ | ✅ |
| **动态接触面积(Dynamic Contact Area)** | ✅ | ✅ |
| **冲量安全边界(Impulse Safety Boundary)** | ✅ | ✅ |
| **反作用力稳定性(Reaction Force Stability)** | ✅ | ✅ |
| **七级风险粒度(7-Level Risk Granularity)** | ✅ | ✅ |
| 超标倍率(over_ratio) | ✅ | ✅ |
| 回退参数推荐(retreat_params) | ✅ | ✅ |
| 语义合理性分(semantic_plausibility) | ✅ | ✅ |
| **动-宾不可能组合(Verb-Object Impossibility)** | ✅ | ✅ |
| ISO 合规标注 | ✅ | ✅ |
| **作用-反作用完整对(3D向量)** | — | ✅ |
| **动量-冲量-时间链路分析** | — | ✅ |
| **旋转矩阵方向向量(rotation_matrix)** | — | ✅ |
| **Stribeck 静动摩擦曲线** | — | ✅ |
| **接触时间物理推导** | — | ✅ |
| **能量守恒校验(Work = F × d)** | — | ✅ |
| **纯函数力学分析接口(pure_analyze)** | — | ✅ |
| **世界模型力学校验能力** | — | ✅ |
| 开源协议 | MIT | 商业授权 |
| 适用场景 | 研发、原型、教育 | 生产、工业、世界模型 |
> **企业版咨询**:contact@rotor-dynamics.ai
---
## 核心特性(社区版)
- ⚡ **亚毫秒级延迟 · 实时安全看门狗** — Python 版平均 ~17μs,单线程吞吐量 ~6 万次/秒,**边缘推理**实时控制场景就绪
- 🎯 **Physical AI · 100% 可解释** — 纯物理不等式 + 确定性规则,**动力学驱动**,面向人形机器人与协作机器人安全,零神经网络,零黑盒
- 📦 **单文件 · 零依赖** — 一个 Python 文件,仅用标准库,直接嵌入任何管线
- 🏗️ **四层安全架构** — 语义解析 → 安全适配 → 动作分类 → 综合决策
- 🤖 **35+ 中文动词支持** — 抓取/握持/推拉/插拔/拧转/按压……自然语言模式开箱即用
- 📏 **ISO 标准参考** — 设计对齐 ISO 10218 / ISO/TS 15066,人体接触场景自动标注
- 🎛️ **两种输入模式** — 自然语言模式(接 VLA 输出)+ JSON 参数模式(接控制器)
### 🔬 独家技术亮点
- **🟢 动态接触面积(Dynamic Contact Area)** — 根据 force / stiffness 实时计算接触面积与压强,而非将面积视为常量;可区分"面包压手"与"铁块砸手"的本质差异
- **🟡 冲量安全边界(Impulse Safety Boundary)** — 引入动量(mass × velocity)判定,区分 grasp(轻冲量)与 carry(重冲量)阈值,防止高速移重物侧翻
- **🔴 反作用力稳定性(Reaction Force Stability)** — 将底盘稳定性纳入安全判定(base_weight × g × friction),机械臂力过大可能推倒自身时直接判 FAIL,适配移动操作机器人(Mobile Manipulator)
- **📊 七级风险粒度(7-Level Risk Granularity)** — L0~L6 细粒度分级 + over_ratio(超标倍率),破除传统 Low/Medium/High 三档的粗糙划分
- **🧠 动-宾不可能组合(Verb-Object Impossibility)** — 语义知识图谱硬编码常识壁垒(如 grasp + fluid → REJECT),纯物理引擎做不到的"常识推理"第一道防线
- 🔌 **外部数据配置** — 动词库/物体库/规则表支持 JSON 文件加载,业务定制无需改源码
- 🛡️ **健壮输入校验** — 类型/范围/NaN 全面校验,非法输入优雅降级,附带 input_warnings 诊断
---
## 四层安全架构
```
输入(动作 + 物体 + 参数)
│
▼
┌──────────────────────────┐
│ Layer 1 语义解析层 │
│ 动词库 · 对象属性库 │
│ 机器人能力表 · 规则匹配 │
│ 安全区间计算 · 参数推荐 │
└───────────┬──────────────┘
│
▼
┌──────────────────────────┐
│ Layer 2 安全适配层 │
│ 机器人能力约束 │
│ 动作-目标兼容性校验 │
│ 参数安全阈值校验 │
└───────────┬──────────────┘
│
▼
┌──────────────────────────┐
│ Layer 3 动作分类层 │
│ FAV 三维分类器 │
│ 动作阶段自动识别 │
│ (idle / grasping / holding)
└───────────┬──────────────┘
│
▼
┌──────────────────────────┐
│ Layer 4 综合决策层 │
│ PASS / FAIL / REJECT │
│ 全量输出 + 修正建议 │
│ ISO 合规标注 · 七级风险 │
└──────────────────────────┘
```
> 企业版额外提供 **Layer 5 力学增强层**(作用-反作用 / 动量-冲量 / 能量守恒),详见版本对比。
---
## 快速开始
### 安装
```bash
# 方式 1:pip 安装(推荐)
pip install rotor-safety-engine
# 方式 2:从 GitHub 安装最新版
pip install git+https://github.com/rotor-dynamics/safety-engine.git
# 方式 3:单文件,直接拷走即可
cp src/safety_engine.py your_project/
```
### 基本使用 — 自然语言模式
```python
from safety_engine import SafetyEngineV4
engine = SafetyEngineV4()
# 正常操作 → PASS
result = engine.check_command("抓取", "鸡蛋",
params={"force": 2.0, "speed": 0.03},
robot="humanoid_basic")
print(result["verdict"]) # PASS
print(result["risk_level"]) # LOW
print(result["risk_level_7"]) # L1
# 力太大 → FAIL
result = engine.check_command("抓", "玻璃面板",
params={"force": 80.0, "speed": 0.5},
robot="humanoid_basic")
print(result["verdict"]) # FAIL
print(result["correction"]) # 参数不安全: ...
print(result["over_ratio"]) # 超标倍率
print(result["recommended_params_v2"]) # 推荐安全参数
```
### 基本使用 — JSON 参数模式(生产推荐)
```python
scene = {
"objects": [{
"object_id": "metal_part",
"name": "铝合金工件",
"mass_kg": 2.5,
"stability": "rigid",
"contact_area_mm2": 500,
}]
}
action = {
"type": "grasp",
"force_n": 25.0,
"velocity_ms": 0.3,
"acceleration_ms2": 3.0,
"target_object": "metal_part",
}
robot = {
"max_force_n": 150,
"max_velocity_ms": 2.0,
"max_acceleration_ms2": 10.0,
}
result = engine.check_action(scene, action, robot)
print(result["verdict"]) # PASS
print(result["pressure_kPa"]) # 接触压强
print(result["contact_area_mm2"]) # 动态接触面积
```
### 自定义数据配置(v4.3.0+)
动词库、物体库、动作规则表支持从外部 JSON 文件加载,业务定制无需改源码:
```python
from safety_engine import SafetyEngineV4
# 方式 1:从 JSON 文件加载
engine = SafetyEngineV4.from_config(
verb_db_path="config/verbs.json",
object_db_path="config/objects.json",
action_rules_path="config/rules.json",
)
# 方式 2:直接传入字典
engine = SafetyEngineV4(
verb_db={"my_verb": {...}},
action_rules={"my_action": {...}},
)
```
### 运行 Demo
```bash
python examples/demo.py
```
### 运行测试
```bash
# 方式 1:直接运行(零依赖,推荐快速验证)
python tests/test_engine.py
# 方式 2:pytest 运行(需安装 pytest)
pip install pytest
pytest tests/test_engine.py -v
```
---
## 性能指标
> 测试环境:Python 3.10+ / x86_64 / JSON 参数模式 / 10 万次循环
| 指标 | 数值 |
|------|------|
| 平均延迟 | **~17 μs**(0.017 ms) |
| P95 延迟 | ~22 μs |
| P99 延迟 | ~27 μs |
| 单线程吞吐量 | **~58,000 次/秒** |
| 自然语言模式延迟 | 0.3–0.8 ms |
| 内存占用 | < 5 MB |
| 外部依赖 | 0(仅 Python 标准库) |
| 确定性 | 100%(相同输入永远相同输出) |
---
## 七级风险分级规则
引擎采用七级风险等级(L0~L6),对 PASS 和 FAIL 样本分别使用不同的划分依据:
- **PASS 样本**:按 `safety_margin`(安全裕度)分档,裕度越高越安全
- **FAIL 样本**:按 `over_ratio`(超标倍率)分档,倍率越大越危险
| 等级 | 中文标签 | 判定 | 划分依据 | 范围 |
|------|----------|------|----------|------|
| **L0** | 安全 | PASS | safety_margin | 0.50 ~ 1.00 |
| **L1** | 低风险 | PASS | safety_margin | 0.30 ~ 0.50 |
| **L2** | 中低风险 | PASS | safety_margin | 0.15 ~ 0.30 |
| **L3** | 中风险/接近边界 | PASS | safety_margin | 0.05 ~ 0.15 |
| **L4** | 中高风险/临界 | PASS | safety_margin | 0.00 ~ 0.05 |
| **L5** | 高风险/越线 | FAIL | over_ratio | 1.0 ~ 1.5 |
| **L6** | 危险/严重越线 | FAIL | over_ratio | > 1.5 |
---
## 技术原理
### 三层力约束模型
力的安全性由三层约束共同决定,最终取最严格值:
1. **输出端约束** — 机器人输出能力上限(电机 / 关节极限)
2. **接收端约束** — 物体力学响应上限(材料 / 结构极限,含动态接触面积、冲量、压强计算)
3. **双向约束** — 反作用力与本体稳定性(牛顿第三定律,机器人基座摩擦力上限)
### 动态接触面积
软质 / 易碎物体在受力后接触面积会增大,压强随面积动态调整:
- 刚体(金属、石头):刚度大,接触面积基本不变
- 软物(面包、水果):刚度小,接触面积随力线性增长
- 易碎物(鸡蛋、玻璃):变形极小但压强大了直接碎,以压强阈值判定
### 冲量安全校验
对 carry / move / push / pull / lift 等有位移的动作,增加 `冲量 = 质量 × 速度` 的安全约束:
- 易碎物 / 液体:冲量上限低
- 重物 / 刚体:冲量上限高
- 人体接触:冲量上限收紧
### 反作用力约束
机器人对物体施加的力,等于物体对机器人的反作用力。
当反作用力超过机器人基座能提供的最大静摩擦力时,机器人会失稳。
```
max_reaction = base_weight_kg × G × friction_coef
```
---
## 支持的动作 & 物体类型
**JSON 模式核心动作(10+)**:
`grasp` / `carry` / `push` / `pull` / `lift` / `place` / `press` /
`insert` / `rotate` / `hold` / `release` 等
**自然语言模式(中文 35+ 动词)**:
抓态类 + 持态类 + 复合类
**物体类型(7种)**:
`rigid`(刚性)/ `semi_rigid`(半刚性)/ `flexible`(柔性)/
`fragile`(易碎)/ `fluid`(液体)/ `human`(人体)/ `heavy`(重物)
---
## ISO 标准参考
- **ISO 10218-1/2** — 工业机器人安全标准(设计参考)
- **ISO/TS 15066** — 协作机器人技术规范(设计参考)
> 注:本产品为软件中间件,ISO 标准为设计层面的对齐与参考,非第三方认证级合规声明。
---
## 与 VLA 模型的关系
```
用户指令
│
▼
┌──────────┐ 动作+参数 ┌──────────────────┐
│ VLA 模型 │ ────────────────► │ Safety Engine V4 │
│(语义/规划)│ │ (物理安全守门员) │
└──────────┘ ◄──────────────── └──────────────────┘
│ PASS/修正建议 │
▼ │
动作执行 ◄───────────────────────────┘
```
- VLA 模型负责**理解意图、规划动作**
- Safety Engine 负责**校验动作的物理安全性**
- 两层各司其职,互补不重叠
---
## 部署
### 边缘设备
纯 Python 标准库实现,无外部依赖,可直接部署到:
- 机器人控制器(ARM / x86)
- 边缘计算设备(Jetson、RK3588 等)
- 工控机 / PLC 上位机
### 集成方式
```python
# 方式1:直接嵌入
from safety_engine import SafetyEngineV4
engine = SafetyEngineV4()
result = engine.check_command(action, obj, params)
# 方式2:封装为 HTTP 服务
# 方式3:编译为 C 扩展(Cython / Nuitka)
```
---
## API 参考
### SafetyEngineV4
主引擎类,提供两种输入模式。
#### `__init__(self, verb_db=None, object_db=None, action_rules=None, rules=None)`
初始化引擎。所有参数均可选,不传则使用内置默认值。
| 参数 | 类型 | 说明 |
|------|------|------|
| `verb_db` | `Optional[Dict]` | 自定义动词库字典 |
| `object_db` | `Optional[Dict]` | 自定义物体属性库字典 |
| `action_rules` | `Optional[Dict]` | 自定义动作规则表字典 |
| `rules` | `Optional[SafetyRules]` | 自定义全局安全规则 |
#### `from_config(verb_db_path=None, object_db_path=None, action_rules_path=None, rules=None)`
类方法,从 JSON 文件加载配置数据并创建引擎实例。
```python
engine = SafetyEngineV4.from_config(
verb_db_path="config/verbs.json",
action_rules_path="config/rules.json",
)
```
#### `check_command(self, action, obj, params=None, robot=None, object_params=None, context=None) -> Dict`
自然语言模式输入。
| 参数 | 类型 | 说明 |
|------|------|------|
| `action` | `str` | 动作名称(中文动词,如"抓取"/"推") |
| `obj` | `str` | 目标物体名称 |
| `params` | `Optional[Dict]` | 动作参数 `{"force": N, "speed": m/s, ...}` |
| `robot` | `Optional[str / Dict]` | 机器人配置:字符串机型名或自定义能力字典 |
| `object_params` | `Optional[Dict]` | 自定义物体属性(覆盖内置物体库) |
| `context` | `Optional[Dict]` | 上下文 `{"near_human": bool, "fragile": bool, "semantic_score": float}` |
返回:V4Result 字典,含 verdict / risk_level / risk_level_7 / over_ratio / input_warnings 等 20+ 字段。
#### `check_action(self, scene_data, action_data, robot_data) -> Dict`
JSON 参数模式输入(生产推荐,性能最优)。
| 参数 | 类型 | 说明 |
|------|------|------|
| `scene_data` | `Dict` | 场景数据,含 `objects` 列表 |
| `action_data` | `Dict` | 动作数据,含 `type` / `force_n` / `velocity_ms` / `target_object` 等 |
| `robot_data` | `Dict` | 机器人能力数据 |
### 输入校验(v4.3.0+)
引擎在入口处自动进行输入有效性检查:
| 情况 | 处理方式 |
|------|----------|
| 类型错误(如 params 不是 dict) | `REJECT` + 说明 |
| 空值 / None 关键参数 | `REJECT` + 说明 |
| 数值
You can’t perform that action at this time.