安装、选择与授权是三件事
- 安装包通过静态 Manifest 和 Python entry point 声明自己。
- Run 在
plugins中选择一个具体实例。 - 编译器根据 Manifest、Run access 与部署上限计算最终 binding。
只有三步都成立,Plugin Host 才会创建实例并授予服务。已安装但未选择的插件不会被导入或启动。
四类角色
| 角色 | 典型插件 | 核心职责 |
|---|---|---|
control_producer |
Rule-based、Model、Teleop、Replay、Agent | 读取授权状态并提交控制 Chunk |
data_consumer |
Record、评价、监控 | 消费事件、观测和输出 |
extension |
几何、运动学或项目能力 | 在稳定服务边界上增加功能 |
interface |
Server、TUI、Debug、MCP | 把同一 Application 能力呈现给用户或外部系统 |
一个插件可有多个角色,但权限仍按服务逐项计算。
范围化服务
常见服务包括 scenario.read、scene、frames、planning geometry、kinematics、observations、control.targets、control、visualization、artifact/output 与 run info。服务对象绑定到插件实例和 generation,并可在生命周期结束时撤销。
为什么不暴露后端对象
若插件直接持有 Isaac Lab 或 MuJoCo 对象,它就能绕过 pause、reset、记录、权限与控制仲裁,也无法跨后端工作。FastSim 只允许后端特有行为通过明确的 Provider 能力或独立扩展合同出现。
插件不是页面开关
TUI、Server 等接口插件仍是完整运行时参与者,需要声明生命周期和访问范围。独立 Web Client 通过 Server 公共协议工作,不直接导入仿真 SDK。
现有软件包见官方插件目录。