Publishing VIO Data to /fmu/in/vehicle_visual_odometry in ROS 2 (Python)

Hi everyone,

I’m working on a UAV project using PX4 v1.14.4. I’m using OpenVINS for pose estimation and subscribing to the odometry output via rclpy in ROS 2. From what I understand, the position provided by OpenVINS is in the FLU (Forward-Left-Up) coordinate frame.

When publishing this data to /fmu/in/vehicle_visual_odometry in Python, is it recommended to set pose_frame as POSE_FRAME_FRD and manually invert the Y and Z axes of the position to match FRD? Should I also directly invert the signs of the Y and Z components in the orientation (quaternion) and covariance accordingly?

Alternatively, would it be better to align the system with the East at startup and perform a full ENU-to-NED transformation instead?

I’m aware that px4_ros_com provides frame transformation utilities in C++, but I’m not entirely confident in rewriting them in Python. For example:

Are the quaternion-to-Euler and Euler-to-quaternion conversions done in ZYX order?

Would you recommend using the existing px4_ros_com frame transformation tools directly if possible, rather than rewriting them in Python?

Thanks in advance for your advice!

1 Like