borisww commited on
Commit
f5a5b86
·
0 Parent(s):

OnePlanner v1.0

Browse files
.gitattributes ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tar filter=lfs diff=lfs merge=lfs -text
29
+ *.tflite filter=lfs diff=lfs merge=lfs -text
30
+ *.tgz filter=lfs diff=lfs merge=lfs -text
31
+ *.wasm filter=lfs diff=lfs merge=lfs -text
32
+ *.xz filter=lfs diff=lfs merge=lfs -text
33
+ *.zip filter=lfs diff=lfs merge=lfs -text
34
+ *.zst filter=lfs diff=lfs merge=lfs -text
35
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ *.webp filter=lfs diff=lfs merge=lfs -text
37
+ media/oneplanner_scenes.png filter=lfs diff=lfs merge=lfs -text
38
+ replay.mp4 filter=lfs diff=lfs merge=lfs -text
.gitignore ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ # TensorRT engines and their identity files, built and cached beside the ONNX files by
2
+ # autoware_oneplanner on first launch. They are specific to the GPU architecture and TensorRT
3
+ # version they are built on and must not be committed.
4
+ *.engine
5
+ *.engine.identity
LICENSE ADDED
@@ -0,0 +1,201 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ http://www.apache.org/licenses/
4
+
5
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6
+
7
+ 1. Definitions.
8
+
9
+ "License" shall mean the terms and conditions for use, reproduction,
10
+ and distribution as defined by Sections 1 through 9 of this document.
11
+
12
+ "Licensor" shall mean the copyright owner or entity authorized by
13
+ the copyright owner that is granting the License.
14
+
15
+ "Legal Entity" shall mean the union of the acting entity and all
16
+ other entities that control, are controlled by, or are under common
17
+ control with that entity. For the purposes of this definition,
18
+ "control" means (i) the power, direct or indirect, to cause the
19
+ direction or management of such entity, whether by contract or
20
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
21
+ outstanding shares, or (iii) beneficial ownership of such entity.
22
+
23
+ "You" (or "Your") shall mean an individual or Legal Entity
24
+ exercising permissions granted by this License.
25
+
26
+ "Source" form shall mean the preferred form for making modifications,
27
+ including but not limited to software source code, documentation
28
+ source, and configuration files.
29
+
30
+ "Object" form shall mean any form resulting from mechanical
31
+ transformation or translation of a Source form, including but
32
+ not limited to compiled object code, generated documentation,
33
+ and conversions to other media types.
34
+
35
+ "Work" shall mean the work of authorship, whether in Source or
36
+ Object form, made available under the License, as indicated by a
37
+ copyright notice that is included in or attached to the work
38
+ (an example is provided in the Appendix below).
39
+
40
+ "Derivative Works" shall mean any work, whether in Source or Object
41
+ form, that is based on (or derived from) the Work and for which the
42
+ editorial revisions, annotations, elaborations, or other modifications
43
+ represent, as a whole, an original work of authorship. For the purposes
44
+ of this License, Derivative Works shall not include works that remain
45
+ separable from, or merely link (or bind by name) to the interfaces of,
46
+ the Work and Derivative Works thereof.
47
+
48
+ "Contribution" shall mean any work of authorship, including
49
+ the original version of the Work and any modifications or additions
50
+ to that Work or Derivative Works thereof, that is intentionally
51
+ submitted to Licensor for inclusion in the Work by the copyright owner
52
+ or by an individual or Legal Entity authorized to submit on behalf of
53
+ the copyright owner. For the purposes of this definition, "submitted"
54
+ means any form of electronic, verbal, or written communication sent
55
+ to the Licensor or its representatives, including but not limited to
56
+ communication on electronic mailing lists, source code control systems,
57
+ and issue tracking systems that are managed by, or on behalf of, the
58
+ Licensor for the purpose of discussing and improving the Work, but
59
+ excluding communication that is conspicuously marked or otherwise
60
+ designated in writing by the copyright owner as "Not a Contribution."
61
+
62
+ "Contributor" shall mean Licensor and any individual or Legal Entity
63
+ on behalf of whom a Contribution has been received by Licensor and
64
+ subsequently incorporated within the Work.
65
+
66
+ 2. Grant of Copyright License. Subject to the terms and conditions of
67
+ this License, each Contributor hereby grants to You a perpetual,
68
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69
+ copyright license to reproduce, prepare Derivative Works of,
70
+ publicly display, publicly perform, sublicense, and distribute the
71
+ Work and such Derivative Works in Source or Object form.
72
+
73
+ 3. Grant of Patent License. Subject to the terms and conditions of
74
+ this License, each Contributor hereby grants to You a perpetual,
75
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76
+ (except as stated in this section) patent license to make, have made,
77
+ use, offer to sell, sell, import, and otherwise transfer the Work,
78
+ where such license applies only to those patent claims licensable
79
+ by such Contributor that are necessarily infringed by their
80
+ Contribution(s) alone or by combination of their Contribution(s)
81
+ with the Work to which such Contribution(s) was submitted. If You
82
+ institute patent litigation against any entity (including a
83
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
84
+ or a Contribution incorporated within the Work constitutes direct
85
+ or contributory patent infringement, then any patent licenses
86
+ granted to You under this License for that Work shall terminate
87
+ as of the date such litigation is filed.
88
+
89
+ 4. Redistribution. You may reproduce and distribute copies of the
90
+ Work or Derivative Works thereof in any medium, with or without
91
+ modifications, and in Source or Object form, provided that You
92
+ meet the following conditions:
93
+
94
+ (a) You must give any other recipients of the Work or
95
+ Derivative Works a copy of this License; and
96
+
97
+ (b) You must cause any modified files to carry prominent notices
98
+ stating that You changed the files; and
99
+
100
+ (c) You must retain, in the Source form of any Derivative Works
101
+ that You distribute, all copyright, patent, trademark, and
102
+ attribution notices from the Source form of the Work,
103
+ excluding those notices that do not pertain to any part of
104
+ the Derivative Works; and
105
+
106
+ (d) If the Work includes a "NOTICE" text file as part of its
107
+ distribution, then any Derivative Works that You distribute must
108
+ include a readable copy of the attribution notices contained
109
+ within such NOTICE file, excluding those notices that do not
110
+ pertain to any part of the Derivative Works, in at least one
111
+ of the following places: within a NOTICE text file distributed
112
+ as part of the Derivative Works; within the Source form or
113
+ documentation, if provided along with the Derivative Works; or,
114
+ within a display generated by the Derivative Works, if and
115
+ wherever such third-party notices normally appear. The contents
116
+ of the NOTICE file are for informational purposes only and
117
+ do not modify the License. You may add Your own attribution
118
+ notices within Derivative Works that You distribute, alongside
119
+ or as an addendum to the NOTICE text from the Work, provided
120
+ that such additional attribution notices cannot be construed
121
+ as modifying the License.
122
+
123
+ You may add Your own copyright statement to Your modifications and
124
+ may provide additional or different license terms and conditions
125
+ for use, reproduction, or distribution of Your modifications, or
126
+ for any such Derivative Works as a whole, provided Your use,
127
+ reproduction, and distribution of the Work otherwise complies with
128
+ the conditions stated in this License.
129
+
130
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
131
+ any Contribution intentionally submitted for inclusion in the Work
132
+ by You to the Licensor shall be under the terms and conditions of
133
+ this License, without any additional terms or conditions.
134
+ Notwithstanding the above, nothing herein shall supersede or modify
135
+ the terms of any separate license agreement you may have executed
136
+ with Licensor regarding such Contributions.
137
+
138
+ 6. Trademarks. This License does not grant permission to use the trade
139
+ names, trademarks, service marks, or product names of the Licensor,
140
+ except as required for reasonable and customary use in describing the
141
+ origin of the Work and reproducing the content of the NOTICE file.
142
+
143
+ 7. Disclaimer of Warranty. Unless required by applicable law or
144
+ agreed to in writing, Licensor provides the Work (and each
145
+ Contributor provides its Contributions) on an "AS IS" BASIS,
146
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147
+ implied, including, without limitation, any warranties or conditions
148
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149
+ PARTICULAR PURPOSE. You are solely responsible for determining the
150
+ appropriateness of using or redistributing the Work and assume any
151
+ risks associated with Your exercise of permissions under this License.
152
+
153
+ 8. Limitation of Liability. In no event and under no legal theory,
154
+ whether in tort (including negligence), contract, or otherwise,
155
+ unless required by applicable law (such as deliberate and grossly
156
+ negligent acts) or agreed to in writing, shall any Contributor be
157
+ liable to You for damages, including any direct, indirect, special,
158
+ incidental, or consequential damages of any character arising as a
159
+ result of this License or out of the use or inability to use the
160
+ Work (including but not limited to damages for loss of goodwill,
161
+ work stoppage, computer failure or malfunction, or any and all
162
+ other commercial damages or losses), even if such Contributor
163
+ has been advised of the possibility of such damages.
164
+
165
+ 9. Accepting Warranty or Additional Liability. While redistributing
166
+ the Work or Derivative Works thereof, You may choose to offer,
167
+ and charge a fee for, acceptance of support, warranty, indemnity,
168
+ or other liability obligations and/or rights consistent with this
169
+ License. However, in accepting such obligations, You may act only
170
+ on Your own behalf and on Your sole responsibility, not on behalf
171
+ of any other Contributor, and only if You agree to indemnify,
172
+ defend, and hold each Contributor harmless for any liability
173
+ incurred by, or claims asserted against, such Contributor by reason
174
+ of your accepting any such warranty or additional liability.
175
+
176
+ END OF TERMS AND CONDITIONS
177
+
178
+ APPENDIX: How to apply the Apache License to your work.
179
+
180
+ To apply the Apache License to your work, attach the following
181
+ boilerplate notice, with the fields enclosed by brackets "[]"
182
+ replaced with your own identifying information. (Don't include
183
+ the brackets!) The text should be enclosed in the appropriate
184
+ comment syntax for the file format. We also recommend that a
185
+ file or class name and description of purpose be included on the
186
+ same "printed page" as the copyright notice for easier
187
+ identification within third-party archives.
188
+
189
+ Copyright [yyyy] [name of copyright owner]
190
+
191
+ Licensed under the Apache License, Version 2.0 (the "License");
192
+ you may not use this file except in compliance with the License.
193
+ You may obtain a copy of the License at
194
+
195
+ http://www.apache.org/licenses/LICENSE-2.0
196
+
197
+ Unless required by applicable law or agreed to in writing, software
198
+ distributed under the License is distributed on an "AS IS" BASIS,
199
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
+ See the License for the specific language governing permissions and
201
+ limitations under the License.
README.md ADDED
@@ -0,0 +1,185 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: apache-2.0
3
+ pipeline_tag: robotics
4
+ tags:
5
+ - autoware
6
+ - ros2
7
+ - autonomous-driving
8
+ - planning
9
+ - end-to-end
10
+ - e2e
11
+ - trajectory-generation
12
+ - lidar
13
+ - bird-eye-view
14
+ - 3d-object-detection
15
+ - tensorrt
16
+ - onnx
17
+ - oneplanner
18
+ ---
19
+
20
+ # OnePlanner for Autoware (`oneplanner`)
21
+
22
+ End-to-end planning model for autonomous driving, run in [Autoware](https://github.com/autowarefoundation/autoware)
23
+ by the [`autoware_oneplanner`](https://github.com/autowarefoundation/autoware_oneplanner) ROS 2 node.
24
+ OnePlanner turns the LiDAR point cloud, the Lanelet2 vector map, the route, traffic-light states and the ego
25
+ state into a 6 s ego trajectory, at the LiDAR's rate. A frozen BEVFusion-L backbone turns each point cloud into
26
+ a bird's-eye-view (BEV) feature map, and the planner reads a temporal history of those maps together with the
27
+ vector-map, route and ego context.
28
+
29
+ <p align="center">
30
+ <img src="media/oneplanner_scenes.png" width="100%" alt="Six scenes: crossing a large intersection on green, a right turn at a signalized intersection, a sweeping curve at 40 km/h, holding at a red light and turning left on green, stopping for a red light, and slowing behind traffic queued at a red light">
31
+ </p>
32
+
33
+ ## Model overview
34
+
35
+ | | |
36
+ | --- | --- |
37
+ | Task | Ego trajectory planning: a 6 s trajectory at 0.1 s steps, a second (prior) trajectory and turn-indicator logits, plus 3D object detection from the backbone's head |
38
+ | Inputs | Concatenated LiDAR point cloud; 3 s of ego history and the ego state; the nearest lanes, route lanes, polygons and line strings within ±100 m with their traffic-light states and speed limits; the route goal |
39
+ | Architecture | BEVFusion-L LiDAR backbone (sparse-convolution voxel encoder with a detection head, 8.3M parameters, frozen) → 512 × 180 × 180 BEV feature map over ±122.4 m → planner over a history of 3 BEV maps 0.5 s apart and the vector-map context (27.3M parameters) |
40
+ | Runtime | TensorRT through the `autoware_oneplanner` node: the planner in fp32, the backbone in fp16 |
41
+ | Latency | About 13 ms per planning pass (median), about 9 ms of it planner inference, on an NVIDIA RTX PRO 6000 Blackwell Max-Q; the BEV feature extraction runs per LiDAR frame, outside the pass |
42
+ | Format | ONNX (opset 18). The backbone uses the sparse-convolution plugins of `autoware_tensorrt_plugins`; the planner needs no plugin. TensorRT engines are built locally |
43
+ | License | Apache-2.0 |
44
+
45
+ ## Files
46
+
47
+ | File | Description |
48
+ | --- | --- |
49
+ | `oneplanner_planner.onnx` | The planner graph, with static shapes |
50
+ | `bevfusion_lidar_feature.onnx` | The BEVFusion-L LiDAR backbone: voxels in, the BEV feature map and undecoded detection proposals out |
51
+ | `ml_package_oneplanner.param.yaml` | The network description the node reads: input convention, tensor names, voxelization geometry, BEV history, detection thresholds, horizon and precision |
52
+ | `media/` | The scenes on this page |
53
+ | `replay.mp4` | An open-loop replay of two recorded drives, shown as this page's video preview |
54
+ | `deploy_metadata.yaml` | Deployment metadata recording the artifact version of this repository |
55
+ | `SHA256SUMS` | Checksums of the files above |
56
+
57
+ > **TensorRT engines are not distributed here.** Engines are specific to the GPU architecture and TensorRT
58
+ > version they are built on. The node builds one per graph on first launch and caches it beside the ONNX file
59
+ > (`<stem>.engine`, with a `<stem>.engine.identity` file that triggers a rebuild when anything changes), so the
60
+ > model directory must be writable. `build_only:=true` builds them and exits.
61
+
62
+ ## Inputs and outputs
63
+
64
+ ### ROS 2 interface (as used by the node)
65
+
66
+ **Inputs**
67
+
68
+ | Topic | Message type | Description |
69
+ | --- | --- | --- |
70
+ | `~/input/pointcloud` | `sensor_msgs/msg/PointCloud2` | Concatenated point cloud in `base_link`, Autoware `PointXYZIRC` layout |
71
+ | `~/input/odometry` | `nav_msgs/msg/Odometry` | Ego pose and twist |
72
+ | `~/input/acceleration` | `geometry_msgs/msg/AccelWithCovarianceStamped` | Ego acceleration |
73
+ | `~/input/steering` | `autoware_vehicle_msgs/msg/SteeringReport` | Steering tire angle |
74
+ | `~/input/velocity` | `autoware_vehicle_msgs/msg/VelocityReport` | Vehicle speed, used where the odometry twist is exactly zero |
75
+ | `~/input/traffic_signals` | `autoware_perception_msgs/msg/TrafficLightGroupArray` | Traffic-light recognition |
76
+ | `~/input/route` | `autoware_planning_msgs/msg/LaneletRoute` | Mission route |
77
+ | `~/input/vector_map` | `autoware_map_msgs/msg/LaneletMapBin` | Lanelet2 map |
78
+
79
+ **Outputs**
80
+
81
+ | Topic | Message type | Description |
82
+ | --- | --- | --- |
83
+ | `~/output/trajectory` | `autoware_planning_msgs/msg/Trajectory` | Ego trajectory in `map`: a point at t = 0, then one per 0.1 s for 6 s |
84
+ | `~/output/trajectories` | `autoware_internal_planning_msgs/msg/CandidateTrajectories` | The trajectory and the prior trajectory as candidates |
85
+ | `~/output/turn_indicators` | `autoware_vehicle_msgs/msg/TurnIndicatorsCommand` | Turn-indicator command from the model's logits, filtered by the node |
86
+ | `~/output/detected_objects` | `autoware_perception_msgs/msg/DetectedObjects` | Objects of the backbone's detection head, one message per LiDAR frame |
87
+ | `/diagnostics` | `diagnostic_msgs/msg/DiagnosticArray` | `inference_status` |
88
+
89
+ ### Graphs
90
+
91
+ The node reads the planner graph's input manifest and fills every input; all coordinates are in the ego frame
92
+ of the planning pose, x forward, y left, metres. The
93
+ [model contract](https://github.com/autowarefoundation/autoware_oneplanner/blob/main/autoware_oneplanner/docs/model_contract.md)
94
+ specifies each tensor's content.
95
+
96
+ **Planner** (`oneplanner_planner.onnx`)
97
+
98
+ | Tensor | dtype / shape | Content |
99
+ | --- | --- | --- |
100
+ | `bev_feature_history` | float32 `[1, 3, 512, 180, 180]` | The last 3 BEV maps, 0.5 s apart, current first, each warped into the planning frame |
101
+ | `ego_current_state` | float32 `[1, 10]` | Ego pose in its own frame, velocity, acceleration, steering tire angle, yaw rate |
102
+ | `ego_agent_past` | float32 `[1, 31, 4]` | Ego poses over the last 3 s at 0.1 s |
103
+ | `lanes`, `lanes_speed_limit`, `lanes_has_speed_limit`, `lanes_on_route` | `[1, 140, 20, 33]`, `[1, 140, 1]`, bool `[1, 140, 1]`, `[1, 140, 2]` | The 140 nearest lanes: centerline, bounds, traffic-light state and line types per point; speed limit; route membership |
104
+ | `route_lanes`, `route_lanes_speed_limit`, `route_lanes_has_speed_limit` | `[1, 25, 20, 33]`, `[1, 25, 1]`, bool `[1, 25, 1]` | The route's next 25 lanes |
105
+ | `polygons` | float32 `[1, 32, 40, 4]` | Intersection areas and crosswalks |
106
+ | `line_strings` | float32 `[1, 128, 20, 4]` | Stop lines and road borders |
107
+ | `goal_pose` | float32 `[1, 4]` | Route goal |
108
+ | `ego_shape` | float32 `[1, 3]` | Wheel base, length, width |
109
+ | `sensor_latency` | float32 `[1, 1]` | Time from the LiDAR stamp to the planning time, in seconds |
110
+ | `turn_indicators` | int32 `[1, 31]` | Carried for a stable signature only; the node binds a constant |
111
+
112
+ | Output | dtype / shape | Content |
113
+ | --- | --- | --- |
114
+ | `trajectory` | float32 `[1, 60, 4]` | x, y, cos(yaw), sin(yaw) at 0.1 s … 6.0 s |
115
+ | `prior_trajectory` | float32 `[1, 60, 4]` | A second ego trajectory, published as a candidate |
116
+ | `turn_indicator_logits` | float32 `[1, 3]` | Logits of DISABLE, ENABLE_LEFT, ENABLE_RIGHT |
117
+
118
+ **Backbone** (`bevfusion_lidar_feature.onnx`)
119
+
120
+ | Tensor | dtype / shape | Content |
121
+ | --- | --- | --- |
122
+ | `voxels` (in) | float32 `[M, 32, 5]` | Points per voxel: x, y, z, intensity, time lag; voxel size 0.17 × 0.17 × 0.2 m over ±122.4 m, z −3…5 m |
123
+ | `coors` (in) | int32 `[M, 3]` | Voxel coordinates z, y, x |
124
+ | `num_points_per_voxel` (in) | int32 `[M]` | Valid points per voxel; M up to 256,000 |
125
+ | `bev_feature` (out) | float32 `[1, 512, 180, 180]` | The BEV feature map |
126
+ | `bbox_pred`, `score`, `label_pred` (out) | `[10, 500]`, `[500]`, int64 `[500]` | Undecoded detection proposals for car, truck, bus, bicycle, pedestrian, traffic cone and barrier |
127
+
128
+ ## Usage in Autoware
129
+
130
+ Build [`autoware_oneplanner`](https://github.com/autowarefoundation/autoware_oneplanner) in an Autoware
131
+ workspace as its README describes (ROS 2, Autoware Core, an NVIDIA GPU with CUDA and TensorRT 10, and
132
+ `autoware_tensorrt_plugins` from Autoware Universe for the backbone). Then download the model to the node's
133
+ default model directory and launch it:
134
+
135
+ ```bash
136
+ hf download AutowareFoundation/oneplanner --revision v1.0 --local-dir ~/autoware_data/oneplanner
137
+ ros2 launch autoware_oneplanner oneplanner.launch.xml \
138
+ model_path:=$HOME/autoware_data/oneplanner model_name:=oneplanner
139
+ ```
140
+
141
+ Pin `--revision` to a tag rather than relying on `main`, and add `--exclude "media/*" "replay.mp4"` to skip
142
+ the demo media. The first launch builds both TensorRT engines, which takes several minutes. To see the output in
143
+ Autoware's RViz layout, remap `output_trajectory:=/planning/trajectory`; to drive with it, wire it into your
144
+ planning stack's trajectory input behind Autoware's trajectory validation.
145
+
146
+ The node feeds the inputs the model was trained with, the `oneplanner_v1` input convention: the ego state as
147
+ recorded, the map conversion, the traffic-light selection and the temporal BEV history are specified in the
148
+ model contract, and the node refuses a model package that states another convention.
149
+
150
+ ## Training
151
+
152
+ The planner was trained by TIER IV on driving data recorded in Japan; the data is not public. The BEVFusion-L
153
+ backbone was trained with [AWML](https://github.com/tier4/AWML) and kept frozen while the planner was trained.
154
+ Accuracy figures are measured on internal validation data and are not published.
155
+
156
+ ## Limitations
157
+
158
+ - **Research model.** It is not a certified driving system and must not control a vehicle on public roads.
159
+ Run it in simulation, on closed courses, or with a trained safety driver and independent safeguards
160
+ downstream of the planner; see the node's
161
+ [DISCLAIMER](https://github.com/autowarefoundation/autoware_oneplanner/blob/main/DISCLAIMER.md).
162
+ - **Other road users through the LiDAR only.** The planner reads no tracked or predicted objects: other road
163
+ users reach it through the BEV features of the point cloud.
164
+ - **Sensor setup and domain.** Trained on the vehicles, LiDAR configuration and roads of its training data in
165
+ Japan (left-hand traffic, Japanese traffic lights). Performance on other platforms and operational domains is
166
+ not characterized.
167
+ - **Evaluation.** The video preview and the scenes on this page are open-loop replays of recorded drives: the
168
+ plan is drawn against the path a person drove, not executed.
169
+
170
+ ## Provenance
171
+
172
+ | | |
173
+ | --- | --- |
174
+ | Source | Exported to ONNX by the OnePlanner training code |
175
+ | This repository | `AutowareFoundation/oneplanner`, tag `v1.0` |
176
+
177
+ The graphs are the exported files, renamed to the node's default file names. `SHA256SUMS` lists their
178
+ checksums.
179
+
180
+ ## References
181
+
182
+ - `autoware_oneplanner`: <https://github.com/autowarefoundation/autoware_oneplanner>
183
+ - Model contract: <https://github.com/autowarefoundation/autoware_oneplanner/blob/main/autoware_oneplanner/docs/model_contract.md>
184
+ - AWML: <https://github.com/tier4/AWML>
185
+ - Autoware: <https://github.com/autowarefoundation/autoware>
SHA256SUMS ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4 LICENSE
2
+ d701f6c37b44af6a04deab43535c0ff7ed81142def56126bd0df4690f4e57e8e bevfusion_lidar_feature.onnx
3
+ 6bd2eba88475af5e5a823eb39b6994e1c45a820049e73500f40a114dd0f3fb03 deploy_metadata.yaml
4
+ b926d057b249bb170cd13c4ff6d5b343451a0153e2a4b9a87af1abbe162f05d3 media/oneplanner_scenes.png
5
+ b1875e9863eabd1604ffc9a99ef9c1447f4c6aee59059d20db5509c460c1b95c ml_package_oneplanner.param.yaml
6
+ dd7271bfbfc3bad2d9ec2c2faf1bceafd677d2e8ebc8d6b082961db638128ee4 oneplanner_planner.onnx
7
+ 71c6112962ad280b48ff4278bd6d5b97cb20ee7c034ec2e482ebcd4c71d2ba1c replay.mp4
bevfusion_lidar_feature.onnx ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d701f6c37b44af6a04deab43535c0ff7ed81142def56126bd0df4690f4e57e8e
3
+ size 33765961
deploy_metadata.yaml ADDED
@@ -0,0 +1 @@
 
 
1
+ version: v1.0
media/oneplanner_scenes.png ADDED

Git LFS Details

  • SHA256: b926d057b249bb170cd13c4ff6d5b343451a0153e2a4b9a87af1abbe162f05d3
  • Pointer size: 131 Bytes
  • Size of remote file: 539 kB
ml_package_oneplanner.param.yaml ADDED
@@ -0,0 +1,82 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Network description of the OnePlanner model in this directory (oneplanner_planner.onnx and
2
+ # bevfusion_lidar_feature.onnx), read by autoware_oneplanner as ml_package_<model_name>.param.yaml.
3
+ # It overrides the package defaults for this network; host and deployment behaviour (workspace,
4
+ # rates, tolerances, paths) stays in the package's oneplanner.param.yaml. See the package's
5
+ # docs/model_contract.md for the meaning of every field.
6
+ /**:
7
+ ros__parameters:
8
+ # The input convention the model was trained with; the node refuses any other.
9
+ input_convention: "oneplanner_v1"
10
+ # Which sensor input providers the model needs, matched by tensor name.
11
+ sensor_inputs: ["bev_feature"]
12
+ enable_context_inputs: true
13
+ # When the plan starts: at the newest odometry; the graph reads sensor_latency.
14
+ planning_time: "planning_time"
15
+
16
+ # Builder precision of the planner graph.
17
+ precision: "fp32"
18
+
19
+ context:
20
+ ego_history_interval_seconds: 0.1
21
+ # The graph does not read ego_curvature_bias.
22
+ curvature_bias:
23
+ enabled: false
24
+ tau_s: 2.0
25
+ min_speed_mps: 1.0
26
+ # The graph does not read lane_signals / route_signals.
27
+ signal_history:
28
+ enabled: false
29
+ steps: 7
30
+ step_s: 0.5
31
+ turn_indicators:
32
+ # The graph carries this input for a stable signature only; perturbing it changes no
33
+ # output. Bind a constant, subscribe to nothing.
34
+ enabled: false
35
+
36
+ bev_feature:
37
+ history_tensor: "bev_feature_history"
38
+ frames: 3
39
+ interval_seconds: 0.5
40
+ bev_half_extent_m: 122.4
41
+ extractor:
42
+ precision: "fp16"
43
+ feature_tensor: "bev_feature"
44
+ max_points_per_voxel: 32 # from the voxels input shape
45
+ use_intensity: true # 5 point features
46
+ voxels_num: [1, 128000, 256000] # [min, opt, max]
47
+ point_cloud_range: [-122.4, -122.4, -3.0, 122.4, 122.4, 5.0]
48
+ voxel_size: [0.17, 0.17, 0.2]
49
+ detection:
50
+ # The frozen BEVFusion detection head the extractor graph carries. It emits undecoded
51
+ # proposals; the node decodes and suppresses them with autoware_bevfusion's
52
+ # postprocessing and publishes ~/output/detected_objects.
53
+ enabled: true
54
+ # One Autoware class name per head class, in the head's label order. A head class
55
+ # with no ObjectClassification label is written as UNKNOWN.
56
+ # head classes: car, truck, bus, bicycle, pedestrian, traffic_cone, barrier
57
+ class_names: ["CAR", "TRUCK", "BUS", "BICYCLE", "PEDESTRIAN", "UNKNOWN", "UNKNOWN"]
58
+ num_proposals: 500
59
+ out_size_factor: 8
60
+ # Score thresholds per (distance band, class), calibrated for this head and applied as
61
+ # autoware_bevfusion applies detection_score_thresholds: the box centre's radial
62
+ # distance picks the first band whose upper limit exceeds it, and a box beyond the last
63
+ # band is dropped.
64
+ distance_bin_upper_limits: [50.0, 90.0, 121.0, 200.0]
65
+ # distance-major: one row per band, one column per head class
66
+ # CAR TRUCK BUS BICYCLE PEDESTRIAN TRAFFIC_CONE BARRIER
67
+ score_thresholds: [
68
+ 0.194733, 0.167118, 0.109791, 0.245172, 0.150065, 0.12842, 0.043799, # [0, 50) m
69
+ 0.221063, 0.18848, 0.168961, 0.160301, 0.152223, 0.15707, 0.1, # [50, 90) m
70
+ 0.155292, 0.163172, 0.08902, 0.185649, 0.154218, 0.239001, 0.1, # [90, 121) m
71
+ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 # [121, 200) m
72
+ ]
73
+
74
+ postprocess:
75
+ prediction_tensor: "trajectory"
76
+ extra_trajectory_tensors: ["prior_trajectory"]
77
+ # Logits of DISABLE, ENABLE_LEFT, ENABLE_RIGHT, published as ~/output/turn_indicators.
78
+ turn_indicator:
79
+ tensor: "turn_indicator_logits"
80
+ horizon_seconds: 6.0 # 60 steps
81
+ time_step: 0.1
82
+ generator_name: "OnePlanner"
oneplanner_planner.onnx ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:dd7271bfbfc3bad2d9ec2c2faf1bceafd677d2e8ebc8d6b082961db638128ee4
3
+ size 112251756
replay.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:71c6112962ad280b48ff4278bd6d5b97cb20ee7c034ec2e482ebcd4c71d2ba1c
3
+ size 16919234