Problem
External robot packages need a supported way to register ControlCoordinator hardware adapter names and control task types without placing files inside the DimOS source tree. Without this, an outside package can define a blueprint but still cannot use HardwareComponent(adapter_type=...) or TaskConfig(type=...) for custom hardware/control unless DimOS itself is modified.
Solution
Add a public dimos.control.extensions facade for explicit extension registration:
register_hardware_adapter(HardwareType, adapter_type, factory) dispatches to the existing manipulator, base, or whole-body adapter registry.
register_control_task(task_type, factory_path) registers lazy control task factories without importing the target module at registration time.
- Hardware and task registries reject conflicting duplicate registrations while keeping exact same mapping re-registration idempotent.
- Add docs and a runnable no-hardware external package example that logs registration, adapter construction, task creation, task ticks, and adapter writes.
This keeps blueprint usage unchanged: external packages register before coordinator construction, then use normal HardwareComponent and TaskConfig names.
PR
dimensionalOS/dimos#2547
Manual QA
uv run python examples/external_control_extension/demo_external_control.py
Expected output includes [external_test_robot] logs for registering the adapter/task, constructing and connecting the adapter, creating/ticking the task, and writing velocities through the external adapter.
Synced from DIM-1031 by che
Problem
External robot packages need a supported way to register ControlCoordinator hardware adapter names and control task types without placing files inside the DimOS source tree. Without this, an outside package can define a blueprint but still cannot use
HardwareComponent(adapter_type=...)orTaskConfig(type=...)for custom hardware/control unless DimOS itself is modified.Solution
Add a public
dimos.control.extensionsfacade for explicit extension registration:register_hardware_adapter(HardwareType, adapter_type, factory)dispatches to the existing manipulator, base, or whole-body adapter registry.register_control_task(task_type, factory_path)registers lazy control task factories without importing the target module at registration time.This keeps blueprint usage unchanged: external packages register before coordinator construction, then use normal
HardwareComponentandTaskConfignames.PR
dimensionalOS/dimos#2547
Manual QA
Expected output includes
[external_test_robot]logs for registering the adapter/task, constructing and connecting the adapter, creating/ticking the task, and writing velocities through the external adapter.Synced from DIM-1031 by che