This ROS2 driver supports your use of Orbbec single-line/multi-line LiDAR. This document provides installation instructions## 4. IMU Data
1. Installation
1.1. Prerequisites
Before using the OrbbecSDK ROS2 LiDAR driver, please ensure that the following dependencies are installed on your system:
ROS2: A valid installation of ROS2 (Humble, Jazzy, or other supported distributions).
If you need help, please refer to the ROS2 Installation Guide.
1.2. Install deb Dependencies
# assume you have sourced ROS environment, same blow
sudo apt install libgflags-dev nlohmann-json3-dev \
ros-$ROS_DISTRO-image-transport ros-${ROS_DISTRO}-image-transport-plugins ros-${ROS_DISTRO}-compressed-image-transport \
ros-$ROS_DISTRO-image-publisher ros-$ROS_DISTRO-camera-info-manager \
ros-$ROS_DISTRO-diagnostic-updater ros-$ROS_DISTRO-diagnostic-msgs ros-$ROS_DISTRO-statistics-msgs \
ros-$ROS_DISTRO-backward-ros libdw-dev
1.3. Install udev Rules
cd ~/ros2_ws/src/OrbbecSDK_ROS2/orbbec_camera/scripts
sudo bash install_udev_rules.sh
sudo udevadm control --reload-rules && sudo udevadm trigger
1.4. Build the Package
cd ~/ros2_ws/
# Build release version, default is Debug
colcon build --event-handlers console_direct+ --cmake-args -DCMAKE_BUILD_TYPE=Release
1.5. Launch the LiDAR Node
First terminal
. ./install/setup.bash
ros2 launch orbbec_camera lidar.launch.py
Second terminal
. ./install/setup.bash
rviz2
Open Rviz2.
Add a
PointCloud2orLaserScandisplay.For
PointCloud2, select the/lidar/cloud/pointstopic; forLaserScan, select the/lidar/scan/pointstopic.Set the
Fixed Frametolidar_lidar_frameto properly align the data.
PointCloud2visualization example:

LaserScanvisualization example:

