Hello everyone,
I’m working on an integration between PX4 and ROS 2 using a VIO (Visual Inertial Odometry) system to provide local pose estimation. I’ve encountered some confusing behavior and I’m hoping someone can help me understand if it’s a configuration issue or expected behavior.
My Setup:
-
I’m using the ROS 2 Navigation Interface to send local pose measurements to the
/fmu/in/vehicle_visual_odometry
topic. -
My VIO provides data in an FRD (Front-Right-Down) frame, and in the message sent to PX4, I’m correctly setting the
pose_frame
field to2
(POSE_FRAME_FRD
). -
PX4 is configured to use the VIO as the primary source for local pose estimation.
The Problem:
I’ve noticed that the output message from PX4, /fmu/out/vehicle_odometry
, correctly reflects the pose estimate from my VIO: the position and orientation data are in the FRD frame, and I can confirm that the drone moves and orients itself correctly in this local frame.
However, the pose_frame
field in this output message is consistently 1
(POSE_FRAME_NED
), instead of 2
.
This is confusing. It appears that the EKF is indeed using the VIO estimate (which is in FRD), but the frame label in the output message remains the default NED frame.
My Questions Are:
-
What is the expected behavior in this scenario? Should the
pose_frame
field change to2
when the estimation is based on a dominant FRD source? -
Is it possible that the EKF, despite using the FRD frame for estimation, always publishes with the
POSE_FRAME_NED
label by convention, because the Z-axis remains “down”?
Any clarification would be greatly appreciated!
Thanks in advance.