window.SECTION_SEARCH_INDEX = {"language":"en","entries":[{"kind":"document","title":"OrbbecSDK V2 ROS2 Wrapper documentation","page_title":"OrbbecSDK V2 ROS2 Wrapper documentation","anchor":"","url":"index.html","text":"OrbbecSDK V2 ROS2 Wrapper documentation master file, created by sphinx-quickstart on Tue Sep 9 21:55:16 2025. You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive."},{"kind":"section","title":"OrbbecSDK V2 ROS2 Wrapper documentation","page_title":"OrbbecSDK V2 ROS2 Wrapper documentation","anchor":"orbbecsdk-v2-ros2-wrapper-documentation","url":"index.html#orbbecsdk-v2-ros2-wrapper-documentation","text":""},{"kind":"document","title":"Introduction","page_title":"Introduction","anchor":"","url":"source/camera_devices/1_overview/introduction.html","text":""},{"kind":"section","title":"Introduction","page_title":"Introduction","anchor":"introduction","url":"source/camera_devices/1_overview/introduction.html#introduction","text":"OrbbecSDK ROS2 Wrapper provides seamless integration of Orbbec cameras with ROS 2 environment. It supports ROS2 Foxy, Humble, and Jazzy distributions. By default, we recommend using the v2-main branch. For older OpenNI devices not supported by v2-main, please use the main branch. Device models that are only supported by the main branch are listed in the table below. If you are a user in China, it is recommended to use gitee Repo. Here is the device support list of main branch (v1.x) and v2-main branch (v2.x):
Product Series Product Branch main Branch v2-main
Gemini 305 Gemini 305 not supported recommended for new designs
Gemini 340 Gemini 345 not supported recommended for new designs
Gemini 345Lg not supported recommended for new designs
Gemini 435Le Gemini 435Le not supported recommended for new designs
Gemini 330 Gemini 335Le not supported recommended for new designs
Gemini 335 full maintenance recommended for new designs
Gemini 336 full maintenance recommended for new designs
Gemini 330 full maintenance recommended for new designs
Gemini 335L full maintenance recommended for new designs
Gemini 336L full maintenance recommended for new designs
Gemini 330L full maintenance recommended for new designs
Gemini 335Lg not supported recommended for new designs
Gemini 2 Gemini 2 full maintenance recommended for new designs
Gemini 2 L full maintenance recommended for new designs
Gemini 2 XL recommended for new designs to be supported
Gemini 215 not supported recommended for new designs
Gemini 210 not supported recommended for new designs
Femto Femto Bolt full maintenance recommended for new designs
Femto Mega full maintenance recommended for new designs
Femto Mega I full maintenance recommended for new designs
Astra Astra 2 full maintenance recommended for new designs
Astra+ limited maintenance not supported
Astra Pro Plus limited maintenance not supported
Astra Mini Astra Mini (S) Pro full maintenance recommended for new designs
LiDAR Pulsar ME450 not supported recommended for new designs
Pulsar SL450 not supported recommended for new designs
Note: If you do not find your device, please contact our FAE or sales representative for help. Definition: Recommended for new designs: we will provide full supports with new features, bug fix and performance optimization; Full maintenance: we will provide bug fix support; Limited maintenance: we will provide critical bug fix support; Not supported: we will not support specific device in this version; To be supported: we will add support in the near future."},{"kind":"section","title":"Support Hardware Products","page_title":"Introduction","anchor":"support-hardware-products","url":"source/camera_devices/1_overview/introduction.html#support-hardware-products","text":"The following devices are supported by the OrbbecSDK ROS2 Wrapper v2-main branch. More devices support will be added in the near future. If you can not find your device in the table below, try the main branch. For optimal performance, we strongly recommend updating to the latest firmware version. This ensures that you benefit from the most recent enhancements and bug fixes. To learn how to obtain and upgrade the latest firmware, please click here.
Products List Recommended FW Version Launch File
Gemini 305 1.0.30 gemini305.launch.py
Astra Mini Pro 2.0.03 astra.launch.py
Astra Mini S Pro 2.0.03 astra.launch.py
Gemini 435Le 1.3.6 gemini435_le.launch.py
Gemini 330 series 1.6.00 gemini_330_series.launch.py
Gemini 215 1.0.9 gemini210.launch.py
Gemini 210 1.0.9 gemini210.launch.py
Gemini 2 1.4.98 gemini2.launch.py
Gemini 2 L 1.5.2 gemini2L.launch.py
Femto Bolt 1.1.3 femto_bolt.launch.py
Femto Mega 1.3.1 femto_mega.launch.py
Femto Mega I 2.0.4 femto_mega.launch.py
Astra 2 2.8.20 astra2.launch.py
Gemini 345 1.9.03 gemini345.launch.py
Gemini 345Lg 1.9.03 gemini345_lg.launch.py
Pulsar SL450 2.2.4.5 lidar.launch.py
Pulsar ME450 1.0.0.6 lidar.launch.py
All launch files are essentially similar, with the primary difference being the default values of the parameters set for different models within the same series. Differences in USB standards, such as USB 2.0 versus USB 3.0, may require adjustments to these parameters. If you encounter a startup failure, please carefully review the specification manual. Pay special attention to the resolution settings in the launch file, as well as other parameters, to ensure compatibility and optimal performance."},{"kind":"section","title":"Orbbec camera datasheet","page_title":"Introduction","anchor":"orbbec-camera-datasheet","url":"source/camera_devices/1_overview/introduction.html#orbbec-camera-datasheet","text":"Refer to the camera datasheet for more information.
Product Series Product Datasheet
Gemini 305 Gemini 305 Orbbec Gemini 305 Datasheet
Gemini 345Lg Gemini 345Lg Orbbec Gemini 345Lg Datasheet
Gemini 435Le Gemini 435Le Orbbec Gemini 435Le Datasheet
Gemini 330 Gemini 335 Gemini 330 Series Datasheet for USB Devices
Gemini 336
Gemini 335L
Gemini 336L
Gemini 335Lg Gemini 330 Series Datasheet for GMSL Devices
Gemini 335Le Gemini 330 Series Datasheet for Ethernet Devices
Gemini 2 Gemini 2 Orbbec Gemini 2 Series Datasheet
Gemini 2 L
Gemini 2 XL Orbbec Gemini 2 XL Datasheet
Femto Femto Bolt Orbbec Femto Bolt Datasheet
Femto Mega Orbbec Femto Mega Datasheet
Femto Mega I Orbbec Femto Mega I Datasheet
Astra Astra 2 Orbbec Astra 2 Datasheet
Astra+ Orbbec Astra+ Datasheet
Astra Mini Pro Orbbec Astra Mini Pro Datasheet
"},{"kind":"section","title":"Support Platforms","page_title":"Introduction","anchor":"support-platforms","url":"source/camera_devices/1_overview/introduction.html#support-platforms","text":"Linux x64: tested on Ubuntu 22.04 Linux ARM64: tested on NVIDIA Jetson AGX Orin , NVIDIA Jetson Orin NX , NVIDIA Jetson Orin Nano , NVIDIA Jetson AGX Xavier , NVIDIA Jetson Xavier NX"},{"kind":"document","title":"Orbbec SDK Overview","page_title":"Orbbec SDK Overview","anchor":"","url":"source/camera_devices/1_overview/orbbecsdk_overview.html","text":""},{"kind":"section","title":"Orbbec SDK Overview","page_title":"Orbbec SDK Overview","anchor":"orbbec-sdk-overview","url":"source/camera_devices/1_overview/orbbecsdk_overview.html#orbbec-sdk-overview","text":"This section introduces the Orbbec SDK in C++. Its architecture and concepts are consistent with those of the Python Wrapper."},{"kind":"section","title":"Terms","page_title":"Orbbec SDK Overview","anchor":"terms","url":"source/camera_devices/1_overview/orbbecsdk_overview.html#terms","text":"
ID Name Explain
1 USB Universal Serial Bus
2 UVC USB Video Class
3 Firmware Firmware of 3D camera
4 Disparity Disparity is to observe the direction difference of the same target from two points with a certain distance.
5 D2D (Disparity to depth) Disparity to depth is an image processing technique used to convert disparity information into depth information.
6 Hardware D2D Disparity to depth is implemented internally in the device, without occupying the computational power of the host computer.
7 Software D2D Disparity to depth, implemented in Orbbec SDK
8 Depth point cloud Depth point cloud, the coordinates of points in a three-dimensional world coordinate system, can be transformed into a point cloud using the intrinsic parameters of a Depth camera.
9 RGBD point cloud Point cloud with overlaid RGB information
10 D2C The translation of \"Depth to Color\" is a feature that performs per-pixel geometric transformation on a depth image. Its result is aligning the depth image with its corresponding color image through the D2C transformation, allowing us to locate the depth information of a color pixel by using the same image coordinate position of that pixel in the transformed depth image. After the D2C transformation, we generate a depth image of the same size as the target color image, where the image content represents depth data in the coordinate system of the color camera. In other words, it reconstructs a depth image \"captured\" using the origin and dimensions of the color camera, where each pixel matches the corresponding pixel coordinates of the color camera.
11 Hardware D2C Hardware D2C refers to the functionality of performing Depth to Color transformation within the camera itself, with the camera directly outputting the result of the D2C transformation.
12 Software D2C Performing D2C computation on the host computer side using an SDK.
13 Frame aggregation (FrameSet) Combining Depth, IR, and Color frames into a Frameset and invoking it through a pipeline.
14 C2D The translation of \"Color to Depth\" is a feature that performs per-pixel geometric transformation on a color image. Its result is aligning the color image with its corresponding depth image through the C2D transformation.
15 MetaData Frame metadata is a set of parameters (or attributes) that provide a snapshot of the sensor configuration and/or system state present during the frame’s generation.
16 HDR High Dynamic Range (HDR) imaging allows imaging systems to capture images in extremely dark and bright scenes alike. We propose a software solution running on the host CPU to implement this feature. It utilizes data from two consecutive frames and directly synthesizes these two depth images, thereby enhances the dynamic range of 16-bit depth images.
17 LDP Laser close-range protection
"},{"kind":"section","title":"Orbbec SDK v2 Architecture Overview","page_title":"Orbbec SDK Overview","anchor":"orbbec-sdk-v2-architecture-overview","url":"source/camera_devices/1_overview/orbbecsdk_overview.html#orbbec-sdk-v2-architecture-overview","text":"OrbbecSDK v2 Soft Architecture Application OrbbecViewer, Sample, and User Application Implementation. Interfaces and Encapsulation Layer OrbbecSDK Interface Encapsulation and Wrapper Encapsulation. High-level Layer HighLevel encapsulates the core business components and provides interfaces to the outside using a pipeline. Basic business layer The realization of the core business logic framework. Platform abstraction layer Cross-platform components abstract operating system differences and provide a unified access interface. Platform implementation layer The driver implementation of each platform."},{"kind":"section","title":"SDK Concept Overview","page_title":"Orbbec SDK Overview","anchor":"sdk-concept-overview","url":"source/camera_devices/1_overview/orbbecsdk_overview.html#sdk-concept-overview","text":"Context Context which provides a set of settings includes settings such as device state change callbacks, log levels, and more. The Context can access multiple devices. Device One actual hardware device corresponds to one Device object, which is used to obtain relevant information of the device and control its attributes. Pipeline The HighLevel corresponding object encapsulates the interface for quick access to the SDK. It has simple functions that allow users to quickly get started and use the SDK. Config Provides configuration for enabling data streams, alignment modes, and frame aggregation modes, It is used to control the behavior of the data output. StreamProfile Stream configuration that defines parameters such as resolution, frame rate, and encoding format, It also provides management of camera parameters. Frame Represents a frame of data in the Stream, and also contains relevant information about that frame of data, such as timestamp, type, etc. Filter It mainly refers to some algorithmic processing modules for the composite stream FrameSet, such as point cloud algorithm processing. Record Recording functionality that captures data streams and saves them as files for later analysis or playback. Playback Playback functionality that plays recorded files and supports control over playback speed and other related parameters."},{"kind":"section","title":"SDK Programming Model","page_title":"Orbbec SDK Overview","anchor":"sdk-programming-model","url":"source/camera_devices/1_overview/orbbecsdk_overview.html#sdk-programming-model","text":"Here is the C++ programming logic flow chart. Python’s programming logic is the same as it. Standard Flowchart: image.png The standard flowchart demonstrates how to create a device from the device list, set and get parameters, and apply post-processing filters. Flowchart using default configuration (stream acquisition based on the default settings in OrbbecSDKConfig.xml): image"},{"kind":"document","title":"Overview","page_title":"Overview","anchor":"","url":"source/camera_devices/1_overview/overview.html","text":""},{"kind":"section","title":"Overview","page_title":"Overview","anchor":"overview","url":"source/camera_devices/1_overview/overview.html#overview","text":"This chapter provides an overview of the Orbbec SDK, including supported products, main features, and architecture."},{"kind":"document","title":"Environment configuration","page_title":"Environment configuration","anchor":"","url":"source/camera_devices/2_installation/build_the_package.html","text":""},{"kind":"section","title":"Environment configuration","page_title":"Environment configuration","anchor":"environment-configuration","url":"source/camera_devices/2_installation/build_the_package.html#environment-configuration","text":"Install ROS 2 according to the official guide: ROS 2 installation (Ubuntu) Install dependencies: 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-xacro \\ ros-$ROS_DISTRO-backward-ros libdw-dev libssl-dev mesa-utils libgl1 libgoogle-glog-dev Enable ROS 2 auto-completion: eval \"$(register-python-argcomplete3 ros2)\" eval \"$(register-python-argcomplete3 colcon)\""},{"kind":"section","title":"Linux Binary Package Installation","page_title":"Environment configuration","anchor":"linux-binary-package-installation","url":"source/camera_devices/2_installation/build_the_package.html#linux-binary-package-installation","text":"Check available packages: sudo apt update apt list | grep orbbec Install OrbbecSDK ROS2 package: sudo apt install ros-humble-orbbec-camera ros-humble-orbbec-description After installation, you can use it directly without compilation."},{"kind":"section","title":"Build from Source","page_title":"Environment configuration","anchor":"build-from-source","url":"source/camera_devices/2_installation/build_the_package.html#build-from-source","text":"Create a colcon workspace: mkdir -p ~/ros2_ws/src Clone source and checkout v2-main branch: cd ~/ros2_ws/src git clone https://github.com/orbbec/OrbbecSDK_ROS2.git cd OrbbecSDK_ROS2 git checkout v2-main Build: cd ~/ros2_ws colcon build --event-handlers console_direct+ --cmake-args -DCMAKE_BUILD_TYPE=Release"},{"kind":"document","title":"Installation","page_title":"Installation","anchor":"","url":"source/camera_devices/2_installation/installation.html","text":""},{"kind":"section","title":"Installation","page_title":"Installation","anchor":"installation","url":"source/camera_devices/2_installation/installation.html#installation","text":"This chapter explains how to install the Orbbec ROS2 Python SDK, including building from source, installing dependencies, and using registration scripts."},{"kind":"document","title":"Registration Script (Required)","page_title":"Registration Script (Required)","anchor":"","url":"source/camera_devices/2_installation/registration_script.html","text":""},{"kind":"section","title":"Registration Script (Required)","page_title":"Registration Script (Required)","anchor":"registration-script-required","url":"source/camera_devices/2_installation/registration_script.html#registration-script-required","text":"To allow the Orbbec cameras to be recognized correctly on Linux, install the udev rules."},{"kind":"section","title":"Binary Installation","page_title":"Registration Script (Required)","anchor":"binary-installation","url":"source/camera_devices/2_installation/registration_script.html#binary-installation","text":"sudo cp /opt/ros/$ROS_DISTRO/share/orbbec_camera/udev/99-obsensor-libusb.rules /etc/udev/rules.d/ sudo udevadm control --reload-rules && sudo udevadm trigger"},{"kind":"section","title":"Build from Source","page_title":"Registration Script (Required)","anchor":"build-from-source","url":"source/camera_devices/2_installation/registration_script.html#build-from-source","text":"cd ~/ros2_ws/src/OrbbecSDK_ROS2/orbbec_camera/scripts sudo bash install_udev_rules.sh sudo udevadm control --reload-rules && sudo udevadm trigger This step is mandatory for Linux users. Notes: If this script is not executed, open the device will fail due to permission issues. You need to run the sample with sudo (administrator privileges)."},{"kind":"document","title":"OrbbecViewer QuickStarts","page_title":"OrbbecViewer QuickStarts","anchor":"","url":"source/camera_devices/3_quickstarts/orbbecviewer.html","text":""},{"kind":"section","title":"OrbbecViewer QuickStarts","page_title":"OrbbecViewer QuickStarts","anchor":"orbbecviewer-quickstarts","url":"source/camera_devices/3_quickstarts/orbbecviewer.html#orbbecviewer-quickstarts","text":"Note: This ROS package aligns its parameters and functionality with Orbbec Viewer; for any questions regarding parameter usage or device model support, please refer to Orbbec Viewer."},{"kind":"section","title":"Download","page_title":"OrbbecViewer QuickStarts","anchor":"download","url":"source/camera_devices/3_quickstarts/orbbecviewer.html#download","text":"Repository link:OrbbecViewer Download Select the appropriate version of OrbbecViewer according to your device type. orbbecviewer"},{"kind":"section","title":"Connect the device","page_title":"OrbbecViewer QuickStarts","anchor":"connect-the-device","url":"source/camera_devices/3_quickstarts/orbbecviewer.html#connect-the-device","text":"When the Orbbec Viewer is open, the current device connection status will be prominently displayed in the top left corner of the application window. This area provides instant feedback about whether the camera is connected and functioning properly. orbbecviewer"},{"kind":"section","title":"Camera Control","page_title":"OrbbecViewer QuickStarts","anchor":"camera-control","url":"source/camera_devices/3_quickstarts/orbbecviewer.html#camera-control","text":"You can quickly view the image using the buttons at the top of the window, and adjust image parameters in the camera panel on the left side of the window. orbbecviewer"},{"kind":"section","title":"Device information and firmware upgrade","page_title":"OrbbecViewer QuickStarts","anchor":"device-information-and-firmware-upgrade","url":"source/camera_devices/3_quickstarts/orbbecviewer.html#device-information-and-firmware-upgrade","text":"Click the icon at the bottom left corner of the window to view the current camera information and upgrade the firmware. orbbecviewer Please refer to the list below for the latest camera firmware. For more information, please click here. Repository link:Firmware Download
Products list Download link Latest version
Femto Bolt Femto Bolt Firmware v1.1.3
Femto Mega Femto Mega Firmware v1.3.1
Gemini 2 Gemini 2 Firmware v1.4.98
Gemini 2 L Gemini 2L Firmware v1.5.02
Femto Mega I Femto Mega I Firmware v2.0.4
Gemini 330 series Gemini 330 series Firmware
Gemini 215 Gemini 215 v1.0.9
Gemini 210 Gemini 210 v1.0.9
Gemini 435Le Gemini 435Le v1.3.2
"},{"kind":"document","title":"ROS Package QuickStarts","page_title":"ROS Package QuickStarts","anchor":"","url":"source/camera_devices/3_quickstarts/quickstart.html","text":""},{"kind":"section","title":"ROS Package QuickStarts","page_title":"ROS Package QuickStarts","anchor":"ros-package-quickstarts","url":"source/camera_devices/3_quickstarts/quickstart.html#ros-package-quickstarts","text":""},{"kind":"section","title":"Introduction","page_title":"ROS Package QuickStarts","anchor":"introduction","url":"source/camera_devices/3_quickstarts/quickstart.html#introduction","text":"This section provides a quick start to using the Orbbec ROS 2 wrapper. You will learn how to: Launch a camera node. Visualize depth/color streams in RViz2. Interact with topics and services using ROS 2 CLI tools."},{"kind":"section","title":"Build your First Camera Application","page_title":"ROS Package QuickStarts","anchor":"build-your-first-camera-application","url":"source/camera_devices/3_quickstarts/quickstart.html#build-your-first-camera-application","text":""},{"kind":"section","title":"Step 1: Source ROS 2 and Workspace","page_title":"ROS Package QuickStarts","anchor":"step-1-source-ros-2-and-workspace","url":"source/camera_devices/3_quickstarts/quickstart.html#step-1-source-ros-2-and-workspace","text":"Make sure ROS 2 and your workspace environment are sourced: source /opt/ros/$ROS_DISTRO/setup.bash Source code build requirements source ~/ros2_ws/install/setup.bash"},{"kind":"section","title":"Step 2: Launch the Camera Node","page_title":"ROS Package QuickStarts","anchor":"step-2-launch-the-camera-node","url":"source/camera_devices/3_quickstarts/quickstart.html#step-2-launch-the-camera-node","text":"On terminal 1 . ./install/setup.bash ros2 run orbbec_camera list_devices_node #Check if the camera is connected ros2 launch orbbec_camera gemini_330_series.launch.py # Or other launch file, see below table If you have multiple cameras connected, you can specify the serial number: ros2 launch orbbec_camera gemini_330_series.launch.py serial_number:="},{"kind":"section","title":"Step 3: Visualize in RViz2","page_title":"ROS Package QuickStarts","anchor":"step-3-visualize-in-rviz2","url":"source/camera_devices/3_quickstarts/quickstart.html#step-3-visualize-in-rviz2","text":"Launch RViz2 and load the default config: On terminal 2 rviz2 Add an Image display, set topic to /camera/color/image_raw. Add another Image display for /camera/depth/image_raw. Optionally, add a PointCloud2 display for /camera/depth/points. You should now see the color stream, depth stream, and 3D point cloud in RViz2."},{"kind":"section","title":"Sample Features","page_title":"ROS Package QuickStarts","anchor":"sample-features","url":"source/camera_devices/3_quickstarts/quickstart.html#sample-features","text":"After the node is running, try some ROS 2 CLI commands:"},{"kind":"section","title":"List available topics / services/ parameters","page_title":"ROS Package QuickStarts","anchor":"list-available-topics-services-parameters","url":"source/camera_devices/3_quickstarts/quickstart.html#list-available-topics-services-parameters","text":"ros2 topic list ros2 service list ros2 param list"},{"kind":"section","title":"Echo a topic","page_title":"ROS Package QuickStarts","anchor":"echo-a-topic","url":"source/camera_devices/3_quickstarts/quickstart.html#echo-a-topic","text":"View depth camera data: ros2 topic echo /camera/depth/camera_info"},{"kind":"section","title":"Call a service","page_title":"ROS Package QuickStarts","anchor":"call-a-service","url":"source/camera_devices/3_quickstarts/quickstart.html#call-a-service","text":"For example, get device Information: ros2 service call /camera/get_device_info orbbec_camera_msgs/srv/GetDeviceInfo '{}'"},{"kind":"section","title":"Record with rosbag2","page_title":"ROS Package QuickStarts","anchor":"record-with-rosbag2","url":"source/camera_devices/3_quickstarts/quickstart.html#record-with-rosbag2","text":"ros2 bag record /camera/color/image_raw /camera/depth/image_raw"},{"kind":"document","title":"Quickstarts","page_title":"Quickstarts","anchor":"","url":"source/camera_devices/3_quickstarts/quickstarts.html","text":""},{"kind":"section","title":"Quickstarts","page_title":"Quickstarts","anchor":"quickstarts","url":"source/camera_devices/3_quickstarts/quickstarts.html#quickstarts","text":"This chapter provides quick start guides for the SDK, allowing users to run basic example programs quickly."},{"kind":"document","title":"Application Guide","page_title":"Application Guide","anchor":"","url":"source/camera_devices/4_application_guide/application_guide.html","text":""},{"kind":"section","title":"Application Guide","page_title":"Application Guide","anchor":"application-guide","url":"source/camera_devices/4_application_guide/application_guide.html#application-guide","text":"This chapter introduces application development with the SDK, including launch parameter configuration, ROS2 services, and topics usage."},{"kind":"document","title":"Compressed Image","page_title":"Compressed Image","anchor":"","url":"source/camera_devices/4_application_guide/compressed_image.html","text":""},{"kind":"section","title":"Compressed Image","page_title":"Compressed Image","anchor":"compressed-image","url":"source/camera_devices/4_application_guide/compressed_image.html#compressed-image","text":"You can use image_transport to compress the image using jpeg. Below is an example of how to use it: To access the compressed color image, you can use the following command: ros2 topic echo /camera/color/image_raw/compressed --no-arr This command will allow you to receive the compressed color image from the specified topic."},{"kind":"document","title":"Coordinate Systems and TF Transforms","page_title":"Coordinate Systems and TF Transforms","anchor":"","url":"source/camera_devices/4_application_guide/coordinate_and_tf.html","text":""},{"kind":"section","title":"Coordinate Systems and TF Transforms","page_title":"Coordinate Systems and TF Transforms","anchor":"coordinate-systems-and-tf-transforms","url":"source/camera_devices/4_application_guide/coordinate_and_tf.html#coordinate-systems-and-tf-transforms","text":""},{"kind":"section","title":"Camera sensor structure","page_title":"Coordinate Systems and TF Transforms","anchor":"camera-sensor-structure","url":"source/camera_devices/4_application_guide/coordinate_and_tf.html#camera-sensor-structure","text":"module in rviz2 module in rviz2"},{"kind":"section","title":"TF from coordinate A to coordinate B:","page_title":"Coordinate Systems and TF Transforms","anchor":"tf-from-coordinate-a-to-coordinate-b","url":"source/camera_devices/4_application_guide/coordinate_and_tf.html#tf-from-coordinate-a-to-coordinate-b","text":"In Orbbec cameras, the origin point (0,0,0) is taken from the camera_link position. You can view the camera’s URDF model and coordinate system structure using the following command: ros2 launch orbbec_description view_model.launch.py model:=gemini_335_336.urdf.xacro module in rviz2"},{"kind":"section","title":"ROS2 Robot Coordinate System vs Camera Optical Coordinate System","page_title":"Coordinate Systems and TF Transforms","anchor":"ros2-robot-coordinate-system-vs-camera-optical-coordinate-system","url":"source/camera_devices/4_application_guide/coordinate_and_tf.html#ros2-robot-coordinate-system-vs-camera-optical-coordinate-system","text":"Point of View: Imagine standing behind the camera and looking forward. Always use this point of view when discussing coordinates, left vs right IR, sensor positions, etc. ROS2 and Camera Coordinate System ROS2 Coordinate System: (X: Forward, Y: Left, Z: Up) Camera Optical Coordinate System: (X: Right, Y: Down, Z: Forward) All data published in the wrapper topics is optical data taken directly from the camera sensors. Static and dynamic TF topics publish optical and ROS coordinate systems so users can transform between them."},{"kind":"section","title":"Using ROS2 TF Tools","page_title":"Coordinate Systems and TF Transforms","anchor":"using-ros2-tf-tools","url":"source/camera_devices/4_application_guide/coordinate_and_tf.html#using-ros2-tf-tools","text":""},{"kind":"section","title":"View TF Tree Structure","page_title":"Coordinate Systems and TF Transforms","anchor":"view-tf-tree-structure","url":"source/camera_devices/4_application_guide/coordinate_and_tf.html#view-tf-tree-structure","text":"Use the following ROS2 commands to print and visualize the TF tree published by the camera package: Print all TF relationships: ros2 run tf2_tools view_frames This command generates a frames.pdf file showing the hierarchy between all frames. image-20251027111351870 View all currently published TF information: ros2 topic echo /tf_static View the TF transform between two specified frames: Use the following command to view the transform between two specific frames: ros2 run tf2_ros tf2_echo [source_frame] [target_frame] Example, view transform from camera_link to camera_depth_optical_frame: ros2 run tf2_ros tf2_echo camera_link camera_depth_optical_frame The command continuously outputs the real-time transform between the two frames, including: Translation: x, y, z (meters) Rotation (Quaternion): x, y, z, w Rotation (RPY): roll, pitch, yaw (radians and degrees) Transform Matrix: 4×4 matrix with rotation and translation Sample output: At time 0.0 - Translation: [0.000, 0.000, 0.000] - Rotation: in Quaternion [-0.500, 0.500, -0.500, 0.500] - Rotation: in RPY (radian) [-1.571, -0.000, -1.571] - Rotation: in RPY (degree) [-90.000, -0.000, -90.000] - Matrix: 0.000 0.000 1.000 0.000 -1.000 0.000 0.000 0.000 0.000 -1.000 0.000 0.000 0.000 0.000 0.000 1.000"},{"kind":"section","title":"Visualize TF Tree in rviz2","page_title":"Coordinate Systems and TF Transforms","anchor":"visualize-tf-tree-in-rviz2","url":"source/camera_devices/4_application_guide/coordinate_and_tf.html#visualize-tf-tree-in-rviz2","text":"Use rviz2 to visualize the TF tree and relative frame poses in real time: rviz2 In rviz2: Add the TF display plugin Set the Fixed Frame to camera_link or camera_depth_optical_frame Select which TF frames to display image-20251027140652727"},{"kind":"section","title":"Camera TF Calculation and Publishing Mechanism","page_title":"Coordinate Systems and TF Transforms","anchor":"camera-tf-calculation-and-publishing-mechanism","url":"source/camera_devices/4_application_guide/coordinate_and_tf.html#camera-tf-calculation-and-publishing-mechanism","text":""},{"kind":"section","title":"Core Function: OBCameraNode::calcAndPublishStaticTransform()","page_title":"Coordinate Systems and TF Transforms","anchor":"core-function-obcameranode-calcandpublishstatictransform","url":"source/camera_devices/4_application_guide/coordinate_and_tf.html#core-function-obcameranode-calcandpublishstatictransform","text":"The camera node uses this function to calculate and publish all static transforms between sensors. void OBCameraNode::calcAndPublishStaticTransform() { tf2::Quaternion quaternion_optical, zero_rot; zero_rot.setRPY(0.0, 0.0, 0.0); quaternion_optical.setRPY(-M_PI / 2, 0.0, -M_PI / 2); tf2::Vector3 zero_trans(0, 0, 0); auto base_stream_profile = stream_profile_[base_stream_]; auto device_info = device_->getDeviceInfo(); CHECK_NOTNULL(device_info); auto pid = device_info->getPid(); if (!base_stream_profile) { RCLCPP_ERROR_STREAM(logger_, \"Failed to get base stream profile\"); return; } CHECK_NOTNULL(base_stream_profile.get()); for (const auto &item : stream_profile_) { auto stream_index = item.first; auto stream_profile = item.second; if (!stream_profile) { continue; } OBExtrinsic ex; try { ex = stream_profile->getExtrinsicTo(base_stream_profile); } catch (const ob::Error &e) { RCLCPP_ERROR_STREAM(logger_, \"Failed to get \" << stream_name_[stream_index] << \" extrinsic: \" << e.getMessage()); ex = OBExtrinsic({{1, 0, 0, 0, 1, 0, 0, 0, 1}, {0, 0, 0}}); } auto Q = rotationMatrixToQuaternion(ex.rot); Q = quaternion_optical * Q * quaternion_optical.inverse(); tf2::Vector3 trans(ex.trans[0], ex.trans[1], ex.trans[2]); auto timestamp = node_->now(); if (stream_index.first != base_stream_.first) { if (stream_index.first == OB_STREAM_IR_RIGHT && base_stream_.first == OB_STREAM_DEPTH) { trans[0] = std::abs(trans[0]); // because left and right ir calibration is error } publishStaticTF(timestamp, trans, Q, frame_id_[base_stream_], frame_id_[stream_index]); } publishStaticTF(timestamp, zero_trans, quaternion_optical, frame_id_[stream_index], optical_frame_id_[stream_index]); RCLCPP_INFO_STREAM(logger_, \"Publishing static transform from \" << stream_name_[stream_index] << \" to \" << stream_name_[base_stream_]); RCLCPP_INFO_STREAM(logger_, \"Translation \" << trans[0] << \", \" << trans[1] << \", \" << trans[2]); RCLCPP_INFO_STREAM(logger_, \"Rotation \" << Q.getX() << \", \" << Q.getY() << \", \" << Q.getZ() << \", \" << Q.getW()); } if ((pid == FEMTO_BOLT_PID || pid == FEMTO_MEGA_PID) && enable_stream_[DEPTH] && enable_stream_[COLOR] && enable_publish_extrinsic_) { // calc depth to color CHECK_NOTNULL(stream_profile_[COLOR]); auto depth_to_color_extrinsics = base_stream_profile->getExtrinsicTo(stream_profile_[COLOR]); auto Q = rotationMatrixToQuaternion(depth_to_color_extrinsics.rot); Q = quaternion_optical * Q * quaternion_optical.inverse(); publishStaticTF(node_->now(), zero_trans, Q, camera_link_frame_id_, frame_id_[base_stream_]); } else { publishStaticTF(node_->now(), zero_trans, zero_rot, camera_link_frame_id_, frame_id_[base_stream_]); } if (enable_stream_[DEPTH] && enable_stream_[COLOR] && enable_publish_extrinsic_) { static const char *frame_id = \"depth_to_color_extrinsics\"; OBExtrinsic ex; try { ex = base_stream_profile->getExtrinsicTo(stream_profile_[COLOR]); } catch (const ob::Error &e) { RCLCPP_ERROR_STREAM(logger_, \"Failed to get \" << frame_id << \" extrinsic: \" << e.getMessage()); ex = OBExtrinsic({{1, 0, 0, 0, 1, 0, 0, 0, 1}, {0, 0, 0}}); } depth_to_other_extrinsics_[COLOR] = ex; auto ex_msg = obExtrinsicsToMsg(ex, frame_id); CHECK_NOTNULL(depth_to_other_extrinsics_publishers_[COLOR]); depth_to_other_extrinsics_publishers_[COLOR]->publish(ex_msg); } if (enable_stream_[DEPTH] && enable_stream_[INFRA0] && enable_publish_extrinsic_) { static const char *frame_id = \"depth_to_ir_extrinsics\"; OBExtrinsic ex; try { ex = base_stream_profile->getExtrinsicTo(stream_profile_[INFRA0]); } catch (const ob::Error &e) { RCLCPP_ERROR_STREAM(logger_, \"Failed to get \" << frame_id << \" extrinsic: \" << e.getMessage()); ex = OBExtrinsic({{1, 0, 0, 0, 1, 0, 0, 0, 1}, {0, 0, 0}}); } depth_to_other_extrinsics_[INFRA0] = ex; auto ex_msg = obExtrinsicsToMsg(ex, frame_id); CHECK_NOTNULL(depth_to_other_extrinsics_publishers_[INFRA0]); depth_to_other_extrinsics_publishers_[INFRA0]->publish(ex_msg); } if (enable_stream_[DEPTH] && enable_stream_[INFRA1] && enable_publish_extrinsic_) { static const char *frame_id = \"depth_to_left_ir_extrinsics\"; OBExtrinsic ex; try { ex = base_stream_profile->getExtrinsicTo(stream_profile_[INFRA1]); } catch (const ob::Error &e) { RCLCPP_ERROR_STREAM(logger_, \"Failed to get \" << frame_id << \" extrinsic: \" << e.getMessage()); ex = OBExtrinsic({{1, 0, 0, 0, 1, 0, 0, 0, 1}, {0, 0, 0}}); } depth_to_other_extrinsics_[INFRA1] = ex; auto ex_msg = obExtrinsicsToMsg(ex, frame_id); CHECK_NOTNULL(depth_to_other_extrinsics_publishers_[INFRA1]); depth_to_other_extrinsics_publishers_[INFRA1]->publish(ex_msg); } if (enable_stream_[DEPTH] && enable_stream_[INFRA2] && enable_publish_extrinsic_) { static const char *frame_id = \"depth_to_right_ir_extrinsics\"; OBExtrinsic ex; try { ex = base_stream_profile->getExtrinsicTo(stream_profile_[INFRA2]); } catch (const ob::Error &e) { RCLCPP_ERROR_STREAM(logger_, \"Failed to get \" << frame_id << \" extrinsic: \" << e.getMessage()); ex = OBExtrinsic({{1, 0, 0, 0, 1, 0, 0, 0, 1}, {0, 0, 0}}); } ex.trans[0] = -std::abs(ex.trans[0]); depth_to_other_extrinsics_[INFRA2] = ex; auto ex_msg = obExtrinsicsToMsg(ex, frame_id); CHECK_NOTNULL(depth_to_other_extrinsics_publishers_[INFRA2]); depth_to_other_extrinsics_publishers_[INFRA2]->publish(ex_msg); } if (enable_stream_[DEPTH] && enable_stream_[ACCEL] && enable_publish_extrinsic_) { static const char *frame_id = \"depth_to_accel_extrinsics\"; OBExtrinsic ex; try { ex = base_stream_profile->getExtrinsicTo(stream_profile_[ACCEL]); } catch (const ob::Error &e) { RCLCPP_ERROR_STREAM(logger_, \"Failed to get \" << frame_id << \" extrinsic: \" << e.getMessage()); ex = OBExtrinsic({{1, 0, 0, 0, 1, 0, 0, 0, 1}, {0, 0, 0}}); } depth_to_other_extrinsics_[ACCEL] = ex; auto ex_msg = obExtrinsicsToMsg(ex, frame_id); CHECK_NOTNULL(depth_to_other_extrinsics_publishers_[ACCEL]); depth_to_other_extrinsics_publishers_[ACCEL]->publish(ex_msg); } if (enable_stream_[DEPTH] && enable_stream_[GYRO] && enable_publish_extrinsic_) { static const char *frame_id = \"depth_to_gyro_extrinsics\"; OBExtrinsic ex; try { ex = base_stream_profile->getExtrinsicTo(stream_profile_[GYRO]); } catch (const ob::Error &e) { RCLCPP_ERROR_STREAM(logger_, \"Failed to get \" << frame_id << \" extrinsic: \" << e.getMessage()); ex = OBExtrinsic({{1, 0, 0, 0, 1, 0, 0, 0, 1}, {0, 0, 0}}); } depth_to_other_extrinsics_[GYRO] = ex; auto ex_msg = obExtrinsicsToMsg(ex, frame_id); CHECK_NOTNULL(depth_to_other_extrinsics_publishers_[GYRO]); depth_to_other_extrinsics_publishers_[GYRO]->publish(ex_msg); } if (enable_sync_output_accel_gyro_) { tf2::Quaternion zero_rot; zero_rot.setRPY(0.0, 0.0, 0.0); tf2::Vector3 zero_trans(0, 0, 0); publishStaticTF(node_->now(), zero_trans, zero_rot, optical_frame_id_[GYRO], accel_gyro_frame_id_); } }"},{"kind":"section","title":"Function Breakdown","page_title":"Coordinate Systems and TF Transforms","anchor":"function-breakdown","url":"source/camera_devices/4_application_guide/coordinate_and_tf.html#function-breakdown","text":"Detailed explanation of the code: Quaternion Initialization and Coordinate Transform tf2::Quaternion quaternion_optical, zero_rot; zero_rot.setRPY(0.0, 0.0, 0.0); quaternion_optical.setRPY(-M_PI / 2, 0.0, -M_PI / 2); quaternion_optical: Defines the rotation from optical coordinates to ROS standard (90° rotation) Converts camera optical CS (X right, Y down, Z forward) to ROS CS (X forward, Y left, Z up) Get Device Info and Base Stream auto base_stream_profile = stream_profile_[base_stream_]; auto device_info = device_->getDeviceInfo(); // Base stream usually DEPTH Choose a base stream (usually depth); all other transforms are relative to it Iterate Streams and Compute Relative Transforms for (const auto &item : stream_profile_) { auto stream_index = item.first; auto stream_profile = item.second; OBExtrinsic ex; ex = stream_profile->getExtrinsicTo(base_stream_profile); auto Q = rotationMatrixToQuaternion(ex.rot); Q = quaternion_optical * Q * quaternion_optical.inverse(); tf2::Vector3 trans(ex.trans[0], ex.trans[1], ex.trans[2]); OBExtrinsic holds rotation matrix (rot) and translation vector (trans) Apply optical-to-ROS rotation via quaternion multiplication Publish TF Transforms publishStaticTF(timestamp, trans, Q, frame_id_[base_stream_], frame_id_[stream_index]); publishStaticTF(timestamp, zero_trans, quaternion_optical, frame_id_[stream_index], optical_frame_id_[stream_index]); First: base stream to sensor (translation + rotation) Second: sensor frame to optical frame (pure rotation) Special Handling for Left/Right IR if (stream_index.first == OB_STREAM_IR_RIGHT && base_stream_.first == OB_STREAM_DEPTH) { trans[0] = std::abs(trans[0]); } Ensures symmetry consistency between left/right IR cameras Publish Depth-to-Other Extrinsics if (enable_stream_[DEPTH] && enable_stream_[COLOR] && enable_publish_extrinsic_) { OBExtrinsic ex = base_stream_profile->getExtrinsicTo(stream_profile_[COLOR]); auto ex_msg = obExtrinsicsToMsg(ex, \"depth_to_color_extrinsics\"); depth_to_other_extrinsics_publishers_[COLOR]->publish(ex_msg); } Publishes raw extrinsics via topic for advanced alignment and registration"},{"kind":"document","title":"Launch parameters","page_title":"Launch parameters","anchor":"","url":"source/camera_devices/4_application_guide/launch_parameters.html","text":""},{"kind":"section","title":"Launch parameters","page_title":"Launch parameters","anchor":"launch-parameters","url":"source/camera_devices/4_application_guide/launch_parameters.html#launch-parameters","text":"If you are not sure how to set the parameters, you can connect the orbbec camera and open the OrbbecViewer. The following are the launch parameters available:"},{"kind":"section","title":"Core & Stream Configuration","page_title":"Launch parameters","anchor":"core-stream-configuration","url":"source/camera_devices/4_application_guide/launch_parameters.html#core-stream-configuration","text":"camera_name Start the node namespace. serial_number The serial number of the camera. This is required when multiple cameras are used. usb_port The USB port of the camera. This is required when multiple cameras are used. device_num The number of devices. This must be filled in if multiple cameras are required. device_preset The default value is Default. You can use the following command to view the configurable mode ros2 run orbbec_camera list_camera_profile_mode_node [color|depth|left_ir|right_ir|ir]_[width|height|fps|format] The resolution and frame rate of the sensor stream. [color|depth|left_ir|right_ir|ir]_rotation Set stream image rotation. The possible values are 0, 90, 180, 270. [color|depth|left_ir|right_ir|ir]_flip Enable the stream image flip. [color|depth|left_ir|right_ir|ir]_mirror Enable the stream image mirror. enable_point_cloud Enable the point cloud. enable_colored_point_cloud Enable the RGB point cloud. cloud_frame_id Modify the frame_id name within the ros message. ordered_pc Enable filtering of invalid point clouds. point_cloud_qos, [stream]_qos, [stream]_camera_info_qos ROS 2 Message Quality of Service (QoS) settings. The possible values are SYSTEM_DEFAULT, DEFAULT, PARAMETER_EVENTS, SERVICES_DEFAULT, PARAMETERS, SENSOR_DATA and are case-insensitive. These correspond to rmw_qos_profile_system_default, rmw_qos_profile_default, rmw_qos_profile_parameter_events, rmw_qos_profile_services_default, rmw_qos_profile_parameters, and SENSOR_DATA, respectively. color.image_raw.enable_pub_plugins Enable Color image transport plugins. Default: [\"image_transport/compressed\", \"image_transport/raw\", \"image_transport/theora\"]. Supported Versions: Wrapper version 2.6.3 and above. depth.image_raw.enable_pub_plugins Enable Depth image transport plugins. Default: [\"image_transport/compressedDepth\", \"image_transport/raw\"]. Supported Versions: Wrapper version 2.6.3 and above. left_ir.image_raw.enable_pub_plugins Enable Left IR image transport plugins. Default: [\"image_transport/compressed\", \"image_transport/raw\", \"image_transport/theora\"]. Supported Versions: Wrapper version 2.6.3 and above. right_ir.image_raw.enable_pub_plugins Enable Right IR image transport plugins. Default: [\"image_transport/compressed\", \"image_transport/raw\", \"image_transport/theora\"]. Supported Versions: Wrapper version 2.6.3 and above. point_cloud_decimation_filter_factor Point cloud downsampling factor. Range: 1–8. 1 means no downsampling. Supported Versions: Wrapper version 2.6.3 and above."},{"kind":"section","title":"Sensor Controls","page_title":"Launch parameters","anchor":"sensor-controls","url":"source/camera_devices/4_application_guide/launch_parameters.html#sensor-controls","text":""},{"kind":"section","title":"Color Stream","page_title":"Launch parameters","anchor":"color-stream","url":"source/camera_devices/4_application_guide/launch_parameters.html#color-stream","text":"enable_color_auto_exposure Enable the Color auto exposure. enable_color_auto_exposure_priority Enable the Color auto exposure priority. color_exposure Set the Color exposure. color_gain Set the Color gain. enable_color_auto_white_balance Enable the Color auto white balance. color_white_balance Set the Color white balance. color_ae_max_exposure Set the maximum exposure value for Color auto exposure. color_brightness, color_sharpness, color_gamma, color_saturation, color_contrast, color_hue Set the Color brightness, sharpness, gamma, saturation, contrast, and hue. color_backlight_compensation Enables the color camera’s backlight compensation feature. Range: 0–6, Default: 3. color_powerline_freq Set the power line freq. The possible values are disable, 50hz, 60hz, auto. enable_color_decimation_filter / color_decimation_filter_scale Enable the Color decimation filter and set its scale. color_ae_roi_[left|right|top|bottom] Set Color auto exposure ROI. color_denoising_level Enables the ISP denoising feature for Gemini 330 series devices. Range: 0–8, Default: 0 (auto)."},{"kind":"section","title":"Depth Stream","page_title":"Launch parameters","anchor":"depth-stream","url":"source/camera_devices/4_application_guide/launch_parameters.html#depth-stream","text":"enable_depth_auto_exposure_priority Enable the Depth auto exposure priority. mean_intensity_set_point Set the target average intensity of the depth image when auto-exposure is turned on. For example: mean_intensity_set_point:=100. Note: In wrapper version 2.4.7 and later, this parameter replaces the deprecated depth_brightness, but depth_brightness will still be supported for backward compatibility. enable_depth_scale Whether to enable depth scaling after setting D2C. true means enabled, the default is true. depth_precision The depth precision should be in the format 1mm. The default value is 1mm. depth_ae_roi_[left|right|top|bottom] Set Depth auto exposure ROI."},{"kind":"section","title":"IR Stream","page_title":"Launch parameters","anchor":"ir-stream","url":"source/camera_devices/4_application_guide/launch_parameters.html#ir-stream","text":"enable_ir_auto_exposure Enable the IR auto exposure. ir_exposure / ir_gain Set the IR exposure and gain. ir_ae_max_exposure Set the maximum exposure value for IR auto exposure. ir_brightness Set the target average intensity of the ir image when auto-exposure is turned on."},{"kind":"section","title":"Laser / LDP","page_title":"Launch parameters","anchor":"laser-ldp","url":"source/camera_devices/4_application_guide/launch_parameters.html#laser-ldp","text":"enable_laser Enable the laser. The default value is true. laser_energy_level Set the laser energy level. enable_ldp / ldp_power_level Enable the LDP and set its power level."},{"kind":"section","title":"Device, Sync & Advanced Features","page_title":"Launch parameters","anchor":"device-sync-advanced-features","url":"source/camera_devices/4_application_guide/launch_parameters.html#device-sync-advanced-features","text":""},{"kind":"section","title":"Multi-Camera Synchronization","page_title":"Launch parameters","anchor":"multi-camera-synchronization","url":"source/camera_devices/4_application_guide/launch_parameters.html#multi-camera-synchronization","text":"sync_mode Set sync mode. The default value is standalone. depth_delay_us / color_delay_us The delay time (microseconds) of the depth/color image capture after receiving the capture command or trigger signal. trigger2image_delay_us The delay time (microseconds) of the image capture after receiving the capture command or trigger signal. Us trigger_out_delay_us The delay time (microseconds) of the trigger signal output after receiving the capture command or trigger signal. trigger_out_enabled Enable the trigger out signal. software_trigger_enabled / software_trigger_period Enable the software trigger out signal / set the software trigger period in ms. frames_per_trigger The frame number of each stream after each trigger in triggering mode. Used for multi camera synced."},{"kind":"section","title":"Network Cameras","page_title":"Launch parameters","anchor":"network-cameras","url":"source/camera_devices/4_application_guide/launch_parameters.html#network-cameras","text":"enumerate_net_device Enable automatically enumerate network devices. net_device_ip / net_device_port Set net device’s IP address and port (Usually 8090). force_ip_enable Enable the Force IP function. Default: false Supported Versions: Wrapper version 2.5.4 and above. force_ip_mac Target device MAC address when multiple cameras are connected (e.g., \"54:14:FD:06:07:DA\"). You can use the list_devices_node to find the MAC of each device. Default: \"\" Supported Versions: Wrapper version 2.5.4 and above. force_ip_address Static IP address to assign. Default: 192.168.1.10 Supported Versions: Wrapper version 2.5.4 and above. force_ip_subnet_mask Subnet mask for the static IP. Default: 255.255.255.0 Supported Versions: Wrapper version 2.5.4 and above. force_ip_gateway Gateway address for the static IP. Default: 192.168.1.1 Supported Versions: Wrapper version 2.5.4 and above. Used for net camera."},{"kind":"section","title":"Device-Specific","page_title":"Launch parameters","anchor":"device-specific","url":"source/camera_devices/4_application_guide/launch_parameters.html#device-specific","text":"enable_gmsl_trigger / gmsl_trigger_fps Enable the gmsl trigger out signal / set gmsl trigger fps. Only supports gmsl camera. enable_ptp_config Enable PTP time synchronization. Requires enable_sync_host_time to be false. Supported Modules: Gemini 335Le Supported Versions: Wrapper version 2.3.4 and above. preset_resolution_config Preset resolution configuration for the camera device. Format: “width,height,ir_decimation_factor,depth_decimation_factor”. Example: “1280,720,4,4”. Leave empty to disable. Supported Modules: Gemini 435Le Supported Versions: Wrapper version 2.6.3 and above. ae_mode colorbased: Automatic exposure based on color flow. depthbased: Automatic exposure based on depth flow. Default: depthbased Supported Modules: Gemini 305 Supported Versions: Wrapper version 2.7.2 and above. enalbe_sports_mode Whether to enable sports mode. Default: false Supported Modules: Gemini 305 Supported Versions: Wrapper version 2.7.2 and above. depth_downscale / left_ir_downscale /right_ir_downscale Set the downsampling multiple. You can use ros2 run orbbec_camera list_camera_profile_mode_node to view the settable resolution. Default value: 1 Supported Modules: Gemini 305 Supported Versions: Wrapper version 2.7.2 and above. enable_false_positive_filter Enable this option to reduce ghosting noise. Supported Modules: DaBaiA / DaBaiAL / Gemini345 / Gemini345Lg Supported Versions: Wrapper version 2.7.6 and above; Firmware version 1.9.03 and above."},{"kind":"section","title":"Disparity","page_title":"Launch parameters","anchor":"disparity","url":"source/camera_devices/4_application_guide/launch_parameters.html#disparity","text":"disparity_to_depth_mode HW: use hardware disparity to depth conversion. SW: use software disparity to depth conversion. disparity_range_mode, disparity_search_offset, disparity_offset_config Parameters for disparity search offset. Used for disparity search offset."},{"kind":"section","title":"Interleave AE Mode","page_title":"Launch parameters","anchor":"interleave-ae-mode","url":"source/camera_devices/4_application_guide/launch_parameters.html#interleave-ae-mode","text":"interleave_ae_mode Set laser or hdr interleave. interleave_frame_enable, interleave_skip_enable, interleave_skip_index Parameters to control interleave frame mode. [hdr|laser]_index[0|1]_[...] In interleave frame mode, set the 0th and 1st frame parameters of hdr or laser interleaving frames. All interleave parameters are used for interleave ae mode."},{"kind":"section","title":"Intra-Camera Synchronization","page_title":"Launch parameters","anchor":"intra-camera-synchronization","url":"source/camera_devices/4_application_guide/launch_parameters.html#intra-camera-synchronization","text":"depth_registration Enable alignment of the depth frame to the color frame. This field is required when the enable_colored_point_cloud is set to true. align_mode The alignment mode to be used. Options are HW for hardware alignment and SW for software alignment. align_target_stream Set align target stream mode. The possible values are COLOR, DEPTH. COLOR: Align depth to color. DEPTH: Align color to depth. intra_camera_sync_reference Sets the reference point for intra-camera synchronization. Applicable for Gemini 330 series devices when sync_mode is set to software or hardware trigger mode. Options: Start, Middle, End. When set to empty, the long baseline device defaults to End, and the short baseline device defaults to Middle. Supported Versions: Wrapper version 2.6.3 and above."},{"kind":"section","title":"Basic & General Parameters","page_title":"Launch parameters","anchor":"basic-general-parameters","url":"source/camera_devices/4_application_guide/launch_parameters.html#basic-general-parameters","text":""},{"kind":"section","title":"Firmware & Backend","page_title":"Launch parameters","anchor":"firmware-backend","url":"source/camera_devices/4_application_guide/launch_parameters.html#firmware-backend","text":"upgrade_firmware The input parameter is the firmware path. preset_firmware_path The input parameter is the preset firmware path. If multiple paths are input, each path needs to be separated by , and a maximum of 3 firmware paths can be input. uvc_backend Optional values: v4l2, libuvc. connection_delay The delay time in milliseconds for reopening the device. Some devices, such as Astra mini, require a longer time to initialize and reopening the device immediately can cause firmware crashes when hot plugging. retry_on_usb3_detection_failure If the camera is connected to a USB 2.0 port and is not detected, the system will attempt to reset the camera up to three times. It is recommended to set this parameter to false when using a USB 2.0 connection to avoid unnecessary resets."},{"kind":"section","title":"TF, Extrinsics & Calibration","page_title":"Launch parameters","anchor":"tf-extrinsics-calibration","url":"source/camera_devices/4_application_guide/launch_parameters.html#tf-extrinsics-calibration","text":"publish_tf / tf_publish_rate Enable the TF publish and set its publication rate. enable_publish_extrinsic Enable the extrinsics publish. ir_info_url / color_info_url Set URL of the IR/color camera info. enable_color_undistortion Enable the Color undistortion."},{"kind":"section","title":"Time Synchronization","page_title":"Launch parameters","anchor":"time-synchronization","url":"source/camera_devices/4_application_guide/launch_parameters.html#time-synchronization","text":"enable_sync_host_time Enable synchronization of the host time with the camera time. The default value is true. If using global time, set to false. time_domain Select timestamp type: device, global, and system. time_sync_period Interval (in seconds) for synchronizing the camera time with the host system. Note: This parameter only needs to be set when enable_sync_host_time = true and time_domain = device. Supported Versions: Wrapper version 2.6.3 and above. enable_frame_sync Enable the frame synchronization."},{"kind":"section","title":"Logging & Diagnostics","page_title":"Launch parameters","anchor":"logging-diagnostics","url":"source/camera_devices/4_application_guide/launch_parameters.html#logging-diagnostics","text":"log_level SDK log level. Default is info. Optional values: debug, info, warn, error, fatal. log_file_name Saved SDK log file name. Effective when log_level is debug. Supported Versions: Wrapper version 2.6.3 and above. diagnostic_period Diagnostic period in seconds. enable_heartbeat Enable the heartbeat function. Default is false. If true, the camera node will send heartbeat signals to the firmware."},{"kind":"section","title":"Miscellaneous","page_title":"Launch parameters","anchor":"miscellaneous","url":"source/camera_devices/4_application_guide/launch_parameters.html#miscellaneous","text":"config_file_path The path to the YAML configuration file. Default is \"\". If not specified, default parameters from the launch file will be used. frame_aggregate_mode Set frame aggregate output mode. Optional values: full_frame, color_frame, ANY, disable. enable_d2c_viewer Publishes the D2C overlay image (for testing only)."},{"kind":"section","title":"IMU","page_title":"Launch parameters","anchor":"imu","url":"source/camera_devices/4_application_guide/launch_parameters.html#imu","text":"enable_accel / enable_gyro Enable the Accelerometer/gyroscope and output its info topic data. enable_sync_output_accel_gyro Enable the sync accel_gyro, and output IMU topic real-time data. accel_rate / gyro_rate The frequency of the accelerometer/gyroscope. Values range from 1.5625hz to 32khz. accel_range / gyro_range The range of the accelerometer (2g, 4g, 8g, 16g) and gyroscope (16dps to 2000dps). enable_accel_data_correction / enable_gyro_data_correction Enable data correction for the accelerometer/gyroscope. linear_accel_cov / angular_vel_cov Covariance of the linear acceleration and angular velocity."},{"kind":"section","title":"Depth Filters","page_title":"Launch parameters","anchor":"depth-filters","url":"source/camera_devices/4_application_guide/launch_parameters.html#depth-filters","text":"enable_decimation_filter Enable the Depth decimation filter. Set with decimation_filter_scale. enable_hdr_merge Enable the Depth hdr merge filter. Set with hdr_merge_exposure_1, etc. enable_sequence_id_filter Enable the Depth sequence id filter. Set with sequence_id_filter_id. enable_threshold_filter Enable the Depth threshold filter. Set with threshold_filter_max, threshold_filter_min. enable_hardware_noise_removal_filter Enable the Depth hardware noise removal filter. enable_noise_removal_filter Enable the Depth software noise removal filter. Set with noise_removal_filter_min_diff, etc. enable_spatial_filter Enable the Depth spatial filter. Set with spatial_filter_alpha, etc. enable_temporal_filter Enable the Depth temporal filter. Set with temporal_filter_diff_threshold, etc. enable_hole_filling_filter Enable the Depth hole filling filter. Set with hole_filling_filter_mode. enable_spatial_fast_filter Enable the Depth spatial fast filter. Set with spatial_fast_filter_radius. enable_spatial_moderate_filter Enable the Depth spatial moderate filter. Set with spatial_moderate_filter_diff_threshold, etc. IMPORTANT: Please carefully read the instructions regarding software filtering settings at this link. If you are uncertain, do not modify these settings."},{"kind":"document","title":"Enabling and Visualizing Point Cloud in ROS 2","page_title":"Enabling and Visualizing Point Cloud in ROS 2","anchor":"","url":"source/camera_devices/4_application_guide/point_cloud.html","text":""},{"kind":"section","title":"Enabling and Visualizing Point Cloud in ROS 2","page_title":"Enabling and Visualizing Point Cloud in ROS 2","anchor":"enabling-and-visualizing-point-cloud-in-ros-2","url":"source/camera_devices/4_application_guide/point_cloud.html#enabling-and-visualizing-point-cloud-in-ros-2","text":"This section demonstrates how to enable point cloud data output from the camera node and visualize it using RViz2."},{"kind":"section","title":"Enabling Depth Point Cloud","page_title":"Enabling and Visualizing Point Cloud in ROS 2","anchor":"enabling-depth-point-cloud","url":"source/camera_devices/4_application_guide/point_cloud.html#enabling-depth-point-cloud","text":""},{"kind":"section","title":"Command to Enable Depth Point Cloud","page_title":"Enabling and Visualizing Point Cloud in ROS 2","anchor":"command-to-enable-depth-point-cloud","url":"source/camera_devices/4_application_guide/point_cloud.html#command-to-enable-depth-point-cloud","text":"To activate the point cloud data stream for depth information, use the following command: ros2 launch orbbec_camera gemini_330_series.launch.py enable_point_cloud:=true"},{"kind":"section","title":"Visualizing Depth Point Cloud in RViz2","page_title":"Enabling and Visualizing Point Cloud in ROS 2","anchor":"visualizing-depth-point-cloud-in-rviz2","url":"source/camera_devices/4_application_guide/point_cloud.html#visualizing-depth-point-cloud-in-rviz2","text":"After running the above command, perform the following steps to visualize the depth point cloud: Open RViz2. Add a PointCloud2 display. Select the /camera/depth/points topic for visualization. Set the fixed frame to camera_link to properly align the data. Example Visualization Here is what the depth point cloud might look like in RViz2: Depth Point Cloud Visualization"},{"kind":"section","title":"Enabling Colored Point Cloud","page_title":"Enabling and Visualizing Point Cloud in ROS 2","anchor":"enabling-colored-point-cloud","url":"source/camera_devices/4_application_guide/point_cloud.html#enabling-colored-point-cloud","text":""},{"kind":"section","title":"Command to Enable Colored Point Cloud","page_title":"Enabling and Visualizing Point Cloud in ROS 2","anchor":"command-to-enable-colored-point-cloud","url":"source/camera_devices/4_application_guide/point_cloud.html#command-to-enable-colored-point-cloud","text":"To enable the colored point cloud feature, enter the following command: ros2 launch orbbec_camera gemini_330_series.launch.py enable_colored_point_cloud:=true"},{"kind":"section","title":"Visualizing Colored Point Cloud in RViz2","page_title":"Enabling and Visualizing Point Cloud in ROS 2","anchor":"visualizing-colored-point-cloud-in-rviz2","url":"source/camera_devices/4_application_guide/point_cloud.html#visualizing-colored-point-cloud-in-rviz2","text":"To visualize the colored point cloud data: Launch RViz2 following the command execution. Add a PointCloud2 display panel. Choose the /camera/depth_registered/points topic from the list. Ensure the fixed frame is set to camera_link. Example Visualization The result of the colored point cloud in RViz2 should look similar to this: Colored Point Cloud Visualization"},{"kind":"document","title":"Available services","page_title":"Available services","anchor":"","url":"source/camera_devices/4_application_guide/services.html","text":""},{"kind":"section","title":"Available services","page_title":"Available services","anchor":"available-services","url":"source/camera_devices/4_application_guide/services.html#available-services","text":"Note: Services related to a specific stream (e.g., /camera/set_color_*) are only available if that stream is enabled in the launch file (e.g., enable_color:=true)."},{"kind":"section","title":"Stream Control","page_title":"Available services","anchor":"stream-control","url":"source/camera_devices/4_application_guide/services.html#stream-control","text":""},{"kind":"section","title":"Color Stream","page_title":"Available services","anchor":"color-stream","url":"source/camera_devices/4_application_guide/services.html#color-stream","text":"/camera/toggle_color ros2 service call /camera/toggle_color std_srvs/srv/SetBool '{data: true}' /camera/get_color_exposure & /camera/get_color_gain ros2 service call /camera/get_color_exposure orbbec_camera_msgs/srv/GetInt32 '{}' ros2 service call /camera/get_color_gain orbbec_camera_msgs/srv/GetInt32 '{}' /camera/set_color_auto_exposure ros2 service call /camera/set_color_auto_exposure std_srvs/srv/SetBool '{data: true}' /camera/set_color_exposure & /camera/set_color_gain ros2 service call /camera/set_color_exposure orbbec_camera_msgs/srv/SetInt32 '{data: 1}' ros2 service call /camera/set_color_gain orbbec_camera_msgs/srv/SetInt32 '{data: 64}' /camera/set_color_mirror, /camera/set_color_flip, /camera/set_color_rotation ros2 service call /camera/set_color_mirror std_srvs/srv/SetBool '{data: true}' ros2 service call /camera/set_color_flip std_srvs/srv/SetBool '{data: true}' ros2 service call /camera/set_color_rotation orbbec_camera_msgs/srv/SetInt32 '{data: 180}' /camera/set_color_ae_roi # data_param: [Left, Right, Top, Bottom] ros2 service call /camera/set_color_ae_roi orbbec_camera_msgs/srv/SetArrays '{data_param: [0,1279,0,719]}'"},{"kind":"section","title":"Depth Stream","page_title":"Available services","anchor":"depth-stream","url":"source/camera_devices/4_application_guide/services.html#depth-stream","text":"/camera/toggle_depth ros2 service call /camera/toggle_depth std_srvs/srv/SetBool '{data: true}' /camera/get_depth_exposure & /camera/get_depth_gain ros2 service call /camera/get_depth_exposure orbbec_camera_msgs/srv/GetInt32 '{}' ros2 service call /camera/get_depth_gain orbbec_camera_msgs/srv/GetInt32 '{}' /camera/set_depth_auto_exposure ros2 service call /camera/set_depth_auto_exposure std_srvs/srv/SetBool '{data: true}' /camera/set_depth_exposure & /camera/set_depth_gain ros2 service call /camera/set_depth_exposure orbbec_camera_msgs/srv/SetInt32 '{data: 3000}' ros2 service call /camera/set_depth_gain orbbec_camera_msgs/srv/SetInt32 '{data: 64}' /camera/set_depth_mirror, /camera/set_depth_flip, /camera/set_depth_rotation ros2 service call /camera/set_depth_mirror std_srvs/srv/SetBool '{data: true}' ros2 service call /camera/set_depth_flip std_srvs/srv/SetBool '{data: true}' ros2 service call /camera/set_depth_rotation orbbec_camera_msgs/srv/SetInt32 '{data: 180}' /camera/set_depth_ae_roi # data_param: [Left, Right, Top, Bottom] ros2 service call /camera/set_depth_ae_roi orbbec_camera_msgs/srv/SetArrays '{data_param: [0,847,0,479]}'"},{"kind":"section","title":"IR Stream","page_title":"Available services","anchor":"ir-stream","url":"source/camera_devices/4_application_guide/services.html#ir-stream","text":"/camera/toggle_ir ros2 service call /camera/toggle_ir std_srvs/srv/SetBool '{data: true}' /camera/get_ir_exposure & /camera/get_ir_gain ros2 service call /camera/get_ir_exposure orbbec_camera_msgs/srv/GetInt32 '{}' ros2 service call /camera/get_ir_gain orbbec_camera_msgs/srv/GetInt32 '{}' /camera/set_ir_long_exposure ros2 service call /camera/set_ir_long_exposure std_srvs/srv/SetBool '{data: true}' /camera/set_ir_auto_exposure ros2 service call /camera/set_ir_auto_exposure std_srvs/srv/SetBool '{data: true}' /camera/set_ir_exposure & /camera/set_ir_gain ros2 service call /camera/set_ir_exposure orbbec_camera_msgs/srv/SetInt32 '{data: 3000}' ros2 service call /camera/set_ir_gain orbbec_camera_msgs/srv/SetInt32 '{data: 64}' /camera/set_ir_mirror, /camera/set_ir_flip, /camera/set_ir_rotation ros2 service call /camera/set_ir_mirror std_srvs/srv/SetBool '{data: true}' ros2 service call /camera/set_ir_flip std_srvs/srv/SetBool '{data: true}' ros2 service call /camera/set_ir_rotation orbbec_camera_msgs/srv/SetInt32 '{data: 180}' /camera/switch_ir ros2 service call /camera/switch_ir orbbec_camera_msgs/srv/SetString '{data: left}'"},{"kind":"section","title":"All Streams","page_title":"Available services","anchor":"all-streams","url":"source/camera_devices/4_application_guide/services.html#all-streams","text":"/camera/get_streams_enable & /camera/set_streams_enable ros2 service call /camera/get_streams_enable orbbec_camera_msgs/srv/GetBool '{}' ros2 service call /camera/set_streams_enable std_srvs/srv/SetBool '{data: false}'"},{"kind":"section","title":"Sensor & Emitter Control","page_title":"Available services","anchor":"sensor-emitter-control","url":"source/camera_devices/4_application_guide/services.html#sensor-emitter-control","text":"/camera/set_auto_white_balance & /camera/get_auto_white_balance ros2 service call /camera/set_auto_white_balance std_srvs/srv/SetBool '{data: true}' ros2 service call /camera/get_auto_white_balance orbbec_camera_msgs/srv/GetInt32 '{}' /camera/set_white_balance & /camera/get_white_balance ros2 service call /camera/set_white_balance orbbec_camera_msgs/srv/SetInt32 '{data: 2800}' ros2 service call /camera/get_white_balance orbbec_camera_msgs/srv/GetInt32 '{}' /camera/set_laser_enable ros2 service call /camera/set_laser_enable std_srvs/srv/SetBool '{data: true}' /camera/get_laser_status ros2 service call /camera/get_laser_status orbbec_camera_msgs/srv/GetBool '{}' Supported Versions: Wrapper version 2.6.3 and above. /camera/set_ldp_enable & /camera/get_ldp_status ros2 service call /camera/set_ldp_enable std_srvs/srv/SetBool '{data: true}' ros2 service call /camera/get_ldp_status orbbec_camera_msgs/srv/GetBool '{}' /camera/set_ptp_config & /camera/get_ptp_config ros2 service call /camera/set_ptp_config std_srvs/srv/SetBool '{data: true}' ros2 service call /camera/get_ptp_config orbbec_camera_msgs/srv/GetBool '{}' /camera/get_lrm_measure_distance ros2 service call /camera/get_lrm_measure_distance orbbec_camera_msgs/srv/GetInt32 '{}' /camera/set_fan_work_mode ros2 service call /camera/set_fan_work_mode orbbec_camera_msgs/srv/SetInt32 '{data: 0}' /camera/set_floor_enable ros2 service call /camera/set_floor_enable std_srvs/srv/SetBool '{data: true}'"},{"kind":"section","title":"Device Information & Management","page_title":"Available services","anchor":"device-information-management","url":"source/camera_devices/4_application_guide/services.html#device-information-management","text":"/camera/get_device_info ros2 service call /camera/get_device_info orbbec_camera_msgs/srv/GetDeviceInfo /camera/get_sdk_version ros2 service call /camera/get_sdk_version orbbec_camera_msgs/srv/GetString /camera/reboot_device ros2 service call /camera/reboot_device std_srvs/srv/Empty '{}'"},{"kind":"section","title":"Synchronization & Triggering","page_title":"Available services","anchor":"synchronization-triggering","url":"source/camera_devices/4_application_guide/services.html#synchronization-triggering","text":"/camera/send_software_trigger ros2 service call /camera/send_software_trigger std_srvs/srv/SetBool '{data: true}' /camera/set_sync_hosttime ros2 service call /camera/set_sync_hosttime std_srvs/srv/SetBool '{data: true}' /camera/set_reset_timestamp # Only available when time_domain param is set to device ros2 service call /camera/set_reset_timestamp std_srvs/srv/SetBool '{data: true}' /camera/set_sync_interleaverlaser # Only available if interleave_ae_mode is 'laser' and interleave_frame_enable is true ros2 service call /camera/set_sync_interleaverlaser orbbec_camera_msgs/srv/SetInt32 '{data: 0}'"},{"kind":"section","title":"Depth Filter Configuration","page_title":"Available services","anchor":"depth-filter-configuration","url":"source/camera_devices/4_application_guide/services.html#depth-filter-configuration","text":"/camera/set_filter # Set DecimationFilter ros2 service call /camera/set_filter orbbec_camera_msgs/srv/SetFilter '{filter_name: DecimationFilter, filter_enable: false, filter_param: [5]}' # Set SpatialAdvancedFilter ros2 service call /camera/set_filter orbbec_camera_msgs/srv/SetFilter '{filter_name: SpatialAdvancedFilter, filter_enable: true, filter_param: [0.5,160,1,8]}' # Set SequenceIdFilter ros2 service call /camera/set_filter orbbec_camera_msgs/srv/SetFilter '{filter_name: SequenceIdFilter, filter_enable: true, filter_param: [1]}' # Set ThresholdFilter ros2 service call /camera/set_filter orbbec_camera_msgs/srv/SetFilter '{filter_name: ThresholdFilter, filter_enable: true, filter_param: [0,15999]}' # Set NoiseRemovalFilter ros2 service call /camera/set_filter orbbec_camera_msgs/srv/SetFilter '{filter_name: NoiseRemovalFilter, filter_enable: true, filter_param: [256,80]}' # Set HardwareNoiseRemoval ros2 service call /camera/set_filter orbbec_camera_msgs/srv/SetFilter '{filter_name: HardwareNoiseRemoval, filter_enable: true, filter_param: []}' # Set SpatialFastFilter # filter_param: [radius] ros2 service call /camera/set_filter orbbec_camera_msgs/srv/SetFilter '{filter_name: SpatialFastFilter, filter_enable: true, filter_param: [4]}' # Set SpatialModerateFilter # filter_param: [disp_diff, magnitude, radius] ros2 service call /camera/set_filter orbbec_camera_msgs/srv/SetFilter '{filter_name: SpatialModerateFilter, filter_enable: true, filter_param: [160,1,3]}'"},{"kind":"section","title":"Data Capture","page_title":"Available services","anchor":"data-capture","url":"source/camera_devices/4_application_guide/services.html#data-capture","text":"/camera/save_images ros2 service call /camera/save_images std_srvs/srv/Empty '{}' /camera/save_point_cloud ros2 service call /camera/save_point_cloud std_srvs/srv/Empty '{}'"},{"kind":"section","title":"Device-Specific","page_title":"Available services","anchor":"device-specific","url":"source/camera_devices/4_application_guide/services.html#device-specific","text":"/camera/write_customer_data & /camera/read_customer_data ros2 service call /camera/write_customer_data orbbec_camera_msgs/srv/SetString '{data: \"string\"}' ros2 service call /camera/read_customer_data orbbec_camera_msgs/srv/GetString '{}' Supported Modules: Gemini 435Le Supported Versions: Wrapper version 2.5.4 and above. /camera/set_user_calib_params & /camera/get_user_calib_params ros2 service call /camera/set_user_calib_params orbbec_camera_msgs/srv/SetUserCalibParams \\ '{k: [614.9613647460938, 0.0, 634.91552734375, 0.0, 614.65771484375, 391.407470703125, 0.0, 0.0, 1.0], d: [-0.03131488710641861, 0.032955970615148544, 9.096559369936585e-05, -0.0003368517500348389, -0.01115430984646082, 0.0, 0.0, 0.0], rotation: [0.9999880790710449, 0.0003024190664291382, -0.004874417092651129, -0.0002965621242765337, 0.9999992251396179, 0.001202247804030776, 0.004874777048826218, -0.0012007878394797444, 0.9999874234199524], translation: [-0.023897956848144532, -9.439220279455185e-05, -6.804073229432106e-06]}' ros2 service call /camera/get_user_calib_params orbbec_camera_msgs/srv/GetUserCalibParams '{}' Supported Modules: Gemini 435Le Supported Versions: Wrapper version 2.5.4 and above. /camera/set_ae_mode # depthbased or colorbased ros2 service call /camera/set_ae_mode orbbec_camera_msgs/srv/SetString \"data: depthbased\" Supported Modules: Gemini 305 Supported Versions: Wrapper version 2.7.2 and above. /camera/set_sports_mode ros2 service call /camera/set_sports_mode std_srvs/srv/SetBool \"data: true\" Supported Modules: Gemini 305 Supported Versions: Wrapper version 2.7.2 and above."},{"kind":"section","title":"Point cloud decimation","page_title":"Available services","anchor":"point-cloud-decimation","url":"source/camera_devices/4_application_guide/services.html#point-cloud-decimation","text":"/camera/set_point_cloud_decimation ros2 service call /camera/set_point_cloud_decimation orbbec_camera_msgs/srv/SetInt32 '{data: 8}' Supported Versions: Wrapper version 2.6.3 and above. /camera/get_point_cloud_decimation ros2 service call /camera/get_point_cloud_decimation orbbec_camera_msgs/srv/GetInt32 '{}' Supported Versions: Wrapper version 2.6.3 and above."},{"kind":"document","title":"Available Topics","page_title":"Available Topics","anchor":"","url":"source/camera_devices/4_application_guide/topics.html","text":""},{"kind":"section","title":"Available Topics","page_title":"Available Topics","anchor":"available-topics","url":"source/camera_devices/4_application_guide/topics.html#available-topics","text":"Topics are organized by stream and function. By default, all topics are published under the /camera namespace, which can be changed with the camera_name launch parameter. Note: Topics for a specific stream (e.g., /camera/color/...) are only published if their corresponding launch parameter (e.g., enable_color) is set to true."},{"kind":"section","title":"Image Streams","page_title":"Available Topics","anchor":"image-streams","url":"source/camera_devices/4_application_guide/topics.html#image-streams","text":"These topics provide the raw image data and corresponding calibration information for each enabled camera stream. The pattern is consistent for color, depth, ir, left_ir, and right_ir streams. /camera/color/image_raw Raw image data from the color stream. /camera/color/camera_info Camera calibration data and metadata for the color stream. /camera/color/metadata Low-level metadata from the color stream firmware. /camera/depth/image_raw Raw image data from the depth stream. /camera/depth/camera_info Camera calibration data and metadata for the depth stream. /camera/depth/metadata Low-level metadata from the depth stream firmware. /camera/ir/image_raw Raw image data from the infrared (IR) stream. /camera/ir/camera_info Camera calibration data and metadata for the IR stream. /camera/ir/metadata Low-level metadata from the IR stream firmware."},{"kind":"section","title":"Point Cloud Topics","page_title":"Available Topics","anchor":"point-cloud-topics","url":"source/camera_devices/4_application_guide/topics.html#point-cloud-topics","text":"/camera/depth/points Point cloud data generated from the depth stream. Condition: Published only when enable_point_cloud is true. /camera/depth_registered/points Colored point cloud data, where the depth points are registered to the color image frame. Condition: Published only when enable_colored_point_cloud is true."},{"kind":"section","title":"IMU Topics","page_title":"Available Topics","anchor":"imu-topics","url":"source/camera_devices/4_application_guide/topics.html#imu-topics","text":"The Inertial Measurement Unit (IMU) topics provide accelerometer and gyroscope data. Their behavior depends on the synchronization setting. /camera/accel/sample Individual accelerometer data stream. Condition: Published when enable_accel is true AND enable_sync_output_accel_gyro is false. /camera/gyro/sample Individual gyroscope data stream. Condition: Published when enable_gyro is true AND enable_sync_output_accel_gyro is false. /camera/gyro_accel/sample Synchronized data stream containing both accelerometer and gyroscope data in a single message. Condition: Published when enable_sync_output_accel_gyro is true."},{"kind":"section","title":"Device Status & Diagnostics","page_title":"Available Topics","anchor":"device-status-diagnostics","url":"source/camera_devices/4_application_guide/topics.html#device-status-diagnostics","text":"/camera/device_status Reports the current status of the camera device. /camera/depth_filter_status Reports the status of the depth sensor’s post-processing filters. /diagnostics Publishes diagnostic information about the camera node. Currently, this includes the device temperature."},{"kind":"document","title":"Advanced Guide","page_title":"Advanced Guide","anchor":"","url":"source/camera_devices/5_advanced_guide/advanced_guide.html","text":""},{"kind":"section","title":"Advanced Guide","page_title":"Advanced Guide","anchor":"advanced-guide","url":"source/camera_devices/5_advanced_guide/advanced_guide.html#advanced-guide","text":"This chapter covers advanced features of the SDK, including multi-camera usage, and special configuration modes."},{"kind":"section","title":"Performance & Optimization","page_title":"Advanced Guide","anchor":"performance-optimization","url":"source/camera_devices/5_advanced_guide/advanced_guide.html#performance-optimization","text":""},{"kind":"section","title":"Multi-Camera","page_title":"Advanced Guide","anchor":"multi-camera","url":"source/camera_devices/5_advanced_guide/advanced_guide.html#multi-camera","text":""},{"kind":"section","title":"Configuration & Modes","page_title":"Advanced Guide","anchor":"configuration-modes","url":"source/camera_devices/5_advanced_guide/advanced_guide.html#configuration-modes","text":""},{"kind":"document","title":"Aligning Depth to Color","page_title":"Aligning Depth to Color","anchor":"","url":"source/camera_devices/5_advanced_guide/configuration/align_depth_color.html","text":""},{"kind":"section","title":"Aligning Depth to Color","page_title":"Aligning Depth to Color","anchor":"aligning-depth-to-color","url":"source/camera_devices/5_advanced_guide/configuration/align_depth_color.html#aligning-depth-to-color","text":"This section explains how to align depth images with color images to create an overlay image using ROS 2. This is particularly useful for applications requiring synchronized visual information from different sensor modalities."},{"kind":"section","title":"Commands to Align and View Depth and Color Images","page_title":"Aligning Depth to Color","anchor":"commands-to-align-and-view-depth-and-color-images","url":"source/camera_devices/5_advanced_guide/configuration/align_depth_color.html#commands-to-align-and-view-depth-and-color-images","text":"Basic Depth to Color Alignment: To simply align the depth image to the color image, use the following command: ros2 launch orbbec_camera gemini_330_series.launch.py depth_registration:=true This command activates the depth registration feature without opening a viewer. Viewing Depth to Color Overlay: If you wish to view the depth to color overlay, you need to enable the viewer by using the command below: ros2 launch orbbec_camera gemini_330_series.launch.py depth_registration:=true enable_d2c_viewer:=true This launches the camera node with depth to color registration and opens a viewer to display the overlay image."},{"kind":"section","title":"Selecting Topics in RViz2","page_title":"Aligning Depth to Color","anchor":"selecting-topics-in-rviz2","url":"source/camera_devices/5_advanced_guide/configuration/align_depth_color.html#selecting-topics-in-rviz2","text":"To visualize the aligned images in RViz2: Launch RViz2 after running one of the above commands. Select the topic for the depth to color overlay image. An example topic selection is shown here: Topic Selection for Depth to Color Overlay"},{"kind":"section","title":"Example of Depth to Color Overlay","page_title":"Aligning Depth to Color","anchor":"example-of-depth-to-color-overlay","url":"source/camera_devices/5_advanced_guide/configuration/align_depth_color.html#example-of-depth-to-color-overlay","text":"After selecting the appropriate topic in RViz2, you will be able to see the depth to color overlay image. Here’s what it might look like: Depth to Color Overlay Image"},{"kind":"document","title":"Configuration of depth NFOV and WFOV modes","page_title":"Configuration of depth NFOV and WFOV modes","anchor":"","url":"source/camera_devices/5_advanced_guide/configuration/configuration_of_depth_NFOV_and_WFOV_modes.html","text":""},{"kind":"section","title":"Configuration of depth NFOV and WFOV modes","page_title":"Configuration of depth NFOV and WFOV modes","anchor":"configuration-of-depth-nfov-and-wfov-modes","url":"source/camera_devices/5_advanced_guide/configuration/configuration_of_depth_NFOV_and_WFOV_modes.html#configuration-of-depth-nfov-and-wfov-modes","text":"For the Femto Mega and Femto Bolt devices, the NFOV and WFOV modes are implemented by configuring the resolution of Depth and IR in the launch file. In launch file, depth_width, depth_height, ir_width, ir_height represents the resolution of the depth and the resolution of the IR. The frame fps and resolution of IR must be consistent with the depth. The correspondence between different modes and resolutions is as follows: NFOV unbinned: 640 x 576. NFOV binned: 320 x 288. WFOV unbinned: 1024 x 1024. WFOV binned: 512 x 512."},{"kind":"document","title":"Depth work mode switch","page_title":"Depth work mode switch","anchor":"","url":"source/camera_devices/5_advanced_guide/configuration/depth_work_mode_switch.html","text":""},{"kind":"section","title":"Depth work mode switch","page_title":"Depth work mode switch","anchor":"depth-work-mode-switch","url":"source/camera_devices/5_advanced_guide/configuration/depth_work_mode_switch.html#depth-work-mode-switch","text":"Orbbec SDK ROS 2 supports the depth work mode switch. The depth work mode switch is supported by Gemini 2 and Gemini 2 L. Before starting the camera, depth work mode (depth_work_mode) can be configured for the corresponding xxx.launch.py file’s support. The depth work mode switch is supported by Gemini 2, Gemini 2 L, and Gemini 2 XL cameras. The default depth work mode configuration of xxx.launch.py is the camera’s default configuration. If you need to modify it, you can switch to the corresponding mode as needed. The specific camera depth work mode support types can be found in the comments of the depth mode. # Depth work mode support is as follows: # Unbinned Dense Default # Unbinned Sparse Default # Binned Sparse Default # Obstacle Avoidance DeclareLaunchArgument('depth_work_mode', default_value='') View depth work modes: ros2 run orbbec_camera list_depth_work_mode_node Example: ros2 launch orbbec_camera gemini2L.launch.py depth_work_mode:=\"Unbinned Dense Default\""},{"kind":"document","title":"Disparity_search_offset","page_title":"Disparity_search_offset","anchor":"","url":"source/camera_devices/5_advanced_guide/configuration/disparity_search_offset.html","text":""},{"kind":"section","title":"Disparity_search_offset","page_title":"Disparity_search_offset","anchor":"disparity-search-offset","url":"source/camera_devices/5_advanced_guide/configuration/disparity_search_offset.html#disparity-search-offset","text":"This section describes how to use the disparity_search_offset function in the Gemini330 series cameras (minimum camera firmware version 1.4.60).Disparity_search_offset is effective only for1280×720, 1280×800 and 640×400 resolutions of depth stream."},{"kind":"section","title":"Function Introduction","page_title":"Disparity_search_offset","anchor":"function-introduction","url":"source/camera_devices/5_advanced_guide/configuration/disparity_search_offset.html#function-introduction","text":"The definition of disparity search range: For any pixel (u_l, v) in the left image, by default, the corresponding disparity search range in the right image is [ (u_l - 255, v), (u_l, v) ], where the disparity search length is 256 and the maximum integer disparity is 255. If the starting point of the search is adjusted to [ (u_l - 255 - offset, v), (u_l - offset, v) ], the offset is defined as the disparity shift. Therefore, our disparity search range configuration includes both the disparity search length and the search position offset (which can also be referred to as the disparity shift). Depth Point Cloud Visualization"},{"kind":"section","title":"Parameter Introduction","page_title":"Disparity_search_offset","anchor":"parameter-introduction","url":"source/camera_devices/5_advanced_guide/configuration/disparity_search_offset.html#parameter-introduction","text":"The disparity_search_offset related parameters are set in gemini_330_series.launch.py disparity_range_mode : Disparity search length,can only be set to 64, 128 and 256. disparity_search_offset : Disparity search offset value,Disparity search offset value, can be set from 0 to 127. disparity_offset_config : Disparity search offset interleave frames. offset_index0 : Frame 0 disparity search offset value. offset_index1 : Frame 1 disparity search offset value.
disparity range mode disparity search offset Minimum depth of inclined wall (mm)
64 85 Gemini 335L 388-406
64 127 Gemini 335L 302-317
disparity range mode disparity search offset Minimum depth of inclined wall (mm)
128 0 Gemini 335 233-249
Gemini 335L 453-475
128 45 Gemini 335 172-184
Gemini 335L 334-349
128 127 Gemini 335 117-125
Gemini 335L 226-236
disparity range mode disparity search offset Minimum depth of inclined wall (mm)
256 85 Gemini 335L 169-178
256 127 Gemini 335L 151-158
"},{"kind":"section","title":"Run the launch","page_title":"Disparity_search_offset","anchor":"run-the-launch","url":"source/camera_devices/5_advanced_guide/configuration/disparity_search_offset.html#run-the-launch","text":"Setting the disparity_search_offset parameter,colcon build again and run launch ros2 launch orbbec_camera gemini_330_series.launch.py"},{"kind":"document","title":"Using interleave_ae with Gemini330 series cameras","page_title":"Using interleave_ae with Gemini330 series cameras","anchor":"","url":"source/camera_devices/5_advanced_guide/configuration/interleave_ae_mode.html","text":""},{"kind":"section","title":"Using interleave_ae with Gemini330 series cameras","page_title":"Using interleave_ae with Gemini330 series cameras","anchor":"using-interleave-ae-with-gemini330-series-cameras","url":"source/camera_devices/5_advanced_guide/configuration/interleave_ae_mode.html#using-interleave-ae-with-gemini330-series-cameras","text":"This section describes how to use interleave_ae in Gemini 330 series cameras (minimum camera firmware version 1.4.00)"},{"kind":"section","title":"Parameter Introduction","page_title":"Using interleave_ae with Gemini330 series cameras","anchor":"parameter-introduction","url":"source/camera_devices/5_advanced_guide/configuration/interleave_ae_mode.html#parameter-introduction","text":"The interleave_ae related parameters are set in gemini_330_series.launch.py interleave_ae_mode : Set laser or hdr interleave. interleave_frame_enable : enable interleave frame mode. interleave_skip_enable : enable skip frame mode. interleave_skip_index : Set 0 for skip pattern ir, set 1 for skip flood ir. interleave hdr When the interleave_ae_mode parameter is set to hdr and interleave_frame_enable is set to true, interleave hdr will be enabled hdr_index1_laser_control : Frame 1 laser switch settings. hdr_index1_depth_exposure : Frame 1 depth exposure value setting, not in AE mode. hdr_index1_depth_gain : Frame 1 depth gain value setting, not in AE mode. hdr_index1_ir_brightness : Frame 1 ir gain value setting. hdr_index1_ir_ae_max_exposure : Frame 1 ir maximum exposure value setting in AE (auto exposure). hdr_index0_laser_control: Frame 0 laser switch settings. hdr_index0_depth_exposure: Frame 0 depth exposure value setting, not in AE mode. hdr_index0_depth_gain : Frame 0 depth gain value setting, not in AE mode. hdr_index0_ir_brightness : Frame 0 ir gain value setting. hdr_index0_ir_ae_max_exposure : Frame 0 ir maximum exposure value setting in AE (auto exposure). interleave laser When the interleave_ae_mode parameter is set to laser and interleave_frame_enable is set to true, interleave laser will be enabled laser_index1_laser_control : Frame 1 laser switch settings. laser_index1_depth_exposure : Frame 1 depth exposure value setting, not in AE mode. laser_index1_depth_gain : Frame 1 depth gain value setting, not in AE mode. laser_index1_ir_brightness : Frame 1 ir gain value setting. laser_index1_ir_ae_max_exposure : Frame 1 ir maximum exposure value setting in AE (auto exposure). laser_index0_laser_control : Frame 0 laser switch settings. laser_index0_depth_exposure : Frame 0 depth exposure value setting, not in AE mode. laser_index0_depth_gain : Frame 0 depth gain value setting, not in AE mode. laser_index0_ir_brightness : Frame 0 ir gain value setting. laser_index0_ir_ae_max_exposure : Frame 0 ir maximum exposure value setting in AE (auto exposure)."},{"kind":"section","title":"Run the launch","page_title":"Using interleave_ae with Gemini330 series cameras","anchor":"run-the-launch","url":"source/camera_devices/5_advanced_guide/configuration/interleave_ae_mode.html#run-the-launch","text":"Setting the interleave_ae parameter,colcon build again and run launch ros2 launch orbbec_camera gemini_330_series.launch.py Example Visualization Depth Point Cloud Visualization Depth Point Cloud Visualization"},{"kind":"section","title":"Multi_camera_synced + Interleave_ae","page_title":"Using interleave_ae with Gemini330 series cameras","anchor":"multi-camera-synced-interleave-ae","url":"source/camera_devices/5_advanced_guide/configuration/interleave_ae_mode.html#multi-camera-synced-interleave-ae","text":"Please refer to multi_camera_synced and Parameter Introduction"},{"kind":"document","title":"Net_camera","page_title":"Net_camera","anchor":"","url":"source/camera_devices/5_advanced_guide/configuration/net_camera.html","text":""},{"kind":"section","title":"Net_camera","page_title":"Net_camera","anchor":"net-camera","url":"source/camera_devices/5_advanced_guide/configuration/net_camera.html#net-camera","text":"This section describes how to use Net camera in OrbbecSDK_ROS2.Currently, only Femto_Mega, Gemini 335Le and Gemini 435Le devices are supported, and other Net devices will be supported in the near future. You can find example usage code in the example."},{"kind":"section","title":"Femto Mega & Gemini 435Le & Gemini 335Le","page_title":"Net_camera","anchor":"femto-mega-gemini-435le-gemini-335le","url":"source/camera_devices/5_advanced_guide/configuration/net_camera.html#femto-mega-gemini-435le-gemini-335le","text":"Parameter Introduction Network device settings: enumerate_net_device is set to true, which will automatically enumerate network devices. If you do not want to automatically enumerate network devices,you can set enumerate_net_device to false, net_device_ip to the device’s IP address, and net_device_port to the default value of 8090. enumerate_net_device : Enable automatically enumerate network devices. net_device_ip : Setting net device’s IP address. net_device_port : Setting net device’s port.Usually, you can set it to 8090. Single Net camera If you need to run Gemini 435Le/Gemini 335Le, you only need to replace femto_mega.launch.py in the run command with gemini435_le.launch.py/gemini_330_series.launch.py For femto_mega.launch.py as an example: automatically enumerate network devices: ros2 launch orbbec_camera femto_mega.launch.py enumerate_net_device:=true Specify IP address to start the device: Note: net_device_ip needs to be changed to the IP address of the device, here it is 192.168.1.10 ros2 launch orbbec_camera femto_mega.launch.py enumerate_net_device:=false net_device_ip:=192.168.1.10 net_device_port:=8090 Multi Net camera For multi_net_camera.launch.py as an example: ros2 launch orbbec_camera multi_net_camera.launch.py"},{"kind":"section","title":"set_device_ip Utility","page_title":"Net_camera","anchor":"set-device-ip-utility","url":"source/camera_devices/5_advanced_guide/configuration/net_camera.html#set-device-ip-utility","text":"The set_device_ip executable allows you to configure the IP settings of a network camera directly from ROS 2, including switching between DHCP and static IP, and setting subnet mask and gateway. This is useful for quickly assigning or updating IP addresses without modifying launch files. Note: The IP settings applied with set_device_ip are permanent and will not be reset if the device is powered off or restarted. Supported Versions: Wrapper version 2.6.3 and above. Example Usage ros2 run orbbec_camera set_device_ip --ros-args \\ -p old_ip:=192.168.1.10 \\ -p dhcp:=false \\ -p new_ip:=192.168.1.11 \\ -p mask:=255.255.255.0 \\ -p gateway:=192.168.1.1 Parameters old_ip – Current IP address of the device. dhcp – Set to true to use DHCP or false for static IP. new_ip – Static IP address to assign when DHCP is disabled. mask – Subnet mask for the new IP. gateway – Gateway address for the new IP."},{"kind":"section","title":"Force IP Function","page_title":"Net_camera","anchor":"force-ip-function","url":"source/camera_devices/5_advanced_guide/configuration/net_camera.html#force-ip-function","text":"The Force IP feature allows you to assign a static IP address to a network camera, overriding DHCP settings. This is useful when multiple network cameras are connected, and you need each device to have a fixed IP for reliable communication. Note: The Force IP configuration will be reset if the device is powered off or restarted. You need to reapply the settings after reboot. Supported Versions: Wrapper version 2.6.3 and above. Parameters force_ip_enable – Enable the Force IP function. Default: false force_ip_mac – Target device MAC address when multiple cameras are connected (e.g., \"54:14:FD:06:07:DA\"). You can use the list_devices_node to find the MAC of each device. Default: \"\" force_ip_address – Static IP address to assign . Default: 192.168.1.10 force_ip_subnet_mask – Subnet mask for the static IP. Default: 255.255.255.0 force_ip_gateway – Gateway address for the static IP. Default: 192.168.1.1 Example Usage Enable Force IP for a specific device: ros2 launch orbbec_camera gemini_330_series.launch.py \\ force_ip_enable:=true \\ force_ip_mac:=54:14:FD:06:07:DA \\ force_ip_address:=192.168.1.50 \\ force_ip_subnet_mask:=255.255.255.0 \\ force_ip_gateway:=192.168.1.1 \\ net_device_ip:=192.168.1.50 \\ net_device_port:=8090 Tip: Make sure the camera is connected and its MAC address is correct before enabling Force IP. Use list_devices_node to check the MAC address of all connected cameras."},{"kind":"document","title":"Device default","page_title":"Device default","anchor":"","url":"source/camera_devices/5_advanced_guide/configuration/predefined_presets.html","text":""},{"kind":"section","title":"Device default","page_title":"Device default","anchor":"device-default","url":"source/camera_devices/5_advanced_guide/configuration/predefined_presets.html#device-default","text":"This document lists available presets, features, and recommended scenarios by product. Please select a preset name that matches the product model and set it as the value of the device_preset parameter."},{"kind":"section","title":"Gemini 330 / Gemini 330L / Gemini 335 / Gemini 335L","page_title":"Device default","anchor":"gemini-330-gemini-330l-gemini-335-gemini-335l","url":"source/camera_devices/5_advanced_guide/configuration/predefined_presets.html#gemini-330-gemini-330l-gemini-335-gemini-335l","text":"
Defaults Features Recommended usage scenarios
Default Best visual effect
Overall performance is good, including typical indicators such as accuracy, filling rate, small object detection capability
General scenarios
Robot application
Hand Clear hand and finger edges Gesture recognition
High Accuracy Highly reliable depth information
Very little depth noise
Relatively low depth fill rate
Obstacle avoidance
Object scanning
High Density Higher depth filling rate
Can detect more small objects
More susceptible to depth noise
Object recognition
Grabbing
Foreground or background processing, such as cutout, etc.
Medium Density Balanced depth fill rate and precision performance
Compared with default settings: relatively low fill rate, better edge quality
Universal scene, alternative to Default
Custom Custom modifications, such as new configurations of post-processing pipelines, modifications to depth AE functions By adjusting the depth configuration yourself, you can achieve better results than the predefined depth preset configuration
Fully proven customized depth configuration
"},{"kind":"section","title":"Gemini 336 / Gemini 336L","page_title":"Device default","anchor":"gemini-336-gemini-336l","url":"source/camera_devices/5_advanced_guide/configuration/predefined_presets.html#gemini-336-gemini-336l","text":"
Defaults Features
Default The best visual effect
The overall performance is good, including typical indicators such as accuracy, filling rate, and small object detection capabilities
High Accuracy Highly reliable depth information
Very little depth noise
Relatively low depth fill rate
Custom Custom modifications, such as new configurations of post-processing pipelines and modifications to deep AE functions
"},{"kind":"section","title":"Gemini 2","page_title":"Device default","anchor":"gemini-2","url":"source/camera_devices/5_advanced_guide/configuration/predefined_presets.html#gemini-2","text":"
Defaults Features
Unbinned Dense Default Depth Quality Priority
Binned Sparse Default Small dead zone, low power consumption, high frame rate
Obstacle Avoidance Robot obstacle avoidance mode
"},{"kind":"section","title":"Gemini 2L","page_title":"Device default","anchor":"gemini-2l","url":"source/camera_devices/5_advanced_guide/configuration/predefined_presets.html#gemini-2l","text":"
Defaults Features
Unbinned Dense Default Depth Quality Priority
Dimensioning Measurement accuracy is priority
Binned Sparse Default Small dead zone, low power consumption, high frame rate
Unbinned Sparse Default Balance quality and power consumption, improve low-reflection and semi-outdoor effects
"},{"kind":"section","title":"Gemini 305","page_title":"Device default","anchor":"gemini-305","url":"source/camera_devices/5_advanced_guide/configuration/predefined_presets.html#gemini-305","text":"
Defaults Features
Default Best visual perception
Good overall performance in terms of accuracy, filling rate, small objects, etc.
High Accuracy High confidence depth values
Virtually noiseless depth values
Low fill rate
Close Range High Accuracy Adjustable larger parallax search range, Mini-Z reduction
The rest of the performance remains consistent with High Accuracy
Dual Color Streams Supports left and right color streams at the same time, no depth IR information
The left and right output effects are consistent
Custom Custom modifications, such as new configurations of post-processing pipelines and modifications to deep AE functions
Since the parameter configuration of Dual Color Streams mode is quite different from that of Default mode, we provide the corresponding YAML configuration file. Please set config_file_path to gemini305_dual_color.yaml, the configuration file is located in the config directory."},{"kind":"section","title":"Extended presets","page_title":"Device default","anchor":"extended-presets","url":"source/camera_devices/5_advanced_guide/configuration/predefined_presets.html#extended-presets","text":""},{"kind":"section","title":"G33X Close Range High Accuracy (Gemini 330 / Gemini 335 / Gemini 336)","page_title":"Device default","anchor":"g33x-close-range-high-accuracy-gemini-330-gemini-335-gemini-336","url":"source/camera_devices/5_advanced_guide/configuration/predefined_presets.html#g33x-close-range-high-accuracy-gemini-330-gemini-335-gemini-336","text":"
Defaults Features Recommended usage scenarios
G33X Close Range High Accuracy For the selected depth resolution, the depth value at the closest working distance will be reduced by 50%
The new closest working distance is 0.13m when close application is enabled
Supported depth resolutions: 1280x800/1280x720/640x400/424x266 only
Eye in hand and close range operation tasks
Close range measurement
"},{"kind":"section","title":"G336X AMR Default (Gemini 336 / Gemini 336L)","page_title":"Device default","anchor":"g336x-amr-default-gemini-336-gemini-336l","url":"source/camera_devices/5_advanced_guide/configuration/predefined_presets.html#g336x-amr-default-gemini-336-gemini-336l","text":"
Defaults Features Recommended usage scenarios
G336X AMR Default Optimized for reliable depth performance in sunlit and repetitively textured warehouse scenes
Recommended depth resolutions: 1280x800 / 640x400 / 424x266
Warehouse AMRs
"},{"kind":"document","title":"GMSL_camera","page_title":"GMSL_camera","anchor":"","url":"source/camera_devices/5_advanced_guide/multi_camera/gmsl_camera.html","text":""},{"kind":"section","title":"GMSL_camera","page_title":"GMSL_camera","anchor":"gmsl-camera","url":"source/camera_devices/5_advanced_guide/multi_camera/gmsl_camera.html#gmsl-camera","text":"This section describes how to use GMSL camera in OrbbecSDK_ROS2.Currently, only Gemini 335Lg and Gemini 345Lg, other GMSL devices will be supported in the near future. You can find example usage code in the example."},{"kind":"section","title":"Single GMSL camera","page_title":"GMSL_camera","anchor":"single-gmsl-camera","url":"source/camera_devices/5_advanced_guide/multi_camera/gmsl_camera.html#single-gmsl-camera","text":"The usage of GMSL camera in OrbbecSDK_ROS2 is the same as that of Gemini 330 series camera via USB. ros2 launch orbbec_camera gemini_330_gmsl.launch.py"},{"kind":"section","title":"Multi GMSL camera","page_title":"GMSL_camera","anchor":"multi-gmsl-camera","url":"source/camera_devices/5_advanced_guide/multi_camera/gmsl_camera.html#multi-gmsl-camera","text":"To get the usb_port of the GMSL camera, plug in the camera and run the following command in the terminal: ros2 run orbbec_camera list_devices_node For example, the obtained gmsl camera usb_port: gmsl2-1 Go to the multi_gmsl_camera.launch.py file and change the usb_port. ros2 launch orbbec_camera multi_gmsl_camera.launch.py Note: By default, multi_gmsl_camera.launch.py only starts color and depth. If you want to start other sensors, please go to camera_secondary_params.yaml to modify them."},{"kind":"section","title":"Multi GMSL camera synced","page_title":"GMSL_camera","anchor":"multi-gmsl-camera-synced","url":"source/camera_devices/5_advanced_guide/multi_camera/gmsl_camera.html#multi-gmsl-camera-synced","text":"First, please see how to use multi_camera_synced. In addition, GMSL multi-camera synced does not require Multi-Camera Sync Hub Pro, so there is no need to set the primary mode. Each GMSL camera is secondary. Additional Parameter Settings gmsl_trigger_fps : set hardware soc trigger source frame rate. enable_gmsl_trigger : enable hardware soc trigger. Run the launch Please refer to the configuration in multi_gmsl_camera_synced.launch.py. ros2 launch orbbec_camera multi_gmsl_camera_synced.launch.py Note: By default, multi_gmsl_camera_synced.launch.py only starts color and depth. If you want to start other sensors, please go to camera_secondary_params.yaml and camera_params.yaml to modify them."},{"kind":"section","title":"Usage Limitations of GMSL Cameras","page_title":"GMSL_camera","anchor":"usage-limitations-of-gmsl-cameras","url":"source/camera_devices/5_advanced_guide/multi_camera/gmsl_camera.html#usage-limitations-of-gmsl-cameras","text":"GMSL cameras interface with various deserializer chips such as MAX9296 and MAX92716. Orbbec GMSL cameras support multiple streams including depth, color, IR, and IMU data, but certain usage limitations apply: GMSL only supports V4L2 and YUYV format; MJPG format is not supported. RGB output is derived from YUYV format conversion. Metadata for Gemini-335Lg is provided via a separate node, while metadata for other models is embedded within video frames, which remains transparent to users. When using the Max96712 as a deserializer chip, due to the characteristics of the Max96712 chip, a multi - machine synchronous trigger signal must be provided in the secondary_synced mode. Otherwise, data flow interruption will occur when switching the data stream Two cameras connected on the same MAX9296, MAX96712 LinkA/B, or MAX96712 LinkC/D have the following limitations: Before driver version v1.2.02, there was a restriction that the RGB of one camera and the right IR of another camera could not stream simultaneously. After driver version v1.2.02, the restriction was modified to that the RGB of one camera and the left IR of another camera cannot stream simultaneously. Before driver version v1.2.02, there was a restriction that the DEPTH of one camera and the left IR of another camera could not stream simultaneously. After driver version v1.2.02, the restriction was modified to that the DEPTH of one camera and the right IR of another camera cannot stream simultaneously. The combined maximum number of active streams from both cameras is limited to four (satisfying the above two conditions ensures compliance). For further known limitations, please refer to Usage Limitations of Orbbec GMSL Cameras"},{"kind":"document","title":"Multi-Camera","page_title":"Multi-Camera","anchor":"","url":"source/camera_devices/5_advanced_guide/multi_camera/multi_camera.html","text":""},{"kind":"section","title":"Multi-Camera","page_title":"Multi-Camera","anchor":"multi-camera","url":"source/camera_devices/5_advanced_guide/multi_camera/multi_camera.html#multi-camera","text":"To get the usb_port of the camera, plug in the camera and run the following command in the terminal: ros2 run orbbec_camera list_devices_node Set the device_num parameter to the number of cameras you have. Go to the OrbbecSDK_ROS2/launch/multi_xxx.launch.py file and change the usb_port. Don’t forget to put the include tag inside the group tag. Otherwise, the parameter values of different cameras may become contaminated. from launch import LaunchDescription from launch.actions import DeclareLaunchArgument, IncludeLaunchDescription, GroupAction, ExecuteProcess from launch.launch_description_sources import PythonLaunchDescriptionSource from launch_ros.actions import Node from ament_index_python.packages import get_package_share_directory import os def generate_launch_description(): # Include launch files package_dir = get_package_share_directory('orbbec_camera') launch_file_dir = os.path.join(package_dir, 'launch') launch1_include = IncludeLaunchDescription( PythonLaunchDescriptionSource( os.path.join(launch_file_dir, 'gemini2L.launch.py') ), launch_arguments={ 'camera_name': 'camera_01', 'usb_port': '6-2.4.4.2', # replace your usb port here 'device_num': '2' }.items() ) launch2_include = IncludeLaunchDescription( PythonLaunchDescriptionSource( os.path.join(launch_file_dir, 'gemini2L.launch.py') ), launch_arguments={ 'camera_name': 'camera_02', 'usb_port': '6-2.4.1', # replace your usb port here 'device_num': '2' }.items() ) # If you need more cameras, just add more launch_include here, and change the usb_port and device_num # Launch description ld = LaunchDescription([ GroupAction([launch1_include]), GroupAction([launch2_include]), ]) return ld To launch the cameras, run the following command: ros2 launch orbbec_camera multi_camera.launch.py"},{"kind":"section","title":"No Data Stream from Multiple Cameras","page_title":"Multi-Camera","anchor":"no-data-stream-from-multiple-cameras","url":"source/camera_devices/5_advanced_guide/multi_camera/multi_camera.html#no-data-stream-from-multiple-cameras","text":"Insufficient Power Supply: Ensure that each camera is connected to a separate hub. Use a powered hub to provide sufficient power to each camera. High Resolution: Try lowering the resolution to resolve data stream issues. Increase usbfs_memory_mb Value: Increase the usbfs_memory_mb value to 128MB (this is a reference value and can be adjusted based on your system’s needs) by running the following command: echo 128 | sudo tee /sys/module/usbcore/parameters/usbfs_memory_mb To make this change permanent, check this link."},{"kind":"section","title":"Image topic frame rate too low from Multiple Cameras","page_title":"Multi-Camera","anchor":"image-topic-frame-rate-too-low-from-multiple-cameras","url":"source/camera_devices/5_advanced_guide/multi_camera/multi_camera.html#image-topic-frame-rate-too-low-from-multiple-cameras","text":"Refer to the Fast DDS Configuration file."},{"kind":"document","title":"Multi_camera synced Instructions","page_title":"Multi_camera synced Instructions","anchor":"","url":"source/camera_devices/5_advanced_guide/multi_camera/multi_camera_synced.html","text":""},{"kind":"section","title":"Multi_camera synced Instructions","page_title":"Multi_camera synced Instructions","anchor":"multi-camera-synced-instructions","url":"source/camera_devices/5_advanced_guide/multi_camera/multi_camera_synced.html#multi-camera-synced-instructions","text":"The purpose of this document is to explain how to use multi-camera synced with OrbbecSDK_ROS2"},{"kind":"section","title":"Setup instructions","page_title":"Multi_camera synced Instructions","anchor":"setup-instructions","url":"source/camera_devices/5_advanced_guide/multi_camera/multi_camera_synced.html#setup-instructions","text":"Please read the Multi-Camera Synchronization Setup Guide:Multi-Camera Synchronization Setup Make sure the camera is correctly connected to the multi-camera synchronizer. Depth Point Cloud Visualization"},{"kind":"section","title":"Checking camera port with OrbbecSDK_ROS2","page_title":"Multi_camera synced Instructions","anchor":"checking-camera-port-with-orbbecsdk-ros2","url":"source/camera_devices/5_advanced_guide/multi_camera/multi_camera_synced.html#checking-camera-port-with-orbbecsdk-ros2","text":"ros2 run orbbec_camera list_devices_node"},{"kind":"section","title":"OrbbecSDK_ROS2 multi-camera synced configuration","page_title":"Multi_camera synced Instructions","anchor":"orbbecsdk-ros2-multi-camera-synced-configuration","url":"source/camera_devices/5_advanced_guide/multi_camera/multi_camera_synced.html#orbbecsdk-ros2-multi-camera-synced-configuration","text":"Open multi_camera_synced.launch.py, and configure the camera settings as shown below: Depth Point Cloud Visualization gemini_330_series.launch.py is the launch file for starting the camera. Set camera_name to G330_0. For example, the published color image topic will be /G330_0/color/image_raw. Set usb_port to 2-2, indicating that the camera device on port 2-2 is being used. This value can be found in the output of the ros2 run orbbec_camera list_devices_node command. Set device_num to 2, meaning two cameras will be used. Set sync_mode to primary to indicate that the 2-7 camera device is in primary mode. The multi-camera sync mode options can be found in the figure below. Parameters from the config_file_path can override the parameters set in gemini_330_series.launch.py (optional). For slave cameras, set trigger_out_enabled to false.
Pattern Name Setting effect description
free_run -Support different frame rate settings
The -8-pin synchronization interface does not support external output of synchronization-related signals
standalone(default) ● Same as Primary by default
● Built-in RGBD frame synchronization
● 8-pin synchronous interface does not output signals to the outside by default
primary ● Set as primary camera
● 8-pin synchronous interface output signal to external device
secondary ● Set as secondary (passive synchronization; When there is a hardware continuous trigger signal input from the outside and the continuous trigger signal matches the currently set frame rate, the image is collected according to the external trigger signal; When there is no external trigger signal, the flow is stopped)
● 8-pin synchronous interface output signal to external device
secondary_synced ● Set to secondary synchronization (passive synchronization; When there is a hardware continuous trigger signal input from the outside and the continuous trigger signal matches the currently set frame rate, the image is collected according to the external trigger signal; When there is no external trigger signal, the image is collected according to the internal trigger signal at the set frame rate)
● 8-pin synchronous interface output signal to external device
hardware_triggering ● Set as hardware trigger (passive trigger; When there is a hardware trigger signal input from the outside and the trigger signal time interval is not less than the current upper limit, the image is collected according to the external trigger signal; When there is no external trigger signal, the image is not collected)
● 8-pin synchronous interface output signal to external device
software_triggering ● Set as software trigger (passive trigger; When there is a trigger command input from the host computer and the trigger command time interval is not less than the current upper limit, the image is collected according to the trigger command; When there is no trigger command, the image is not collected)
● 8-pin synchronous interface output signal to external device
The master camera should be launched last. Ideally, there should be a 2-second delay between starting each camera."},{"kind":"section","title":"Run the following command to start the multi-camera synced","page_title":"Multi_camera synced Instructions","anchor":"run-the-following-command-to-start-the-multi-camera-synced","url":"source/camera_devices/5_advanced_guide/multi_camera/multi_camera_synced.html#run-the-following-command-to-start-the-multi-camera-synced","text":"ros2 launch orbbec_camera multi_camera_synced.launch.py"},{"kind":"document","title":"Multi-Camera Synchronization Verification Node","page_title":"Multi-Camera Synchronization Verification Node","anchor":"","url":"source/camera_devices/5_advanced_guide/multi_camera/multi_camera_synced_verification_tool.html","text":""},{"kind":"section","title":"Multi-Camera Synchronization Verification Node","page_title":"Multi-Camera Synchronization Verification Node","anchor":"multi-camera-synchronization-verification-node","url":"source/camera_devices/5_advanced_guide/multi_camera/multi_camera_synced_verification_tool.html#multi-camera-synchronization-verification-node","text":"File path: image_sync_example_node.cpp This example node is designed for synchronized capture and timestamp verification across four Orbbec cameras. It can be used to validate frame alignment accuracy under the multi-camera Primary / Secondary Synced mode. Supported Versions: Wrapper version 2.6.3 and above."},{"kind":"section","title":"Usage Guide","page_title":"Multi-Camera Synchronization Verification Node","anchor":"usage-guide","url":"source/camera_devices/5_advanced_guide/multi_camera/multi_camera_synced_verification_tool.html#usage-guide","text":""},{"kind":"section","title":"Modify multi_camera_synced.launch.py as follows","page_title":"Multi-Camera Synchronization Verification Node","anchor":"modify-multi-camera-synced-launch-py-as-follows","url":"source/camera_devices/5_advanced_guide/multi_camera/multi_camera_synced_verification_tool.html#modify-multi-camera-synced-launch-py-as-follows","text":"Add launch_include to support four cameras. Select the appropriate launch file based on your camera model. For example, use gemini_330_series.launch.py for the Gemini 330 series. Naming convention: camera_name should follow the format camera_01, camera_02, camera_03, … Set device_num to 4. Configure the USB ports using: ros2 run orbbec_camera list_devices_node to view and bind the correct ports. Set synchronization mode to Primary/Secondary Synced, with one camera as primary and the others as secondary_synced. Startup sequence: The Primary camera should always be launched last to ensure the synchronization signal is established correctly."},{"kind":"section","title":"Modify configuration files","page_title":"Multi-Camera Synchronization Verification Node","anchor":"modify-configuration-files","url":"source/camera_devices/5_advanced_guide/multi_camera/multi_camera_synced_verification_tool.html#modify-configuration-files","text":"Edit the following two files under the config directory: camera_params.yaml camera_secondary_params.yaml Ensure the following settings are consistent across all cameras: Enable both depth and color streams. Use the same frame rate (fps) for all cameras."},{"kind":"section","title":"Launch and Verification","page_title":"Multi-Camera Synchronization Verification Node","anchor":"launch-and-verification","url":"source/camera_devices/5_advanced_guide/multi_camera/multi_camera_synced_verification_tool.html#launch-and-verification","text":"Start the multi-camera synchronization launch file: ros2 launch orbbec_camera multi_camera_synced.launch.py In a new terminal, run the synchronization verification node: ros2 run orbbec_camera image_sync_example_node This node outputs timestamp differences between multiple camera streams for synchronization validation."},{"kind":"section","title":"Reference Launch File","page_title":"Multi-Camera Synchronization Verification Node","anchor":"reference-launch-file","url":"source/camera_devices/5_advanced_guide/multi_camera/multi_camera_synced_verification_tool.html#reference-launch-file","text":"import os from ament_index_python.packages import get_package_share_directory from launch import LaunchDescription from launch_ros.actions import Node from launch.actions import IncludeLaunchDescription, GroupAction, TimerAction from launch.launch_description_sources import PythonLaunchDescriptionSource from launch_ros.actions import Node, LoadComposableNodes def generate_launch_description(): # Include launch files package_dir = get_package_share_directory(\"orbbec_camera\") launch_file_dir = os.path.join(package_dir, \"launch\") config_file_dir = os.path.join(package_dir, \"config\") config_file_path = os.path.join(config_file_dir, \"camera_params.yaml\") secondary_config_file_path = os.path.join(config_file_dir, \"camera_secondary_params.yaml\") launch1_include = IncludeLaunchDescription( PythonLaunchDescriptionSource( os.path.join(launch_file_dir, \"gemini_330_series.launch.py\") ), launch_arguments={ \"camera_name\": \"camera_01\", \"usb_port\": \"2-2.3\", \"device_num\": \"4\", \"sync_mode\": \"primary\", \"config_file_path\": config_file_path, \"trigger_out_enabled\": \"true\" }.items(), ) launch2_include = IncludeLaunchDescription( PythonLaunchDescriptionSource( os.path.join(launch_file_dir, \"gemini_330_series.launch.py\") ), launch_arguments={ \"camera_name\": \"camera_02\", \"usb_port\": \"2-1\", \"device_num\": \"4\", \"sync_mode\": \"secondary_synced\", \"config_file_path\": secondary_config_file_path, \"trigger_out_enabled\": \"false\" }.items(), ) launch3_include = IncludeLaunchDescription( PythonLaunchDescriptionSource( os.path.join(launch_file_dir, \"gemini_330_series.launch.py\") ), launch_arguments={ \"camera_name\": \"camera_03\", \"usb_port\": \"2-3\", \"device_num\": \"4\", \"sync_mode\": \"secondary_synced\", \"config_file_path\": secondary_config_file_path, \"trigger_out_enabled\": \"false\" }.items(), ) launch4_include = IncludeLaunchDescription( PythonLaunchDescriptionSource( os.path.join(launch_file_dir, \"gemini_330_series.launch.py\") ), launch_arguments={ \"camera_name\": \"camera_04\", \"usb_port\": \"2-4\", \"device_num\": \"4\", \"sync_mode\": \"secondary_synced\", \"config_file_path\": secondary_config_file_path, \"trigger_out_enabled\": \"false\" }.items(), ) # Launch description ld = LaunchDescription( [ TimerAction(period=0.0, actions=[GroupAction([launch2_include])]), TimerAction(period=2.0, actions=[GroupAction([launch3_include])]), TimerAction(period=4.0, actions=[GroupAction([launch4_include])]), TimerAction(period=6.0, actions=[GroupAction([launch1_include])]), # The primary camera should be launched at last ] ) return ld"},{"kind":"section","title":"System Configuration Requirements","page_title":"Multi-Camera Synchronization Verification Node","anchor":"system-configuration-requirements","url":"source/camera_devices/5_advanced_guide/multi_camera/multi_camera_synced_verification_tool.html#system-configuration-requirements","text":""},{"kind":"section","title":"Increase USB Buffer Memory","page_title":"Multi-Camera Synchronization Verification Node","anchor":"increase-usb-buffer-memory","url":"source/camera_devices/5_advanced_guide/multi_camera/multi_camera_synced_verification_tool.html#increase-usb-buffer-memory","text":"Prevent frame drops caused by concurrent data transmission: echo 512 | sudo tee /sys/module/usbcore/parameters/usbfs_memory_mb"},{"kind":"section","title":"Configure Fast DDS","page_title":"Multi-Camera Synchronization Verification Node","anchor":"configure-fast-dds","url":"source/camera_devices/5_advanced_guide/multi_camera/multi_camera_synced_verification_tool.html#configure-fast-dds","text":"Optimize ROS2 node communication latency to reduce image transmission delay. See this section for detailed configuration instructions."},{"kind":"document","title":"Efficient intra-process communication:","page_title":"Efficient intra-process communication:","anchor":"","url":"source/camera_devices/5_advanced_guide/performance/efficient_intra_process_communication.html","text":""},{"kind":"section","title":"Efficient intra-process communication:","page_title":"Efficient intra-process communication:","anchor":"efficient-intra-process-communication","url":"source/camera_devices/5_advanced_guide/performance/efficient_intra_process_communication.html#efficient-intra-process-communication","text":""},{"kind":"section","title":"Introduction","page_title":"Efficient intra-process communication:","anchor":"introduction","url":"source/camera_devices/5_advanced_guide/performance/efficient_intra_process_communication.html#introduction","text":"Our ROS2 Wrapper node supports zero-copy communications if loaded in the same process as a subscriber node. This can reduce copy times on image/pointcloud topics, especially with big frame resolutions and high FPS. You will need to launch a component container and launch our node as a component together with other component nodes. Further details on “Composing multiple nodes in a single process” can be found here. Further details on efficient intra-process communication can be found here."},{"kind":"section","title":"Example","page_title":"Efficient intra-process communication:","anchor":"example","url":"source/camera_devices/5_advanced_guide/performance/efficient_intra_process_communication.html#example","text":"Manually loading multiple components into the same process Start the component: ros2 run rclcpp_components component_container Add the wrapper: ros2 component load /ComponentManager orbbec_camera orbbec_camera::OBCameraNodeDriver -e use_intra_process_comms:=true Load other component nodes (consumers of the wrapper topics) in the same way. Using a launch file ros2 launch orbbec_camera gemini_intra_process_demo_launch.py Limitations Node components are currently not supported on RCLPY Compressed images using image_transport will be disabled as this isn’t supported with intra-process communication"},{"kind":"document","title":"Fast DDS Optimization for Orbbec Camera with ROS2","page_title":"Fast DDS Optimization for Orbbec Camera with ROS2","anchor":"","url":"source/camera_devices/5_advanced_guide/performance/fastdds_tuning.html","text":""},{"kind":"section","title":"Fast DDS Optimization for Orbbec Camera with ROS2","page_title":"Fast DDS Optimization for Orbbec Camera with ROS2","anchor":"fast-dds-optimization-for-orbbec-camera-with-ros2","url":"source/camera_devices/5_advanced_guide/performance/fastdds_tuning.html#fast-dds-optimization-for-orbbec-camera-with-ros2","text":"When operating with the default configuration, Fast DDS exhibits suboptimal transmission efficiency, resulting in significant image transmission delays when used with the Orbbec camera in ROS2. This document provides guidance on optimizing Fast DDS to enhance image transfer efficiency."},{"kind":"section","title":"Adjusting System Parameters","page_title":"Fast DDS Optimization for Orbbec Camera with ROS2","anchor":"adjusting-system-parameters","url":"source/camera_devices/5_advanced_guide/performance/fastdds_tuning.html#adjusting-system-parameters","text":"IP Fragmentation Time Path: /proc/sys/net/ipv4/ipfrag_time (default: 30 seconds) Purpose: Defines the duration that IP fragments are kept in memory. Adjustment: Decrease this value to reduce the time window where no fragments are received, which can help reduce delays. Consider the specific needs of your environment as this setting affects all incoming fragments. Example: Set to 3 seconds. sudo sysctl net.ipv4.ipfrag_time=3 IP Fragmentation Memory Threshold Path: /proc/sys/net/ipv4/ipfrag_high_thresh (default: 262144 bytes) Purpose: Sets the maximum memory used to reassemble IP fragments. Adjustment: Increase this value to allow more memory for fragment reassembly, which can improve handling of larger data packets. Example: Increase to 128 MB. sudo sysctl net.ipv4.ipfrag_high_thresh=134217728 Maximum Buffer Sizes Purpose: Configures the maximum buffer sizes for receiving and sending data, which is critical for high-throughput data transmission. Adjustment: Set the maximum buffer sizes for both receiving and sending operations. Commands: sudo sysctl -w net.core.rmem_max=2147483647 sudo sysctl -w net.core.rmem_default=2147483647 sudo sysctl -w net.core.wmem_max=2147483647 sudo sysctl -w net.core.wmem_default=2147483647 Alternatively, make these settings permanent by adding them to the /etc/sysctl.d/10-fastrtps-max.conf file. sudo gedit /etc/sysctl.d/10-fastrtps-max.conf add blow lines to the file: net.core.rmem_max=2147483647 net.core.rmem_default=2147483647 net.core.wmem_max=2147483647 net.core.wmem_default=2147483647 then save and exit the file. run sudo sysctl -p to apply the changes. For detailed guidance, refer to ROS 2 DDS Tuning Documentation."},{"kind":"section","title":"Fast DDS Configuration","page_title":"Fast DDS Optimization for Orbbec Camera with ROS2","anchor":"fast-dds-configuration","url":"source/camera_devices/5_advanced_guide/performance/fastdds_tuning.html#fast-dds-configuration","text":"Below is an example of a Fast DDS configuration file optimized for ROS2 usage with the Orbbec camera. This configuration enhances the overall data transmission by adjusting buffer sizes and transport settings. Configuration File: shm_fastdds.xml Place this file in the $HOME directory. UDP_transport UDPv4 10 65000 1048576 1048576 profile_for_ros2_context UDP_transport false 1048576 1048576
127.0.0.1
ASYNCHRONOUS 0 1000000 PREALLOCATED_WITH_REALLOC AUTOMATIC 0 1000000 PREALLOCATED_WITH_REALLOC
Environment Variables Set the following environment variables to use the custom Fast DDS profile: export RMW_IMPLEMENTATION=rmw_fastrtps_cpp export FASTRTPS_DEFAULT_PROFILES_FILE=$HOME/shm_fastdds.xml export RMW_FASTRTPS_USE_QOS_FROM_XML=1 This configuration aims to optimize the data flow and reduce transmission delays, improving the responsiveness and reliability of the Orbbec camera system in a ROS2 environment."},{"kind":"document","title":"Reducing CPU Usage with Orbbec ROS Package","page_title":"Reducing CPU Usage with Orbbec ROS Package","anchor":"","url":"source/camera_devices/5_advanced_guide/performance/lower_cpu_usage.html","text":""},{"kind":"section","title":"Reducing CPU Usage with Orbbec ROS Package","page_title":"Reducing CPU Usage with Orbbec ROS Package","anchor":"reducing-cpu-usage-with-orbbec-ros-package","url":"source/camera_devices/5_advanced_guide/performance/lower_cpu_usage.html#reducing-cpu-usage-with-orbbec-ros-package","text":"You can find example usage code in the example. This document outlines strategies for minimizing CPU usage in the OrbbecSDK_ROS2 v2 environment when using Gemini 330 series cameras. The firmware version must be no lower than 1.4.10, and device should be set to Default."},{"kind":"section","title":"Recommended Settings for Lower CPU Usage","page_title":"Reducing CPU Usage with Orbbec ROS Package","anchor":"recommended-settings-for-lower-cpu-usage","url":"source/camera_devices/5_advanced_guide/performance/lower_cpu_usage.html#recommended-settings-for-lower-cpu-usage","text":"To achieve the lowest possible CPU usage in OrbbecSDK_ROS2, it is recommended to configure the following parameters.
Parameter Recommendation Note
uvc_backend v4l2 Lower CPU usage compared to libuvc
color_format RGB Lower CPU usage than MJPG
filter Only hardware_noise_removal_filter Other filters significantly increase CPU usage
"},{"kind":"section","title":"Launch Files Used for Testing","page_title":"Reducing CPU Usage with Orbbec ROS Package","anchor":"launch-files-used-for-testing","url":"source/camera_devices/5_advanced_guide/performance/lower_cpu_usage.html#launch-files-used-for-testing","text":"gemini_330_series_lower_cpu_usage.launch.py multi_camera_lower_cpu_usage.launch.py"},{"kind":"section","title":"Test environment","page_title":"Reducing CPU Usage with Orbbec ROS Package","anchor":"test-environment","url":"source/camera_devices/5_advanced_guide/performance/lower_cpu_usage.html#test-environment","text":"Hardware Configuration CPU: Intel i7-8700 @ 3.20GHz Memory: 24 GB Storage: Micron 2200S NVMe 256GB GPU: NVIDIA GeForce GTX 1660Ti OS: Ubuntu22.04 ROS Configuration ROS Version: ROS2 Humble SDK Version: OrbbecSDK_ROS2 v2.2.1 Camera Setup Devices: 2x Gemini 335, 1x Gemini 336, 1x Gemini 336L Firmware Version: 1.4.10"},{"kind":"section","title":"Test Setup","page_title":"Reducing CPU Usage with Orbbec ROS Package","anchor":"test-setup","url":"source/camera_devices/5_advanced_guide/performance/lower_cpu_usage.html#test-setup","text":"Stream Settings: Depth / IR Left / IR Right: 848×480 @ 30fps Color: 848×480 @ 30fps Note: The following CPU usage data focuses on uvc_backend, color_format and various filter combinations."},{"kind":"section","title":"Test Results","page_title":"Reducing CPU Usage with Orbbec ROS Package","anchor":"test-results","url":"source/camera_devices/5_advanced_guide/performance/lower_cpu_usage.html#test-results","text":"uvc_backend Comparison (RGB format)
libuvc CPU Usage v4l2 CPU Usage Absolute Change
182.8% 118.8% -64.0%
The CPU usage can be significantly reduced with v4l2 backend. In our implementation, v4l2 works without requiring any patches to the Linux kernel, allowing users to easily switch between v4l2 and libuvc and maintaining full compatibility with standard Linux distributions. color_format Comparison (MJPG vs RGB)
Backend MJPG CPU Usage RGB CPU Usage Absolute Change
libuvc 347.7% 182.8% -164.9%
v4l2 170.0% 118.8% -51.2%
The CPU usage can be reduced if the RGB format is selected instead of MJPG, since the decoding of MJPG image will consume the host CPU resource. Filter Configuration Impact
Filters Applied libuvc CPU Usage CPU Usage Increase v4l2 CPU Usage CPU Usage Increase
No Filter (benchmark) 182.8% 0.0%(benchmark) 118.8% 0.0%(benchmark)
(software)noise_removal_filter 218.0% +35.2% 128.5% +9.7%
(software)noise_removal_filter + spatial_filter 469.6% +286.8% 336.7% +217.9%
hardware_noise_removal_filter 186.3% +3.5% 115.4% -3.4%
hardware_noise_removal_filter + spatial_filter 251.3% +68.5% 152.5% +33.7%
Based on the test results, using only the hardware_noise_removal_filter results in a negligible change in CPU usage for both libuvc (+3.5%) and v4l2 (-3.4%) compared to the no-filter benchmark, as this filter runs internally on the camera hardware. In contrast, other filters execute on the host system. Adding the spatial_filter to the hardware filter leads to a moderate increase in CPU usage, while applying the software-based noise_removal_filter —either alone or combined with spatial_filter —significantly increases CPU load. To maintain low CPU usage, it is recommended to avoid software-based filters and rely solely on the hardware_noise_removal_filter."},{"kind":"section","title":"Further Optimizationa","page_title":"Reducing CPU Usage with Orbbec ROS Package","anchor":"further-optimizationa","url":"source/camera_devices/5_advanced_guide/performance/lower_cpu_usage.html#further-optimizationa","text":"
Parameter Recommendation Note
depth_registration false or true with align_mode=HW Software alignment consumes more CPU
enable_point_cloud false Disabling point cloud reduces CPU usage
enable_colored_point_cloud false Disabling colored point cloud reduces CPU usage
"},{"kind":"document","title":"Benchmark","page_title":"Benchmark","anchor":"","url":"source/camera_devices/6_benchmark/benchmark.html","text":""},{"kind":"section","title":"Benchmark","page_title":"Benchmark","anchor":"benchmark","url":"source/camera_devices/6_benchmark/benchmark.html#benchmark","text":"This chapter introduces how to use the benchmark tool to test the performance of different cameras."},{"kind":"document","title":"Benchmark Usage","page_title":"Benchmark Usage","anchor":"","url":"source/camera_devices/6_benchmark/benchmark_usage.html","text":""},{"kind":"section","title":"Benchmark Usage","page_title":"Benchmark Usage","anchor":"benchmark-usage","url":"source/camera_devices/6_benchmark/benchmark_usage.html#benchmark-usage","text":"This section introduces how to use the benchmark tool in C++ and Python, and provides an example YAML configuration file."},{"kind":"section","title":"Using common benchmark node","page_title":"Benchmark Usage","anchor":"using-common-benchmark-node","url":"source/camera_devices/6_benchmark/benchmark_usage.html#using-common-benchmark-node","text":"ros2 run orbbec_camera common_benchmark_node.py \\ --run_time 2h \\ --csv_file /path/to/log.csv Parameters –run_time: Duration for monitoring, specified as time strings like \"10s\", \"5m\", \"1h\", \"2d\". Default is 10 seconds. –csv_file: Path to the output CSV file. By default, it is saved in the workspace directory with the name “camera_monitor_log.csv”."},{"kind":"section","title":"Using service benchmark node","page_title":"Benchmark Usage","anchor":"using-service-benchmark-node","url":"source/camera_devices/6_benchmark/benchmark_usage.html#using-service-benchmark-node","text":""},{"kind":"section","title":"ROS2 C++","page_title":"Benchmark Usage","anchor":"ros2-c","url":"source/camera_devices/6_benchmark/benchmark_usage.html#ros2-c","text":"Single service benchmark ros2 run orbbec_camera service_benchmark_node \\ --ros-args \\ -p service_name:=/camera/get_depth_gain \\ -p service_type:=orbbec_camera_msgs/srv/GetInt32 \\ -p count:=10 Multiple services benchmark (YAML config) ros2 run orbbec_camera service_benchmark_node \\ --ros-args \\ -p yaml_file:=/path/to/default_service_cpp.yaml"},{"kind":"section","title":"ROS2 Python","page_title":"Benchmark Usage","anchor":"ros2-python","url":"source/camera_devices/6_benchmark/benchmark_usage.html#ros2-python","text":"Single service benchmark ros2 run orbbec_camera service_benchmark_node.py --service /camera/get_depth_gain --count 10 Multiple services benchmark (YAML config) ros2 run orbbec_camera service_benchmark_node.py --yaml_file /path/to/default_service.yaml"},{"kind":"section","title":"Example YAML configuration","page_title":"Benchmark Usage","anchor":"example-yaml-configuration","url":"source/camera_devices/6_benchmark/benchmark_usage.html#example-yaml-configuration","text":"We provide an example YAML configuration, located in the scripts directory as service_default.yaml. default_count: 50 services: - name: /camera/get_auto_white_balance type: orbbec_camera_msgs/srv/GetInt32 - name: /camera/get_color_exposure type: orbbec_camera_msgs/srv/GetInt32 - name: /camera/get_color_gain type: orbbec_camera_msgs/srv/GetInt32 - name: /camera/get_depth_exposure type: orbbec_camera_msgs/srv/GetInt32 - name: /camera/get_depth_gain type: orbbec_camera_msgs/srv/GetInt32 - name: /camera/get_device_info type: orbbec_camera_msgs/srv/GetDeviceInfo - name: /camera/send_software_trigger type: std_srvs/srv/SetBool request: {data: false} - name: /camera/set_auto_white_balance type: std_srvs/srv/SetBool request: {data: false} - name: /camera/set_color_ae_roi type: orbbec_camera_msgs/srv/SetArrays request: {data_param: [0,1279,0,719]} - name: /camera/set_color_auto_exposure type: std_srvs/srv/SetBool request: {data: false} - name: /camera/set_color_exposure type: orbbec_camera_msgs/srv/SetInt32 request: {data: 30} - name: /camera/set_color_flip type: std_srvs/srv/SetBool request: {data: false} - name: /camera/set_color_gain type: orbbec_camera_msgs/srv/SetInt32 request: {data: 20} - name: /camera/set_color_mirror type: std_srvs/srv/SetBool request: {data: false} - name: /camera/set_color_rotation type: orbbec_camera_msgs/srv/SetInt32 request: {data: 90} - name: /camera/set_depth_ae_roi type: orbbec_camera_msgs/srv/SetArrays request: {data_param: [0,1279,0,719]} - name: /camera/set_depth_auto_exposure type: std_srvs/srv/SetBool request: {data: false} - name: /camera/set_depth_exposure type: orbbec_camera_msgs/srv/SetInt32 request: {data: 3000} - name: /camera/set_depth_flip type: std_srvs/srv/SetBool request: {data: false} - name: /camera/set_depth_gain type: orbbec_camera_msgs/srv/SetInt32 request: {data: 200}"},{"kind":"document","title":"Introduction","page_title":"Introduction","anchor":"","url":"source/camera_devices/6_benchmark/introduction.html","text":""},{"kind":"section","title":"Introduction","page_title":"Introduction","anchor":"introduction","url":"source/camera_devices/6_benchmark/introduction.html#introduction","text":"This section introduces the benchmark tool, explaining its purpose, features, and what it can help you measure."},{"kind":"section","title":"common benchmark node","page_title":"Introduction","anchor":"common-benchmark-node","url":"source/camera_devices/6_benchmark/introduction.html#common-benchmark-node","text":"common_benchmark_node.py is a tool for monitoring the performance of Orbbec cameras running in a ROS environment. It collects and records key camera metrics such as frame rate, latency, system resource usage, and packet loss rate in real time, helping users evaluate the stability and performance of camera nodes (updated once per second). Features Measure published image frame rate and latency (current, min, max, average) Monitor the camera node’s CPU/ARM usage (current, min, max, average) Track frame drop rate (publisher) and packet loss rate (subscriber) Print real-time statistics (1 Hz) to the terminal and save results to a CSV file Support configurable runtime duration and CSV output path Example In ROS1, both frame drop rate and packet loss rate can be measured, while in ROS2, the header lacks the seq field, so only the publisher-side frame drop rate is calculated. common_benchmark_ros1 common_benchmark_ros2"},{"kind":"section","title":"service benchmark node","page_title":"Introduction","anchor":"service-benchmark-node","url":"source/camera_devices/6_benchmark/introduction.html#service-benchmark-node","text":"The service_benchmark_node tool is used to monitor the performance of service calls. It can measure the success rate of service calls and the time required to execute service. Features Benchmark a single service call, measuring latency and success rate Benchmark multiple services as defined in a YAML configuration file Optionally save benchmark results to a CSV file Example service benchmark When you need to collect data for multiple services, it is recommended to use a CSV file for analysis."},{"kind":"document","title":"Other Tools","page_title":"Other Tools","anchor":"","url":"source/camera_devices/6_benchmark/othertools.html","text":""},{"kind":"section","title":"Other Tools","page_title":"Other Tools","anchor":"other-tools","url":"source/camera_devices/6_benchmark/othertools.html#other-tools","text":""},{"kind":"section","title":"Ob_benchmark tool","page_title":"Other Tools","anchor":"ob-benchmark-tool","url":"source/camera_devices/6_benchmark/othertools.html#ob-benchmark-tool","text":"The goal of this tool is to benchmark the performance of various OrbbecSDK_ROS2 camera configurations. The benchmark results depend on the camera and settings used.(Currently only works with ROS2 Humble) You can find example usage code in the example."},{"kind":"section","title":"Tool Configuration (start_benchmark_params.json)","page_title":"Other Tools","anchor":"tool-configuration-start-benchmark-params-json","url":"source/camera_devices/6_benchmark/othertools.html#tool-configuration-start-benchmark-params-json","text":"{ \"start_benchmark_params\": { \"camera_name\": [ \"camera_01\", \"camera_02\", \"camera_03\", \"camera_04\" ], \"process_name\": \"component_conta\", \"switch_cycle\": 300, \"test_cycle\": 1, \"skip_number\": 30 } } camera_name: Names of the cameras to be configured. Example: \"camera_01\", \"camera_02\", etc. process_name: The name of the process to be monitored. For example, \"component_conta\" will monitor the data of the container process. switch_cycle: The cycle time for switching configurations, in seconds. For example, setting it to 300 means the configuration will switch every 300 seconds. test_cycle: The testing cycle, in seconds. For example, setting it to 1 means the tool will collect data for the monitored process every 1 second. skip_number: The number of data points to skip. For example, setting it to 30 means that the first 30 data points will be ignored."},{"kind":"section","title":"Camera configuration (launch files)","page_title":"Other Tools","anchor":"camera-configuration-launch-files","url":"source/camera_devices/6_benchmark/othertools.html#camera-configuration-launch-files","text":"In the launch folder, there are multiple.launch.py files (ob_benchmark_0.launch.py, ob_benchmark_1.launch.py, …, ob_benchmark_19.launch.py). Each file corresponds to a different camera configuration."},{"kind":"section","title":"Running the ob_benchmark tool","page_title":"Other Tools","anchor":"running-the-ob-benchmark-tool","url":"source/camera_devices/6_benchmark/othertools.html#running-the-ob-benchmark-tool","text":"To run the tool, use the following commands: source install/setup.bash ros2 run orbbec_camera ob_benchmark_node"},{"kind":"section","title":"Output Data Files","page_title":"Other Tools","anchor":"output-data-files","url":"source/camera_devices/6_benchmark/othertools.html#output-data-files","text":"The output data files will be stored in the ob_benchmark folder with filenames like 0.csv, 1.csv, …, 19.csv. For example: 0.csv contains data from the ob_benchmark_0.launch.py configuration. 1.csv contains data from the ob_benchmark_1.launch.py configuration."},{"kind":"document","title":"Building a Debian Package","page_title":"Building a Debian Package","anchor":"","url":"source/camera_devices/7_developer_guide/building_a_Debian_Package.html","text":""},{"kind":"section","title":"Building a Debian Package","page_title":"Building a Debian Package","anchor":"building-a-debian-package","url":"source/camera_devices/7_developer_guide/building_a_Debian_Package.html#building-a-debian-package","text":""},{"kind":"section","title":"Preparing the Environment","page_title":"Building a Debian Package","anchor":"preparing-the-environment","url":"source/camera_devices/7_developer_guide/building_a_Debian_Package.html#preparing-the-environment","text":"Before starting, install the required tools: sudo apt install debhelper fakeroot python3-bloom"},{"kind":"section","title":"Configuring ROS Dependencies","page_title":"Building a Debian Package","anchor":"configuring-ros-dependencies","url":"source/camera_devices/7_developer_guide/building_a_Debian_Package.html#configuring-ros-dependencies","text":"Add the following YAML file to your system at /etc/ros/rosdep/sources.list.d/00-orbbec.yaml. Make sure to replace focal with the codename of your Ubuntu version and humble with your ROS2 distribution name: orbbec_camera_msgs: ubuntu: focal: [ ros-humble-orbbec-camera-msgs ] Next, create a new file /etc/ros/rosdep/sources.list.d/50-orbbec.list and add this line to specify the path to the YAML file: yaml file:///etc/ros/rosdep/sources.list.d/00-orbbec.yaml Update the rosdep database to reflect these changes: rosdep update"},{"kind":"section","title":"Building the Package","page_title":"Building a Debian Package","anchor":"building-the-package","url":"source/camera_devices/7_developer_guide/building_a_Debian_Package.html#building-the-package","text":"Navigate to your workspace and build the project: cd ~/ros2_ws/ colcon build --event-handlers console_direct+ --cmake-args -DCMAKE_BUILD_TYPE=Release . install/setup.bash cd src/OrbbecSDK_ROS2/ bash .make_deb.sh"},{"kind":"document","title":"Developer Guide","page_title":"Developer Guide","anchor":"","url":"source/camera_devices/7_developer_guide/developer_guide.html","text":""},{"kind":"section","title":"Developer Guide","page_title":"Developer Guide","anchor":"developer-guide","url":"source/camera_devices/7_developer_guide/developer_guide.html#developer-guide","text":"This chapter provides documents for developers and maintainers of the SDK."},{"kind":"document","title":"Migrating from main to Open-Source v2-main","page_title":"Migrating from main to Open-Source v2-main","anchor":"","url":"source/camera_devices/7_developer_guide/migration_guide.html","text":""},{"kind":"section","title":"Migrating from main to Open-Source v2-main","page_title":"Migrating from main to Open-Source v2-main","anchor":"migrating-from-main-to-open-source-v2-main","url":"source/camera_devices/7_developer_guide/migration_guide.html#migrating-from-main-to-open-source-v2-main","text":""},{"kind":"section","title":"Introduction","page_title":"Migrating from main to Open-Source v2-main","anchor":"introduction","url":"source/camera_devices/7_developer_guide/migration_guide.html#introduction","text":"Initially, Orbbec provided a closed-source SDK — Orbbec SDK v1, which formed the foundation of the OrbbecSDK ROS2 Wrapper main branch. Although the ROS wrapper layer itself was open-source, it relied on a closed-source underlying SDK. This architecture imposed limitations on flexibility and hindered community-driven improvements. As developers increasingly demanded transparency, maintainability, and broader device support, Orbbec released a brand-new open-source v2-main — Orbbec SDK_v2 (GitHub link). Based on this SDK, the open-source v2-main branch of OrbbecSDK ROS2 is now fully open source, offering greater extensibility and alignment with Orbbec’s future product roadmap. This document introduces the motivations and benefits of migrating ROS packages from the main branch (based on SDK v1) to the v2-main branch (based on Orbbec SDK_v2). It highlights the key differences in launch files, parameters, topics, and services, and provides a migration guide to help developers smoothly transition. Note: In the following content, main refers to the closed-source branch, while v2-main refers to the open-source v2-main branch."},{"kind":"section","title":"Advantages of Migrating from main to v2-main","page_title":"Migrating from main to Open-Source v2-main","anchor":"advantages-of-migrating-from-main-to-v2-main","url":"source/camera_devices/7_developer_guide/migration_guide.html#advantages-of-migrating-from-main-to-v2-main","text":"In October 2024, Orbbec released a major update: OrbbecSDK ROS2 Wrapper v2, which is entirely based on the open-source Orbbec SDK_v2. Compared to the legacy main branch (SDK v1.x), the v2-main branch (Orbbec SDK_v2.x) provides greater flexibility and scalability, while offering comprehensive support for all Orbbec USB products that comply with the UVC standard.The migration from main –> v2-main brings the following key advantages:"},{"kind":"section","title":"Comprehensive Device Support","page_title":"Migrating from main to Open-Source v2-main","anchor":"comprehensive-device-support","url":"source/camera_devices/7_developer_guide/migration_guide.html#comprehensive-device-support","text":"The v2-main branch supports all UVC-compliant Orbbec USB cameras and will be the primary platform for supporting all newly released devices."},{"kind":"section","title":"Transparency and Extensibility","page_title":"Migrating from main to Open-Source v2-main","anchor":"transparency-and-extensibility","url":"source/camera_devices/7_developer_guide/migration_guide.html#transparency-and-extensibility","text":"Orbbec SDK_v2 is fully open-source, allowing developers to directly access the underlying implementation for easier debugging, optimization, and secondary development. By contrast, SDK v1 was closed-source, introducing a “black-box” constraint."},{"kind":"section","title":"Advantages in Maintenance and Updates","page_title":"Migrating from main to Open-Source v2-main","anchor":"advantages-in-maintenance-and-updates","url":"source/camera_devices/7_developer_guide/migration_guide.html#advantages-in-maintenance-and-updates","text":"The v2-main branch offers full-featured support, including new feature development, performance optimization, and bug fixes. The main branch has entered a maintenance-only mode, where only critical bugs may receive limited updates, and no new features are being developed."},{"kind":"section","title":"Community and Ecosystem Support","page_title":"Migrating from main to Open-Source v2-main","anchor":"community-and-ecosystem-support","url":"source/camera_devices/7_developer_guide/migration_guide.html#community-and-ecosystem-support","text":"With an open-source SDK, developers can directly submit issues and pull requests on GitHub or Gitee, contributing to feature evolution. This not only accelerates problem resolution but also fosters a more open and active Orbbec ecosystem."},{"kind":"section","title":"Comparison Between main and v2-main Branches","page_title":"Migrating from main to Open-Source v2-main","anchor":"comparison-between-main-and-v2-main-branches","url":"source/camera_devices/7_developer_guide/migration_guide.html#comparison-between-main-and-v2-main-branches","text":""},{"kind":"section","title":"Launch File Differences","page_title":"Migrating from main to Open-Source v2-main","anchor":"launch-file-differences","url":"source/camera_devices/7_developer_guide/migration_guide.html#launch-file-differences","text":"In v2-main, new low-power launch file has been added for the Gemini 330 series: gemini_330_series_low_cpu.launch.py v2-main introduces support for Gemini 435Le, Gemini 345, and Gemini 345Lg cameras. Since OrbbecSDK_v2 only supports UVC devices, the range of camera models supported in v2-main is slightly narrower than in main. Detailed information is provided in the table below.
camera main v2-main
Gemini 435Le Not supported gemini435_le.launch.py
Gemini 345 Not supported gemini345.launch.py
Gemini 345Lg Not supported gemini345_lg.launch.py
Gemini 330 series gemini_330_series.launch.py gemini_330_series.launch.py
Gemini 330 low cpu - gemini_330_series_low_cpu.launch.py
Gemini 210 gemini210.launch.py gemini210.launch.py
Gemini 2 gemini2.launch.py gemini2.launch.py
Gemini 2L gemini2L.launch.py gemini2.launch.py
Gemini 2XL gemini2XL.launch.py -
Femto Bolt femto_bolt.launch.py femto_bolt.launch.py
Femto Mega femto_mega.launch.py femto_mega.launch.py
Femto femto.launch.py femto.launch.py
Astra 2 astra2.launch.py astra2.launch.py
Astra astra.launch.py astra.launch.py
Astra Mini Pro / S Pro astra_mini_pro.launch.py ... astra.launch.py
Multi-Camera (Synchronized) multi_camera_synced.launch.py multi_camera_synced.launch.py
Multi-Camera (Generic / Universal) multi_camera.launch.py multi_camera.launch.pyorbbec_multicamera.launch.py
Single-Camera Generic Launch ob_camera.launch.py orbbec_camera.launch.py
OpenNI devices (Dabai、Deeya) Corresponding model independent file Not supported
"},{"kind":"section","title":"Parameter Differences","page_title":"Migrating from main to Open-Source v2-main","anchor":"parameter-differences","url":"source/camera_devices/7_developer_guide/migration_guide.html#parameter-differences","text":"New Parameters in v2-main (not available in main)
Parameter Name main v2-main Description
upgrade_firmware - Added Firmware upgrade path
preset_firmware_path - Added Preset firmware file path
load_config_json_file_path - Added Load JSON configuration
export_config_json_file_path - Added Export JSON configuration
uvc_backend - Added libuvc / v4l2 backend selection
enable_color_auto_exposure_priority - Added AE priority control
color_flip - Added Color image vertical flip
color_mirror - Added Color image horizontal mirror
depth_flip - Added Depth image vertical flip
depth_mirror - Added Depth image horizontal mirror
left_ir_flip - Added Left IR vertical flip
left_ir_mirror - Added Left IR horizontal mirror
right_ir_flip - Added Right IR vertical flip
right_ir_mirror - Added Right IR horizontal mirror
enable_left_ir_sequence_id_filter - Added Left IR sequence ID filter
enable_right_ir_sequence_id_filter - Added Right IR sequence ID filter
enable_accel_data_correction - Added Accelerometer data correction
enable_gyro_data_correction - Added Gyroscope data correction
enumerate_net_device - Added Automatic enumeration of network devices
net_device_ip - Added Network device IP address
net_device_port - Added Network device port
exposure_range_mode - Added Exposure range mode: default / ultimate / regular
disparity_to_depth_mode - Added Hardware disparity-to-depth conversion
ldp_power_level - Added LDP power level
time_sync_period - Added Time synchronization period
gmsl_trigger_fps - Added GMSL trigger frame rate
enable_gmsl_trigger - Added GMSL trigger enable
disparity_range_mode - Added Disparity range mode
disparity_search_offset - Added Disparity search offset
disparity_offset_config - Added Disparity offset configuration
offset_index0 - Added Disparity offset index 0
offset_index1 - Added Disparity offset index 1
interleave_ae_mode - Added AE interleave mode
interleave_frame_enable - Added Interleaved frame enable
interleave_skip_enable - Added Skip IR frame enable
interleave_skip_index - Added Skip IR frame index
hdr_index1_laser_control - Added HDR laser control parameters
hdr_index1_depth_exposure - Added HDR depth exposure
hdr_index1_depth_gain - Added HDR depth gain
hdr_index1_ir_brightness - Added HDR IR brightness
hdr_index1_ir_ae_max_exposure - Added HDR IR max AE
hdr_index0_laser_control - Added HDR laser control parameters
hdr_index0_depth_exposure - Added HDR depth exposure
hdr_index0_depth_gain - Added HDR depth gain
hdr_index0_ir_brightness - Added HDR IR brightness
hdr_index0_ir_ae_max_exposure - Added HDR IR max AE
laser_index1_laser_control - Added Laser interleave control
laser_index1_depth_exposure - Added Laser depth exposure
laser_index1_depth_gain - Added Laser depth gain
laser_index1_ir_brightness - Added Laser IR brightness
laser_index1_ir_ae_max_exposure - Added Laser IR max AE
laser_index0_laser_control - Added Laser interleave control
laser_index0_depth_exposure - Added Laser depth exposure
laser_index0_depth_gain - Added Laser depth gain
laser_index0_ir_brightness - Added Laser IR brightness
laser_index0_ir_ae_max_exposure - Added Laser IR max AE
software_trigger_enabled - Added Software trigger enable
enable_ptp_config - Added PTP configuration (Gemini 335Le)
align_target_stream - Added Target stream for alignment
spatial_fast_filter_radius - Added Fast spatial filter radius
spatial_moderate_filter_diff_threshold - Added Moderate spatial filter difference threshold
spatial_moderate_filter_magnitude - Added Moderate spatial filter magnitude
spatial_moderate_filter_radius - Added Moderate spatial filter radius
color.image_raw.enable_pub_plugins - Added Color image transport plugins
depth.image_raw.enable_pub_plugins - Added Depth image transport plugins
left_ir.image_raw.enable_pub_plugins - Added Left IR transport plugins
right_ir.image_raw.enable_pub_plugins - Added Right IR transport plugins
force_ip_enable - Added Force IP feature
force_ip_mac - Added Force IP MAC address
force_ip_dhcp - Added DHCP auto assignment
force_ip_address - Added Force IP static address
force_ip_subnet_mask - Added Force IP subnet mask
force_ip_gateway - Added Force IP gateway
Removed Parameters (main only, removed in v2-main)
Parameter Description
enable_3d_reconstruction_mode 3D reconstruction mode deprecated
enable_hardware_reset Hardware reset interface deprecated
enable_hardware_noise_removal_filter Hardware noise removal filter deprecated
laser_on_off_mode Old laser on/off interface, replaced by interleave / laser_index
enable_3d_reconstruction_mode 3D reconstruction mode repeated; no longer used in v2-main
device_preset Some logic migrated to new firmware / interleave parameters
enable_trigger_out Old software trigger interface replaced by software_trigger_enabled
retry_on_usb3_detection_failure Optional; logic adjusted or removed in v2-main
enable_color_undistortion Old interface logic integrated elsewhere; still exists in v2-main but usage may be adjusted
"},{"kind":"section","title":"Topic Differences","page_title":"Migrating from main to Open-Source v2-main","anchor":"topic-differences","url":"source/camera_devices/7_developer_guide/migration_guide.html#topic-differences","text":"v2-main adds the following topics based on main:
Topic main v2-main Description
/camera/device_status - Added Publishes device status (frame rate delay, device connection status, etc.)
"},{"kind":"section","title":"Service Differences","page_title":"Migrating from main to Open-Source v2-main","anchor":"service-differences","url":"source/camera_devices/7_developer_guide/migration_guide.html#service-differences","text":"v2-main adds the following services based on main:
Service main v2-main Description
get_ptp_config - Added Get PTP configuration
set_ptp_config - Added Set PTP configuration
get_streams_enable - Added Get the enable status of each stream
set_streams_enable - Added Set the enable status of each stream
get_user_calib_params - Added Get user calibration parameters
set_user_calib_params - Added Set user calibration parameters
read_customer_data - Added Read user-stored custom data
write_customer_data - Added Write user-stored custom data
send_software_trigger - Added Send software trigger
set_color_ae_roi - Added Set AE ROI for color image
set_depth_ae_roi - Added Set AE ROI for depth image
set_color_flip - Added Set color image vertical flip
set_depth_flip - Added Set depth image vertical flip
set_color_rotation - Added Set color image rotation
set_depth_rotation - Added Set depth image rotation
set_left_ir_ae_roi - Added Set AE ROI for left IR
set_right_ir_ae_roi - Added Set AE ROI for right IR
set_left_ir_flip - Added Left IR vertical flip
set_right_ir_flip - Added Right IR vertical flip
set_left_ir_rotation - Added Left IR rotation
set_right_ir_rotation - Added Right IR rotation
set_reset_timestamp - Added Reset timestamp
set_sync_hosttime - Added Synchronize host time
set_sync_interleaverlaser - Added Interleaver laser synchronization
set_filter - Added Set depth/point cloud filters
"},{"kind":"document","title":"Frequently Asked Questions","page_title":"Frequently Asked Questions","anchor":"","url":"source/camera_devices/8_FAQ/FAQ.html","text":""},{"kind":"section","title":"Frequently Asked Questions","page_title":"Frequently Asked Questions","anchor":"frequently-asked-questions","url":"source/camera_devices/8_FAQ/FAQ.html#frequently-asked-questions","text":""},{"kind":"section","title":"Unexpected Crash","page_title":"Frequently Asked Questions","anchor":"unexpected-crash","url":"source/camera_devices/8_FAQ/FAQ.html#unexpected-crash","text":"If the camera node crashes unexpectedly, it will generate a crash log in the current running directory: Log/camera_crash_stack_trace_xx.log. Please send this log to the support team or submit it to a GitHub issue for further assistance."},{"kind":"section","title":"No Data Stream from Multiple Cameras","page_title":"Frequently Asked Questions","anchor":"no-data-stream-from-multiple-cameras","url":"source/camera_devices/8_FAQ/FAQ.html#no-data-stream-from-multiple-cameras","text":"Insufficient Power Supply: Ensure that each camera is connected to a separate hub. Use a powered hub to provide sufficient power to each camera. High Resolution: Try lowering the resolution to resolve data stream issues. Increase usbfs_memory_mb Value: Increase the usbfs_memory_mb value to 128MB (this is a reference value and can be adjusted based on your system’s needs) by running the following command: echo 128 | sudo tee /sys/module/usbcore/parameters/usbfs_memory_mb To make this change permanent, check this link."},{"kind":"section","title":"How to Collect and Save Logs","page_title":"Frequently Asked Questions","anchor":"how-to-collect-and-save-logs","url":"source/camera_devices/8_FAQ/FAQ.html#how-to-collect-and-save-logs","text":"1. SDK debug logs Set the launch parameter log_level to debug. After running, the SDK will generate log files in the Log/ folder under the current working directory. If you want a more recognizable file name for this test, you can set the parameter log_file_name. SDK logs are appended to the same file: multiple launches will continue writing into the same log file. Recommendation: before packaging logs to send to technical support, delete old log files, then reproduce the issue and collect new logs. This keeps the logs cleaner and makes troubleshooting more accurate. 2. ROS 2 logs (~/.ros/log) In the launch file, set the node (or composable node container) parameter output to \"log\" to save ROS 2 logs locally. After setting output=\"log\", ROS 2 logs will be stored in the ~/.ros/log/ directory. When submitting an issue, please package both the SDK logs under the Log/ directory and the corresponding ROS 2 logs under ~/.ros/log/ for the same time period. 3. Example Tutorial Run in the terminal ros2 launch orbbec_camera gemini_330_series.launch.py log_level:=debug alt text You can find the SDK logs in the Log folder within the current working directory. alt text ros2 log is enabled by default and can be viewed under ~/.ros/log/ alt text"},{"kind":"section","title":"Why Are There So Many Launch Files?","page_title":"Frequently Asked Questions","anchor":"why-are-there-so-many-launch-files","url":"source/camera_devices/8_FAQ/FAQ.html#why-are-there-so-many-launch-files","text":"Different cameras have varying default resolutions and image formats. To simplify usage, each camera has its own launch file."},{"kind":"section","title":"How to Launch a Specific Camera When Multiple Cameras Are Connected","page_title":"Frequently Asked Questions","anchor":"how-to-launch-a-specific-camera-when-multiple-cameras-are-connected","url":"source/camera_devices/8_FAQ/FAQ.html#how-to-launch-a-specific-camera-when-multiple-cameras-are-connected","text":"While the launch file did not explicitly specify which device to use. In that case, the driver will connect to the default device. You can check the serial number of your device by running: ros2 run orbbec_camera list_devices_node Then launch with the serial number explicitly set, for example: ros2 launch orbbec_camera femto_bolt.launch.py serial_number:=CL8H741005J"},{"kind":"section","title":"Why Is It Necessary to Add Delays When Starting Multiple Cameras or Switching Streams?","page_title":"Frequently Asked Questions","anchor":"why-is-it-necessary-to-add-delays-when-starting-multiple-cameras-or-switching-streams","url":"source/camera_devices/8_FAQ/FAQ.html#why-is-it-necessary-to-add-delays-when-starting-multiple-cameras-or-switching-streams","text":"Multi-camera systems place high demands on USB bandwidth and device initialization timing. If multiple camera streams are started or switched simultaneously, it may cause temporary bandwidth congestion, leading to device initialization failures, stream startup errors, or frame drops. To ensure system stability, the following practices are recommended: Multi-camera startup phase When starting multiple cameras, it is recommended to introduce an appropriate delay between each camera startup (e.g., 2 seconds) to avoid instantaneous bandwidth overload or low-level device initialization conflicts. Stream enable/disable and mode switching phase When invoking stream control services (such as set_streams_enable, toggle_depth, and toggle_color), avoid triggering multiple service calls at the same time. Instead, introduce a reasonable interval between operations (e.g., 20 ms) to ensure reliable stream state transitions. Following these timing control guidelines can significantly improve the stability of multi-camera systems during startup and runtime, reducing errors and unexpected behavior."},{"kind":"section","title":"femto bolt depth stream no data","page_title":"Frequently Asked Questions","anchor":"femto-bolt-depth-stream-no-data","url":"source/camera_devices/8_FAQ/FAQ.html#femto-bolt-depth-stream-no-data","text":"This module depends on the OpenGL library at runtime. If OpenGL is not installed or the graphics driver is incomplete, the depth stream may output no data. Please make sure to install the necessary OpenGL libraries first (Ubuntu example below): sudo apt update && sudo apt install -y mesa-utils libgl1-mesa-glx libglu1-mesa After installation, you can check whether OpenGL is available through the following command: glxinfo -B"},{"kind":"section","title":"The image does not reach the preset frame rate","page_title":"Frequently Asked Questions","anchor":"the-image-does-not-reach-the-preset-frame-rate","url":"source/camera_devices/8_FAQ/FAQ.html#the-image-does-not-reach-the-preset-frame-rate","text":"First you need to confirm whether the image does not reach the preset frame rate. There are several ways to view framerate in ROS 2, such as: ros2 topic hz rqt Custom tools (such as the benchmark tool provided by this ROS package) It should be noted that different tools have different statistical methods and QoS configurations, so the frame rate results obtained may be different. When you find that the frame rate is lower than expected, please prioritize whether the error is caused by the frame rate statistics tool itself. If you confirm that the image frame rate does not reach the preset value, you can try the following troubleshooting steps: Reduce the resolution or frame rate to determine whether the frame rate is reduced due to USB/network bandwidth limitations; Confirm whether the camera firmware version and ROS package version are the latest. Older versions may have performance or compatibility issues. If the above methods still cannot solve the problem, please contact our company FAE, or submit an issue in GitHub Issue for further support."},{"kind":"section","title":"Issues related to soft trigger mode","page_title":"Frequently Asked Questions","anchor":"issues-related-to-soft-trigger-mode","url":"source/camera_devices/8_FAQ/FAQ.html#issues-related-to-soft-trigger-mode","text":"Each sensor does not flow out at the same time when the signal is triggered Please enable the frame aggregation function and set the parameter frame_aggregate_mode to full_frame to ensure that multiple sensor data are output synchronously under the same trigger. The preset frame rate cannot be reached in auto trigger mode When setting software_trigger_period, you need to consider the actual open stream frame rate and exposure time. For example, when color_fps is set to 10 FPS, software_trigger_period cannot be lower than the following calculated value: software_trigger_period ≥ 1000000 / fps × N + 2 × expo Among them: fps: sensor frame rate N: The number of frames collected in a single trigger expo: exposure time Unit: µs If software_trigger_period is set too small, the trigger frequency will be limited, resulting in frame loss."},{"kind":"document","title":"Camera Devices","page_title":"Camera Devices","anchor":"","url":"source/camera_devices/index.html","text":""},{"kind":"section","title":"Camera Devices","page_title":"Camera Devices","anchor":"camera-devices","url":"source/camera_devices/index.html#camera-devices","text":""},{"kind":"document","title":"License","page_title":"License","anchor":"","url":"source/license.html","text":""},{"kind":"section","title":"License","page_title":"License","anchor":"license","url":"source/license.html#license","text":"Copyright 2024 Orbbec INC. Licensed under the Apache License, Version 2.0 (the “License”); you may not use this project 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. Other names and brands may be claimed as the property of others."},{"kind":"document","title":"Lidar Devices","page_title":"Lidar Devices","anchor":"","url":"source/lidar_devices/index.html","text":""},{"kind":"section","title":"Lidar Devices","page_title":"Lidar Devices","anchor":"lidar-devices","url":"source/lidar_devices/index.html#lidar-devices","text":""},{"kind":"document","title":"Installation","page_title":"Installation","anchor":"","url":"source/lidar_devices/lidar.html","text":"This ROS2 driver supports your use of Orbbec single-line/multi-line LiDAR. This document provides installation instructions## 4. IMU Data"},{"kind":"section","title":"Installation","page_title":"Installation","anchor":"installation","url":"source/lidar_devices/lidar.html#installation","text":""},{"kind":"section","title":"Prerequisites","page_title":"Installation","anchor":"prerequisites","url":"source/lidar_devices/lidar.html#prerequisites","text":"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."},{"kind":"section","title":"Install deb Dependencies","page_title":"Installation","anchor":"install-deb-dependencies","url":"source/lidar_devices/lidar.html#install-deb-dependencies","text":"# 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"},{"kind":"section","title":"Install udev Rules","page_title":"Installation","anchor":"install-udev-rules","url":"source/lidar_devices/lidar.html#install-udev-rules","text":"cd ~/ros2_ws/src/OrbbecSDK_ROS2/orbbec_camera/scripts sudo bash install_udev_rules.sh sudo udevadm control --reload-rules && sudo udevadm trigger"},{"kind":"section","title":"Build the Package","page_title":"Installation","anchor":"build-the-package","url":"source/lidar_devices/lidar.html#build-the-package","text":"cd ~/ros2_ws/ # Build release version, default is Debug colcon build --event-handlers console_direct+ --cmake-args -DCMAKE_BUILD_TYPE=Release"},{"kind":"section","title":"Launch the LiDAR Node","page_title":"Installation","anchor":"launch-the-lidar-node","url":"source/lidar_devices/lidar.html#launch-the-lidar-node","text":"First terminal . ./install/setup.bash ros2 launch orbbec_camera lidar.launch.py Second terminal . ./install/setup.bash rviz2 Open Rviz2. Add a PointCloud2 or LaserScan display. For PointCloud2, select the /lidar/cloud/points topic; for LaserScan, select the /lidar/scan/points topic. Set the Fixed Frame to lidar_lidar_frame to properly align the data. PointCloud2 visualization example: module in rviz2 LaserScan visualization example: module in rviz2"},{"kind":"section","title":"Usage","page_title":"Installation","anchor":"usage","url":"source/lidar_devices/lidar.html#usage","text":""},{"kind":"section","title":"Running the Driver","page_title":"Installation","anchor":"running-the-driver","url":"source/lidar_devices/lidar.html#running-the-driver","text":"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."},{"kind":"section","title":"Get Device Information for Connected LiDARs","page_title":"Installation","anchor":"get-device-information-for-connected-lidars","url":"source/lidar_devices/lidar.html#get-device-information-for-connected-lidars","text":"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."},{"kind":"section","title":"Check Which Configurations the LiDAR Supports","page_title":"Installation","anchor":"check-which-configurations-the-lidar-supports","url":"source/lidar_devices/lidar.html#check-which-configurations-the-lidar-supports","text":"ros2 run orbbec_camera list_camera_profile_mode_node"},{"kind":"section","title":"Parameters and Configuration","page_title":"Installation","anchor":"parameters-and-configuration","url":"source/lidar_devices/lidar.html#parameters-and-configuration","text":"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 to lidar launches the LiDAR device, setting it to camera launches 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_SCAN lidar_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_POINT or LIDAR_SPHERE_POINT, used to merge specified number of frames before publishing. Default value: 1 enable_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 Echo point_cloud_qos: ROS 2 message Quality of Service (QoS) settings. Possible values include SYSTEM_DEFAULT, DEFAULT, PARAMETER_EVENTS, SERVICES_DEFAULT, PARAMETERS, and SENSOR_DATA, and are case-insensitive. These values correspond to rmw_qos_profile_system_default, rmw_qos_profile_default, rmw_qos_profile_parameter_events, rmw_qos_profile_services_default, rmw_qos_profile_parameters, and SENSOR_DATA respectively. 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 are debug, info, warn, error, fatal time_domain: Timestamp type of the device. Optional values are device, global, system config_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 to true, the camera node will send heartbeat signals to the firmware; this should also be set to true if 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."},{"kind":"section","title":"Point Cloud Data Details","page_title":"Installation","anchor":"point-cloud-data-details","url":"source/lidar_devices/lidar.html#point-cloud-data-details","text":""},{"kind":"section","title":"Point Cloud Format","page_title":"Installation","anchor":"point-cloud-format","url":"source/lidar_devices/lidar.html#point-cloud-format","text":"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"},{"kind":"section","title":"Point Cloud Aggregation Functionality","page_title":"Installation","anchor":"point-cloud-aggregation-functionality","url":"source/lidar_devices/lidar.html#point-cloud-aggregation-functionality","text":"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."},{"kind":"section","title":"Features:","page_title":"Installation","anchor":"features","url":"source/lidar_devices/lidar.html#features","text":"Parameter Range: 1-12000 frames Applicable Formats: Only effective when lidar format is LIDAR_POINT or LIDAR_SPHERE_POINT Default Value: 1 (no aggregation, each frame published individually) Purpose: Improve point cloud density, suitable for applications requiring denser point cloud data"},{"kind":"section","title":"Usage Examples:","page_title":"Installation","anchor":"usage-examples","url":"source/lidar_devices/lidar.html#usage-examples","text":"# 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."},{"kind":"section","title":"IMU Data","page_title":"Installation","anchor":"imu-data","url":"source/lidar_devices/lidar.html#imu-data","text":""},{"kind":"section","title":"IMU Topics","page_title":"Installation","anchor":"imu-topics","url":"source/lidar_devices/lidar.html#imu-topics","text":"When IMU is enabled, the following topics will be published: /lidar/imu/sample: Unified IMU topic containing synchronized accelerometer and gyroscope data in sensor_msgs/Imu format. /lidar/lidar_to_imu: Transform from LiDAR frame to IMU frame."},{"kind":"section","title":"Using IMU Data","page_title":"Installation","anchor":"using-imu-data","url":"source/lidar_devices/lidar.html#using-imu-data","text":"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)"}]};