Using the inverse transformation in the active view gives us exactly the same
solution as the original transformation in the passive view and vice versa.
It is usually easy to determine whether the active or the passive convention
is used by taking a look at the rotation matrix: when we rotate
counter-clockwise by an angle
about the z-axis, the following
rotation matrix is usually used in an active transformation:
Its transformed version is usually used for a passive transformation:
Warning
The standard in pytransform3d is an active rotation.
Note that there are some functions to generate rotation matrices that
generate passive rotations as well: matrix_from_angle()
,
matrix_from_euler_xyz()
, and
matrix_from_euler_zyx()
. These are kept
for backward compatibility. When in doubt, read the docstring, which
clearly states that a passive convention is used here.
Reference:
Selig, J.M.: Active Versus Passive Transformations in Robotics, 2006,
IEEE Robotics and Automation Magazine.
PDF: https://openresearch.lsbu.ac.uk/download/641fa36d365e0244b27dd2fc8b881a12061afe1eb5c3952bae15614d3d831710/185181/01598057.pdf.
In addition to transformation and rotation conventions, there are a lot of
different naming and frame conventions. Here are some examples.
The following is an incomplete list of conventions for representations of
rotations, orientations, transformations, or poses and coordinate frames
other software packages use. It illustrates the diversity that you will
find when you combine different software systems.
Blender user interface (computer graphics)
XSens MVNX format (motion capture)
Bullet (physics engine)
Eigen (linear algebra library)
Peter Corke’s robotics toolbox
Robot Operating System (ROS) (REP103)
Active transformations
- Conventions for coordinate frames
Axis orientation on body: x forward, y left, z up
Axis orientation in the world: x east, y north, z up (ENU)
Axis orientation of optical camera frame (indicated by suffix
in topic name): z forward, x right, y down
- Euler angles
Active, extrinsic roll-pitch-yaw (xyz) convention (as used, e.g.,
in origin tag of URDF) can be used
In addition, the yaw-pitch-roll (zyx) convention can be used, but
is discouraged
A PoseStamped
is represented with respect to a frame_id
When interpreted as active transformation,
TransformStamped
represents a transformation from child frame to its (parent) frame
Quaternion:
scalar last
Universal Robot user interface