Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

docs: update sensor models and pointcloud types #171

Merged
merged 7 commits into from
Jul 5, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion build_depends.repos
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,4 @@ repositories:
ros2_socketcan:
type: git
url: https://github.com/knzo25/ros2_socketcan
version: feat/continental_fd
version: feat/continental_fd
88 changes: 46 additions & 42 deletions docs/point_types.md
Original file line number Diff line number Diff line change
@@ -1,56 +1,60 @@
# Nebula point cloud types

Nebula supports three point cloud output types.
Nebula currently supports the below point cloud output types.
However, it can easily be extended to support other custom point cloud types.

These definitions can be found in the `nebula_common/include/point_types.hpp`.

## PointXYZIR

| Field | Type | Units | Description |
| ------------- | ------- | ----- | -------------------------------------------------------------------- |
| `x` | `float` | `m` | Contains the abscissa member of the point in cartesian coordinates. |
| `y` | `float` | `m` | Contains the ordinate member of the point in cartesian coordinates. |
| `z` | `float` | `m` | Contains the applicate member of the point in cartesian coordinates. |
| `intensity` | `uint8` | | Contains the laser energy return value as reported by the sensor. |
| `return type` | `uint8` | | Contains the lase return type according to the sensor configuration. |

## PointXYZICAETR

| Field | Type | Units | Description |
| ------------- | ------- | ----- | -------------------------------------------------------------------- |
| `x` | `float` | `m` | Contains the abscissa member of the point in cartesian coordinates. |
| `y` | `float` | `m` | Contains the ordinate member of the point in cartesian coordinates. |
| `z` | `float` | `m` | Contains the applicate member of the point in cartesian coordinates. |
| `intensity` | `uint8` | | Contains the laser energy return value as reported by the sensor. |
| `channel` | `uint8` | | Contains the laser channel id. |
| `azimuth` | `float` | `rad` | Contains the azimuth of the current point. |
| `elevation` | `float` | `rad` | Contains the elevation of the current point. |
| `timestamp` | `float` | `ns` | Contains the relative time to the triggered scan time. |
| `return type` | `uint8` | | Contains the lase return type according to the sensor configuration. |
| Field | Type | Units | Description |
| ----------- | -------- | ----- | -------------------------------------------------- |
| `x` | `float` | `m` | Cartesian x coordinate. |
| `y` | `float` | `m` | Cartesian y coordinate. |
| `z` | `float` | `m` | Cartesian z coordinate. |
| padding | 4 bytes | | |
| `intensity` | `float` | | Intensity of the return as reported by the sensor. |
| `ring` | `uint16` | | Ring ID - only defined for rotational LiDARs. |

## PointXYZICATR

| Field | Type | Units | Description |
| ------------- | ------- | --------- | -------------------------------------------------------------------- |
| `x` | `float` | `m` | Contains the abscissa member of the point in cartesian coordinates. |
| `y` | `float` | `m` | Contains the ordinate member of the point in cartesian coordinates. |
| `z` | `float` | `m` | Contains the applicate member of the point in cartesian coordinates. |
| `intensity` | `uint8` | | Contains the laser energy return value as reported by the sensor. |
| `channel` | `uint8` | | Contains the laser channel id. |
| `azimuth` | `float` | `degrees` | Contains the azimuth of the current point. |
| `timestamp` | `float` | `ns` | Contains the relative time to the triggered scan time. |
| `return type` | `uint8` | | Contains the lase return type according to the sensor configuration. |
| Field | Type | Units | Description |
| ------------- | -------- | --------- | ------------------------------------------------------- |
| `x` | `float` | `m` | Cartesian x coordinate. |
| `y` | `float` | `m` | The point's cartesian y coordinate. |
| `z` | `float` | `m` | Cartesian z coordinate. |
| padding | 4 bytes | | |
| `intensity` | `uint8` | | Intensity of the return as reported by the sensor. |
| `channel` | `uint16` | | The ID of the laser channel that produced the point. |
| `azimuth` | `float` | `degrees` | Azimuth in polar coordinates. |
| `timestamp` | `uint32` | `ns` | Time of detection relative to the pointcloud timestamp. |
| `return type` | `uint8` | | Return (echo) type. |

## PointXYZIRADT

