Skip to content

Commit 5c6b537

Browse files
authored
Merge pull request #91 from autonomousvision/dev_v0.0.9
Merge `dev_v0.0.9` branch to `main`
2 parents 5e3dca8 + a4fde0e commit 5c6b537

205 files changed

Lines changed: 12111 additions & 3570 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/pytest.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: pytest
22

33
on:
44
push:
5-
branches: [main]
5+
pull_request:
66

77
jobs:
88
build:

.gitignore

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@
2626
exp/
2727
.coverage
2828

29+
# internal
30+
benchmarks/*
31+
notebooks/*
32+
2933
# Sphinx documentation
3034
docs/_build/
3135
docs/build/
@@ -35,3 +39,6 @@ _build/
3539

3640
# ruff
3741
.ruff_cache/*
42+
43+
# Other
44+
CLAUDE.md

README.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,18 @@
2525

2626
## Changelog
2727

28+
- **`[2026-02-23]`** v0.0.9
29+
- Added preliminary Waymo Open Motion Dataset support.
30+
- Added support for nuScenes interpolated to 10Hz.
31+
- Replaced gpkg map implementation with Arrow-based format for improved performance.
32+
- Added sensor names and timestamps to camera and Lidar data across all datasets.
33+
- Added ego-to-camera transforms in static metadata.
34+
- Added support for loading merged point clouds in API.
35+
- Improvements to geometry module, in terms of speed and syntax.
36+
- Improved map querying speed and OpenDrive lane connectivity handling.
37+
- Added recommended conversion options to dataset YAML configuration files.
38+
- Improvements in dataset conversion for sensor sync, speed, and memory requirements.
39+
2840
- **`[2025-11-21]`** v0.0.8 (silent release)
2941
- Release of package and documentation.
3042
- Demo data for tutorials.

docs/api/geometry/01_primitives/07_indexing_enums.rst

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,27 @@ Poses
4646
:no-inherited-members:
4747

4848

49+
Matrices
50+
--------
51+
52+
53+
.. autoclass:: py123d.geometry.MatrixSO2Index
54+
:members:
55+
:no-inherited-members:
56+
57+
.. autoclass:: py123d.geometry.MatrixSO3Index
58+
:members:
59+
:no-inherited-members:
60+
61+
.. autoclass:: py123d.geometry.MatrixSE2Index
62+
:members:
63+
:no-inherited-members:
64+
65+
.. autoclass:: py123d.geometry.MatrixSE3Index
66+
:members:
67+
:no-inherited-members:
68+
69+
4970
Bounding Boxes
5071
--------------
5172

docs/api/geometry/02_transform/01_transform_2d.rst

Lines changed: 55 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,73 @@
11
Transforms in 2D
22
^^^^^^^^^^^^^^^^
33

4-
Transform 2D points between frames
5-
----------------------------------
4+
Functions for converting SE(2) poses ``(x, y, yaw)`` and 2D points ``(x, y)``
5+
between coordinate frames. For the 3D counterpart see :doc:`02_transform_3d`.
66

7-
.. autofunction:: py123d.geometry.transform.convert_absolute_to_relative_points_2d_array
87

9-
.. autofunction:: py123d.geometry.transform.convert_relative_to_absolute_points_2d_array
8+
Convert SE2 poses between frames
9+
---------------------------------
1010

11-
.. autofunction:: py123d.geometry.transform.convert_points_2d_array_between_origins
11+
Convert between absolute and relative coordinates:
1212

13+
- :func:`~py123d.geometry.transform.abs_to_rel_se2_array` /
14+
:func:`~py123d.geometry.transform.abs_to_rel_se2` --
15+
absolute → relative: :math:`T_\text{rel} = T_\text{origin}^{-1} \cdot T_\text{abs}`
1316

17+
- :func:`~py123d.geometry.transform.rel_to_abs_se2_array` /
18+
:func:`~py123d.geometry.transform.rel_to_abs_se2` --
19+
relative → absolute: :math:`T_\text{abs} = T_\text{origin} \cdot T_\text{rel}`
20+
21+
- :func:`~py123d.geometry.transform.reframe_se2_array` /
22+
:func:`~py123d.geometry.transform.reframe_se2` --
23+
re-express poses from one reference frame to another.
24+
25+
.. autofunction:: py123d.geometry.transform.abs_to_rel_se2_array
26+
27+
.. autofunction:: py123d.geometry.transform.abs_to_rel_se2
28+
29+
.. autofunction:: py123d.geometry.transform.rel_to_abs_se2_array
30+
31+
.. autofunction:: py123d.geometry.transform.rel_to_abs_se2
32+
33+
.. autofunction:: py123d.geometry.transform.reframe_se2_array
34+
35+
.. autofunction:: py123d.geometry.transform.reframe_se2
1436

15-
Transform SE2 poses between frames
16-
----------------------------------
1737

18-
.. autofunction:: py123d.geometry.transform.convert_absolute_to_relative_se2_array
38+
Convert 2D points between frames
39+
---------------------------------
1940

20-
.. autofunction:: py123d.geometry.transform.convert_relative_to_absolute_se2_array
41+
The same absolute/relative/reframe operations, applied to 2D points instead of
42+
SE2 poses:
2143

22-
.. autofunction:: py123d.geometry.transform.convert_se2_array_between_origins
44+
- :func:`~py123d.geometry.transform.abs_to_rel_points_2d_array` /
45+
:func:`~py123d.geometry.transform.abs_to_rel_point_2d`
2346

47+
- :func:`~py123d.geometry.transform.rel_to_abs_points_2d_array` /
48+
:func:`~py123d.geometry.transform.rel_to_abs_point_2d`
2449

50+
- :func:`~py123d.geometry.transform.reframe_points_2d_array` /
51+
:func:`~py123d.geometry.transform.reframe_point_2d`
52+
53+
.. autofunction:: py123d.geometry.transform.abs_to_rel_points_2d_array
54+
55+
.. autofunction:: py123d.geometry.transform.abs_to_rel_point_2d
56+
57+
.. autofunction:: py123d.geometry.transform.rel_to_abs_points_2d_array
58+
59+
.. autofunction:: py123d.geometry.transform.rel_to_abs_point_2d
60+
61+
.. autofunction:: py123d.geometry.transform.reframe_points_2d_array
62+
63+
.. autofunction:: py123d.geometry.transform.reframe_point_2d
64+
65+
66+
Translation along body-frame axes
67+
----------------------------------
2568

26-
Translation along frame axes
27-
----------------------------
69+
Translate SE2 poses or 2D points along their local (body) coordinate axes.
70+
The yaw / orientation is preserved.
2871

2972
.. autofunction:: py123d.geometry.transform.translate_se2_along_body_frame
3073

docs/api/geometry/02_transform/02_transform_3d.rst

Lines changed: 55 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,73 @@
11
Transforms in 3D
22
^^^^^^^^^^^^^^^^
33

4-
Transform 3D points between frames
5-
----------------------------------
4+
Functions for converting SE(3) poses ``(x, y, z, qw, qx, qy, qz)`` and 3D points
5+
``(x, y, z)`` between coordinate frames. Rotations are represented as unit
6+
quaternions. For the 2D counterpart see :doc:`01_transform_2d`.
67

7-
.. autofunction:: py123d.geometry.transform.convert_absolute_to_relative_points_3d_array
88

9-
.. autofunction:: py123d.geometry.transform.convert_relative_to_absolute_points_3d_array
9+
Convert SE3 poses between frames
10+
---------------------------------
1011

11-
.. autofunction:: py123d.geometry.transform.convert_points_3d_array_between_origins
12+
Convert between absolute and relative coordinates:
1213

14+
- :func:`~py123d.geometry.transform.abs_to_rel_se3_array` /
15+
:func:`~py123d.geometry.transform.abs_to_rel_se3` --
16+
absolute → relative: :math:`T_\text{rel} = T_\text{origin}^{-1} \cdot T_\text{abs}`
1317

18+
- :func:`~py123d.geometry.transform.rel_to_abs_se3_array` /
19+
:func:`~py123d.geometry.transform.rel_to_abs_se3` --
20+
relative → absolute: :math:`T_\text{abs} = T_\text{origin} \cdot T_\text{rel}`
1421

15-
Transform SE3 poses between frames
16-
----------------------------------
22+
- :func:`~py123d.geometry.transform.reframe_se3_array` /
23+
:func:`~py123d.geometry.transform.reframe_se3` --
24+
re-express poses from one reference frame to another.
25+
26+
.. autofunction:: py123d.geometry.transform.abs_to_rel_se3_array
27+
28+
.. autofunction:: py123d.geometry.transform.abs_to_rel_se3
29+
30+
.. autofunction:: py123d.geometry.transform.rel_to_abs_se3_array
31+
32+
.. autofunction:: py123d.geometry.transform.rel_to_abs_se3
33+
34+
.. autofunction:: py123d.geometry.transform.reframe_se3_array
35+
36+
.. autofunction:: py123d.geometry.transform.reframe_se3
37+
38+
Convert 3D points between frames
39+
---------------------------------
1740

18-
.. autofunction:: py123d.geometry.transform.convert_absolute_to_relative_se3_array
41+
The same absolute/relative/reframe operations, applied to 3D points instead of
42+
SE3 poses:
1943

20-
.. autofunction:: py123d.geometry.transform.convert_relative_to_absolute_se3_array
44+
- :func:`~py123d.geometry.transform.abs_to_rel_points_3d_array` /
45+
:func:`~py123d.geometry.transform.abs_to_rel_point_3d`
2146

22-
.. autofunction:: py123d.geometry.transform.convert_se3_array_between_origins
47+
- :func:`~py123d.geometry.transform.rel_to_abs_points_3d_array` /
48+
:func:`~py123d.geometry.transform.rel_to_abs_point_3d`
2349

50+
- :func:`~py123d.geometry.transform.reframe_points_3d_array` /
51+
:func:`~py123d.geometry.transform.reframe_point_3d`
2452

53+
.. autofunction:: py123d.geometry.transform.abs_to_rel_points_3d_array
54+
55+
.. autofunction:: py123d.geometry.transform.abs_to_rel_point_3d
56+
57+
.. autofunction:: py123d.geometry.transform.rel_to_abs_points_3d_array
58+
59+
.. autofunction:: py123d.geometry.transform.rel_to_abs_point_3d
60+
61+
.. autofunction:: py123d.geometry.transform.reframe_points_3d_array
62+
63+
.. autofunction:: py123d.geometry.transform.reframe_point_3d
64+
65+
66+
Translation along body-frame axes
67+
----------------------------------
2568

26-
Translation along frame axes
27-
----------------------------
69+
Translate SE3 poses or 3D points along their local (body) coordinate axes.
70+
The orientation is preserved.
2871

2972
.. autofunction:: py123d.geometry.transform.translate_se3_along_body_frame
3073

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,19 @@
11
Transforms
22
----------
33

4+
Coordinate-frame transformations for SE(2) and SE(3) poses and points.
5+
6+
Each function comes in two variants:
7+
8+
- **Array functions** (suffix ``_array``) operate on raw NumPy arrays and support
9+
batch dimensions.
10+
- **Typed functions** (no suffix) accept and return typed geometry objects
11+
(:class:`~py123d.geometry.PoseSE2`, :class:`~py123d.geometry.PoseSE3`,
12+
:class:`~py123d.geometry.Point2D`, :class:`~py123d.geometry.Point3D`).
13+
414

515
.. toctree::
616
:maxdepth: 2
717

8-
918
01_transform_2d
1019
02_transform_3d

docs/conf.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
project = "py123d"
1111
copyright = "2025"
1212
author = "DanielDauner"
13-
release = "v0.0.8"
13+
release = "v0.0.9"
1414

1515
# -- General configuration ---------------------------------------------------
1616
# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration

docs/datasets/av2.rst

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -162,26 +162,28 @@ You can also override the file path and run:
162162

163163
.. code-block:: bash
164164
165-
py123d-conversion datasets=["av2_sensor_dataset"] \
165+
py123d-conversion datasets=["av2-sensor"] \
166166
dataset_paths.av2_data_root=$AV2_DATA_ROOT # optional if env variable is set
167167
168168
169+
.. note::
170+
The conversion of AV2 by default does not store sensor data in the logs, but only relative file paths.
171+
To change this behavior, you need to adapt the ``av2-sensor.yaml`` converter configuration.
169172

170173
Dataset Issues
171174
~~~~~~~~~~~~~~
172175

173176
- **Ego Vehicle:** The vehicle parameters are partially estimated and may be subject to inaccuracies.
174177

175178

176-
177179
Citation
178180
~~~~~~~~
179181

180182
If you use this dataset in your research, please cite:
181183

182184
.. code-block:: bibtex
183185
184-
@article{Wilson2023NEURIPS,
186+
@article{Wilson2021NEURIPS,
185187
author = {Benjamin Wilson and William Qi and Tanmay Agarwal and John Lambert and Jagjeet Singh and Siddhesh Khandelwal and Bowen Pan and Ratnesh Kumar and Andrew Hartnett and Jhony Kaesemodel Pontes and Deva Ramanan and Peter Carr and James Hays},
186188
title = {Argoverse 2: Next Generation Datasets for Self-Driving Perception and Forecasting},
187189
booktitle = {Proceedings of the Neural Information Processing Systems Track on Datasets and Benchmarks (NeurIPS Datasets and Benchmarks 2021)},

docs/datasets/carla.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ CARLA is an open-source simulator for autonomous driving research.
77
As such CARLA data is synthetic and can be generated with varying sensor and environmental conditions.
88
The following documentation is largely incomplete and merely describes the provided demo data.
99

10+
.. note::
11+
Data from the CARLA simulator can be collected using the `LEAD framework <https://github.com/autonomousvision/lead>`_, which provides a state-of-the-art expert driver in CARLA.
12+
1013
.. dropdown:: Quick Links
1114
:open:
1215

0 commit comments

Comments
 (0)