2. Usage
2.1. Running the Driver
To start the driver, launch the provided ROS2 launch file:
source install/setup.bash
# Launch the driver with point cloud data
ros2 launch orbbec_camera lidar.launch.py lidar_format:=LIDAR_POINT
# Launch the driver with sphere point cloud data
ros2 launch orbbec_camera lidar.launch.py lidar_format:=LIDAR_SPHERE_POINT
# Launch the driver with laser scan data
ros2 launch orbbec_camera lidar.launch.py lidar_format:=LIDAR_SCAN
# Launch the driver with IMU enabled
ros2 launch orbbec_camera lidar.launch.py enable_imu:=true imu_rate:=50hz
# Launch the driver with both point cloud and IMU data
ros2 launch orbbec_camera lidar.launch.py lidar_format:=LIDAR_POINT enable_imu:=true imu_rate:=100hz
This command will start the node that interfaces with the Orbbec LiDAR device. Please ensure that the LiDAR hardware is properly connected before running this command.
2.2. Get Device Information for Connected LiDARs
ros2 run orbbec_camera list_devices_node
This command will list the connected LiDAR devices and display their respective IP addresses and ports. You can use this information to configure the driver to connect to specific devices.
2.3. Check Which Configurations the LiDAR Supports
ros2 run orbbec_camera list_camera_profile_mode_node
2.4. Parameters and Configuration
The lidar.launch.py file contains default parameters for the driver. You can customize these settings by modifying the launch file or creating a custom configuration file. Key parameters include:
device_type: The type of device to launch. Optional values:
lidar,camera. Setting this parameter tolidarlaunches the LiDAR device, setting it tocameralaunches the camera device.camera_name: Launch node namespace.
device_num: Number of devices. This must be filled if you need to launch multiple devices.
upgrade_firmware: Firmware upgrade function. The input parameter is the firmware path.
connection_delay: Delay time (in milliseconds) for reopening the device. Immediately reopening the device during hot-plugging may cause firmware crashes.
publish_tf: Enable TF publishing.
tf_publish_rate: TF publishing frequency.
lidar_format: Data format for the LiDAR. Optional values:
LIDAR_POINT,LIDAR_SPHERE_POINT,LIDAR_SCANlidar_rate: Scan rate of the LiDAR.
publish_n_pkts: Number of frames to accumulate before publishing merged point cloud. Range: 1-12000. Only effective when lidar_format is
LIDAR_POINTorLIDAR_SPHERE_POINT, used to merge specified number of frames before publishing. Default value:1enable_scan_to_point: Enable conversion of scan data to point cloud data, publishing PointCloud2 data type topics.
repetitive_scan_mode: Repetitive scan mode parameter.
filter_level: Add filter level parameter.
vertical_fov: Vertical angle parameter.
min_angle: Minimum angle of the LiDAR scan range in degrees (e.g.,
-135.0). Default value:-135.0.max_angle: Maximum angle of the LiDAR scan range in degrees (e.g.,
135.0). Default value:135.0.min_range: Minimum distance the LiDAR can measure in meters. Default value:
0.05.max_range: Maximum distance the LiDAR can measure in meters. Default value:
30.0.echo_mode: Echo mode of the LiDAR. Optional values:
Last Echo,First Echopoint_cloud_qos: ROS 2 message Quality of Service (QoS) settings. Possible values include
SYSTEM_DEFAULT,DEFAULT,PARAMETER_EVENTS,SERVICES_DEFAULT,PARAMETERS, andSENSOR_DATA, and are case-insensitive. These values correspond tormw_qos_profile_system_default,rmw_qos_profile_default,rmw_qos_profile_parameter_events,rmw_qos_profile_services_default,rmw_qos_profile_parameters, andSENSOR_DATArespectively.enumerate_net_device: Enable automatic enumeration of network devices.
net_device_ip: IP address of the network device.
net_device_port: Port number on the network side.
log_level: SDK log level, default value is
none, optional values aredebug,info,warn,error,fataltime_domain: Timestamp type of the device. Optional values are
device,global,systemconfig_file_path: Path to the YAML configuration file. Default value is “”. If no configuration file is specified, default parameters from the launch file will be used.
enable_heartbeat: Enable heartbeat function, default is
false. If set totrue, the camera node will send heartbeat signals to the firmware; this should also be set totrueif hardware logging is required.enable_imu: Enable IMU (accelerometer + gyroscope) and output unified IMU topic data.
imu_rate: Unified frequency of the IMU (both accelerometer and gyroscope).
accel_range: Range of the accelerometer.
gyro_range: Range of the gyroscope.
linear_accel_cov: Linear acceleration covariance value, default is
0.0001.angular_vel_cov: Angular velocity covariance value, default is
0.0001.
3. Point Cloud Data Details
3.1. Point Cloud Format
PointCloud2 (PointXYZITO) point cloud format is as follows:
float32 x # X axis, unit: meters
float32 y # Y axis, unit: meters
float32 z # Z axis, unit: meters
uint8 intensity # LiDAR intensity
uint8 tag # LiDAR tag
uint32 offset_time # Point cloud offset relative to topic time, unit nanoseconds
3.2. Point Cloud Aggregation Functionality
The publish_n_pkts parameter enables point cloud aggregation functionality, which allows the LiDAR to accumulate a specified number of frames before publishing, then merge these frames into a larger point cloud data package for publishing.
3.2.1. Features:
Parameter Range: 1-12000 frames
Applicable Formats: Only effective when lidar format is
LIDAR_POINTorLIDAR_SPHERE_POINTDefault Value: 1 (no aggregation, each frame published individually)
Purpose: Improve point cloud density, suitable for applications requiring denser point cloud data
3.2.2. Usage Examples:
# Aggregate 10 frames before publishing
ros2 launch orbbec_camera lidar.launch.py lidar_format:=LIDAR_POINT publish_n_pkts:=10
# Aggregate 100 frames before publishing
ros2 launch orbbec_camera lidar.launch.py lidar_format:=LIDAR_SPHERE_POINT publish_n_pkts:=100
Note: Increasing the publish_n_pkts value will improve point cloud density but will also increase latency and memory usage. Please adjust according to actual application requirements.
4. IMU Data
4.1. IMU Topics
When IMU is enabled, the following topics will be published:
/lidar/imu/sample: Unified IMU topic containing synchronized accelerometer and gyroscope data insensor_msgs/Imuformat./lidar/lidar_to_imu: Transform from LiDAR frame to IMU frame.
4.2. Using IMU Data
To enable IMU data collection:
# Launch with IMU enabled
ros2 launch orbbec_camera lidar.launch.py enable_imu:=true imu_rate:=50hz
# Check IMU topics
ros2 topic list | grep imu
# View IMU data
ros2 topic echo /lidar/imu/sample
The IMU data includes:
linear_acceleration: 3D acceleration data (x, y, z) in m/s²
angular_velocity: 3D angular velocity data (x, y, z) in rad/s
orientation: Quaternion orientation (not provided by hardware, set to zero)