deploy: 2c1d661d9c
@@ -0,0 +1,4 @@
|
||||
# Sphinx build info version 1
|
||||
# This file records the configuration used when building these files. When it is not found, a full rebuild will be done.
|
||||
config: 0f7510548283e570859d8a471618b1d1
|
||||
tags: 645f666f9bcd5a90fca523b33c5a78b7
|
||||
|
After Width: | Height: | Size: 208 KiB |
|
After Width: | Height: | Size: 313 KiB |
|
After Width: | Height: | Size: 60 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 3.4 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 60 KiB |
|
After Width: | Height: | Size: 63 KiB |
|
After Width: | Height: | Size: 140 KiB |
|
After Width: | Height: | Size: 90 KiB |
|
After Width: | Height: | Size: 86 KiB |
|
After Width: | Height: | Size: 91 KiB |
|
After Width: | Height: | Size: 9.7 KiB |
|
After Width: | Height: | Size: 208 KiB |
|
After Width: | Height: | Size: 313 KiB |
|
After Width: | Height: | Size: 60 KiB |
|
After Width: | Height: | Size: 93 KiB |
|
After Width: | Height: | Size: 60 KiB |
|
After Width: | Height: | Size: 126 KiB |
|
After Width: | Height: | Size: 256 KiB |
|
After Width: | Height: | Size: 111 KiB |
|
After Width: | Height: | Size: 154 KiB |
|
After Width: | Height: | Size: 736 KiB |
|
After Width: | Height: | Size: 70 KiB |
|
After Width: | Height: | Size: 116 KiB |
|
After Width: | Height: | Size: 103 KiB |
|
After Width: | Height: | Size: 56 KiB |
|
After Width: | Height: | Size: 234 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 87 KiB |
|
After Width: | Height: | Size: 116 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 823 KiB |
|
After Width: | Height: | Size: 245 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 163 KiB |
@@ -0,0 +1,20 @@
|
||||
.. 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.
|
||||
|
||||
OrbbecSDK V2 ROS2 Wrapper documentation
|
||||
=======================================
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 3
|
||||
:numbered:
|
||||
|
||||
source/1_overview/overview.rst
|
||||
source/2_installation/installation.rst
|
||||
source/3_quickstarts/quickstarts.rst
|
||||
source/4_application_guide/application_guide.rst
|
||||
source/5_advanced_guide/advanced_guide.rst
|
||||
source/6_benchmark/benchmark.rst
|
||||
source/7_developer_guide/developer_guide.rst
|
||||
source/8_FAQ/FAQ.rst
|
||||
@@ -0,0 +1,261 @@
|
||||
# Introduction
|
||||
|
||||
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](https://gitee.com/orbbecdeveloper/OrbbecSDK_ROS2).
|
||||
|
||||
Here is the device support list of main branch (v1.x) and v2-main branch (v2.x):
|
||||
|
||||
<table border="1" style="border-collapse: collapse; text-align: left; width: 100%;">
|
||||
<thead>
|
||||
<tr style="background-color: #1f4e78; color: white; text-align: center;">
|
||||
<th>Product Series</th>
|
||||
<th>Product</th>
|
||||
<th><a href="https://github.com/orbbec/OrbbecSDK_ROS2/tree/main" style="color: black; text-decoration: none;">Branch main</a></th>
|
||||
<th><a href="https://github.com/orbbec/OrbbecSDK_ROS2/tree/v2-main" style="color: black; text-decoration: none;">Branch v2-main</a></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="text-align: center; font-weight: bold;">Gemini 435Le</td>
|
||||
<td>Gemini 435Le</td>
|
||||
<td>Not supported</td>
|
||||
<td>Recommended for new designs</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="8" style="text-align: center; font-weight: bold;">Gemini 330</td>
|
||||
<td>Gemini 335</td>
|
||||
<td>Full maintenance</td>
|
||||
<td>Recommended for new designs</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gemini 336</td>
|
||||
<td>Full maintenance</td>
|
||||
<td>Recommended for new designs</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gemini 335L</td>
|
||||
<td>Full maintenance</td>
|
||||
<td>Recommended for new designs</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gemini 336L</td>
|
||||
<td>Full maintenance</td>
|
||||
<td>Recommended for new designs</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gemini 335Lg</td>
|
||||
<td>Not supported</td>
|
||||
<td>Recommended for new designs</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gemini 335Le</td>
|
||||
<td>Not supported</td>
|
||||
<td>Recommended for new designs</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gemini 330</td>
|
||||
<td>Full maintenance</td>
|
||||
<td>Recommended for new designs</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gemini 330L</td>
|
||||
<td>Full maintenance</td>
|
||||
<td>Recommended for new designs</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="3" style="text-align: center; font-weight: bold;">Gemini 2</td>
|
||||
<td>Gemini 2</td>
|
||||
<td>Full maintenance</td>
|
||||
<td>Recommended for new designs</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gemini 2 L</td>
|
||||
<td>Full maintenance</td>
|
||||
<td>Recommended for new designs</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gemini 2 XL</td>
|
||||
<td>Recommended for new designs</td>
|
||||
<td>To be supported</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="3" style="text-align: center; font-weight: bold;">Femto</td>
|
||||
<td>Femto Bolt</td>
|
||||
<td>Full maintenance</td>
|
||||
<td>Recommended for new designs</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Femto Mega</td>
|
||||
<td>Full maintenance</td>
|
||||
<td>Recommended for new designs</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Femto Mega I</td>
|
||||
<td>Full maintenance</td>
|
||||
<td>To be supported</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="3" style="text-align: center; font-weight: bold;">Astra</td>
|
||||
<td>Astra 2</td>
|
||||
<td>Full maintenance</td>
|
||||
<td>Recommended for new designs</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Astra+</td>
|
||||
<td>Limited maintenance</td>
|
||||
<td>Not supported</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Astra Pro Plus</td>
|
||||
<td>Limited maintenance</td>
|
||||
<td>Not supported</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: center; font-weight: bold;">Astra Mini</td>
|
||||
<td>Astra Mini Pro</td>
|
||||
<td>Full maintenance</td>
|
||||
<td>Full maintenance</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
**Note**: If you do not find your device, please contact our FAE or sales representative for help.
|
||||
|
||||
**Definition**:
|
||||
|
||||
1. Recommended for new designs: we will provide full supports with new features, bug fix and performance optimization;
|
||||
2. Full maintenance: we will provide bug fix support;
|
||||
3. Limited maintenance: we will provide critical bug fix support;
|
||||
4. Not supported: we will not support specific device in this version;
|
||||
5. To be supported: we will add support in the near future.
|
||||
|
||||
## Support Hardware Products
|
||||
|
||||
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](https://github.com/orbbec/OrbbecSDK_ROS2) 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](../3_quickstarts/orbbecviewer.md).
|
||||
|
||||
| Product List | Minimal Firmware Version | **Launch File** |
|
||||
|:-------------- |:------------------------ |:--------------------------- |
|
||||
| Gemini 435Le | 1.2.04 | gemini435_le.launch.py |
|
||||
| Gemini 335 | 1.2.20 | gemini_330_series.launch.py |
|
||||
| Gemini 336 | 1.2.20 | gemini_330_series.launch.py |
|
||||
| Gemini 335L | 1.2.20 | gemini_330_series.launch.py |
|
||||
| Gemini 336L | 1.2.20 | gemini_330_series.launch.py |
|
||||
| Gemini 335Lg | 1.3.46 | gemini_330_series.launch.py |
|
||||
| Gemini 335Le | 1.5.31 | gemini_330_series.launch.py |
|
||||
| Gemini 330 | 1.2.20 | gemini_330_series.launch.py |
|
||||
| Gemini 330L | 1.2.20 | gemini_330_series.launch.py |
|
||||
| Gemini 2 | 1.4.92 | gemini2.launch.py |
|
||||
| Gemini 2 L | 1.4.53 | gemini2L.launch.py |
|
||||
| Femto Bolt | 1.1.2 | femto_bolt.launch.py |
|
||||
| Femto Mega | 1.3.0 | femto_mega.launch.py |
|
||||
| Astra 2 | 2.8.20 | astra2.launch.py |
|
||||
| Astra Mini Pro | 2.0.01 | astra.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.
|
||||
|
||||
## Orbbec camera datasheet
|
||||
|
||||
Refer to the camera datasheet for more information.
|
||||
|
||||
<style>
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
width: 100%;
|
||||
}
|
||||
th, td {
|
||||
border: 1px solid #ccc;
|
||||
padding: 8px;
|
||||
text-align: left;
|
||||
vertical-align: middle;
|
||||
}
|
||||
thead th {
|
||||
background-color: #1f4e78;
|
||||
color: white;
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
}
|
||||
</style>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Product Series</th>
|
||||
<th>Product</th>
|
||||
<th>Datasheet</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="text-align: center;">Gemini 435Le</td>
|
||||
<td>Gemini 435Le</td>
|
||||
<td><a href="https://new-orbbec3d-s3.s3.amazonaws.com/wp-content/uploads/2025/06/04011158/Orbbec-Gemini-435Le-Datasheet-V1.pdf">Orbbec Gemini 435Le Datasheet</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: center;" rowspan="6">Gemini 330</td>
|
||||
<td>Gemini 335</td>
|
||||
<td rowspan="4"><a href="https://new-orbbec3d-s3.s3.amazonaws.com/wp-content/uploads/2025/04/22062452/Gemini-330-series-Datasheet-V1.6.pdf">Gemini 330 Series Datasheet for USB Devices</a></td>
|
||||
</tr>
|
||||
<tr><td>Gemini 336</td></tr>
|
||||
<tr><td>Gemini 335L</td></tr>
|
||||
<tr><td>Gemini 336L</td></tr>
|
||||
<tr>
|
||||
<td>Gemini 335Lg</td>
|
||||
<td><a href="https://new-orbbec3d-s3.s3.amazonaws.com/wp-content/uploads/2024/10/22030914/Gemini-335Lg-Datasheet-V1.0-241022.pdf">Gemini 330 Series Datasheet for GMSL Devices</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gemini 335Le</td>
|
||||
<td><a href="https://new-orbbec3d-s3.s3.amazonaws.com/wp-content/uploads/2025/03/24023151/Orbbec-Gemini-335Le-Datasheet-V1-2.pdf">Gemini 330 Series Datasheet for Ethernet Devices</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: center;" rowspan="3">Gemini 2</td>
|
||||
<td>Gemini 2</td>
|
||||
<td rowspan="2"><a href="https://xm917ch2uk.feishu.cn/file/Khxfb2vdioUghexIMqJcAyL3nXf">Orbbec Gemini 2 Series Datasheet</a></td>
|
||||
</tr>
|
||||
<tr><td>Gemini 2 L</td></tr>
|
||||
<tr>
|
||||
<td>Gemini 2 XL</td>
|
||||
<td><a href="https://xm917ch2uk.feishu.cn/file/QW2vbNvwxoocRIxSL6Zcvut2npS">Orbbec Gemini 2 XL Datasheet</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: center;" rowspan="3">Femto</td>
|
||||
<td>Femto Bolt</td>
|
||||
<td><a href="https://d1cd332k3pgc17.cloudfront.net/wp-content/uploads/2024/08/ORBBEC_Datasheet_Femto-Bolt-v1.0.pdf">Orbbec Femto Bolt Datasheet</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Femto Mega</td>
|
||||
<td><a href="https://d1cd332k3pgc17.cloudfront.net/wp-content/uploads/2023/04/ORBBEC_Datasheet_Femto-Mega1.pdf">Orbbec Femto Mega Datasheet</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Femto Mega I</td>
|
||||
<td><a href="https://d1cd332k3pgc17.cloudfront.net/wp-content/uploads/2023/08/ORBBEC_Datasheet_Femto-Mega-I.pdf">Orbbec Femto Mega I Datasheet</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: center;" rowspan="3">Astra</td>
|
||||
<td>Astra 2</td>
|
||||
<td><a href="https://d1cd332k3pgc17.cloudfront.net/wp-content/uploads/2023/04/ORBBEC_Datasheet_Astra-2_V1.2.pdf">Orbbec Astra 2 Datasheet</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Astra+</td>
|
||||
<td><a href="https://xm917ch2uk.feishu.cn/file/Qk0zbx26Doh8XMxw0rIcOgQYnff">Orbbec Astra+ Datasheet</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Astra Mini Pro</td>
|
||||
<td><a href="https://d1cd332k3pgc17.cloudfront.net/wp-content/uploads/2023/04/ORBBEC_Datasheet_Astra-Mini-Pro-1.pdf">Orbbec Astra Mini Pro Datasheet</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
---
|
||||
|
||||
## Support Platforms
|
||||
|
||||
- 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
|
||||
@@ -0,0 +1,116 @@
|
||||
# Orbbec SDK Overview
|
||||
|
||||
This section introduces the Orbbec SDK in C++. Its architecture and concepts are consistent with those of the Python Wrapper.
|
||||
|
||||
## Terms
|
||||
|
||||
| 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 |
|
||||
|
||||
## Orbbec SDK v2 Architecture Overview
|
||||
|
||||

