Coordinate systems (frames)

The following applies to image version 0.15 and up. See previous version of the article (Russian only) for older images.

TF2 Clever frames

Main frames in the clever package:

  • map has its origin at the flight controller initialization point and may be considered stationary. It is shown as a white grid on the image above;
  • base_link is rigidly bound to the drone. It is shown by the simplified drone model on the image above;
  • body is bound to the drone, but its Z axis points up regardless of the drone's pitch and roll. It is shown by the red, blue and green lines in the illustration;
  • navigate_target is bound to the current navigation target (as set by the navigate service);
  • setpoint is current position setpoint.

Additional frames become available when ArUco positioning system is active:

  • aruco_map is bound to the currently active ArUco map;
  • aruco_N is bound to the marker with ID=N.

Frames that are bound to the drone are oriented according to the ROS convention: the X axis points forward, Y to the left, and Z up.

3D visualization of the coordinate systems can be viewed using rviz.



tf2 ROS package is used extensively in the Clever platform. tf2 is a set of libraries for C++, Python and other programming languages that are used to work with the frames. Internally, ROS nodes publish TransformStamped messages to /tf topic with transforms between frames at certain points in time.

The simple_offboard node can be used to request the drone position in an arbitrary frame by setting the frame_id argument appropriately in a call to get_telemetry service.

tf2 can be used from Python to transform coordinates (for objects like PoseStamped and PointStamped) from one frame to another

results matching ""

    No results matching ""