DriveWorks SDK Reference
5.8.83 Release
For Test and Development only

Lidar Sensor

Detailed Description

Defines the Lidar sensor methods.

Data Structures

struct  dwLidarDecodedPacket
 Defines the structure for a decoded lidar packet. More...
 
struct  dwLidarDecodedReturn
 Defines the return structure for an extended decoded lidar packet. More...
 
struct  dwLidarPointRTHI
 Holds a Lidar point cloud RTHI and the associated intensity. More...
 
struct  dwLidarPointXYZI
 Holds a Lidar point cloud XYZ and the associated intensity. More...
 
struct  dwLidarProperties
 Defines the properties of the lidar. More...
 

Macros

#define DW_SENSORS_LIDAR_MAX_RETURNS   10
 Maximum number of distinct lidar returns a point cloud can contain. More...
 
#define DW_SENSORS_LIDAR_MAX_ROWS   256
 

Enumerations

enum  dwLidarAuxDataType {
  DW_LIDAR_AUX_DATA_TYPE_SNR = 0 ,
  DW_LIDAR_AUX_DATA_TYPE_SIGNALWIDTH = 1 ,
  DW_LIDAR_AUX_DATA_TYPE_SIGNALHEIGHT = 2 ,
  DW_LIDAR_AUX_DATA_TYPE_TIME = 3 ,
  DW_LIDAR_AUX_DATA_TYPE_V_MPS = 4 ,
  DW_LIDAR_AUX_DATA_TYPE_EXISTENCEPROB = 5 ,
  DW_LIDAR_AUX_DATA_TYPE_CROSSTALKPROB = 6 ,
  DW_LIDAR_AUX_DATA_TYPE_NOISELEVEL = 7 ,
  DW_LIDAR_AUX_DATA_TYPE_ZONEID = 8 ,
  DW_LIDAR_AUX_DATA_TYPE_DETECTORID = 9 ,
  DW_LIDAR_AUX_DATA_TYPE_LINEID = 10 ,
  DW_LIDAR_AUX_DATA_TYPE_DATAQUALITY = 11 ,
  DW_LIDAR_AUX_DATA_TYPE_SCANCHECKPOINT = 12 ,
  DW_LIDAR_AUX_DATA_TYPE_BLOCKAGEFLAG = 13 ,
  DW_LIDAR_AUX_DATA_TYPE_SENSORID = 14 ,
  DW_LIDAR_AUX_DATA_TYPE_VALIDITY = 15 ,
  DW_LIDAR_AUX_DATA_TYPE_INVALIDITYFLAG = 16 ,
  DW_LIDAR_AUX_DATA_TYPE_COUNT = 17 ,
  DW_LIDAR_AUX_DATA_TYPE_FORCE32 = 0x7FFFFFFF
}
 An enum for every data element we could possibly return. More...
 
enum  dwLidarInvalidityFlag {
  DW_LIDAR_INVALIDITY_NONE = 0 ,
  DW_LIDAR_INVALIDITY_DW = 1 << 0 ,
  DW_LIDAR_INVALIDITY_VEND = 1 << 1 ,
  DW_LIDAR_INVALIDITY_INVALID = DW_LIDAR_INVALIDITY_DW | DW_LIDAR_INVALIDITY_VEND
}
 An enum for specifying invalidity flags. More...
 
enum  dwLidarReturnType {
  DW_LIDAR_RETURN_TYPE_ANY = 0 ,
  DW_LIDAR_RETURN_TYPE_FIRST = 1 << 0 ,
  DW_LIDAR_RETURN_TYPE_LAST = 1 << 1 ,
  DW_LIDAR_RETURN_TYPE_STRONGEST = 1 << 2 ,
  DW_LIDAR_RETURN_TYPE_ABS_STRONGEST = 1 << 3 ,
  DW_LIDAR_RETURN_TYPE_1 = 1 << 4 ,
  DW_LIDAR_RETURN_TYPE_2 = 1 << 5 ,
  DW_LIDAR_RETURN_TYPE_3 = 1 << 6 ,
  DW_LIDAR_RETURN_TYPE_4 = 1 << 7 ,
  DW_LIDAR_RETURN_TYPE_5 = 1 << 8 ,
  DW_LIDAR_RETURN_TYPE_6 = 1 << 9
}
 Enum to indicate a single return type. More...
 