|
||||
|
||||
- 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.
|
||||
|
||||
## SDK Concept Overview
|
||||
|
||||
- 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.
|
||||
|
||||
|
||||
## SDK Programming Model
|
||||
|
||||
Here is the C++ programming logic flow chart. Python's programming logic is the same as it.
|
||||
|
||||
- Standard Flowchart:
|
||||
|
||||

|
||||
|
||||
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):
|
||||
|
||||

|
||||
@@ -0,0 +1,11 @@
|
||||
Overview
|
||||
======================================================
|
||||
|
||||
This chapter provides an overview of the Orbbec SDK, including supported products, main features, and architecture.
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
introduction.md
|
||||
orbbecsdk_overview.md
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
### Build from Source
|
||||
|
||||
#### Environment
|
||||
|
||||
Install ROS 2 according to the official guide:
|
||||
|
||||
* [ROS 2 installation (Ubuntu)](https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debians.html)
|
||||
|
||||
Enable ROS 2 auto-completion:
|
||||
|
||||
```bash
|
||||
eval "$(register-python-argcomplete3 ros2)"
|
||||
eval "$(register-python-argcomplete3 colcon)"
|
||||
```
|
||||
|
||||
Create a `colcon` workspace:
|
||||
|
||||
```bash
|
||||
mkdir -p ~/ros2_ws/src
|
||||
```
|
||||
|
||||
#### Linux ROS2 Wrapper Compilation
|
||||
|
||||
Clone source and checkout `v2-main` branch:
|
||||
|
||||
```bash
|
||||
cd ~/ros2_ws/src
|
||||
git clone https://github.com/orbbec/OrbbecSDK_ROS2.git
|
||||
cd OrbbecSDK_ROS2
|
||||
git checkout v2-main
|
||||
```
|
||||
|
||||
Install dependencies:
|
||||
|
||||
```bash
|
||||
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
|
||||
```
|
||||
|
||||
Optional dependencies:
|
||||
|
||||
```bash
|
||||
# 435Le writeCustomerDate feature:
|
||||
sudo apt install libssl-dev
|
||||
```
|
||||
|
||||
Build:
|
||||
|
||||
```bash
|
||||
cd ~/ros2_ws
|
||||
colcon build --event-handlers console_direct+ --cmake-args -DCMAKE_BUILD_TYPE=Release
|
||||
```
|
||||
@@ -0,0 +1,11 @@
|
||||
Installation
|
||||
======================================================
|
||||
|
||||
This chapter explains how to install the Orbbec ROS2 Python SDK, including building from source, installing dependencies, and using registration scripts.
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
build_the_package.md
|
||||
registration_script.md
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
## Registration script (required)
|
||||
|
||||
To allow the Orbbec cameras to be recognized correctly on Linux, install the udev rules:
|
||||
|
||||
```bash
|
||||
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).
|
||||
@@ -0,0 +1,45 @@
|
||||
# OrbbecViewer QuickStarts
|
||||
|
||||
> **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.
|
||||
|
||||
## Download
|
||||
|
||||
**Repository link:**[OrbbecViewer Download](https://github.com/orbbec/OrbbecSDK_v2/releases)
|
||||
|
||||
Select the appropriate version of OrbbecViewer according to your device type.
|
||||
|
||||

|
||||
|
||||
## Connect the device
|
||||
|
||||
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.
|
||||
|
||||

|
||||
|
||||
## Camera Control
|
||||
|
||||
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.
|
||||
|
||||

|
||||
|
||||
## Device information and firmware upgrade
|
||||
|
||||
Click the icon at the bottom left corner of the window to view the current camera information and upgrade the firmware.
|
||||
|
||||

|
||||
|
||||
Please refer to the list below for the latest camera firmware. [For more information, please click here.](https://www.orbbec.com/docs/g330-explore-camera-functions-in-orbbec-viewer/)
|
||||
|
||||
**Repository link:**[Firmware Download](https://github.com/orbbec/OrbbecFirmware?tab=readme-ov-file#firmware-download)
|
||||
|
||||
| **Products list** | **Download link** | Latest version |
|
||||
| ----------------------- | ------------------------------------------------------------------------------------------------- | -------------- |
|
||||
| Femto Bolt | [Femto Bolt Firmware](https://github.com/orbbec/OrbbecFirmware/releases/tag/Femto-Bolt-Firmware) | v1.1.2 |
|
||||
| Femto Mega | [Femto Mega Firmware](https://github.com/orbbec/OrbbecFirmware/releases/tag/Femto-Mega-Firmware) | v1.3.1 |
|
||||
| Gemini 2 | [Gemini 2 Firmware](https://github.com/orbbec/OrbbecFirmware/releases/tag/Gemini2-Firmware) | v1.4.98 |
|
||||
| Gemini 2 L | [Gemini 2L Firmware](https://github.com/orbbec/OrbbecFirmware/releases/tag/Gemini2L-Firmware) | v1.5.02 |
|
||||
| Femto Mega I | [Femto Mega I Firmware](https://github.com/orbbec/OrbbecFirmware/releases/tag/Femto-Mega-I-Firmware) | v2.0.4 |
|
||||
| Gemini 330 series | [Gemini 330 series Firmware](https://www.orbbec.com/docs/g330-firmware-release/?_gl=1) | |
|
||||
| Gemini 215 | [Gemini 215](https://github.com/orbbec/OrbbecFirmware/releases/tag/Gemini215-Firmware) | v1.0.9 |
|
||||
| Gemini 210 | [Gemini 210](https://github.com/orbbec/OrbbecFirmware/releases/tag/Gemini210-Firmware) | v1.0.9 |
|
||||
| Gemini 435Le | [Gemini 435Le](https://github.com/orbbec/OrbbecFirmware/releases/tag/Gemin435Le-Firmware) | v1.3.2 |
|
||||
@@ -0,0 +1,91 @@
|
||||
## ROS Package QuickStarts
|
||||
|
||||
### Introduction
|
||||
|
||||
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**.
|
||||
|
||||
---
|
||||
|
||||
### Build your First Camera Application
|
||||
|
||||
#### Step 1: Source ROS 2 and Workspace
|
||||
|
||||
Make sure ROS 2 and your workspace environment are sourced:
|
||||
|
||||
```bash
|
||||
source /opt/ros/$ROS_DISTRO/setup.bash
|
||||
source ~/ros2_ws/install/setup.bash
|
||||
```
|
||||
|
||||
#### Step 2: Launch the Camera Node
|
||||
|
||||
- On terminal 1
|
||||
|
||||
```bash
|
||||
. ./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**:
|
||||
|
||||
```bash
|
||||
ros2 launch orbbec_camera gemini_330_series.launch.py serial_number:=<YourCameraSN>
|
||||
```
|
||||
|
||||
#### Step 3: Visualize in RViz2
|
||||
|
||||
Launch RViz2 and load the default config:
|
||||
|
||||
- On terminal 2
|
||||
|
||||
```bash
|
||||
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.
|
||||
|
||||
---
|
||||
|
||||
### Sample Features
|
||||
|
||||
After the node is running, try some ROS 2 CLI commands:
|
||||
|
||||
#### List available topics / services/ parameters
|
||||
|
||||
```bash
|
||||
ros2 topic list
|
||||
ros2 service list
|
||||
ros2 param list
|
||||
```
|
||||
|
||||
#### Echo a topic
|
||||
|
||||
View depth camera data:
|
||||
|
||||
```bash
|
||||
ros2 topic echo /camera/depth/camera_info
|
||||
```
|
||||
|
||||
#### Call a service
|
||||
|
||||
For example, get device Information:
|
||||
|
||||
```bash
|
||||
ros2 service call /camera/get_device_info orbbec_camera_msgs/srv/GetDeviceInfo '{}'
|
||||
```
|
||||
|
||||
#### Record with rosbag2
|
||||
|
||||
```bash
|
||||
ros2 bag record /camera/color/image_raw /camera/depth/image_raw
|
||||
```
|
||||
@@ -0,0 +1,11 @@
|
||||
Quickstarts
|
||||
======================================================
|
||||
|
||||
This chapter provides quick start guides for the SDK, allowing users to run basic example programs quickly.
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
quickstart.md
|
||||
orbbecviewer.md
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
Application Guide
|
||||
======================================================
|
||||
|
||||
This chapter introduces application development with the SDK, including launch parameter configuration, ROS2 services, and topics usage.
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
launch_parameters.md
|
||||
services.md
|
||||
topics.md
|
||||
coordinate_systems.md
|
||||
camera_sensor_structure.md
|
||||
tf_transformations.md
|
||||
compressed_image.md
|
||||
point_cloud.md
|
||||
@@ -0,0 +1,5 @@
|
||||
### Camera sensor structure
|
||||
|
||||

|
||||
|
||||

|
||||
@@ -0,0 +1,11 @@
|
||||
### Compressed Image
|
||||
|
||||
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:
|
||||
|
||||
```bash
|
||||
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.
|
||||
@@ -0,0 +1,13 @@
|
||||
### ROS2 Robot vs Camera Optical Coordination Systems
|
||||
|
||||
* Point Of View:
|
||||
* Imagine we are standing behind of the camera, and looking forward.
|
||||
* Always use this point of view when talking about coordinates, left vs right IRs, position of sensor, etc..
|
||||
|
||||

