Skip to main content

Introduction

Waymo sample

Tri3D provides a library to manipulate various 3D driving datasets under a unified API with common conventions.

It aims to address the following objectives:

  • Make datasets interchangeable.
  • Enforce common coordinate and data format convention.
  • Provide fast non-sequential access to samples at any given frame.
  • Simplify geometric transformations between sensors and timestamps.

As of now, Tri3D supports the following datasets:

The documentation is hosted at: https://cea-list.github.io/tri3d/

Conventions

The following conventions are adopted across all datasets :

  • An object position designates the center of its bounding box.
  • In the local coordinate system of an object, the x axis points forward, y leftward, and z updward.
  • Length, width and height are the dimensions of the object along x, y and z axes respectively.
  • In camera sensor coordinates, x points rightward, y points downward, z point forward.
  • In image coordinates, x is the pixel column index starting from the left, y is the pixel row index starting from the top, z is the depth in meters along the optical axis.
  • In lidar coordinates, x points in the same direction as the ego car, y points leftward, z points upward.

The differences with raw dataset conventions are documented in each datasets class.

Coordinates convention

Tri3D accounts for timestamps, delays and the movement of the ego car which carries the sensors. For examples, if the boxes of a given dataset are annotated at the timestamps of the LiDAR, retrieving the boxes relative to a camera sensor (ex: boxes(seq=0, frame=5, sensor="cam")) will interpolate the box trajectories at the timestamp of frame 5 for the camera, and it will also return the object poses relatively to the position of that camera at this timestamp.

Sensor timelines and track interpolation

Dataset API

All datasets implement a common interface which provides access to data samples such as:

  • Sensor frames.
  • Acquisition timestamps.
  • Sensor poses.
  • Camera images.
  • Lidar point clouds.
  • 3D box annotations.

Moreover, a powerful .alignment() function can compute the geometric transformation between any pair of frame and sensors coordinates. The tutorial notebook goes through most of these functions.

Tri3D datasets are somewhat low-level, ie. they do not enforce the notion of sweep or keyframe where a sample of each sensor around a timestamp is assembled in a tuple. Instead, datasets expose all available samples of each sensor indexed by a per-sensor frame index. Notably, some sensors may work at a higher frequency and contain more samples than others for a given recording.

When available, keyframes and timestamps are exposed so that coherent tuples of samples can be rebuilt easily. Moreover, geometric transformations and pose interpolation functions are provided to facilitate the creation of new keyframes.

Geometric transformations

Tri3D provides a module which facilitates the creation and manipulation of typical 3D geometric transformations: translation, rotation, affine, camera projections, pose interpolation.

Transformations have a shared interface which supports:

  • Batching: list of transformations can be grouped together, and broadcasting rules are supported.
  • Application to 3D points: applying the transformations to points, again, boadcasting rules are implemented.
  • Composition: it is possible to chain transformation together.
  • Inversion: the inverse of a transformation is readily available.

Object and sensor poses

In Tri3D, the position and orientation of objects (or sensors) in a coordinate system are stored as geometric transformation. For instance, the pose of a camera in a lidar coordinate system is formulated as the composition of the camera rotation and translation relative to the lidar. Coincidently, this is also the geometric transformation which takes points in the camera coordinate system and returns them in the lidar coordinate system.

For sensors, the sensor poses are accessible via the .poses() method. For object annotations, it is provided by the Box.transform attribute.

For example, if we have the pose of a box in lidar coordinates and the pose of the lidar in camera coordinates, then the position of a point 10 meters in front of that box is given by:

seq = 0
frame = 4

# retrieve poses
box = dataset.boxes(seq, frame, coords="lidar")[0]
box2lidar = box.transform
lidar2cam = dataset.poses(seq, sensor="camera", coords="lidar")[frame]

# compute the position of a point 10m in front of the box, in camera coordinates.
xyz = (lidar2cam @ box2lidar).apply([10., 0, 0])

Metadata

Release files for tri3d 0.2.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for tri3d 0.2.2
File Size Uploaded
tri3d-0.2.2.tar.gz 674.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for tri3d 0.2.2
File Interpreter ABI Platform
tri3d-0.2.2-py3-none-any.whl Python 3 none any Details

Total release size: 726.5 kB

Release files / tri3d-0.2.2.tar.gz

Download URL tri3d-0.2.2.tar.gz
Size 674.8 kB
Tags Source
SHA-256 checksum
How to use checksums
1c603887892e44b8d5758191874a0c3cac2beb6723b62443fcca0c2634f7d200
BLAKE2b-256 checksum
How to use checksums
1f36e54ff1702e9f0d25e71ba399111a52e9b040e61e12e74d3766be9d33d165
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.5

Release files / tri3d-0.2.2-py3-none-any.whl

Download URL tri3d-0.2.2-py3-none-any.whl
Size 51.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e87ed247cef99565dd941385090993166360d487f16d750bfbd63598980bf7e2
BLAKE2b-256 checksum
How to use checksums
d5b0dae2f1aec742b761f7a1b80b480a7ce4630f97343f2dddd15499447fc5f2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.5

Release history Release notifications | RSS feed

This release

0.2.2 This release

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page