[A]Add sdk communication protocol file

Livox-SDK
2019-03-04 22:17:17 +08:00
parent a01f607d0a
commit a98437b2d3
8 changed files with 771 additions and 2 deletions
+2 -2
@@ -1,2 +1,2 @@
# Welcome to the Livox-SDK wiki
Welcome to the Livox-SDK wiki! This is a wiki for anything related to the Livox!
+769
@@ -0,0 +1,769 @@
**Livox SDK Communication Protocol**
| **Document Release History** | | |
|------------------------------|-------------|-----------------------------------|
| **Date** | **Release** | **Change Description** |
| 2019/2/25 | v1.0.1 | Update 3.2 Time Stamp description |
| 2019/1/16 | v1.0.0 | Initial release |
# 1 Summary
## 1.1 Data Class
There are two types of communication between the user and LiDAR unit(s), and the
protocol formats of these two kinds of data are different. The specific functions
and differences are as follows:
> - **Control Command Data**: Configuration and query of LiDAR parameters and status
information;
> - **Point Cloud Data**: Point cloud coordinate data generated by LiDAR units;
At present, both protocols are encapsulated in the data segment of the UDP
package, and the data format in protocol is stored in little-endian form.
## 1.2 Mode and State Description
The mode in which the user can switch LiDAR:
![lidar_state](images/lidar_state.png)
When the user sets LiDAR mode and the mode switching is completed, the LiDAR
unit(s) will be in the corresponding state:
![State_transition](images/state_transition.png)
# 2 Control Command
## 2.1 Frame Format
The Protocol Frame is the smallest unit for control command. Format is as
follows:
| Field | Index (byte) | Size (byte) | Description |
|----------|--------------|-------------|---------------------------------------------|
| sof | 0 | 1 | Starting Byte, Fixed to be 0xAA |
| version | 1 | 1 | Protocol Version, 1 for The Current Version |
| length | 2 | 2 | Length of The Frame, Max Value: 1400 |
| cmd_type | 4 | 1 | Command Type: <br>0x00: CMD <br>0x01: ACK <br>0x02: MSG |
| seq_num | 5 | 2 | Frame Sequence Number |
| crc_16 | 7 | 2 | Frame Header Checksum |
| data | 9 | n | Payload Data |
| crc_32 | 9+n | 2 | Whole Frame Checksum |
Command type description:
> - **CMD (request)**: Actively send data request - need to return a corresponding ACK;
> - **ACK (response)**: Response to CMD data;
> - **MSG (message)**: Actively pushed message data - no need to return response data,
> e.g. broadcast data, pushed message when an error occurs;
Initial value of the CRC check:
| crc16 initial value | crc32 initial value |
|---------------------|---------------------|
| 0x4c49 | 0x564f580a |
## 2.2 Frame Data
### 2.2.1 Data Segment Format
Data segment format in Protocol Frame:
| Field | Index (byte) | Size (byte) |
|----------|--------------|-------------|
| cmd_set | 0 | 1 |
| cmd_id | 1 | 1 |
| cmd_data | 2 | Vary by cmd |
### 2.2.2 CMD Set & CMD ID
There are three kinds of CMD sets:
> - **General Command Set**: All of Livox Device support General Command Set including Livox LiDAR and Livox Hub.
> - **LiDAR Command Set**: Only Livox LiDAR supports LiDAR Command Set.
> - **Hub Command Set**: Only Livox Hub supports Hub Command Set.
| CMD Set | CMD ID | Function |
|--------------------------|--------|-----------------------------------------------------|
| 0x00 General Command Set | 0x00 | Broadcast Message |
| | 0x01 | Handshake |
| | 0x02 | Query Device Information |
| | 0x03 | Heartbeat |
| | 0x04 | Start/Stop Sampling |
| | 0x05 | Change Coordinate System |
| | 0x06 | Disconnect |
| | 0x07 | Push Abnormal Status Information |
| | 0x08 | Configure Static/Dynamic IP |
| | 0x09 | Get Device IP Information |
| 0x01 LiDAR Command Set | 0x00 | Set Mode |
| | 0x01 | Write LiDAR Extrinsic Parameters |
| | 0x02 | Read LiDAR Extrinsic Parameters |
| | 0x03 | Turn On/Off Rain/Fog Suppression |
| 0x02 Hub Command Set | 0x00 | Query Connected LiDAR Device |
| | 0x01 | Set LiDAR Mode |
| | 0x02 | Turn On/Off Designated Slot Power |
| | 0x03 | Write LiDAR Extrinsic Parameters |
| | 0x04 | Read LiDAR Extrinsic Parameters |
| | 0x05 | Query LiDAR Device Status |
| | 0x06 | Turn On/Off Hub Calculation of Extrinsic Parameters |
| | 0x07 | Turn On/Off LiDAR Rain/Fog Suppression |
## 2.3 SDK Connection
In the process of communication, LiDAR or Hub are defined as slave, and the
computer which receives point cloud data is defined as master.
The communication flow between master and slave is as follows:
1. When the slave is powered on, it broadcasts the device information data to
port 55000 of the master using source port 65000;
2. After receiving the broadcast data, the master sends a connection request to
the slave port 65000, which contains the source port information;
3. The slave replies ACK data to this source port after receiving the master's
connection request;
4. When the user receives ACK data, the handshake is completed. It can start
sending heartbeat data to maintain the connection, and transmit commands and
data.
**NOTE**: *The Livox LiDAR/Hub will re-broadcast if heartbeat is timeout.*
Flow Chart:
![connection_flow_chart](images/connection_flow_chart.png)
# 3 Point Cloud Data
## 3.1 Package Format
Point cloud data format output by LiDAR:
| Field | Index (byte) | Size (byte) | Description |
|----------------|--------------|-------------|-------------------------------------------------------|
| version | 0 | 1 | Packet Protocol Version, 5 for the Current Version |
| slot_id | 1 | 1 | ID of the Slot Connecting LiDAR Device:<br> If LiDAR connects directly to computer without Hub, default 1;<br> If LiDAR connects to computer through Hub,<br> then the slot_id is the corresponding slot number of the hub (range: 1 ~ 9); |
| LiDAR_id | 2 | 1 | LiDAR ID:<br> 1: Mid-100 Left / Mid-40 / Tele-15 / Horizon<br> 2: Mid-100 Middle<br> 3: Mid-100 Right<br>![connection_flow_chart](images/Livox-Mid100.png) |
| reserved | 3 | 1 | |
| status_code | 4 | 4 | LiDAR Status Indicator Information, For details, see 3.4 |
| timestamp_type | 8 | 1 | Timestamp Type, For details, see 3.2 |
| data_type | 9 | 1 | Point Cloud Coordinate Format: <br>0: Cartesian Coordinate <br>1: Spherical Coordinate |
| timestamp | 10 | 8 | Nanosecond or UTC Format Timestamp, For details, see 3.2 |
| data | 18 | -- | 100 Point cloud data samples |
## 3.2 Time Stamp
LiDAR system supports three synchronization modes:
- IEEE 1588v2.0 PTP network protocol synchronization
- pulse synchronization (only supported by LiDAR)
- GPS time synchronization (PPS + GPRMC, only supported by Hub).
Each packet contains a timestamp indicating the time of the first point in the packet.
| Timestamp Type | Source | Data Type | Description |
|----------------|----------------|-----------|-----------------------------------|
| 0 | No sync source | uint64_t | Unit: ns |
| 1 | PTP | uint64_t | Unit: ns |
| 2 | Reserved | | |
| 3 | GPS | UTC | UTC, only supported by Hub |
| 4 | PPS | uint64_t | Unit: ns, only supported by LiDAR |
**Timestamp Type 0**
When there is no synchronization signal in the system, the time stamp indicates
the time when device is powered on.
**Timestamp Type 1**
IEEE 1588v2.0 PTP network protocol synchronization 1588 network synchronization
mode has the highest priority.
**Timestamp Type 3**
GPS synchronization source, using the RS485 level. The sequence diagram is as follows:
![sequence_diagram](images/sequence_diagram.png)
An example $GPRMC message is shown below:
$GPRMC,123519,A,4807.038,N,01131.000,E,022.4,084.4,230394,003.1,W*6A
| 123519 | Fix taken at 12:35:19 UTC |
|-----------|------------------------------------------|
| A | Status A=active or V=Void. |
| 4807.038 | Current Latitude |
| N | North/South |
| 01131.000 | Current Longitude |
| E | East/West |
| 022.4 | Speed in knots |
| 084.4 | True course |
| 230394 | Date stamp, 23rd of March 1994 |
| 003.1 | Magnetic Variation |
| W | West/East |
| *6A | The checksum data, always begins with * |
The timestamp in cloud point data package UTC time format:
| Byte 0 | Byte 1 | Byte 2 | Byte 3 | Byte 4 ~ 7 |
|--------|--------|--------|--------|----------------------------------|
| Year | Month | Day | Hour | Offset within the Hour, Unit: us |
**Timestamp Type 4**
PPS synchronization source, using the RS485 level. The sequence diagram is as
follows. Timestamp indicates the time from the last rising edge.
![RS485_sequence_digram](images/RS485_sequence_digram.png)
## 3.3 Point Cloud
There are 100 point cloud samples in each point data package. The sample data
can have either one of the following formats depends on the coordinate system
chosen by the user.
Cartesian coordinate format:
| Field | Offset (byte) | Data Type | Description |
|--------------|---------------|-----------|------------------|
| x | 0 | int32_t | X axis, Unit: mm |
| y | 4 | int32_t | Y axis, Unit: mm |
| z | 8 | int32_t | Z axis, Unit: mm |
| reflectivity | 12 | uin8_t | Reflectivity |
Spherical coordinate format:
| Field | Offset (byte) | Data Type | Description |
|--------------|---------------|-----------|-------------------------------------------|
| depth | 0 | uint32_t | Depth, Unit: mm |
| theta | 4 | uint16_t | Zenith angle[0, 18000], Unit: 0.01 degree |
| phi | 6 | uin16_t | Azimuth[0, 36000], Unit: 0.01 degree |
| reflectivity | 8 | uin8_t | Reflectivity |
## 3.4 Status Code
### 3.4.1 LiDARStatus Code
LiDAR status_code consists of 32 bits, which has the following meanings:
| Bits | Data | Description |
|----------|-----------------|----------------------------------------------------------|
| Bit0:1 | temp_status | 0: Temperature in Normal State <br>1: High or Low <br>2: Extremely High or Extremely Low |
| Bit2:3 | volt_status | Voltage Status of Internal Module<br> 0: Voltage in Normal State <br>1: High <br>2: Extremely High |
| Bit4:5 | motor_status | 0: Motor in Normal State <br>1: Motor in Abnormal State, Unable to Work |
| Bit6:7 | dirty_warn | 0: Not Dirty or Blocked <br>1: Dirty or Blocked |
| Bit8 | firmware_status | 0: Firmware is OK <br>1: Firmware is Abnormal, Need to be Upgraded |
| Bit9 | pps_status | 0: No PPS Signal <br>1: PPS Signal is OK |
| Bit10 | device_status | 0: Normal <br>1: Warning for Approaching the End of Service Life |
| Bit11:29 | RSVD | |
| Bit30:31 | system_status | 0: Normal <br>1: Warning <br>Any of the following situations will trigger warning:<br> Temperature becomes High or Low;<br> Voltage becomes High;<br> Optical system is Dirty or Blocked; <br>2: Error<br> Causes the LiDAR to Shut Down and Enter the Error State<br> Any of the following situations will trigger error:<br> Temperature becomes Extremely High or Extremely Low;<br> Voltage becomes Extremely High;<br> Motor is Abnormal;<br> Firmware is Abnormal; |
### 3.4.2 Hub Status Code
Hub Status Code consists of 32 bits, which has the following meanings:
| Bits | Data | Description |
|----------|-------------------|---------------------------------- |
| Bit0:1 | sync_status | 0: No synchronization signal <br>1: 1588 synchronization <br>2: GPS synchronization |
| Bit2:3 | temp_status | 0: Temperature in Normal State <br>1: High or Low <br>2: Extremely High or Extremely Low |
| Bit4 | LiDAR_status | 0: LiDAR State is Normal <br>1: LiDAR State is Abnormal |
| Bit5 | LiDAR_link_status | 0: LiDAR Connection is Normal <br>1: LiDAR Connection is Abnormal |
| Bit6 | firmware_status | 0: LiDAR Firmware is OK <br>1: LiDAR Firmware is Abnormal, Need to be Upgraded |
| Bit7:29 | RSVD | |
| Bit30:31 | system_status | 0: Normal <br>1: Warning <br>Any of the following situations will trigger warning:<br> Temperature becomes High or Low; <br>2: Error<br> Any of the following situations will trigger error: <br>Temperature becomes Extremely High or Extremely Low; <br>LiDAR State is Abnormal; <br>Firmware is Abnormal; |
# 4 Control Command Detail
## 4.1 General CMD Set
### 0x00 Broadcast Message
message
| MSG | Name | Offset (byte) | Data Type | Description |
|------|------------------|---------------|-------------|-----------------------|
| data | cmd_set | 0 | uint8_t | General Command: 0x00 |
| | cmd_id | 1 | uint8_t | Command ID: 0x00 |
| | broadcast_code | 2 | uint8_t[16] | Device Broadcast Code, C-Style string end with \0 <br>The Broadcast Code of Each Device is UNIQUE. |
| | dev_type | 18 | uint8_t | Device Type:<br> 0: Livox Hub <br>1: Mid-40 <br>2: Tele-15 <br>3: Horizon |
| | reserved | 19 | uint16_t | Reserved |
### 0x01 Handshake
request
| CMD | Name | Offset (byte) | Data Type | Description |
|------|-----------|---------------|------------|----------------------------------------|
| data | cmd_set | 0 | uint8_t | General Command: 0x00 |
| | cmd_id | 1 | uint8_t | Command ID: 0x01 |
| | user_ip | 2 | uint8_t[4] | Host IP Address<br> Example: AA.BB.CC.DD<br> user_ip[0] = AA<br> user_ip[1] = BB<br> user_ip[2] = CC<br> user_ip[3] = DD |
| | data_port | 6 | uint16_t | Host Point Cloud Data UDP Destination Port |
| | cmd_port | 8 | uint16_t | Host Control Command UDP Destination Port |
response
| ACK | Name | Offset (byte) | Data Type | Description |
|------|----------|---------------|-----------|---------------------------------------|
| data | cmd_set | 0 | uint8_t | General Command: 0x00 |
| | cmd_id | 1 | uint8_t | Command ID: 0x01 |
| | ret_code | 2 | uint8_t | Return Code:<br> 0x00: Success <br>0x01: Fail |
### 0x02 Query Device Information
request
| CMD | name | Offset (byte) | Data Type | Description |
|------|---------|---------------|-----------|-----------------------|
| data | cmd_set | 0 | uint8_t | General Command: 0x00 |
| | cmd_id | 1 | uint8_t | Command ID: 0x02 |
response
| ACK | Name | Offset (byte) | Data Type | Description |
|------|----------|---------------|------------|---------------------------|
| data | cmd_set | 0 | uint8_t | General Command: 0x00 |
| | cmd_id | 1 | uint8_t | Command ID: 0x02 |
| | ret_code | 2 | uint8_t | Return Code:<br> 0x00: Success <br>0x01: Fail|
| | version | 3 | uint8_t[4] | Firmware Version:<br> Example: AA.BB.CC.DD<br> version[0] = AA<br> version[1] = BB<br> version[2] = CC<br> version[3] = DD |
### 0x03 Heartbeat
The host needs to send request data at a frequency of 1 Hz to maintain normal
connection with the device.
request
| CMD | Name | Offset (byte) | Data Type | Description |
|------|---------|---------------|-----------|-----------------------|
| data | cmd_set | 0 | uint8_t | General Command: 0x00 |
| | cmd_id | 1 | uint8_t | Command ID: 0x03 |
response
| ACK | Name | Offset (byte) | Data Type | Description |
|------|-------------|---------------|-----------|------------------|
| data | cmd_set | 0 | uint8_t | General Command: 0x00 |
| | cmd_id | 1 | uint8_t | Command ID: 0x03 |
| | ret_code | 2 | uint8_t | Return Code: <br>0x00: Success <br>0x01: Fail |
| | work_state | 3 | uint8_t | LiDAR State: <br>0x00: Initializing <br>0x01: Normal <br>0x02: Power-Saving <br>0x03: Standby <br>0x04: Error <br>Hub State: <br>0x00: Initializing <br>0x01: Normal <br>0x04: Error |
| | feature_msg | 4 | uint8_t | LiDAR Feature Message:<br> Bit0: Rain/Fog Suppression Switch <br>0x00: Turn Off 0x01: Turn On <br>Bit1 ~ Bit7: Reserved <br>**Hub is Reserved** |
| | ack_msg | 5 | uint32_t | ACK Message:<br> Related to work_state:<br> work_state is 0x00: Initialization Progress <br>work_state is other: Status Code |
### 0x04 Start/Stop Sampling
request
| CMD | Name | Offset (byte) | Data Type | Description |
|------|-------------|---------------|-----------|------------------------------------------|
| data | cmd_set | 0 | uint8_t | General Command: 0x00 |
| | cmd_id | 1 | uint8_t | Command ID: 0x04 |
| | sample_ctrl | 2 | uint8_t | 0x00: Start Sampling <br>0x01: Stop Sampling |
response
| ACK | Name | Offset (byte) | Data Type | Description |
|------|----------|---------------|-----------|---------------------------------------|
| data | cmd_set | 0 | uint8_t | General Command: 0x00 |
| | cmd_id | 1 | uint8_t | Command ID: 0x04 |
| | ret_code | 2 | uint8_t | Return Code: <br>0x00: Success <br>0x01: Fail |
### 0x05 Change Coordinate System
request
| CMD | Name | Offset (byte) | Data Type | Description |
|------|-----------------|---------------|-----------|-------------------------------------------------------|
| data | cmd_set | 0 | uint8_t | General Command: 0x00 |
| | cmd_id | 1 | uint8_t | Command ID: 0x05 |
| | coordinate_type | 2 | uint8_t | 0x00: Cartesian Coordinate <br>0x01: Spherical Coordinate |
response
| ACK | Name | Offset (byte) | Data Type | Description |
|------|----------|---------------|-----------|---------------------------------------|
| data | cmd_set | 0 | uint8_t | General Command: 0x00 |
| | cmd_id | 1 | uint8_t | Command ID: 0x05 |
| | ret_code | 2 | uint8_t | Return Code: <br>0x00: Success <br>0x01: Fail |
### 0x06 Disconnect
request
| CMD | Name | Offset (byte) | Data Type | Description |
|------|---------|---------------|-----------|-----------------------|
| data | cmd_set | 0 | uint8_t | General Command: 0x00 |
| | cmd_id | 1 | uint8_t | Command ID: 0x06 |
response
| ACK | Name | Offset (byte) | Data Type | Description |
|------|----------|---------------|-----------|---------------------------------------|
| data | cmd_set | 0 | uint8_t | General Command: 0x00 |
| | cmd_id | 1 | uint8_t | Command ID: 0x06 |
| | ret_code | 2 | uint8_t | Return Code: <br>0x00: Success <br>0x01: Fail |
### 0x07 Push Abnormal Status
message
When error occurs, the message is immediately pushed at 10Hz to report the
abnormal information.
| MSG | name | Offset (byte) | Data Type | Description |
|------|-------------|---------------|-----------|-----------------------|
| data | cmd_set | 0 | uint8_t | General Command: 0x00 |
| | cmd_id | 1 | uint8_t | Command ID: 0x07 |
| | status_code | 2 | uint32_t | Status Code |
### 0x08 Configure Static/Dynamic IP
request
| CMD | Name | Offset (byte) | Data Type | Description |
|------|---------|---------------|------------|-------------------------|
| data | cmd_set | 0 | uint8_t | General Command: 0x00 |
| | cmd_id | 1 | uint8_t | Command ID: 0x08 |
| | ip_mode | 2 | uint8_t | 0x00: Dynamic IP <br>0x01: Static IP |
| | ip_addr | 3 | uint8_t[4] | IPV4 Address<br> IP address is valid when ip_mode is 0x01<br> (Static IP)<br> ip_addr[0]: 192<br> ip_addr[1]: 168<br> ip_addr[2]: 1<br> ip_addr[3]: Range is as follows<br> Last bit of broadcast code:<br> 1: 11~80<br> 2: 81~150<br> 3: 151~220 |
response
| ACK | Name | Offset (byte) | Data Type | Description |
|------|----------|---------------|-----------|---------------------------------------|
| data | cmd_set | 0 | uint8_t | General Command: 0x00 |
| | cmd_id | 1 | uint8_t | Command ID: 0x08 |
| | ret_code | 2 | uint8_t | Return Code: <br>0x00: Success <br>0x01: Fail |
### 0x09 Get Device IP Information
request
| CMD | Name | Offset (byte) | Data Type | Description |
|------|---------|---------------|-----------|-----------------------|
| data | cmd_set | 0 | uint8_t | General Command: 0x00 |
| | cmd_id | 1 | uint8_t | Command ID: 0x09 |
response
| ACK | Name | Offset (byte) | Data Type | Description |
|------|----------|---------------|------------|---------------------|
| data | cmd_set | 0 | uint8_t | General Command: 0x00 |
| | cmd_id | 1 | uint8_t | Command ID: 0x09 |
| | ret_code | 2 | uint8_t | Return Code: <br>0x00: Success <br>0x01: Fail |
| | ip_mode | 3 | uint8_t | 0x00: Dynamic IP <br>0x01: Static IP |
| | ip_addr | 4 | uint8_t[4] | Device IPV4 Address<br> Example: AA.BB.CC.DD<br> user_ip[0] = AA<br> user_ip[1] = BB<br> user_ip[2] = CC<br> user_ip[3] = DD |
## 4.2 LiDAR CMD Set
### 0x00 Set Mode
request
| CMD | Name | Offset (byte) | Data Type | Description |
|------|------------|---------------|-----------|---------------------|
| data | cmd_set | 0 | uint8_t | LiDAR Command: 0x01 |
| | cmd_id | 1 | uint8_t | Command ID: 0x00 |
| | LiDAR_mode | 2 | uint8_t | LiDAR Mode:<br> User can configure as follow:<br> 0x01: Normal Mode <br>0x02: Power-Saving Mode <br>0x03: Standby Mode |
response
|  ACK | Name | Offset (byte) | Data Type | Description |
|------|----------|---------------|-----------|-------------------------------------------------------|
| data | cmd_set | 0 | uint8_t | LiDAR Command: 0x01 |
| | cmd_id | 1 | uint8_t | Command ID: 0x00 |
| | ret_code | 2 | uint8_t | Return Code:<br> 0x00: Success <br>0x01: Fail <br>0x02: Switching |
### 0x01 Write LiDAR Extrinsic Parameters
request
| CMD | Name | Offset (byte) | Data Type | Description |
|------|---------|---------------|-----------|---------------------------|
| data | cmd_set | 0 | uint8_t | LiDAR Command: 0x01 |
| | cmd_id | 1 | uint8_t | Command ID: 0x01 |
| | roll | 2 | float32 | Roll Angle, Unit: degree |
| | pitch | 6 | float32 | Pitch Angle, Unit: degree |
| | yaw | 10 | float32 | Yaw Angle, Unit: degree |
| | x | 14 | int32_t | X Translation, Unit: mm |
| | y | 18 | int32_t | Y Translation, Unit: mm |
| | z | 22 | int32_t | Z Translation, Unit: mm |
response
| ACK | Name | Offset (byte) | Data Type | Description |
|------|----------|---------------|-----------|---------------------------------------|
| data | cmd_set | 0 | uint8_t | LiDAR Command: 0x01 |
| | cmd_id | 1 | uint8_t | Command ID: 0x01 |
| | ret_code | 2 | uint8_t | Return Code: <br>0x00: Success <br>0x01: Fail |
### 0x02 Read LiDAR Extrinsic Parameters
request
| CMD | Name | Offset (byte) | Data Type | Description |
|------|---------|---------------|-----------|---------------------|
| data | cmd_set | 0 | uint8_t | LiDAR Command: 0x01 |
| | cmd_id | 1 | uint8_t | Command ID: 0x02 |
response
| ACK | Name | Offset (byte) | Data Type | Description |
|-------|----------|---------------|-----------|---------------------------------------|
| data  | cmd_set | 0 | uint8_t |  LiDAR Command: 0x01 |
| | cmd_id | 1 | uint8_t |  Command ID: 0x02 |
| | ret_code | 2 | uint8_t | Return Code: <br>0x00: Success <br>0x01: Fail |
| | roll | 3 | float32 | Roll Angle, Unit: degree |
| | pitch | 7 | float32 | Pitch Angle, Unit: degree |
| | yaw | 11 | float32 | Yaw Angle, Unit: degree |
| | x | 15 | int32_t | X Translation, Unit: mm |
| | y | 19 | int32_t | Y Translation, Unit: mm |
| | z | 23 | int32_t | Z Translation, Unit: mm |
### 0x03 Turn On/Off Rain/Fog Suppression
request
| CMD | Name | Offset (byte) | Data Type | Description |
|------|---------|---------------|-----------|----------------------------------------------------------------|
| data | cmd_set | 0 | uint8_t | LiDAR Command: 0x01 |
| | cmd_id | 1 | uint8_t | Command ID: 0x03 |
| | state | 2 | uint8_t | Turn On/Off Rain/Fog Suppression:<br> 0x00: Turn Off <br>0x01: Turn On |
response
| ACK | Name | Offset (byte) | Data Type | Description |
|-------|----------|---------------|-----------|---------------------------------------|
| data  | cmd_set | 0 | uint8_t | LiDAR Command: 0x01 |
| | cmd_id | 1 | uint8_t | Command ID: 0x03 |
| | ret_code | 2 | uint8_t | Return Code: <br>0x00: Success <br>0x01: Fail |
## 4.3 Hub CMD SET
### 0x00 Query Connected LiDAR Device
request
| CMD | Name | Offset (byte) | Data Type | Description |
|-------|---------|---------------|-----------|-------------------|
| data  | cmd_set | 0 | uint8_t | Hub Command: 0x02 |
| | cmd_id | 1 | uint8_t | Command ID: 0x00 |
response
| ACK | Name | Offset (byte) | Data Type | Description |
|------|-----------|---------------|-----------|-----------------------------------------------------|
| data | cmd_set | 0 | uint8_t | Hub Command: 0x02 |
| | cmd_id | 1 | uint8_t | Command ID: 0x00 |
| | ret_code | 2 | uint8_t | Return Code: <br>0x00: Success <br>0x01: Fail |
| | count | 3 | uint8_t | Number of LiDAR Connected to the Hub Range: 0 ~ 27 |
| | info_list | 4 | -- | Device Information List of Connected LiDAR |
In info_list, each LiDAR device information has the following format:
| Field | Offset (byte) | Data Type | Description |
|----------------|---------------|-------------|-----------------------------------------------------|
| broadcast_code | 0 | uint8_t[16] | LiDAR Broadcast Code |
| dev_type | 16 | uint8_t | Device Type:<br> 1: Mid-40 <br>2: Tele-15 <br>3: Horizon |
| version | 17 | uint8_t[4] | LiDAR Firmware Version <br>Example: AA.BB.CC.DD <br>version[0] = AA <br>version[1] = BB <br>version[2] = CC <br>version[3] = DD |
| slot_id | 21 | uin8_t | Slot Used to Install LiDAR |
| LiDAR_id | 22 | uint8_t | LiDAR ID:<br> 1: Mid-100 Left / Mid-40 / Tele-15 / Horizon <br>2: Mid-100 Middle <br>3: Mid-100 Right |
### 0x01 Set LiDAR Mode
request
| CMD | Name | Offset (byte) | Data Type | Description |
|------|-------------|---------------|-----------|---------------------------------------|
| data | cmd_set | 0 | uint8_t | Hub Command: 0x02 |
| | cmd_id | 1 | uint8_t | Command ID: 0x01 |
| | count | 2 | uint8_t | Number of LiDAR to Set Range: 1 \~ 27 |
| | config_list | 3 | \-- | LiDAR Mode Configuration List |
In config_list, each LiDAR mode configuration has the following format:
| Field | Offset (byte) | Data Type | Description |
|----------------|---------------|-------------|------------------------------------|
| broadcast_code | 0 | uint8_t[16] | LiDAR Broadcast Code |
| LiDAR_mode | 16 | uint8_t | LiDAR Mode: <br>User can configure as follows:<br> 0x01: Normal Mode <br>0x02: Power-Saving Mode <br>0x03: Standby Mode |
response
| ACK | Name | Offset (byte) | Data Type | Description |
|------|-------------|---------------|-----------|-------------------------------------------------------|
| data | cmd_set | 0 | uint8_t | Hub Command: 0x02 |
| | cmd_id | 1 | uint8_t | Command ID: 0x01 |
| | ret_code | 2 | uint8_t | Return Code: <br>0x00: Success <br>0x01: Fail <br>0x02: Switching |
| | count | 3 | uint8_t | Number of LiDAR to Set Range: 1 ~ 27 |
| | return_list | 4 | -- | Return Information List |
In return_list, each return information has the following format:
| Field | Offset (byte) | Data Type | Description |
|----------------|---------------|-------------|---------------------------------------------|
| ret_code | 0 | uint8_t | LiDAR Return Code: <br>0x00: Success <br>0x01: Fail |
| broadcast_code | 1 | uint8_t[16] | LiDAR Broadcast Code |
### 0x02 Turn On/Off Designated Slot Power
request
| CMD | Name | Offset (byte) | Data Type | Description |
|------|------------|---------------|-----------|-----------------------------------------------------------|
| data | cmd_set | 0 | uint8_t | Hub Command: 0x02 |
| | cmd_id | 1 | uint8_t | Command ID: 0x02 |
| | slot_id | 2 | uint8_t | Slot id of Hub Range: 1 ~ 9 |
| | power_ctrl | 3 | uint8_t | Power Control (Default 0x00) <br>0x00: Turn Off <br>0x01: Turn On |
response
| ACK | Name | Offset (byte) | Data Type | Description |
|------|----------|---------------|-----------|---------------------------------------|
| data | cmd_set | 0 | uint8_t | Hub Command: 0x02 |
| | cmd_id | 1 | uint8_t | Command ID: 0x02 |
| | ret_code | 2 | uint8_t | Return Code: <br>0x00: Success <br>0x01: Fail |
### 0x03 Write LiDAR Extrinsic Parameters
request
| CMD | Name | Offset (byte) | Data Type | Description |
|------|------------|---------------|-----------|-----------------------------------------|
| data | cmd_set | 0 | uint8_t | Hub Command: 0x02 |
| | cmd_id | 1 | uint8_t | Command ID: 0x03 |
| | count | 2 | uint8_t | Number of LiDAR to Write Range: 1 ~ 27 |
| | param_list | 3 | -- | LiDAR Parameter Configuration List |
In param_list, each LiDAR parameter configuration has the following format:
| Field | Offset (byte) | Data Type | Description |
|----------------|---------------|-------------|---------------------------|
| broadcast_code | 0 | uint8_t[16] | LiDAR Broadcast Code |
| roll | 16 | float | Roll Angle, Unit: degree |
| pitch | 20 | float | Pitch Angle, Unit: degree |
| yaw | 24 | float | Yaw Angle, Unit: degree |
| x | 28 | int32_t | X Translation, Unit: mm |
| y | 32 | int32_t | Y Translation, Unit: mm |
| z | 36 | int32_t | Z Translation, Unit: mm |
response
| ACK | Name | Offset (byte) | Data Type | Description |
|------|-------------|---------------|-----------|-----------------------------------------|
| data | cmd_set | 0 | uint8_t | Hub Command: 0x02 |
| | cmd_id | 1 | uint8_t | Command ID: 0x03 |
| | ret_code | 2 | uint8_t | Return Code: 0x00: Success 0x01: Fail |
| | count | 3 | uint8_t | Number of LiDAR to Write Range: 1 ~ 27 |
| | return_list | 4 | -- | Return Information List |
In return_list, each return information has the following format:
| Field | Offset (byte) | Data Type | Description |
|----------------|---------------|-------------|---------------------------------------------|
| ret_code | 0 | uint8_t | LiDAR Return Code:<br> 0x00: Success <br>0x01: Fail |
| broadcast_code | 1 | uint8_t[16] | LiDAR Broadcast Code |
### 0x04 Read LiDAR Extrinsic Parameters
request
| CMD | Name | Offset (byte) | Data Type | Description |
|------|-----------|---------------|-----------|----------------------------------------|
| data | cmd_set | 0 | uint8_t | Hub Command: 0x02 |
| | cmd_id | 1 | uint8_t | Command ID: 0x04 |
| | count | 2 | uint8_t | Number of LiDAR to Read Range: 1 ~ 27 |
| | code_list | 3 | -- | LiDAR Broadcast Code Information List |
In code_list, each LiDAR broadcast code information has the following format:
| Field | Offset (byte) | Data Type | Description |
|----------------|---------------|-------------|----------------------|
| broadcast_code | 0 | uint8_t[16] | LiDAR Broadcast Code |
response
| ACK | Name | Offset (byte) | Type | Description |
|------|------------|---------------|---------|----------------------------------------|
| data | cmd_set | 0 | uint8_t | Hub Command: 0x02 |
| | cmd_id | 1 | uint8_t | Command ID: 0x04 |
| | ret_code | 2 | uint8_t | Return Code: <br>0x00: Success <br>0x01: Fail |
| | count | 3 | uint8_t | Number of LiDAR to Read Range: 1 ~ 27 |
| | param_list | 4 | -- | LiDAR Parameter List |
In param_list, each LiDAR parameter information has the following format:
| Field | Offset (byte) | Data Type | Description |
|----------------|---------------|-------------|---------------------------------------------|
| ret_code | 0 | uint8_t | LiDAR Return Code: <br>0x00: Success <br>0x01: Fail |
| broadcast_code | 1 | uint8_t[16] | LiDAR Broadcast Code |
| roll | 17 | float | Roll Angle, Unit: degree |
| pitch | 21 | float | Pitch Angle, Unit: degree |
| yaw | 25 | float | Yaw Angle, Unit: degree |
| x | 29 | int32_t | X Translation, Unit: mm |
| y | 33 | int32_t | Y Translation, Unit: mm |
| z | 37 | int32_t | Z Translation, Unit: mm |
### 0x05 Query LiDAR Device Status
request
| CMD | Name | Offset (byte) | Data Type | Description |
|------|---------|---------------|-----------|-------------------|
| data | cmd_set | 0 | uint8_t | Hub Command: 0x02 |
| | cmd_id | 1 | uint8_t | Command ID: 0x05 |
response
| ACK | Name | Offset (byte) | Data Type | Description |
|------|-----------|---------------|-----------|-----------------------------------------------------|
| data | cmd_set | 0 | uint8_t | Hub Command: 0x02 |
| | cmd_id | 1 | uint8_t | Command ID: 0x05 |
| | ret_code | 2 | uint8_t | Return Code: <br>0x00: Success <br>0x01: Fail |
| | count | 3 | uint8_t | Number of LiDAR Connected to the Hub Range: 0 ~ 27 |
| | info_list | 4 | -- | LiDAR Status List |
In info_list, each LiDAR status information has the following format:
| Field | Offset (byte) | Data Type | Description |
|----------------|---------------|-------------|-----------------------------------------------------|
| broadcast_code | 0 | uint8_t[16] | LiDAR Broadcast Code |
| work_state | 16 | uint8_t | LiDAR State: <br>0x00: Initializing <br>0x01: Normal <br>0x02: Power-Saving <br>0x03: Standby <br>0x04: Error |
| feature_msg | 17 | uint8_t | LiDAR Mode Message:<br> Bit0: Rain/Fog Suppression Switch <br>0x00: Turn Off <br>0x01: Turn On <br>Bit1 ~ Bit7: Reserved |
| ack_msg | 18 | uint32_t | ACK Message:<br> Relevant to work_state:<br> work_state is 0x00: Initialization Progress <br>work_state is other: Status Code |
### 0x06 Turn On/Off Hub Extrinsic Parameters Calculation
request
| CMD | Name | Offset (byte) | Data Type | Description |
|------|---------|---------------|-----------|-----------------------------------------------------------|
| data | cmd_set | 0 | uint8_t | Hub Command: 0x02 |
| | cmd_id | 1 | uint8_t | Command ID: 0x06 |
| | state | 2 | uint8_t | Turn On/Off Parameter Calculation: <br>0: Turn Off <br>1: Turn On |
**NOTE:** *The Hub uses extrinsic parameters stored in each LiDAR for coordinate
conversion. The coordinate is first rotated and then shifted. The rotation is
described by Euler angles with the sequence of rotation axes being x-y-z.*
response
| ACK | Name | Offset (byte) | Data Type | Description |
|-------|----------|---------------|-----------|---------------------------------------|
| data  | cmd_set | 0 | uint8_t | Hub Command: 0x02 |
| | cmd_id | 1 | uint8_t | Command ID: 0x06 |
| | ret_code | 2 | uint8_t | Return Code: <br>0x00: Success <br>0x01: Fail |
### 0x07 Turn On/Off LiDAR Rain/Fog Suppression
request
| CMD | Name | Offset (byte) | Data Type | Description |
|------|-------------|---------------|-----------|---------------------------------------------|
| data | cmd_set | 0 | uint8_t | Hub Command: 0x02 |
| | cmd_id | 1 | uint8_t | Command ID: 0x07 |
| | count | 2 | uint8_t | Number of LiDAR to Configure Range: 1 ~ 27 |
| | config_list | 3 | -- | LiDAR Feature Configuration List |
In config_list, each LiDAR feature configuration information has the following
format:
| Field | Offset (byte) | Data Type | Description |
|----------------|---------------|-------------|------------------------|
| broadcast_code | 0 | uint8_t[16] | LiDAR Broadcast Code |
| cmd_data | 1 | uint8_t | 0: Turn Off <br>1: Turn On |
response
| ACK | Name | Offset (byte) | Data Type | Description |
|------|-------------|---------------|-----------|---------------------------------------|
| data | cmd_set | 0 | uint8_t | Hub Command: 0x02 |
| | cmd_id | 1 | uint8_t | Command ID: 0x07 |
| | ret_code | 2 | uint8_t | Return Code: <br>0x00: Success <br>0x01: Fail |
| | count | 3 | uint8_t | Number of LiDAR to Set Range: 1 ~ 27 |
| | return_list | 4 | -- | Return Information List |
In return_list, each return information has the following format:
| Field | Offset (byte) | Data Type | Description |
|----------------|---------------|-------------|---------------------------------------------|
| ret_code | 0 | uint8_t | LiDAR Return Code: <br>0x00: Success <br>0x01: Fail |
| broadcast_code | 1 | uint8_t[16] | LiDAR Broadcast Code |
BIN
Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 KiB

BIN
Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB