ArduPilot / ArduPilot/ardupilot
AP_DDS: Inconsistent header frame_id values in published topics
- Dominant language
- C++
- Stars
- 15.9k
- Forks
- 21.4k
- Avg merge
- 3d 17h
- Merged PRs (30d)
- 119
Description
## Bug Report
### Issue details
In `AP_DDS_Client.cpp`, multiple published ROS 2 topics set incorrect or inconsistent `header.frame_id` values, violating ROS frame conventions.
For `/ap/pose/filtered`, frame_id is set to `BASE_LINK_FRAME_ID`. However, the `frame_id` of a `PoseStamped` message represents the parent reference frame in which the vehicle's position is measured. Since this message represents the vehicle's position and orientation within ArduPilot's local NED frame, the header `frame_id` should be set to a world-fixed frame such as `odom` or `map`.
https://github.com/ArduPilot/ardupilot/blob/a4da362f613b9b9ad30533af11679ff6b9519043/libraries/AP_DDS/AP_DDS_Client.cpp#L338
Inconsistencies exist across several other topics as well. For example, `/ap/geopose/filtered` and `/ap/gps_global_origin/filtered` use `BASE_LINK_FRAME_ID` instead of standard geodetic reference `earth` frame. furthermore, for `/ap/twist/filtered`, data belonging to two different reference frames is combined into a single `TwistStamped` message. The linear velocity is defined in the world-fixed local NED frame, whereas the angular velocity is in the body frame.
**Version**
copter v4.6.3
**Platform**
[x] All
[ ] AntennaTracker
[ ] Copter
[ ] Plane
[ ] Rover
[ ] Submarine
Contributor guide
Research direction
Start in AP_DDS_Client.cpp around the referenced line and inspect the publishers for the affected pose, geopose, GPS-origin, and twist topics. Compare each header and twist component with ROS frame conventions; done means the affected topics consistently identify their reference frames and no longer combine data from different frames without resolving that distinction.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp
- Domain
- robotics
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 52/100