[Feature request]: Consider merging `Progress` and `Odometry` into a `RobotStatus` message or adding `std_msgs/Headers` to them
Maintainers usually reply within 15 days
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 15/100
Research direction
This is a message-design discussion, not a code change. Start by reading the existing Progress and Odometry message definitions and how the /odom topic is consumed, then the open thread on the three alternatives. Done means maintainers agree on one approach, such as a unified RobotStatus, header synchronization, or embedded pose, and the design is recorded before any implementation begins.
Written by the indexing model from the issue text.
Description
Before proceeding, is there an existing issue or discussion for this?
- I have done a search for similar issues and discussions.
Description
In our current architecture, robot pose updates are ingested via the /odom topic, while plan execution status is tracked via a dedicated Progress message. In practice, components that consume Progress almost always require a concurrent pose estimate. However, the reverse is not true (pose estimates are needed even when no plan exists).
This coupling creates desynchronization issues across several core subsystems:
- Visualization & State Desync: Visualizers consume odometry to render robot position and simultaneously update progress, safe zones, and remaining trajectory rollouts. Under network latency or packet loss, out-of-order delivery results in transient rendering artifacts (e.g., rendering a robot outside its
SafeZonebecause odometry reflects an older state than the latest progress update). - Plan Server Snapshotting & Replanning: The plan server samples odometry to initialize start states for dynamic replanning while cross-referencing
Progressto evaluate execution milestones (e.g., gating docking routines until sufficient path progress has elapsed). While future states could theoretically be projected from plan progress alone to account for solve latency in multi-agent path finding (MAPF), doing so requires complex predictive state modeling and risks diverging from physical reality. (Fast initial planners such as PIBT mitigate solve latency, but the requirement for tightly synchronized progress and physical pose remains). - Safe Zone Eviction: Safe zone deallocation/erasure logic relies on the robot's actual estimated pose rather than plan progress alone.
Because these consumers require correlated spatial and execution contexts, treating them as disparate streams introduces unnecessary synchronization overhead. Conversely, standalone odometry remains necessary outside plan execution (e.g., during startup, idling, or manual teleoperation when plan progress is undefined).
Implementation Considerations
- Message Aggregation vs. Specialization: Merging spatial pose data into the plan progress pipeline solves synchronization for active navigation, but progress fields are meaningless when an agent is idle or unassigned.
- Generic Status Topic: Rather than overloading
Progress, defining a broader status abstraction (e.g.,RobotStatus) that encapsulates pose, active execution state, and progress metrics would decouple lifecycle state from path tracking. - Bandwidth & Rate Matching: Odometry typically publishes at high frequencies (20–50+ Hz), whereas progress updates may operate at lower frequencies (1–10 Hz). The consolidated message rate should balance state accuracy against bus overhead.
Alternatives
-
Header Synchronization via
message_filters:
Add a standardstd_msgs/HeadertoProgresscarrying timestamps matching the upstream/odomheaders, then rely on synchronization constructs (a lamessage_filters::TimeSynchronizerorApproximateTimeSynchronizer). While idiomatic in ROS ecosystems, this introduces buffer management complexity, tuning friction around timestamp tolerance windows, and latency penalties when messages arrive out of sync. In addition we would have to rewrite all of this in rust asw AFAIK I dont think rclrs has message filters yet. -
Embedding Pose into
Progress:
Directly embedgeometry_msgs/PoseStampedwithinProgress. This provides immediate atomicity for active plans, but leaves edge cases where consumers must handle null or invalid progress states when an agent is idle. -
Unified
RobotStatusMessage:
Transition to a consolidatedRobotStatusmessage that encapsulates pose, current operational state (idle, navigating, docking, error), and an optional/sub-field forProgress. This cleanly handles both idle states and synchronized tracking during plan execution.
Additional information
If we integrate pose and progress into a unified status pipeline, we should also consider extending the SafeZone definition to reference the specific progress milestone or sequence ID that triggered its allocation/release.
- Dominant language
- Python
- Stars
- 10
- Forks
- 9
- Avg merge
- 3h 21m
- Merged PRs (30d)
- 1
Getting set up
- No Dockerfile or Docker Compose file
- No pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from open-rmf/next_gen_prototype
-
enhancement
Difficulty 5/5 Over a week Newbie friendliness 8/100
open-rmf/next_gen_prototype#81 ·
Maintainers usually reply within 15 days
-
enhancement
Difficulty 5/5 Over a week Newbie friendliness 35/100
open-rmf/next_gen_prototype#80 ·
Maintainers usually reply within 15 days
-
enhancement
Difficulty 4/5 3-5 days Newbie friendliness 35/100
open-rmf/next_gen_prototype#66 ·
Maintainers usually reply within 15 days
-
bug
Difficulty 4/5 3-5 days Newbie friendliness 42/100
open-rmf/next_gen_prototype#57 ·
Maintainers usually reply within 15 days
-
enhancement
Difficulty 3/5 1-2 days Newbie friendliness 68/100
open-rmf/next_gen_prototype#52 ·
Maintainers usually reply within 15 days
All issues in open-rmf/next_gen_prototype
Similar issues
-
documentation good first issue
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
JheysonJhordyHuarauyaRiquelme/sprocguard#18 ·
Maintainers usually reply within 1 day
-
enhancement good first issue help wanted
Difficulty 2/5 1-3 hours Newbie friendliness 80/100
dlq/synthpopcan#59 ·
Maintainers usually reply within 2 days
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
mdn/translated-content#40220 ·
Maintainers usually reply within 4 days
-
enhancement
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
ETSInitiative/PETSIRD#243 ·
Maintainers usually reply within 1 day
-
deferred p2
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
cuadrao-ai/argus#2160 ·
Maintainers usually reply within 1 day