Robo2u

Frame & Rotation Converter

One orientation, every representation, live. Quaternion in both component orders, Euler angles in all twelve conventions (intrinsic and extrinsic), rotation matrix, axis-angle and OpenCV rvec. Then convert the whole thing between ROS, NED, Unity, Unreal, OpenCV, OpenGL and Blender frames. Everything runs in your browser and nothing you type is sent anywhere.

Rotation angle
0
0 rad
Rotation axis
1, 0, 0
unit vector, angle carries no sign
Quaternion norm
1
unit length
Selected Euler
ZYX intrinsic
roll, pitch, yaw in ROS

01Live conversion

Quaternion

Both component orders are shown. Editing either one updates everything else. Getting these two orders mixed up is the single most common orientation bug in robotics code.

Euler angles

Twelve sequences, each available as intrinsic (the axes move with the body) or extrinsic (the axes stay fixed in the world).

Values above are degrees.
radians
Gimbal state

Axis-angle and rotation vector

The axis is a unit vector, the angle comes back in 0 to 180 degrees. The rotation vector is the same thing collapsed into three numbers, which is exactly what OpenCV calls rvec.

3D gizmo

Coloured axes show the current orientation. The faint grey axes behind them are the reference frame at identity. Drag to orbit, scroll to zoom.

Starting the 3D view.
X Y Z reference frame
Z up, right handed, matching ROS REP-103.

Rotation matrix

Row major, 3x3, applied as v' = R v. Paste a matrix from a log and the orthonormality readout tells you whether it is still a valid rotation.

Orthonormality

Homogeneous 4x4 transform

The same rotation with a translation attached, in the form people actually paste out of a debugger or a tf echo.

4x4
Numbers separated by spaces, commas, brackets or newlines. Nine numbers are read as a 3x3, sixteen as a 4x4, four as a quaternion in the x, y, z, w order.

02Code out

The current rotation, written in the syntax of the tool you are heading to. Ordering and units are already handled.

loading

03Compose and compare

Apply A, then apply B. The result is the quaternion product qB times qA, because the rotation applied last sits on the left. The angular distance is the single number that answers "how far apart are these two orientations".

A then B (x, y, z, w)
0, 0, 0, 1
B then A (x, y, z, w)
0, 0, 0, 1
rotation is not commutative, so this usually differs
Angular distance A to B
0
shortest angle between the two orientations
Relative rotation A to B
0, 0, 0, 1
qA inverse times qB, as x, y, z, w

04Frame convention converter

The current rotation and a position, re-expressed in a different frame convention. Every convention below is defined by where its three axes point, so the basis change is explicit and you can check it by eye.

Handedness Units
P

05Which tool uses which convention

The table people actually search for. Check your source against this before you start debugging signs.

Tool or standard Quaternion order Euler convention Axes and handedness Notes

Why this tool exists

An orientation is one physical thing with a dozen ways to write it down, and the ways disagree about details that never appear in the numbers themselves. ROS writes a quaternion as x, y, z, w. MuJoCo and most papers write the same quaternion as w, x, y, z. A URDF rpy triple is extrinsic XYZ in radians, which is the same rotation as an intrinsic ZYX yaw, pitch, roll triple, and reading it the other way round gives you a robot that is subtly wrong in a way that only shows up when the arm swings. Unity is left handed with y up. Unreal is left handed with z up and measures in centimetres. An OpenCV camera looks down its own +z with +y pointing at the floor. Blender is z up and right handed.

Most orientation bugs come from two pieces of correct code that assumed different conventions and met in the middle. This page puts every representation of one rotation on screen at the same time, names which real tool uses which, and shows the exact basis change when you move between frames, including whether that move flips handedness. The maths is written out in the page source as plain functions, one per idea, so you can check any step yourself.

Everything here runs client side. Nothing you type or paste leaves your machine, and the page makes no network calls once it has loaded.