Functions

DW_API_PUBLIC dwStatus dwSensorLidar_disableDecoding (dwSensorHandle_t const sensor)
 Disable the decoding of the Lidar packets, which frees additional CPU load. More...
 
DW_API_PUBLIC dwStatus dwSensorLidar_enableDecoding (dwSensorHandle_t const sensor)
 Enables the decoding of the Lidar packets, which incurs an additional CPU load. More...
 
DW_API_PUBLIC dwStatus dwSensorLidar_getAuxElementSize (uint32_t *const sizeBytes, dwLidarAuxDataType const auxType)
 Returns size of auxiliary data element in bytes. More...
 
DW_API_PUBLIC dwStatus dwSensorLidar_getProperties (dwLidarProperties *const lidarProperties, dwSensorHandle_t const sensor)
 Gets information about the Lidar sensor. More...
 
DW_API_PUBLIC dwStatus dwSensorLidar_isDecodingEnabled (bool *const enable, dwSensorHandle_t const sensor)
 Retrieves the state of packet decoding. More...
 
DW_API_PUBLIC dwStatus dwSensorLidar_processRawData (dwLidarDecodedPacket const **const data, uint8_t const *const rawData, size_t const size, dwSensorHandle_t const sensor)
 Decodes RAW data previously read and returns a pointer to it. More...
 
DW_API_PUBLIC dwStatus dwSensorLidar_readPacket (dwLidarDecodedPacket const **const data, dwTime_t const timeoutUs, dwSensorHandle_t const sensor)
 Reads one scan packet. More...
 
DW_API_PUBLIC dwStatus dwSensorLidar_returnPacket (dwLidarDecodedPacket const *const data, dwSensorHandle_t const sensor)
 Returns the data read to the internal pool. More...
 
DW_API_PUBLIC dwStatus dwSensorLidar_sendMessage (uint32_t const cmd, uint8_t const *const data, size_t const size, dwSensorHandle_t const sensor)
 

Data Structure Documentation

◆ dwLidarDecodedPacket

struct dwLidarDecodedPacket
Data Fields
float32_t azimuthOffsetRad

Azimuth offset angle in the packet, in rads

dwTime_t duration

Time difference between the first measurement and the last.

float32_t elevationOffsetRad

Elevation offset angle in the packet, in rads

dwTime_t hostTimestamp

Timestamp measured on the host.

float32_t maxHorizontalAngleRad

Maximum horizontal angle in the packet, in rads

uint32_t maxPoints Maximum number of points in the pointsRTHI and pointsXYZI arrays in the packet.
Deprecated:
This field will be removed.
float32_t maxVerticalAngleRad

Maximum vertical angle in the packet, in rads

float32_t minHorizontalAngleRad

Minimum horizontal angle in the packet, in rads

float32_t minVerticalAngleRad

Minimum vertical angle in the packet, in rads

uint32_t nPoints Current number of valid points in the pointsRTHI and pointsXYZI arrays in the packet.
Deprecated:
This field will be removed.
uint8_t numReturns

Number of returns present in this packet

dwLidarPointRTHI const * pointsRTHI Pointer to the array of points in polar coordinates.
Deprecated:
This field will be removed.
dwLidarPointXYZI const * pointsXYZI Pointer to the array of points in cartesian coordinates.
Deprecated:
This field will be removed.
dwLidarDecodedReturn returnData[DW_SENSORS_LIDAR_MAX_RETURNS]

Data for each return in this packet

bool scanComplete

Flag to identify if the scan is complete.

dwTime_t sensorTimestamp

Timestamp of the first point in the point cloud packet.

◆ dwLidarDecodedReturn

struct dwLidarDecodedReturn
Data Fields
void const * auxData[DW_LIDAR_AUX_DATA_TYPE_COUNT] Array of pointers to auxiliary data Supported aux data types are listed in lidar properties.

Size of auxiliary data element is known from its type, see dwSensorLidar_getAuxElementSize. Number of elements equals to numPoints

uint32_t maxPoints

Maximum number of points in this return

uint32_t numPoints

Current number of valid points in the return

dwLidarPointRTHI const * pointsRTHI