| Field | Type | Units | Description |
| ------------- | ------- | --------- | -------------------------------------------------------------------------- |
| `x` | `float` | `m` | Contains the abscissa member of the point in cartesian coordinates. |
| `y` | `float` | `m` | Contains the ordinate member of the point in cartesian coordinates. |
| `z` | `float` | `m` | Contains the applicate member of the point in cartesian coordinates. |
| `intensity` | `uint8` | | Contains the laser energy return value as reported by the sensor. |
| `return type` | `uint8` | | Contains the lase return type according to the sensor configuration. |
| `azimuth` | `float` | `degrees` | Contains the azimuth of the current point. |
| `distance` | `float` | `m` | Contains the distance from the sensor origin to this echo on the XY plane. |
| `timestamp` | `float` | `ns` | Contains the relative time to the triggered scan time. |
| Field | Type | Units | Description |
| ------------- | -------- | --------- | ------------------------------------------------------- |
| `x` | `float` | `m` | Cartesian x coordinate. |
| `y` | `float` | `m` | Cartesian y coordinate. |
| `z` | `float` | `m` | Cartesian z coordinate. |
| padding | 4 bytes | | |
| `intensity` | `float` | | Intensity of the return as reported by the sensor. |
| `return type` | `uint8` | | Return (echo) type. |
| `azimuth` | `float` | `degrees` | Azimuth in polar coordinates. |
| `distance` | `float` | `m` | Distance from the sensor origin. |
| `timestamp` | `double` | `ns` | Time of detection relative to the pointcloud timestamp. |

## NebulaPoint = PointXYZIRCAEDT

| Field | Type | Units | Description |
| ------------- | -------- | ----- | ------------------------------------------------------- |
| `x` | `float` | `m` | Cartesian x coordinate. |
| `y` | `float` | `m` | Cartesian y coordinate. |
| `z` | `float` | `m` | Cartesian z coordinate. |
| `intensity` | `uint8` | | Intensity of the return as reported by the sensor. |
| `return type` | `uint8` | | Return (echo) type. |
| `channel` | `uint16` | | Laser channel ID. |
| `azimuth` | `float` | `rad` | Azimuth in polar coordinates. |
| `elevation` | `float` | `rad` | Elevation in polar coordinates. |
| `distance` | `float` | `m` | Distance from the sensor origin. |
| `timestamp` | `uint32` | `ns` | Time of detection relative to the pointcloud timestamp. |
49 changes: 30 additions & 19 deletions docs/supported_sensors.md
Original file line number Diff line number Diff line change
@@ -1,44 +1,55 @@
# Supported sensors

Nebula currently supports the following sensor models, where `sensor_model` is the ROS parameter to be used at launch:
Nebula currently supports the sensor models listed below. The test status column indicates how many of the sensors' features are supported.

For all sensors, the respective configuration file is found under `nebula_ros/config/<type>/<vendor>/<filename>` where

- `<type>` is either lidar or radar,
- `<vendor>` is the vendor of the sensor and
- `<filename>` is listed in the table below.

The launch file for a given vendor is called `<vendor>_launch_all_hw.xml`.
The `sensor_model` parameter below decides which sensor driver is launched.

## Hesai LiDARs

| Model | `sensor_model` | Configuration file | Test status |
| ------------- | -------------- | ------------------ | ----------- |
| Pandar64 | Pandar64 | Pandar64.yaml | ✅ |
| Pandar 40P | Pandar40P | Pandar40P.yaml | ✅ |
| Pandar XT32 | PandarXT32 | PandarXT32.yaml | ✅ |
| Pandar XT32M | PandarXT32M | PandarXT32M.yaml | ⚠️ |
| Pandar QT64 | PandarQT64 | PandarQT64.yaml | ✅ |
| Pandar QT128 | PandarQT128 | PandarQT128.yaml | ⚠️ |
| Pandar AT128 | PandarAT128 | PandarAT128.yaml | ✅\* |
| Pandar 128E4X | Pandar128E4X | Pandar128E4X.yaml | ⚠️ |
| Model | `sensor_model` | Configuration file | Test status |
| ------------ | -------------- | ----------------------- | ----------- |
| Pandar64 | Pandar64 | Pandar64.param.yaml | ✅ |
| Pandar 40P | Pandar40P | Pandar40P.param.yaml | ✅ |
| Pandar XT32 | PandarXT32 | PandarXT32.param.yaml | ✅ |
| Pandar XT32M | PandarXT32M | PandarXT32M.param.yaml | ⚠️ |
| Pandar QT64 | PandarQT64 | PandarQT64.param.yaml | ✅ |
| Pandar QT128 | PandarQT128 | PandarQT128.param.yaml | ⚠️ |
| Pandar AT128 | PandarAT128 | PandarAT128.param.yaml | ✅\* |
| Pandar OT128 | Pandar128E4X | Pandar128E4X.param.yaml | ⚠️ |

