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 2 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
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` | The point's cartesian x coordinate. |
| `y` | `float` | `m` | The point's cartesian y coordinate. |
| `z` | `float` | `m` | The point's cartesian z coordinate. |
| padding | 4 bytes | | |
| `intensity` | `float` | | The intensity of the return as reported by the sensor. |
| `ring` | `uint16` | | The ID of the ring the point is part of. 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` | The point's cartesian x coordinate. |
| `y` | `float` | `m` | The point's cartesian y coordinate. |
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
| `y` | `float` | `m` | The point's cartesian y coordinate. |
| `y` | `float` | `m` | Cartesian y coordinate. |

| `z` | `float` | `m` | The point's cartesian z coordinate. |
| padding | 4 bytes | | |
| `intensity` | `uint8` | | The 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` | The time the point was detected relative to the pointcloud timestamp. |
| `return type` | `uint8` | | Whether the point was the first, strongest, last, etc. of multiple returns. |

## 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` | The point's cartesian x coordinate. |
| `y` | `float` | `m` | The point's cartesian y coordinate. |
| `z` | `float` | `m` | The point's cartesian z coordinate. |
| padding | 4 bytes | | |
| `intensity` | `float` | | The intensity of the return as reported by the sensor. |
| `return type` | `uint8` | | Whether the point was the first, strongest, last, etc. of multiple returns. |
| `azimuth` | `float` | `degrees` | The point's azimuth in polar coordinates. |
| `distance` | `float` | `m` | The point's distance from the sensor origin. |
| `timestamp` | `double` | `ns` | The time the point was detected relative to the pointcloud timestamp. |

## NebulaPoint = PointXYZIRCAEDT

| Field | Type | Units | Description |
| ------------- | -------- | ----- | --------------------------------------------------------------------------- |
| `x` | `float` | `m` | The point's cartesian x coordinate. |
| `y` | `float` | `m` | The point's cartesian y coordinate. |
| `z` | `float` | `m` | The point's cartesian z coordinate. |
| `intensity` | `uint8` | | The intensity of the return as reported by the sensor. |
| `return type` | `uint8` | | Whether the point was the first, strongest, last, etc. of multiple returns. |
| `channel` | `uint16` | | The ID of the laser channel that produced the point. |
| `azimuth` | `float` | `rad` | The point's azimuth in polar coordinates. |
| `elevation` | `float` | `rad` | The point's elevation in polar coordinates. |
| `distance` | `float` | `m` | The point's distance from the sensor origin. |
| `timestamp` | `uint32` | `ns` | The time the point was detected 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
Loading