Skip to content

Commit 546890c

Browse files
awesomebytesclaude
andcommitted
PLAN.md: control_kit GO — Python controller inside real controller_manager proven
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 parent 697ab31 commit 546890c

1 file changed

Lines changed: 16 additions & 0 deletions

File tree

PLAN.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -384,6 +384,22 @@ mechanically, not by discipline.
384384
teardown. Honest gaps: planning only, no time parameterization (adapters
385385
skipped), ~3.5 s parse bringup (heaviest kit). Docs: `docs/moveit_kit/`.
386386

387+
- **control_kit spike (2026-07-11, GO; 60fffc5, merged 697ab31):** the
388+
exposure-note's ⚠️ UNPROVEN item is PROVEN — a Python class deriving the
389+
real `controller_interface::ControllerInterface` runs inside a real
390+
in-process `controller_manager`, driven by the real read→update→write loop
391+
against mock hardware. Route A (cross-inheritance + `add_controller`
392+
injection via a C++-built no-op-deleter shared_ptr) shipped — no compiled
393+
bridge .so needed; Route B documented as the spawner-by-name fallback +
394+
L2 graduation path. Numbers: update dispatch 2.57 µs (vs 0.85 µs C++);
395+
100 Hz rock-solid (0 late/800); 1 kHz achieved with occasional
396+
GC-pause deadline misses (max 3.5 ms) → honest verdict: prototyping /
397+
soft-RT, not hard-RT (GC/GIL pauses, not per-call cost). Key env finding:
398+
ros2_control does NOT hit MoveIt's generate_parameter_library Cling wall —
399+
controller_manager.hpp parses cleanly; the full CM is directly reachable.
400+
Nav2 plugin injection would reuse this pattern verbatim where an
401+
add/inject API exists. Docs: `docs/control_kit/`.
402+
387403
## Risks & mitigations
388404

389405
- **conda-forge cppyy behaves differently from the pip wheel** (cling resource

0 commit comments

Comments
 (0)