\*: AT128 needs software version 3.50.8 or newer for the `scan_angle` setting to work correctly.

## Velodyne LiDARs

| Model | `sensor_model` | Configuration file | Test status |
| ------------ | -------------- | ------------------ | ----------- |
| VLP-16 | VLP16 | VLP16.yaml | ⚠️ |
| VLP-16 | VLP16 | VLP16.param.yaml | ⚠️ |
| VLP-16-HiRes | VLP16 | | ❌ |
| VLP-32 | VLP32 | VLP32.yaml | ⚠️ |
| VLS-128 | VLS128 | VLS128.yaml | ⚠️ |
| VLP-32 | VLP32 | VLP32.param.yaml | ⚠️ |
| VLS-128 | VLS128 | VLS128.param.yaml | ⚠️ |

## Robosense LiDARs

| Model | `sensor_model` | Configuration file | Test status |
| ------ | -------------- | ------------------ | ----------- |
| Bpearl | Bpearl | Bpearl.yaml | ⚠️ |
| Helios | Helios | Helios.yaml | ⚠️ |
| Bpearl | Bpearl | Bpearl.param.yaml | ⚠️ |
| Helios | Helios | Helios.param.yaml | ⚠️ |

## Continental radars

| Model | `sensor_model` | Configuration file | Test status |
| ------ | -------------- | ------------------ | ----------- |
| ARS548 | ARS548 | ARS548.yaml | ⚠️ |
| ARS548 | ARS548 | ARS548.param.yaml | ⚠️ |
| SRR520 | SRR520 | SRR520.param.yaml | ⚠️ |

Test status:
✅: complete
⚠️: some functionality yet to be tested
❌: untested
\*: AT128 needs software version 3.50.8 or newer for the `scan_angle` setting to work correctly.
❌: untested
2 changes: 2 additions & 0 deletions docs/usage.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ For example, for a Hesai Pandar40P sensor:
ros2 launch nebula_ros hesai_launch_all_hw.xml sensor_model:=Pandar40P
```

Refer to the list of [supported sensors](supported_sensors.md) for more information on the avaliable sensors and configuration options.

## Sensor configuration

WIP
2 changes: 1 addition & 1 deletion nebula_ros/launch/continental_launch_all_hw.xml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
<remap from="steering_angle_input" to="$(var steering_angle_topic)"/>
</node>
</group>

<group if="$(eval &quot;'$(var sensor_model)' == 'SRR520' &quot;)" >

<node pkg="nebula_ros" exec="continental_srr520_ros_wrapper_node" name="nebula_continental_srr520" output="screen">
Expand Down
8 changes: 6 additions & 2 deletions nebula_ros/schema/SRR520.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -60,10 +60,14 @@
"$ref": "#/definitions/SRR520"
}
},
"required": ["ros__parameters"],
"required": [
"ros__parameters"
],
"additionalProperties": false
}
},
"required": ["/**"],
"required": [
"/**"
],
"additionalProperties": false
}
16 changes: 13 additions & 3 deletions nebula_ros/schema/sub/communication.json
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,11 @@
"ptp_profile": {
"type": "string",
"default": "1588v2",
"enum": ["1588v2", "802.1as", "automotive"],
"enum": [
"1588v2",
"802.1as",
"automotive"
],
"description": "PTP profile."
},
"ptp_domain": {
Expand All @@ -85,13 +89,19 @@
"ptp_transport_type": {
"type": "string",
"default": "UDP",
"enum": ["UDP", "L2"],
"enum": [
"UDP",
"L2"
],
"description": "1588v2 supports 'UDP' or 'L2', other profiles only L2 (HW)."
},
"ptp_switch_type": {
"type": "string",
"default": "TSN",
"enum": ["TSN", "NON_TSN"],
"enum": [
"TSN",
"NON_TSN"
],
"description": "For automotive profile,'TSN' or 'NON_TSN'."
},
"receiver_timeout_sec": {
Expand Down
2 changes: 2 additions & 0 deletions nebula_tests/continental/parameter_descriptors.cpp
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// Copyright 2024 TIER IV, Inc.

#include "parameter_descriptors.hpp"

namespace nebula
Expand Down
14 changes: 14 additions & 0 deletions nebula_tests/continental/parameter_descriptors.hpp
Original file line number Diff line number Diff line change
@@ -1,3 +1,17 @@
// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#pragma once

#include <rcl_interfaces/msg/parameter.hpp>
Expand Down
Loading