Frame Conventions¶
This page describes the coordinate frame conventions used in viser.
Scene Tree Naming¶
Each object added to the scene in viser is instantiated as a node in a hierarchical scene tree. The structure of this tree is determined by the names assigned to the nodes.
If we add a coordinate frame called /base_link/shoulder/wrist, it creates three nodes:
wristis a child ofshouldershoulderis a child ofbase_linkbase_linkis the root node
When we set the transformation of a parent node like /base_link/shoulder:
✅ Both the node and all its children (e.g.,
/base_link/shoulder/wrist) will move❌ Its parent (
/base_link) remains unaffected
Poses¶
Poses in viser are defined using two components:
Field |
Description |
|---|---|
|
Unit quaternion orientation term (always 4D: w, x, y, z) |
|
Translation vector (always 3D: x, y, z) |
These correspond to a transformation from coordinates in the local frame to the parent frame:
where wxyz represents the quaternion form of the \(\mathrm{SO}(3)\) rotation matrix \(R\) and position represents the \(\mathbb{R}^3\) translation vector \(t\).
World Coordinates¶
In the world coordinate space, +Z points upward by default. This can be overridden with viser.SceneApi.set_up_direction().
Camera Conventions¶
In viser, all camera parameters use the COLMAP/OpenCV convention:
Axis |
Direction |
|---|---|
Forward |
+Z |
Up |
-Y |
Right |
+X |
Note
Difference from Nerfstudio
This is different from Nerfstudio, which uses the OpenGL/Blender convention:
Forward: -Z, Up: +Y, Right: +X
Conversion: A simple 180° rotation around the local X-axis converts between the two conventions.
See also
Related Documentation
ViserServerfor scene managementset_up_direction()for coordinate system configurationtransformsfor transformation utilities