Reasoning Table Placement
reasoning_table_placement.py
Overview
reasoning_table_placement.py is a bridge between cognition and the
manipulation stack.
It listens to high-level decisions on /{robot}/placement_decision
and
maps them onto low-level commands that the arm / gripper planners
understand.
Interfaces (strongly-typed, stateless)
Direction |
Topic |
Message type |
Notes |
---|---|---|---|
Required |
|
|
e.g. |
Provided |
|
|
|
Food Placement Integration KPIs
Metric |
Target |
---|---|
Placement decision time (/placement_decision → /table_reasoning_commands) |
≤ 200 ms |
Spot-detection accuracy (correctly free & stable spots) |
≥ 95 % |
Replanning responsiveness (after clutter update) |
≤ 100 ms |
Decision |
Published cmd |
Rationale |
---|---|---|
|
|
Room for one more plate |
|
|
Table finished; remove crockery |
other |
|
Either “FULL” or “IGNORE” → do nothing |
Contract
Pre-conditions
Upstream decision topic must contain “Decision:” and one keyword.
Post-conditions
Exactly one command published per decision message.
Mapper never blocks; if queue is full older commands drop first (queue_size=10).
Implementation notes
Uses simple substring checks so future metadata (timestamps, scores) won’t break parsing.
Publisher is latched at 10 messages to absorb bursts.
All log lines throttled or filtered to keep console tidy.