|
||||
|
||||
* ROS2 Coordinate System: (X: Forward, Y:Left, Z: Up)
|
||||
* Camera Optical Coordinate System: (X: Right, Y: Down, Z: Forward)
|
||||
* All data published in our wrapper topics is optical data taken directly from our camera sensors.
|
||||
* static and dynamic TF topics publish optical CS and ROS CS to give the user the ability to move from one CS to other CS.
|
||||
|
||||
@@ -0,0 +1,274 @@
|
||||
# Launch parameters
|
||||
|
||||
> If you are not sure how to set the parameters, you can connect the orbbec camera and open the [OrbbecViewer](https://github.com/orbbec/OrbbecSDK/releases).
|
||||
|
||||
The following are the launch parameters available:
|
||||
|
||||
### Core & Stream Configuration
|
||||
|
||||
* **`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.
|
||||
* **`[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.
|
||||
|
||||
### Sensor Controls
|
||||
|
||||
#### Color Stream
|
||||
* **`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).
|
||||
|
||||
|
||||
#### Depth Stream
|
||||
* **`enable_depth_auto_exposure_priority`**
|
||||
|
||||
* Enable the Depth auto exposure priority.
|
||||
* **`mean_intensity_set_point`**
|
||||
* Set the target mean intensity of the Depth image. For example: `mean_intensity_set_point:=100`.
|
||||
> **Note:** This replaces the deprecated `depth_brightness`, which is still supported for backward compatibility.
|
||||
* **`enable_depth_scale`**
|
||||
* Enable the depth scale.
|
||||
* **`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.
|
||||
|
||||
#### IR Stream
|
||||
* **`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 IR brightness.
|
||||
|
||||
#### Laser / LDP
|
||||
* **`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.
|
||||
|
||||
### Device, Sync & Advanced Features
|
||||
|
||||
#### Multi-Camera Synchronization
|
||||
* **`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](../5_advanced_guide/multi_camera/multi_camera_synced.md).
|
||||
|
||||
#### Network Cameras
|
||||
* **`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`
|
||||
|
||||
* **`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`
|
||||
|
||||
> Used for [net camera](../5_advanced_guide/configuration/net_camera.md).
|
||||
|
||||
#### Device-Specific
|
||||
* **`device_preset`**
|
||||
* The default value is `Default`. Only the G330 series is supported. For more information, refer to the [G330 documentation](https://www.orbbec.com/docs/g330-use-depth-presets/). The value should be one of the preset names listed [in the table](../5_advanced_guide/configuration/predefined_presets.md).
|
||||
* **`enable_gmsl_trigger`** / **`gmsl_trigger_fps`**
|
||||
* Enable the gmsl trigger out signal / set gmsl trigger fps. Used for [gmsl camera](../5_advanced_guide/multi_camera/gmsl_camera.md).
|
||||
|
||||
|
||||
#### Disparity
|
||||
* **`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](../5_advanced_guide/configuration/disparity_search_offset.md).
|
||||
|
||||
#### Interleave AE Mode
|
||||
* **`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](../5_advanced_guide/configuration/interleave_ae_mode.md).*
|
||||
|
||||
#### Intra-Camera Synchronization
|
||||
|
||||
- **`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`. **Default:** `Middle`
|
||||
|
||||
### Basic & General Parameters
|
||||
|
||||
#### Firmware & Backend
|
||||
* **`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.
|
||||
|
||||
#### TF, Extrinsics & Calibration
|
||||
* **`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.
|
||||
|
||||
#### Time Synchronization
|
||||
* **`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`**.
|
||||
* **`enable_ptp_config`**
|
||||
* Enable PTP time synchronization. Only for Gemini 335Le. Requires `enable_sync_host_time` to be `false`.
|
||||
* **`enable_frame_sync`**
|
||||
* Enable the frame synchronization.
|
||||
|
||||
#### Logging & Diagnostics
|
||||
* **`log_level`**
|
||||
* SDK log level. Default is `info`. Optional values: `debug`, `info`, `warn`, `error`, `fatal`.
|
||||
* **`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.
|
||||
|
||||
#### Miscellaneous
|
||||
* **`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).
|
||||
|
||||
### IMU
|
||||
|
||||
* **`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.
|
||||
|
||||
### Depth Filters
|
||||
|
||||
* **`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](https://www.orbbec.com/docs/g330-use-depth-post-processing-blocks/). If you are uncertain, do not modify these settings.
|
||||
@@ -0,0 +1,53 @@
|
||||
## Enabling and Visualizing Point Cloud in ROS 2
|
||||
|
||||
This section demonstrates how to enable point cloud data output from the camera node and visualize it using RViz2.
|
||||
|
||||
### Enabling Depth Point Cloud
|
||||
|
||||
#### Command to Enable Depth Point Cloud
|
||||
|
||||
To activate the point cloud data stream for depth information, use the following command:
|
||||
|
||||
```bash
|
||||
ros2 launch orbbec_camera gemini_330_series.launch.py enable_point_cloud:=true
|
||||
```
|
||||
|
||||
#### Visualizing Depth Point Cloud in RViz2
|
||||
|
||||
After running the above command, perform the following steps to visualize the depth point cloud:
|
||||
|
||||
1. Open RViz2.
|
||||
2. Add a `PointCloud2` display.
|
||||
3. Select the `/camera/depth/points` topic for visualization.
|
||||
4. 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:
|
||||
|
||||

|
||||
|
||||
### Enabling Colored Point Cloud
|
||||
|
||||
#### Command to Enable Colored Point Cloud
|
||||
|
||||
To enable the colored point cloud feature, enter the following command:
|
||||
|
||||
```bash
|
||||
ros2 launch orbbec_camera gemini_330_series.launch.py enable_colored_point_cloud:=true
|
||||
```
|
||||
|
||||
#### Visualizing Colored Point Cloud in RViz2
|
||||
|
||||
To visualize the colored point cloud data:
|
||||
|
||||
1. Launch RViz2 following the command execution.
|
||||
2. Add a `PointCloud2` display panel.
|
||||
3. Choose the `/camera/depth_registered/points` topic from the list.
|
||||
4. 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:
|
||||
|
||||

|
||||
@@ -0,0 +1,209 @@
|
||||
# All available services for camera control
|
||||
|
||||
> **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`).
|
||||
|
||||
### Stream Control
|
||||
|
||||
#### Color Stream
|
||||
* `/camera/toggle_color`
|
||||
```bash
|
||||
ros2 service call /camera/toggle_color std_srvs/srv/SetBool '{data: true}'
|
||||
```
|
||||
* `/camera/get_color_exposure` & `/camera/get_color_gain`
|
||||
```bash
|
||||
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`
|
||||
```bash
|
||||
ros2 service call /camera/set_color_auto_exposure std_srvs/srv/SetBool '{data: true}'
|
||||
```
|
||||
* `/camera/set_color_exposure` & `/camera/set_color_gain`
|
||||
```bash
|
||||
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`
|
||||
```bash
|
||||
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`
|
||||
```bash
|
||||
# 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]}'
|
||||
```
|
||||
|
||||
#### Depth Stream
|
||||
* `/camera/toggle_depth`
|
||||
```bash
|
||||
ros2 service call /camera/toggle_depth std_srvs/srv/SetBool '{data: true}'
|
||||
```
|
||||
* `/camera/get_depth_exposure` & `/camera/get_depth_gain`
|
||||
```bash
|
||||
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`
|
||||
```bash
|
||||
ros2 service call /camera/set_depth_auto_exposure std_srvs/srv/SetBool '{data: true}'
|
||||
```
|
||||
* `/camera/set_depth_exposure` & `/camera/set_depth_gain`
|
||||
```bash
|
||||
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`
|
||||
```bash
|
||||
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`
|
||||
```bash
|
||||
# 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]}'
|
||||
```
|
||||
|
||||
#### IR Stream
|
||||
* `/camera/toggle_ir`
|
||||
|
||||
```bash
|
||||
ros2 service call /camera/toggle_ir std_srvs/srv/SetBool '{data: true}'
|
||||
```
|
||||
* `/camera/get_ir_exposure` & `/camera/get_ir_gain`
|
||||
```bash
|
||||
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_auto_exposure`
|
||||
```bash
|
||||
ros2 service call /camera/set_ir_auto_exposure std_srvs/srv/SetBool '{data: true}'
|
||||
```
|
||||
* `/camera/set_ir_exposure` & `/camera/set_ir_gain`
|
||||
```bash
|
||||
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/switch_ir`
|
||||
```bash
|
||||
ros2 service call /camera/switch_ir orbbec_camera_msgs/srv/SetString '{data: left}'
|
||||
```
|
||||
|
||||
#### All Streams
|
||||
* `/camera/get_streams_enable` & `/camera/set_streams_enable`
|
||||
```bash
|
||||
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}'
|
||||
```
|
||||
|
||||
### Sensor & Emitter Control
|
||||
|
||||
* `/camera/set_auto_white_balance` & `/camera/get_auto_white_balance`
|
||||
```bash
|
||||
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`
|
||||
```bash
|
||||
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`
|
||||
```bash
|
||||
ros2 service call /camera/set_laser_enable std_srvs/srv/SetBool '{data: true}'
|
||||
```
|
||||
* `/camera/set_ldp_enable` & `/camera/get_ldp_status`
|
||||
```bash
|
||||
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_fan_work_mode`
|
||||
```bash
|
||||
ros2 service call /camera/set_fan_work_mode orbbec_camera_msgs/srv/SetInt32 '{data: 0}'
|
||||
```
|
||||
* `/camera/set_floor_enable`
|
||||
```bash
|
||||
ros2 service call /camera/set_floor_enable std_srvs/srv/SetBool '{data: true}'
|
||||
```
|
||||
|
||||
### Device Information & Management
|
||||
|
||||
* `/camera/get_device_info`
|
||||
```bash
|
||||
ros2 service call /camera/get_device_info orbbec_camera_msgs/srv/GetDeviceInfo
|
||||
```
|
||||
* `/camera/get_sdk_version`
|
||||
```bash
|
||||
ros2 service call /camera/get_sdk_version orbbec_camera_msgs/srv/GetString
|
||||
```
|
||||
* `/camera/reboot_device`
|
||||
```bash
|
||||
ros2 service call /camera/reboot_device std_srvs/srv/Empty '{}'
|
||||
```
|
||||
|
||||
### Synchronization & Triggering
|
||||
|
||||
* `/camera/send_software_trigger`
|
||||
```bash
|
||||
ros2 service call /camera/send_software_trigger std_srvs/srv/SetBool '{data: true}'
|
||||
```* `/camera/set_reset_timestamp`
|
||||
```bash
|
||||
# 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`
|
||||
```bash
|
||||
# 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}'
|
||||
```
|
||||
|
||||
### Depth Filter Configuration
|
||||
|
||||
* `/camera/set_filter`
|
||||
```bash
|
||||
# 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]}'
|
||||
```
|
||||
|
||||
### Data Capture & Calibration Management
|
||||
|
||||
* `/camera/save_images`
|
||||
```bash
|
||||
ros2 service call /camera/save_images std_srvs/srv/Empty '{}'
|
||||
```
|
||||
* `/camera/save_point_cloud`
|
||||
```bash
|
||||
ros2 service call /camera/save_point_cloud std_srvs/srv/Empty '{}'
|
||||
```
|
||||
|
||||
> **Note**: The following services are currently supported only on the 435Le module. Each service can store only one set of data or string at a time.
|
||||
|
||||
* `/camera/write_customer_data` & `/camera/read_customer_data`
|
||||
```bash
|
||||
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 '{}'
|
||||
```
|
||||
* `/camera/set_user_calib_params` & `/camera/get_user_calib_params`
|
||||
```bash
|
||||
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 '{}'
|
||||
```
|
||||