# sys-impl **Repository Path**: mitsunobukaze/ROBOTOS ## Basic Information - **Project Name**: sys-impl - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: merging - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-27 - **Last Updated**: 2026-05-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Embodied System Impl 本项目为北京大学 OSLab Embodied AI System 项目的一部分。Embodied System Impl 提供支持优先级抢占的具身任务调度系统,能够通过接口对接模型,提供系统层面的调度能力。 ## 环境安装 使用 `uv sync` 即可。 ## 模型接口 模型适配的接口定义在 `src/runtime/adapter_interface.py` 中,`src/runtime/adapter/mock/mock.py` 中包含一个参考的适配器实现。 适配器的加载在 `src/runtime/adapter/__init__.py` 中进行,通过环境变量 `"ADAPTER"` 控制导入的具体适配器种类。 接口列表如下: - 硬件探测接口 `HardwareProbe` - 提供 `probe` 方法,返回 `HardwareManager` 对象,描述当前系统中可用的硬件 - 任务接受接口 `TaskReceiver` - 提供 `watch` 方法,异步地向系统中注册新的任务 - 提供 `decompose` 方法,完成对任务的拆解,并分配优先级等任务属性 - 硬件执行接口 `HardwareActuator` - 提供 `_is_job_finished` 方法,返回当前任务是否结束(是否成功或确定已经失败) - 提供 `_fill_action_queue` 方法,用于根据当前任务生成下一阶段的动作序列 - 提供 `_actuator_action` 方法,控制具体的硬件执行相应任务 目前,系统中不会长期维护环境观测信息。需要模型推理时,应由具体适配器从外部观测源读取数据。 ### ElasticVLA 适配器 本仓库已提供 `elastic_vla` 适配器,用于调用 `../elastic-vla-open-vla` 提供的模型服务。该方案保持调度框架与模型依赖解耦:调度器运行在本项目环境中,ElasticVLA 在自己的 Python/PyTorch 环境中通过 HTTP 暴露 `/act`。 先启动 ElasticVLA 服务: ```bash cd ../elastic-vla-open-vla python vla-scripts/deploy.py \ --pretrained_checkpoint ../models/openvla-7b \ --unnorm_key bridge_orig \ --host 127.0.0.1 \ --port 8777 ``` python vla-scripts/deploy.py \ --pretrained_checkpoint ../models/openvla/moojink/openvla-7b-oft-finetuned-libero-spatial-object-goal-10 \ --use_proprio false \ --use_l1_regression true \ --use_diffusion false \ --unnorm_key bridge_orig \ --host 127.0.0.1 --port 8777 再启动调度框架: ```bash cd ../embodied-system-impl ADAPTER=elastic_vla \ ELASTIC_VLA_ENDPOINT=http://127.0.0.1:8777/act \ ELASTIC_VLA_OBS_JSON=/home/heziy/emobodied_OS/interfaces/observation.json \ python src/main.py ``` 运行后使用 `create [priority=N]` 创建任务,例如: ```text create pick up the red apple and place it in the bowl priority=3 ``` `ELASTIC_VLA_OBS_JSON` 应包含 ElasticVLA `/act` 接口需要的观测字段,例如 `full_image`、`state` 和可选 wrist 图像;适配器会自动追加当前子任务的 `instruction` 字段。可选环境变量包括 `ELASTIC_VLA_ARM_COUNT`(默认 `1`)和 `ELASTIC_VLA_TIMEOUT_SEC`(默认 `60`)。 ## 系统实现细节 ### 任务抢占调度 每一个动作之间都是可能的抢占点,会检测当前任务是否可被抢占,是否有新增的高优先级任务,并且是否完成了副作用的消解等。发生抢占时,动作队列清空,并开始执行新的任务。 子任务有四种抢占级别(`src/parts/intr_level.py`): - IL0 与 IL1:级别最低,可被其他任务抢占 - IL2:只可被 IL3 任务抢占 - IL3:不可被其他任务抢占 任务优先级共有 8 个级别,每个级别都会维护一个代办任务的队列。 部分任务的完成会触发一定的副作用(`src/parts/side_effect.py`),而另一些任务会消解先前触发的副作用。副作用激活期间无法进行任务抢占。 ### 子任务的依赖关系 在使用模型拆解子任务时,可以指定子任务之间的依赖关系,子任务之间实际上是构建了一个有向无环图,在子任务调度时会依照任务的依赖顺序执行。 ### 子任务的硬件亲和性 在使用模型拆解子任务时,可以指定执行子任务使用的硬件,在调度时,只会在子任务所指定的硬件列表中选取可用的硬件进行任务布置。 ## 尝试一下 目前系统默认提供了一个 `mock` 类型的接口适配,无需外界模型,而是使用命令来模拟创建任务,并通过日志输出任务的执行情况。 可使用:`create built-in-1` 或 `create built-in-2` 创建内建任务,它们会被拆解为相应的具备一定以来与硬件亲和性的子任务。