Pointer to the array of points (polar)

dwLidarReturnType type

Type of this return

◆ dwLidarPointRTHI

struct dwLidarPointRTHI
Data Fields
float32_t intensity

Reflection intensity in the 0 to 1 range.

float32_t phi

Lidar right-handed polar coord system, vertical, in rads.

float32_t radius

Lidar right-handed polar coord system, distance, in m.

float32_t theta

Lidar right-handed polar coord system, planar, in rads.

◆ dwLidarPointXYZI

struct dwLidarPointXYZI
Data Fields
float32_t intensity

Reflection intensity in the 0 to 1 range.

float32_t x

Lidar right-handed coord system, planar, in meters.

float32_t y

Lidar right-handed coord system, planar, in meters.

float32_t z

Lidar right-handed coord system, vertical, in meters.

◆ dwLidarProperties

struct dwLidarProperties
Data Fields
dwLidarReturnType availableReturns Bitmask of return types the lidar is configured to.
char8_t deviceString[256]

ASCII string identifying the device.

float32_t horizontalAngles[DW_SENSORS_LIDAR_MAX_ROWS] Lidar right-handed polar coord system, intrinsic horizontal angle offsets in spin frame, in rads, length of array with valid values is defined by 'numberOfRows' above.
float32_t horizontalFOVEnd

Lidar right-handed polar coord system, planar, in rads, end angle

float32_t horizontalFOVStart

Lidar right-handed polar coord system, planar, in rads, start angle

uint32_t numberOfRows

Number of Rows in a spin Frame

uint32_t packetsPerSecond

Number of packets per second the sensor produces.

uint32_t packetsPerSpin

Number of packets per sensor full spin.

uint32_t pointsPerPacket

Maximum number of points in a packet.

uint32_t pointsPerSecond

Number of points per second the sensor provides.

uint32_t pointsPerSpin

Maximum number of points on a full sensor spin.

uint32_t pointStride

Number of 'float32' elements per point.

float32_t spinFrequency

Current spin frequency.

uint64_t validAuxInfos Bitmask of valid aux info fields based on enum dwLidarAuxDataType.
float32_t verticalAngles[DW_SENSORS_LIDAR_MAX_ROWS] Lidar right-handed polar coord system, vertical angles in spin frame, in rads, length of array with valid values is defined by 'numberOfRows' above.
float32_t verticalFOVEnd

Lidar right-handed polar coord system, vertical, in rads, end angle

float32_t verticalFOVStart

Lidar right-handed polar coord system, vertical, in rads, start angle

Macro Definition Documentation

◆ DW_SENSORS_LIDAR_MAX_RETURNS

#define DW_SENSORS_LIDAR_MAX_RETURNS   10

Maximum number of distinct lidar returns a point cloud can contain.

Definition at line 128 of file Lidar.h.

◆ DW_SENSORS_LIDAR_MAX_ROWS

#define DW_SENSORS_LIDAR_MAX_ROWS   256

maximal number of rows in dwLidarProperties

Definition at line 148 of file Lidar.h.

Enumeration Type Documentation

◆ dwLidarAuxDataType

An enum for every data element we could possibly return.

Enumerator
DW_LIDAR_AUX_DATA_TYPE_SNR 
DW_LIDAR_AUX_DATA_TYPE_SIGNALWIDTH 
DW_LIDAR_AUX_DATA_TYPE_SIGNALHEIGHT 
DW_LIDAR_AUX_DATA_TYPE_TIME 
DW_LIDAR_AUX_DATA_TYPE_V_MPS 
DW_LIDAR_AUX_DATA_TYPE_EXISTENCEPROB 
DW_LIDAR_AUX_DATA_TYPE_CROSSTALKPROB 
DW_LIDAR_AUX_DATA_TYPE_NOISELEVEL 
DW_LIDAR_AUX_DATA_TYPE_ZONEID 
DW_LIDAR_AUX_DATA_TYPE_DETECTORID 
DW_LIDAR_AUX_DATA_TYPE_LINEID 
DW_LIDAR_AUX_DATA_TYPE_DATAQUALITY 
DW_LIDAR_AUX_DATA_TYPE_SCANCHECKPOINT 
DW_LIDAR_AUX_DATA_TYPE_BLOCKAGEFLAG 
DW_LIDAR_AUX_DATA_TYPE_SENSORID 
DW_LIDAR_AUX_DATA_TYPE_VALIDITY 
DW_LIDAR_AUX_DATA_TYPE_INVALIDITYFLAG 
DW_LIDAR_AUX_DATA_TYPE_COUNT 
DW_LIDAR_AUX_DATA_TYPE_FORCE32 

