You’re reading an older version of the Slamcore SDK documenation. The latest one is 23.04.

Guide to Trajectories

A trajectory is the time-ordered set of pose estimates generated from a SLAM algorithm. Due to the nature of visual SLAM there are two different trajectories that can be generated, we refer to these as i) optimised and ii) unoptimised. In this section we will look at the differences between them and when to use each one.

Vision based SLAM is trying to jointly optimise the position and the map. As such it is able to update estimates at any point in time, for example when revisiting a previously visited area a process referred to as loop closure will potentially update a significant portion of a map and therefore the historical pose estimates. These updated poses are referred to as the ‘optimised trajectory’.

The unoptimised trajectory comes from the pose estimates that correspond to the poses at the point the measurements are made. These are low-latency estimates and correspond to the best available estimate of pose at a given point in time.

If you want the most accurate pose estimates then you should use the optimised trajectories. If you want the pose estimates at the point the data is captured, then use the unoptimised trajectories.


Only the unoptimised trajectory is shown in the SLAMcore Visualiser.

The data logged in the trajectories are as follows:

  • hw_timestamp [ns]

    Hardware timestamp of the pose in the camera clock reference system

  • acq_timestamp [ns]

    Acquisition timestamps of the pose in Operating System clock time reference system

  • status

    Tracking status (details). LOST and NOT_INIT indicates the pose is unreliable and should not be used.

  • t_{x, y, z} [m]

    Pose coordinates in metres with respect to the reference at the start of SLAM

  • q_{w, x, y, z}

    Orientation as a unit quaternion

You may easily visualise the trajectories in 3D with our Plot Trajectory Python script.