Skip to content

Commit

Permalink
docs: update sensor models and pointcloud types (#171)
Browse files Browse the repository at this point in the history
* docs: update point types and sensor models, smaller fixes

* docs: correct field types

* Apply suggestions from code review

Co-authored-by: David Wong <[email protected]>

* ci(pre-commit): autofix

* Update docs/point_types.md

Co-authored-by: David Wong <[email protected]>

* ci(pre-commit): autofix

* chore(nebula_tests): add license to parameter_descriptors

---------

Co-authored-by: David Wong <[email protected]>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
  • Loading branch information
3 people authored Jul 5, 2024
1 parent fb9a28d commit e58d5a7
Show file tree
Hide file tree
Showing 5 changed files with 94 additions and 61 deletions.
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: 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

0 comments on commit e58d5a7

Please sign in to comment.