Definition at line 87 of file Lidar.h.

◆ dwLidarInvalidityFlag

An enum for specifying invalidity flags.

Enumerator
DW_LIDAR_INVALIDITY_NONE 

No flags are set DriveWorks-specific validity flags

DW_LIDAR_INVALIDITY_DW 

Vendor-specific validity flags

DW_LIDAR_INVALIDITY_VEND 

Point is not valid if any of flags are set

DW_LIDAR_INVALIDITY_INVALID 

Definition at line 112 of file Lidar.h.

◆ dwLidarReturnType

Enum to indicate a single return type.

Bitmasks of this enum can be used to specify return configurations of lidars, requested returns from the accumulator, or returns available in a point cloud

Enumerator
DW_LIDAR_RETURN_TYPE_ANY 

API default for whatever returns happen to be present

DW_LIDAR_RETURN_TYPE_FIRST 

First return

DW_LIDAR_RETURN_TYPE_LAST 

Last return

DW_LIDAR_RETURN_TYPE_STRONGEST 

Strongest return (vendor-specific)

DW_LIDAR_RETURN_TYPE_ABS_STRONGEST 

Derived type: if multiple returns are present, whichever is strongest

DW_LIDAR_RETURN_TYPE_1 

Generic enum to capture lidars for which an array of returns is present

DW_LIDAR_RETURN_TYPE_2 

Generic enum to capture lidars for which an array of returns is present

DW_LIDAR_RETURN_TYPE_3 

Generic enum to capture lidars for which an array of returns is present

DW_LIDAR_RETURN_TYPE_4 

Generic enum to capture lidars for which an array of returns is present

DW_LIDAR_RETURN_TYPE_5 

Generic enum to capture lidars for which an array of returns is present

DW_LIDAR_RETURN_TYPE_6 

Generic enum to capture lidars for which an array of returns is present

Definition at line 66 of file Lidar.h.

Function Documentation

◆ dwSensorLidar_disableDecoding()

DW_API_PUBLIC dwStatus dwSensorLidar_disableDecoding ( dwSensorHandle_t const  sensor)

Disable the decoding of the Lidar packets, which frees additional CPU load.

Method fails if the sensor has been started and is capturing data. Stop the sensor first. The default state is to have decoding on. If on, dwSensor_readRawData returns DW_CALL_NOT_ALLOWED.

Parameters
[in]sensorSpecifies the sensor handle of the sensor previously created with 'dwSAL_createSensor()'.
Returns
DW_INVALID_HANDLE, DW_CALL_NOT_ALLOWED, DW_SUCCESS

◆ dwSensorLidar_enableDecoding()

DW_API_PUBLIC dwStatus dwSensorLidar_enableDecoding ( dwSensorHandle_t const  sensor)

Enables the decoding of the Lidar packets, which incurs an additional CPU load.

Method fails if the sensor has been started and is capturing data. Stop the sensor first. The default state is to have decoding on. If on, dwSensor_readRawData returns DW_CALL_NOT_ALLOWED.

Parameters
[in]sensorSpecifies the sensor handle of the sensor previously created with 'dwSAL_createSensor()'.
Returns
DW_INVALID_HANDLE, DW_CALL_NOT_ALLOWED, DW_SUCCESS

◆ dwSensorLidar_getAuxElementSize()

DW_API_PUBLIC dwStatus dwSensorLidar_getAuxElementSize ( uint32_t *const  sizeBytes,
dwLidarAuxDataType const  auxType 
)

Returns size of auxiliary data element in bytes.

Parameters
[out]sizeByteselement size
[in]auxTypeauxiliary data type
Returns
DW_INVALID_ARGUMENT if auxType does not represents valid aux type DW_SUCCESS

◆ dwSensorLidar_getProperties()

DW_API_PUBLIC dwStatus dwSensorLidar_getProperties ( dwLidarProperties *const  lidarProperties,
dwSensorHandle_t const  sensor 
)

Gets information about the Lidar sensor.

Parameters
[out]lidarPropertiesA pointer to the struct containing the properties of the Lidar.
[in]sensorSpecifies the sensor handle of the sensor previously created with 'dwSAL_createSensor()'.
Returns
DW_INVALID_HANDLE, DW_INVALID_ARGUMENT, DW_SUCCESS

◆ dwSensorLidar_isDecodingEnabled()

DW_API_PUBLIC dwStatus dwSensorLidar_isDecodingEnabled ( bool *const  enable,
dwSensorHandle_t const  sensor 
)

Retrieves the state of packet decoding.

Parameters
[out]enableContains the result of the query, which is true when decoding. False if RAW data.
[in]sensorSpecifies the sensor handle of the sensor previously created with 'dwSAL_createSensor()'.
Returns
DW_INVALID_HANDLE, DW_CALL_NOT_ALLOWED, DW_SUCCESS

◆ dwSensorLidar_processRawData()

DW_API_PUBLIC dwStatus dwSensorLidar_processRawData ( dwLidarDecodedPacket const **const  data,
uint8_t const *const  rawData,
size_t const  size,
dwSensorHandle_t const  sensor 
)

Decodes RAW data previously read and returns a pointer to it.

This happens on the CPU thread where the function is called, incurring on additional load on that thread. The data is valid until the application calls dwSensor_returnRawData.

Parameters
[out]dataA pointer to the memory pool owned by the sensor.
[in]rawDataA pointer for the non-decoded Lidar packet, returned by 'dwSensor_readRawData()'.
[in]sizeSpecifies the size in bytes of the raw data.
[in]sensorSpecifies the sensor handle of the sensor previously created with 'dwSAL_createSensor()'.
Returns
DW_INVALID_HANDLE, DW_INVALID_ARGUMENT, DW_NOT_AVAILABLE, DW_TIME_OUT, DW_SUCCESS
Deprecated:
This API will be removed. Use 'dwSensorLidar_processRawDataEx'

◆ dwSensorLidar_readPacket()

DW_API_PUBLIC dwStatus dwSensorLidar_readPacket ( dwLidarDecodedPacket const **const  data,
dwTime_t const  timeoutUs,
dwSensorHandle_t const  sensor 
)

Reads one scan packet.

The pointer returned is to the internal data pool. DW guarantees that the data remains constant until returned by the application. The data must be explicitly returned by the application.

Parameters
[out]dataA pointer to a pointer that can read data from the sensor. The struct contains the numbers of points read, which depends on the sensor used.
[in]timeoutUsSpecifies the timeout in microseconds. Special values: DW_TIMEOUT_INFINITE - to wait infinitly. Zero - means polling of internal queue.
[in]sensorSpecifies the sensor handle of the sensor previously created with 'dwSAL_createSensor()'.
Returns
DW_INVALID_HANDLE, DW_INVALID_ARGUMENT, DW_NOT_AVAILABLE, DW_TIME_OUT, DW_SUCCESS
Deprecated:
This API will be removed. Use 'dwSensorLidar_readPacketEx'

◆ dwSensorLidar_returnPacket()

DW_API_PUBLIC dwStatus dwSensorLidar_returnPacket ( dwLidarDecodedPacket const *const  data,
dwSensorHandle_t const  sensor 
)

Returns the data read to the internal pool.

At this point the pointer is still be valid, but data is change based on newer readings of the sensor.

Parameters
[in]dataA pointer to the scan data previously read from the Lidar to be returned to the pool.
[in]sensorSpecifies the sensor handle of the sensor previously created with 'dwSAL_createSensor()'.
Returns
DW_INVALID_HANDLE, DW_INVALID_ARGUMENT, DW_NOT_AVAILABLE, DW_TIME_OUT, DW_SUCCESS
Deprecated:
This API will be removed. Use 'dwSensorLidar_returnPacketEx'

◆ dwSensorLidar_sendMessage()

DW_API_PUBLIC dwStatus dwSensorLidar_sendMessage ( uint32_t const  cmd,
uint8_t const *const  data,
size_t const  size,
dwSensorHandle_t const  sensor 
)