Update README.MD
@@ -1,40 +0,0 @@
|
||||
## Aligning Depth to Color in ROS 2
|
||||
|
||||
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.
|
||||
|
||||
### Commands to Align and View Depth and Color Images
|
||||
|
||||
1. **Basic Depth to Color Alignment:**
|
||||
|
||||
To simply align the depth image to the color image, use the following command:
|
||||
|
||||
```bash
|
||||
ros2 launch orbbec_camera gemini_330_series.launch.py depth_registration:=true
|
||||
```
|
||||
|
||||
This command activates the depth registration feature without opening a viewer.
|
||||
|
||||
2. **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:
|
||||
|
||||
```bash
|
||||
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.
|
||||
|
||||
### Selecting Topics in RViz2
|
||||
|
||||
To visualize the aligned images in RViz2:
|
||||
|
||||
1. Launch RViz2 after running one of the above commands.
|
||||
2. Select the topic for the depth to color overlay image. An example topic selection is shown here:
|
||||
|
||||

|
||||
|
||||
### Example of Depth to Color Overlay
|
||||
|
||||
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:
|
||||
|
||||

|
||||
@@ -1,40 +0,0 @@
|
||||
## 在ROS 2中将深度图像与彩色图像对齐
|
||||
|
||||
本节介绍如何使用ROS 2将深度图像与彩色图像对齐,以创建叠加图像。这对于需要来自不同传感器模态的同步视觉信息的应用程序特别有用。
|
||||
|
||||
### 对齐并查看深度和彩色图像的命令
|
||||
|
||||
1. **基本的深度到彩色对齐:**
|
||||
|
||||
要简单地将深度图像对齐到彩色图像,使用以下命令:
|
||||
|
||||
```bash
|
||||
ros2 launch orbbec_camera gemini_330_series.launch.py depth_registration:=true
|
||||
```
|
||||
|
||||
此命令激活深度注册功能,但不打开查看器。
|
||||
|
||||
2. **查看深度到彩色叠加:**
|
||||
|
||||
如果您希望查看深度到彩色叠加,您需要通过使用以下命令来启用查看器:
|
||||
|
||||
```bash
|
||||
ros2 launch orbbec_camera gemini_330_series.launch.py depth_registration:=true enable_d2c_viewer:=true
|
||||
```
|
||||
|
||||
这将启动具有深度到彩色注册的相机节点,并打开一个查看器以显示叠加图像。
|
||||
|
||||
### 在RViz2中选择主题
|
||||
|
||||
要在RViz2中可视化对齐的图像:
|
||||
|
||||
1. 在运行上述命令之一后启动RViz2。
|
||||
2. 选择深度到彩色叠加图像的主题。这里显示了一个示例主题选择:
|
||||
|
||||

|
||||
|
||||
### 深度到彩色叠加示例
|
||||
|
||||
在RViz2中选择合适的主题后,您将能够看到深度到彩色叠加图像。这是它可能看起来的样子:
|
||||
|
||||

|
||||
@@ -0,0 +1,295 @@
|
||||
# All available service for camera control
|
||||
|
||||
> The name of the following service already expresses its function.
|
||||
> However, it should be noted that the corresponding `set_[ir|depth|color]*`
|
||||
> and `get[ir|right_ir|left_ir|depth|color]*` **services are only available if you set** `enable[ir|depth|color]`
|
||||
> to `true` in the stream that corresponds to the argument of the launch file.
|
||||
|
||||
* `/camera/get_color_exposure`
|
||||
|
||||
```bash
|
||||
ros2 service call /camera/get_color_exposure orbbec_camera_msgs/srv/GetInt32 '{}'
|
||||
```
|
||||
|
||||
* `/camera/get_color_gain`
|
||||
|
||||
```bash
|
||||
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`
|
||||
|
||||
```bash
|
||||
ros2 service call /camera/set_color_exposure orbbec_camera_msgs/srv/SetInt32 '{data: 1}'
|
||||
```
|
||||
|
||||
* `/camera/set_color_gain`
|
||||
|
||||
```bash
|
||||
ros2 service call /camera/set_color_gain orbbec_camera_msgs/srv/SetInt32 '{data: 64}'
|
||||
```
|
||||
|
||||
* `/camera/set_color_ae_roi`
|
||||
|
||||
```bash
|
||||
#In data_param, the first value is the Left setting, the second value is the Right setting, the third value is the Top setting, and the fourth value is the Bottom setting.
|
||||
ros2 service call /camera/set_color_ae_roi orbbec_camera_msgs/srv/SetArrays '{data_param: [0,1279,0,719]}'
|
||||
```
|
||||
|
||||
* `/camera/set_color_mirror`
|
||||
|
||||
```bash
|
||||
#v2 version is not supported yet
|
||||
ros2 service call /camera/set_color_mirror std_srvs/srv/SetBool '{data: true}'
|
||||
```
|
||||
|
||||
* `/camera/toggle_color`
|
||||
|
||||
```bash
|
||||
ros2 service call /camera/toggle_color std_srvs/srv/SetBool '{data: true}'
|
||||
```
|
||||
|
||||
* `/camera/get_depth_exposure`
|
||||
|
||||
```bash
|
||||
ros2 service call /camera/get_depth_exposure orbbec_camera_msgs/srv/GetInt32 '{}'
|
||||
```
|
||||
|
||||
* `/camera/get_depth_gain`
|
||||
|
||||
```bash
|
||||
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`
|
||||
|
||||
```bash
|
||||
ros2 service call /camera/set_depth_exposure orbbec_camera_msgs/srv/SetInt32 '{data: 3000}'
|
||||
```
|
||||
|
||||
* `/camera/set_depth_gain`
|
||||
|
||||
```bash
|
||||
#v2 version is not supported yet
|
||||
ros2 service call /camera/set_depth_gain orbbec_camera_msgs/srv/SetInt32 '{data: 64}'
|
||||
```
|
||||
|
||||
* `/camera/set_depth_ae_roi`
|
||||
|
||||
```bash
|
||||
#In data_param, the first value is the Left setting, the second value is the Right setting, the third value is the Top setting, and the fourth value is the Bottom setting.
|
||||
ros2 service call /camera/set_depth_ae_roi orbbec_camera_msgs/srv/SetArrays '{data_param: [0,847,0,479]}'
|
||||
```
|
||||
|
||||
* `/camera/set_depth_mirror`
|
||||
|
||||
```bash
|
||||
ros2 service call /camera/set_depth_mirror std_srvs/srv/SetBool '{data: true}'
|
||||
```
|
||||
|
||||
* `/camera/toggle_depth`
|
||||
|
||||
```bash
|
||||
ros2 service call /camera/toggle_depth std_srvs/srv/SetBool '{data: true}'
|
||||
```
|
||||
|
||||
* `/camera/get_ir_exposure`
|
||||
|
||||
```bash
|
||||
ros2 service call /camera/get_ir_exposure orbbec_camera_msgs/srv/GetInt32 '{}'
|
||||
```
|
||||
|
||||
* `/camera/get_ir_gain`
|
||||
|
||||
```bash
|
||||
ros2 service call /camera/get_ir_gain orbbec_camera_msgs/srv/GetInt32 '{}'
|
||||
```
|
||||
|
||||
* `/camera/set_ir_long_exposure`
|
||||
|
||||
```bash
|
||||
ros2 service call /camera/set_ir_long_exposure std_srvs/srv/SetBool '{data: true}'
|
||||
```
|
||||
|
||||
* `/camera/set_ir_auto_exposure`
|
||||
|
||||
```bash
|
||||
ros2 service call /camera/set_ir_auto_exposure std_srvs/srv/SetBool '{data: true}'
|
||||
```
|
||||
|
||||
* `/camera/set_ir_exposure`
|
||||
|
||||
```bash
|
||||
ros2 service call /camera/set_ir_exposure orbbec_camera_msgs/srv/SetInt32 '{data: 3000}'
|
||||
```
|
||||
|
||||
* `/camera/set_ir_gain`
|
||||
|
||||
```bash
|
||||
ros2 service call /camera/set_ir_gain orbbec_camera_msgs/srv/SetInt32 '{data: 64}'
|
||||
```
|
||||
|
||||
* `/camera/set_ir_mirror`
|
||||
|
||||
```bash
|
||||
#v2 version is not supported yet
|
||||
ros2 service call /camera/set_ir_mirror std_srvs/srv/SetBool '{data: true}'
|
||||
```
|
||||
|
||||
* `/camera/switch_ir`
|
||||
|
||||
```bash
|
||||
ros2 service call /camera/switch_ir orbbec_camera_msgs/srv/SetString '{data: left}'
|
||||
```
|
||||
|
||||
* `/camera/toggle_ir`
|
||||
|
||||
```bash
|
||||
ros2 service call /camera/toggle_ir std_srvs/srv/SetBool '{data: true}'
|
||||
```
|
||||
|
||||
* `/camera/get_auto_white_balance`
|
||||
|
||||
```bash
|
||||
ros2 service call /camera/get_auto_white_balance orbbec_camera_msgs/srv/GetInt32 '{}'
|
||||
```
|
||||
|
||||
* `/camera/set_auto_white_balance`
|
||||
|
||||
```bash
|
||||
ros2 service call /camera/set_auto_white_balance std_srvs/srv/SetBool '{data: true}'
|
||||
```
|
||||
|
||||
* `/camera/get_white_balance`
|
||||
|
||||
```bash
|
||||
ros2 service call /camera/get_white_balance orbbec_camera_msgs/srv/GetInt32 '{}'
|
||||
```
|
||||
|
||||
* `/camera/set_white_balance`
|
||||
|
||||
```bash
|
||||
ros2 service call /camera/set_white_balance orbbec_camera_msgs/srv/SetInt32 '{data: 2800}'
|
||||
```
|
||||
|
||||
* `/camera/set_laser_enable`
|
||||
|
||||
```bash
|
||||
ros2 service call /camera/set_laser_enable std_srvs/srv/SetBool '{data: true}'
|
||||
```
|
||||
|
||||
* `/camera/set_ldp_enable`
|
||||
|
||||
```bash
|
||||
ros2 service call /camera/set_ldp_enable std_srvs/srv/SetBool '{data: true}'
|
||||
```
|
||||
|
||||
* `/camera/get_ldp_status`
|
||||
|
||||
```bash
|
||||
ros2 service call /camera/get_ldp_status orbbec_camera_msgs/srv/GetBool '{}'
|
||||
```
|
||||
|
||||
* `/camera/get_lrm_measure_distance`
|
||||
|
||||
```bash
|
||||
ros2 service call /camera/get_lrm_measure_distance orbbec_camera_msgs/srv/GetInt32 '{}'
|
||||
```
|
||||
|
||||
* `/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 '{}'
|
||||
```
|
||||
|
||||
* `/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 '{}'
|
||||
```
|
||||
|
||||
* `/camera/set_fan_work_mode`
|
||||
|
||||
```bash
|
||||
ros2 service call /camera/set_fan_work_mode orbbec_camera_msgs/srv/SetInt32 '{data: 0}'
|
||||
```
|
||||
|
||||
* `/camera/set_filter`
|
||||
|
||||
```bash
|
||||
#filter_name is the filter name,filter_enable is whether to enable the filter switch,and filter_param is the filter parameter
|
||||
|
||||
#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: SequenceIdFilter,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: []}'
|
||||
```
|
||||
|
||||
* `/camera/set_floor_enable`
|
||||
|
||||
```bash
|
||||
ros2 service call /camera/set_floor_enable 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 param is set to laser and interleave_frame_enable param is set to true
|
||||
ros2 service call /camera/set_sync_interleaverlaser orbbec_camera_msgs/srv/SetInt32 '{data: 0}'
|
||||
```
|
||||
|
||||
* `/camera/set_sync_hosttime`
|
||||
|
||||
```
|
||||
ros2 service call /camera/set_sync_hosttime std_srvs/srv/SetBool '{data: true}'
|
||||
```
|
||||
@@ -0,0 +1,25 @@
|
||||
# All available topics
|
||||
|
||||
> The names of the following topics already express their functions.
|
||||
> However, it should be noted that the corresponding `[ir|right_ir|left_ir|depth|color]/[image_raw|camera_info|metadata]`
|
||||
> topics are only available when `enable[ir|right_ir|left_ir|depth|color]` is set to true in the stream corresponding to the startup file parameters.
|
||||
|
||||
- `/camera/color/camera_info` : The color camera info.
|
||||
- `/camera/color/image_raw`: The color stream image.
|
||||
- `/camera/color/metadata`: The color stream firmware data.
|
||||
- `/camera/depth/camera_info`: The depth camera info.
|
||||
- `/camera/depth/image_raw`: The depth stream image.
|
||||
- `/camera/depth/metadata`:The depth stream firmware data.
|
||||
- `/camera/depth/points` : The point cloud, only available when `enable_point_cloud` is `true`.
|
||||
- `/camera/depth_registered/points`: The colored point cloud, only available when `enable_colored_point_cloud`
|
||||
is `true`.
|
||||
- `/camera/depth_filter_status`: The depth sensor filter status.
|
||||
- `/camera/ir/camera_info`: The IR camera info.
|
||||
- `/camera/ir/image_raw`: The IR stream image.
|
||||
- `/camera/ir/metadata`: The IR stream firmware data.
|
||||
- `/camera/accel/sample`: Acceleration data stream `enable_sync_output_accel_gyro`turned off,`enable_accel`turned on
|
||||
- `/camera/gyro/sample`: Gyroscope data stream,enable_sync_output_accel_gyro `turned off,`enable_gyro`turned on
|
||||
- `camera/gyro_accel/sample`: Synchronized data stream of acceleration and gyroscope,`enable_sync_output_accel_gyro`
|
||||
turned on
|
||||
- `/diagnostics`: The diagnostic information of the camera, Currently, the diagnostic information only includes the
|
||||
temperature of the camera.
|
||||
@@ -0,0 +1,45 @@
|
||||
# Building a Debian Package
|
||||
|
||||
## Preparing the Environment
|
||||
|
||||
Before starting, install the required tools:
|
||||
|
||||
```bash
|
||||
sudo apt install debhelper fakeroot python3-bloom
|
||||
```
|
||||
|
||||
## Configuring ROS Dependencies
|
||||
|
||||
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:
|
||||
|
||||
```yaml
|
||||
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:
|
||||
|
||||
```bash
|
||||
yaml file:///etc/ros/rosdep/sources.list.d/00-orbbec.yaml
|
||||
```
|
||||
|
||||
Update the rosdep database to reflect these changes:
|
||||
|
||||
```bash
|
||||
rosdep update
|
||||
```
|
||||
|
||||
## Building the Package
|
||||
|
||||
Navigate to your workspace and build the project:
|
||||
|
||||
```bash
|
||||
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
|
||||
```
|
||||
@@ -0,0 +1,13 @@
|
||||
# Configuration of depth NFOV and WFOV modes
|
||||
|
||||
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.
|
||||
@@ -0,0 +1,32 @@
|
||||
# Depth work mode switch
|
||||
|
||||
Orbbec SDK ROS 2 supports the depth work mode switch. The depth work mode switch is supported by Gemini 2, Gemini 2 L,
|
||||
and Femto and Femto Bolt cameras.
|
||||
|
||||
- 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.
|
||||
|
||||
```python
|
||||
# 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:
|
||||
|
||||
```bash
|
||||
ros2 run orbbec_camera list_depth_work_mode_node
|
||||
```
|
||||
|
||||
* Example:
|
||||
|
||||
```bash
|
||||
ros2 launch orbbec_camera gemini2L.launch.py depth_work_mode:="Unbinned Dense Default"
|
||||
```
|
||||
@@ -0,0 +1,35 @@
|
||||
# Efficient intra-process communication:
|
||||
|
||||
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](https://docs.ros.org/en/rolling/Tutorials/Composition.html).
|
||||
|
||||
Further details on efficient intra-process communication can be found [here](https://docs.ros.org/en/humble/Tutorials/Intra-Process-Communication.html#efficient-intra-process-communication).
|
||||
|
||||
## Example
|
||||
|
||||
### Manually loading multiple components into the same process
|
||||
|
||||
* Start the component:
|
||||
|
||||
```bash
|
||||
ros2 run rclcpp_components component_container
|
||||
```
|
||||
* Add the wrapper:
|
||||
|
||||
```bash
|
||||
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
|
||||
|
||||
```bash
|
||||
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
|
||||
|
Before Width: | Height: | Size: 126 KiB After Width: | Height: | Size: 126 KiB |
|
Before Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 256 KiB After Width: | Height: | Size: 256 KiB |
|
Before Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 154 KiB |
|
Before Width: | Height: | Size: 143 KiB |
|
Before Width: | Height: | Size: 111 KiB After Width: | Height: | Size: 111 KiB |
|
Before Width: | Height: | Size: 736 KiB After Width: | Height: | Size: 154 KiB |
|
Before Width: | Height: | Size: 70 KiB |
|
Before Width: | Height: | Size: 116 KiB |
|
Before Width: | Height: | Size: 103 KiB |
|
Before Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 62 KiB |
@@ -0,0 +1,113 @@
|
||||
# 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_v2/releases/tag/v2.3.5) parameter settings.
|
||||
|
||||
The following are the launch parameters available:
|
||||
|
||||
* `camera_name` : Start the node namespace
|
||||
* `depth_registration` : Enables alignment of the depth frame to the color frame. This field is required when the `enable_colored_point_cloud` is set to `true`.
|
||||
* `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
|
||||
* `preset_firmware_path` : The input parameter is the perset 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
|
||||
* `point_cloud_qos`, `[color|depth|left_ir|right_ir|ir]_qos`, `[color|depth|left_ir|right_ir|ir]_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_ae_roi_[left|right|top|bottom]`,`depth_ae_roi_[left|right|top|bottom]`:Set Color and Depth auto exposure ROI.
|
||||
* `enable_point_cloud` : Enables the point cloud
|
||||
* `enable_colored_point_cloud` : Enables the RGB point cloud
|
||||
* `cloud_frame_id` : Modifying the frame_id name within the ros message
|
||||
* `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
|
||||
* `[color|depth|left_ir|right_ir|ir]_width`,`[color|depth|left_ir|right_ir|ir]_height`,`[color|depth|left_ir|right_ir|ir]_fps`,`[color|depth|left_ir|right_ir|ir]_format`: The resolution and frame rate of the sensor stream
|
||||
* `enable_color_auto_exposure_priority` : Enables the Color auto exposure priority
|
||||
* `enable_color_auto_exposure` : Enables the Color auto exposure
|
||||
* `color_exposure` : Set the Color exposure
|
||||
* `color_gain` :Set the Color gain
|
||||
* `enable_color_auto_white_balance` : Enables 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` : Set the Color brightness
|
||||
* `color_sharpness` : Set the Color sharpness
|
||||
* `color_gamma` : Set the Color gamma
|
||||
* `color_saturation` : Set the Color saturation
|
||||
* `color_constrast` : Set the Color constrast
|
||||
* `color_hue` : Set the Color hue
|
||||
* `enable_color_backlight_compenstation` : Enables the Color backlight compenstation
|
||||
* `enable_color_decimation_filter` : Enables the Color decimation filter
|
||||
* `color_decimation_filter_scale` : Set the Color decimation filter scale
|
||||
* `enable_depth_auto_exposure_priority` : Enables the Depth auto exposure priority
|
||||
* `depth_brightness` : Set the Depth brightness
|
||||
* `enable_ir_auto_exposure` : Enables the IR auto exposure
|
||||
* `ir_exposure` : Set the IR exposure
|
||||
* `ir_gain` : Set the IR gain
|
||||
* `ir_ae_max_exposure` : Set the maximum exposure value for IR auto exposure
|
||||
* `ir_brightness` : Set the IR brightness
|
||||
* `enable_sync_output_accel_gyro` : Enables the sync accel_gyro,and output IMU topic real-time data
|
||||
* `enable_accel` : Enables the Accelerometer,and output Accelerometer info topic data
|
||||
* `accel_rate` : The frequency of the accelerometer, the optional values are `1.5625hz`, `3.125hz`, `6.25hz`, `12.5hz`, `25hz`, `50hz`, `100hz`, `200hz`, `500hz`, `1khz`, `2khz`, `4khz`, `8khz`, `16khz`, `32khz`
|
||||
* `accel_range` : The range of the accelerometer, the optional values are `2g`, `4g`, `8g`, `16g`. The specific value depends on the current camera
|
||||
* `enable_gyro` : Enables the gyroscope,and output gyroscope info topic data
|
||||
* `gyro_rate` : The frequency of the gyroscope, the optional values are `1.5625hz`, `3.125hz`, `6.25hz`, `12.5hz`, `25hz`, `50hz`, `100hz`, `200hz`, `500hz`, `1khz`, `2khz`, `4khz`, `8khz`, `16khz`, `32khz`.The specific value depends on the current camera
|
||||
* `gyro_range` : The range of the gyroscope, the optional values are `16dps`, `31dps`, `62dps`, `125dps`, `250dps`, `500dps`, `1000dps`, `2000dps`. The specific value depends on the
|
||||
current camera
|
||||
* `liner_accel_cov` : Covariance of the linear acceleration
|
||||
* `angular_vel_cov` : Covariance of the angular velocity
|
||||
* `publish_tf` : Enables the TF publish
|
||||
* `tf_publish_rate` : Set Rate of the TF publication
|
||||
* `ir_info_url` : Set URL of the IR image info
|
||||
* `color_info_url` : Set URL of the color image info
|
||||
* `enumerate_net_device` : Enable automatically enumerate network devices,this parameter is usually used [net camera](../orbbec_camera/examples/net_camera/README.MD)
|
||||
* `net_device_ip` : Setting net device's IP address,this parameter is usually used [net camera](../orbbec_camera/examples/net_camera/README.MD)
|
||||
* `net_device_port` : Setting net device's port.Usually, you can set it to 8090,this parameter is usually used [net camera](../orbbec_camera/examples/net_camera/README.MD)
|
||||
* `log_level` : SDK log level, the default value is `info`, the optional values are `debug`, `info`, `warn`, `error`, `fatal`
|
||||
* `enable_publish_extrinsic` : Enables the extrinsics publish
|
||||
* `enable_d2c_viewer` : Publishes the D2C overlay image (for testing only)
|
||||
* `enable_hardware_d2d` : false: switch to software disparity convert to depth, true: switch to hardware disparity convert to depth
|
||||
* `enable_ldp` : Enables the LDP
|
||||
* `ldp_power_level` : Set power level of the LDP
|
||||
* `sync_mode` : Set sync mode.The default value is standalone,this parameter is usually used [multi camera synced](../orbbec_camera/examples/multi_camera_synced/README.MD)
|
||||
* `depth_delay_us` : The delay time of the depth image capture after receiving the capture command or trigger signal in microseconds,this parameter is usually used [multi camera synced](../orbbec_camera/examples/multi_camera_synced/README.MD)
|
||||
* `color_delay_us` : The delay time of the color image capture after receiving the capture command or trigger signal in microseconds,this parameter is usually used [multi camera synced](../orbbec_camera/examples/multi_camera_synced/README.MD)
|
||||
* `trigger2image_delay_us` : The delay time of the image capture after receiving the capture command or trigger signal in microseconds,this parameter is usually used [multi camera synced](../orbbec_camera/examples/multi_camera_synced/README.MD)
|
||||
* `trigger_out_delay_us` : The delay time of the trigger signal output after receiving the capture command or trigger signal in microseconds,this parameter is usually used [multi camera synced](../orbbec_camera/examples/multi_camera_synced/README.MD)
|
||||
* `trigger_out_enabled` : Enables the trigger out signal,this parameter is usually used [multi camera synced](../orbbec_camera/examples/multi_camera_synced/README.MD)
|
||||
* `frames_per_trigger` : The frame number of each stream after each trigger in triggering mode,this parameter is usually used [multi camera synced](../orbbec_camera/examples/multi_camera_synced/README.MD)
|
||||
* `software_trigger_period` : software trigger period in ms,this parameter is usually used [multi camera synced](../orbbec_camera/examples/multi_camera_synced/README.MD)
|
||||
* `enable_frame_sync` : Enables the frame synchronization
|
||||
* `ordered_pc` : Enable filtering of invalid point clouds
|
||||
* `enable_depth_scale` : Enables the depth scale
|
||||
* `enable_decimation_filter` : Enables the Depth decimation filter.The Depth decimation filter setting parameter is `decimation_filter_scale`
|
||||
* `enable_hdr_merge` : Enables the Depth hdr merge filter.The Depth hdr merge filter setting parameter is `hdr_merge_exposure_1`,`hdr_merge_gain_1`,`hdr_merge_exposure_2`,`hdr_merge_gain_2`
|
||||
* `enable_sequence_id_filter` : Enables the Depth sequence id filter.The Depth sequence id filter setting parameter is `sequence_id_filter_id`
|
||||
* `enable_threshold_filter` : Enables the Depth threshold filter.The Depth threshold filter setting parameter is `threshold_filter_max`,`threshold_filter_min`
|
||||
* `enable_hardware_noise_removal_filter` : Enables the Depth hardware noise removal filter
|
||||
* `enable_noise_removal_filter` : Enables the Depth software noise removal_filter.The Depth noise removal filter setting parameter is `noise_removal_filter_min_diff`,`noise_removal_filter_max_size`
|
||||
* `enable_spatial_filter` : Enables the Depth spatial filter.The Depth spatial filter setting parameter is `spatial_filter_alpha`,`spatial_filter_diff_threshold`,`spatial_filter_magnitude`,`spatial_filter_radius`
|
||||
* `enable_temporal_filter` : Enables the Depth temporal filter.The Depth temporal filter setting parameter is `temporal_filter_diff_threshold`,`temporal_filter_weight`
|
||||
* `enable_hole_filling_filter` : Enables the Depth hole filling filter.The Depth hole filling filter setting parameter is `hole_filling_filter_mode`
|
||||
* `align_mode` : The alignment mode to be used. Options are `HW` for hardware alignment and `SW` for software alignment
|
||||
* `diagnostic_period` : Diagnostic period in seconds
|
||||
* `enable_laser` : Enables the laser. The default value is `true`
|
||||
* `depth_precision` : The depth precision should be in the format `1mm`. The default value is `1mm`
|
||||
* `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/). Please refer to the table below to set the `device_preset` value based on your use case. The value should be one of the preset names listed [in the table](./predefined_presets.md)
|
||||
* `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. This setting aims to prevent USB 3.0 devices from being incorrectly recognized as USB 2.0. It is recommended to set this parameter to `false` when using a USB 2.0 connection to avoid unnecessary resets
|
||||
* `laser_energy_level` : Set the laser energy level
|
||||
* enable_sync_host_time : Enables synchronization of the host time with the camera time. The default value is `true`, if use global time, Set to `false`. Some old devices may not support this feature
|
||||
* `time_domain` : Select timestamp type: device , global and system
|
||||
* `enable_color_undistortion` : Enables the Color undistortion
|
||||
* `config_file_path` : The path to the YAML configuration file. The default value is `""`. If the configuration file is not specified,the default parameters from the launch file will be used. If you want to use a custom configuration file, please refer to `gemini_330_series.launch.py`.`enable_heartbeat` enables the heartbeat function, which is set to `false` by default. If set to `true`, the camera node will send heartbeat signals to the firmware, and if hardware logging is desired, it should also be set to `true`
|
||||
* `enable_heartbeat` : Enables the heartbeat function, which is set to `false` by default. If set to `true`, the camera node will send heartbeat signals to the firmware, and if hardware logging is desired, it should also be set to `true`
|
||||
* `gmsl_trigger_fps` : Set gmsl trigger fps,this parameter is usually used [gmsl camera](../orbbec_camera/examples/gmsl_camera/README.MD)
|
||||
* `enable_gmsl_trigger` : Enables the gmsl trigger out signal,this parameter is usually used [gmsl camera](../orbbec_camera/examples/gmsl_camera/README.MD)
|
||||
* `disparity_range_mode` : Disparity search length,this parameter is usually used [disparity search offset](../orbbec_camera/examples/disparity_search_offset/README.MD)
|
||||
* `disparity_search_offset` : Set Disparity search offset value,this parameter is usually used [disparity search offset](../orbbec_camera/examples/disparity_search_offset/README.MD)
|
||||
* `disparity_offset_config` : Disparity search offset interleave frames,this parameter is usually used [disparity search offset](../orbbec_camera/examples/disparity_search_offset/README.MD)
|
||||
* `frame_aggregate_mode` : Set frame aggregate output mode.The optional values are `full_frame`,`color_frame`,`ANY`,`disable`
|
||||
* `interleave_ae_mode` : Set laser or hdr interleave,this parameter is usually used [interleave ae mode](../orbbec_camera/examples/interleave_ae_mode/README.MD)
|
||||
* `interleave_frame_enable` : Whether to enable interleave frame mode,this parameter is usually used [interleave ae mode](../orbbec_camera/examples/interleave_ae_mode/README.MD)
|
||||
* `interleave_skip_enable` : Whether to enable skip frames,this parameter is usually used [interleave ae mode](../orbbec_camera/examples/interleave_ae_mode/README.MD)
|
||||
* `interleave_skip_index` : Set skip pattern IR or flood IR,this parameter is usually used [interleave ae mode](../orbbec_camera/examples/interleave_ae_mode/README.MD)
|
||||
* `[hdr|laser]_index[0|1]_[laser_control|depth_exposure|depth_gain|ir_brightness|ae_max_exposure]`:In interleave frame mode, set the 0th and 1st frame parameters of hdr or laser interleaving frames,this parameter is usually used [interleave ae mode](../orbbec_camera/examples/interleave_ae_mode/README.MD)
|
||||
|
||||
**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.*
|
||||
@@ -1,108 +0,0 @@
|
||||
## Using Multiple Cameras with the Orbbec ROS 2 Package
|
||||
|
||||
This section describes how to configure and use multiple Orbbec cameras simultaneously in a ROS 2 environment.
|
||||
|
||||
### Identifying Camera USB Ports
|
||||
|
||||
#### Script to List Connected Cameras
|
||||
|
||||
To determine which USB ports the cameras are connected to, you can use the following bash script. This script lists all Orbbec devices attached to the system along with their USB port and serial number.
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
|
||||
VID="2bc5"
|
||||
|
||||
for dev in /sys/bus/usb/devices/*; do
|
||||
if [ -e "$dev/idVendor" ]; then
|
||||
vid=$(cat "$dev/idVendor")
|
||||
if [ "$vid" == "${VID}" ]; then
|
||||
port=$(basename $dev)
|
||||
product=$(cat "$dev/product" 2>/dev/null) # product name
|
||||
serial=$(cat "$dev/serial" 2>/dev/null) # serial number
|
||||
echo "Found Orbbec device $product, usb port $port, serial number $serial"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
```
|
||||
|
||||
Save this script to a file and execute it in your terminal to output a list of connected cameras.
|
||||
|
||||
### Launching Multiple Cameras
|
||||
|
||||
#### Setup for Multiple Camera Launch
|
||||
|
||||
You can launch multiple cameras by specifying different USB ports for each camera. Below is an example Python script that uses the ROS 2 launch system to start two cameras with individual configurations.
|
||||
|
||||
```python
|
||||
from launch import LaunchDescription
|
||||
from launch.actions import DeclareLaunchArgument, IncludeLaunchDescription, GroupAction, ExecuteProcess
|
||||
from launch.launch_description_sources from ament_index_python.packages import get_package_share_directory
|
||||
import os
|
||||
|
||||
def generate_launch_description():
|
||||
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, 'gemini_330_series.launch.py')),
|
||||
launch_arguments={'camera_name': 'camera_01', 'usb_port': '2-3.4.4.4.1', 'device_num': '2', 'sync_mode': 'free_run'}.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-3.4.4.4.3', 'device_num': '2', 'sync_mode': 'free_run'}.items()
|
||||
)
|
||||
|
||||
ld = LaunchDescription([
|
||||
GroupAction([launch1_include]),
|
||||
GroupAction([launch2_include])
|
||||
])
|
||||
|
||||
return ld
|
||||
```
|
||||
|
||||
#### Running the Launch File
|
||||
|
||||
To execute the launch configuration for multiple cameras, use the command:
|
||||
|
||||
```bash
|
||||
ros2 launch orbbec_camera multi_camera.launch.py
|
||||
```
|
||||
|
||||
### Configuring the TF Tree for Multiple Cameras
|
||||
|
||||
#### Example TF Configuration for Two Cameras
|
||||
|
||||
When using multiple cameras, it's essential to calibrate them and publish a static TF tree for each camera. The following Python script configures the TF tree based on your calibration results:
|
||||
|
||||
```python
|
||||
from launch import LaunchDescription
|
||||
from launch_ros.actions import Node
|
||||
|
||||
def generate_launch_description():
|
||||
ld = LaunchDescription([
|
||||
Node(
|
||||
package='tf2_ros',
|
||||
executable='static_transform_publisher',
|
||||
name='camera_01_tf',
|
||||
arguments=['0', '0', '0', '0', '0', '0', 'base_link', 'camera_01_link'],
|
||||
output='screen'
|
||||
),
|
||||
Node(
|
||||
package='tf2_ros',
|
||||
executable='static_transform_publisher',
|
||||
name='camera_02_tf',
|
||||
arguments=['0', '0', '0', '0', '0', '0', 'base_link', 'camera_02_link'],
|
||||
output='screen'
|
||||
)
|
||||
])
|
||||
|
||||
return ld
|
||||
```
|
||||
|
||||
Save this configuration as `multi_camera_tf.launch.py` in the launch directory of the Orbbec camera package. To run it, use:
|
||||
|
||||
```bash
|
||||
ros2 launch orbbec_camera multi_camera_tf.launch.py
|
||||
```
|
||||
@@ -1,109 +0,0 @@
|
||||
## 使用Orbbec ROS 2包配置多个摄像头
|
||||
|
||||
本节介绍如何在ROS 2环境中同时配置和使用多个Orbbec摄像头。
|
||||
|
||||
### 识别摄像头USB端口
|
||||
|
||||
#### 列出连接的摄像头的脚本
|
||||
|
||||
要确定摄像头连接到哪些USB端口,您可以使用以下bash脚本。该脚本列出了连接到系统的所有Orbbec设备及其USB端口和序列号。
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
|
||||
VID="2bc5"
|
||||
|
||||
for dev in /sys/bus/usb/devices/*; do
|
||||
if [ -e "$dev/idVendor" ]; then
|
||||
vid=$(cat "$dev/idVendor")
|
||||
if [ "$vid" == "${VID}" ]; then
|
||||
port=$(basename $dev)
|
||||
product=$(cat "$dev/product" 2>/dev/null) # 产品名称
|
||||
serial=$(cat "$dev/serial" 2>/dev/null) # 序列号
|
||||
echo "发现Orbbec设备 $product,usb端口 $port,序列号 $serial"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
```
|
||||
|
||||
将此脚本保存为一个文件,并在您的终端中执行,以输出连接的摄像头列表。
|
||||
|
||||
### 启动多个摄像头
|
||||
|
||||
#### 多摄像头启动配置
|
||||
|
||||
您可以通过为每个摄像头指定不同的USB端口来启动多个摄像头。下面是一个使用ROS 2启动系统启动两个摄像头的Python脚本示例。
|
||||
|
||||
```python
|
||||
from launch import LaunchDescription
|
||||
from launch.actions import DeclareLaunchArgument, IncludeLaunchDescription, GroupAction, ExecuteProcess
|
||||
from launch.launch_description_sources import PythonLaunchDescriptionSource
|
||||
from ament_index_python.packages import get_package_share_directory
|
||||
import os
|
||||
|
||||
def generate_launch_description():
|
||||
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, 'gemini_330_series.launch.py')),
|
||||
launch_arguments={'camera_name': 'camera_01', 'usb_port': '2-3.4.4.4.1', 'device_num': '2', 'sync_mode': 'free_run'}.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-3.4.4.4.3', 'device_num': '2', 'sync_mode': 'free_run'}.items()
|
||||
)
|
||||
|
||||
ld = LaunchDescription([
|
||||
GroupAction([launch1_include]),
|
||||
GroupAction([launch2_include])
|
||||
])
|
||||
|
||||
return ld
|
||||
```
|
||||
|
||||
#### 运行启动文件
|
||||
|
||||
要执行多摄像头的启动配置,请使用命令:
|
||||
|
||||
```bash
|
||||
ros2 launch orbbec_camera multi_camera.launch.py
|
||||
```
|
||||
|
||||
### 配置多摄像头的TF树
|
||||
|
||||
#### 两个摄像头的TF配置示例
|
||||
|
||||
使用多个摄像头时,校准它们并为每个摄像头发布静态TF树是必不可少的。以下Python脚本基于您的校准结果配置TF树:
|
||||
|
||||
```python
|
||||
from launch import LaunchDescription
|
||||
from launch_ros.actions import Node
|
||||
|
||||
def generate_launch_description():
|
||||
ld = LaunchDescription([
|
||||
Node(
|
||||
package='tf2_ros',
|
||||
executable='static_transform_publisher',
|
||||
name='camera_01_tf',
|
||||
arguments=['0', '0', '0', '0', '0', '0', 'base_link', 'camera_01_link'],
|
||||
output='screen'
|
||||
),
|
||||
Node(
|
||||
package='tf2_ros',
|
||||
executable='static_transform_publisher',
|
||||
name='camera_02_tf',
|
||||
arguments=['0', '0', '0', '0', '0', '0', 'base_link', 'camera_02_link'],
|
||||
output='screen'
|
||||
)
|
||||
])
|
||||
|
||||
return ld
|
||||
```
|
||||
|
||||
将此配置保存为 `multi_camera_tf.launch.py` 在Orbbec摄像头包的启动目录中。运行它,请使用:
|
||||
|
||||
```bash
|
||||
ros2 launch orbbec_camera multi_camera_tf.launch.py
|
||||
```
|
||||
@@ -1,106 +0,0 @@
|
||||
## Multi-camera synchronous image storage and script analysis
|
||||
|
||||
This section describes how to use multiple Orbbec cameras to store images synchronously in a ROS 2 environment and use scripts to parse the data.
|
||||
|
||||
### Connection preparation
|
||||
|
||||
Please follow the instructions to connect multiple Orbbec cameras and Multi-Camera Sync Hub Pro.
|
||||
|
||||
* For detailed guidance on Multi-Camera Sync Hub Pro, you can refer to [Set up cameras for external synchronization](https://www.orbbec.com/docs/set-up-cameras-for-external-synchronization_v1-2/).
|
||||
* Example of connecting multiple cameras to Multi-Camera Sync Hub Pro.
|
||||
|
||||

|
||||
|
||||
### Multi-camera synchronous image storage
|
||||
|
||||
#### Check the USB port of your device
|
||||
|
||||
```bash
|
||||
ros2 run orbbec_camera list_devices_node
|
||||
```
|
||||
|
||||

|
||||
|
||||
#### **Parameter configuration**
|
||||
|
||||
##### multi_camera_synced.launch.py
|
||||
|
||||
1. `usb_port` is set to the USB port of the device.
|
||||
2. `device_num` is set to 2, indicating that two cameras are started.
|
||||
3. `sync_mode` is set to primary, indicating that the camera device is set to host mode.
|
||||
4. The slave sets `trigger_out_enabled` to false.
|
||||
|
||||

|
||||
|
||||
##### multi_save_rgbir_params.json
|
||||
|
||||
Configure USB ports and names for multiple devices.
|
||||
|
||||

|
||||
|
||||
##### camera_params.yaml
|
||||
|
||||
Enable the left IR camera.
|
||||
|
||||
`enable_left_ir: true`
|
||||
|
||||
##### start_multi_sync.sh
|
||||
|
||||
`{data: 100}` means that each stream of each camera stores 100 images.
|
||||
|
||||

|
||||
|
||||
#### Running
|
||||
|
||||
Start multiple Orbbec cameras (select 1).
|
||||
|
||||
* On terminal 1
|
||||
|
||||
```bash
|
||||
cd ~/ros2_ws/src/OrbbecSDK_ROS2/orbbec_camera/tools
|
||||
sudo chmod +x start_multi_sync.sh
|
||||
bash start_multi_sync.sh
|
||||
```
|
||||
|
||||

|
||||
|
||||
Save the image synchronously (select 4).
|
||||
|
||||
* On terminal 2
|
||||
|
||||
```bash
|
||||
cd ~/ros2_ws/src/OrbbecSDK_ROS2/orbbec_camera/tools
|
||||
bash start_multi_sync.sh
|
||||
```
|
||||
|
||||
### Script parsing
|
||||
|
||||
`multicamera_sync` - save the image and analysis script storage directory.
|
||||
|
||||
* `ouput` - save the image directory
|
||||
* `Python` - analysis script directory
|
||||
|
||||
Note: `multicamera_sync` needs to be copied to the current workspace directory (same level as the `install` directory).
|
||||
|
||||
#### Configuration Files
|
||||
|
||||
* `Config.ini` configures the camera's actual frame rate and maximum error timestamp threshold.
|
||||
* `DevicesInfo.txt` configures the number of cameras and the camera's pid, vid, SN number and other parameters.
|
||||
* `StreamProfileInfo.txt` configures the camera resolution, frame rate, and encoding format.
|
||||
|
||||
Note: `DevicesInfo.txt` and `StreamProfileInfo.txt` are files required by the parsing script and need to be copied to the same directory as the `TotalModeFrames` folder (The `TotalModeFrames` directory is created by the image saving script and is used to store image data collected synchronously by multiple cameras).
|
||||
|
||||
#### Running
|
||||
|
||||
Run the parsing script to parse the images stored synchronously by multiple cameras.
|
||||
|
||||
```bash
|
||||
cd ~/ros2_ws/multicamera_sync/Python
|
||||
python3 SyncFramesMain.py
|
||||
```
|
||||
|
||||
#### Output
|
||||
|
||||
* `matchFrames`: Incomplete dataset of the same camera group, camera image information is missing.
|
||||
* `notMatchFrames`: Complete dataset of the same camera group.
|
||||
* `abnormal`: The same set of complete data sets of cameras, and the camera synchronization time exceeds the parameter `tspRangeThreshold` set in `Config.ini`.
|
||||
@@ -1,106 +0,0 @@
|
||||
## 多机同步存图及脚本解析
|
||||
|
||||
本节介绍如何在ROS 2环境中使用多个Orbbec摄像头同步存图,并使用脚本解析数据。
|
||||
|
||||
### 连接准备
|
||||
|
||||
请根据指导连接多个Orbbec摄像头和多机同步器。
|
||||
|
||||
* 有关多机同步器的详细指导,请参阅[设置相机进行外部同步](https://www.orbbec.com/docs/set-up-cameras-for-external-synchronization_v1-2/)。
|
||||
* 多个Orbbec摄像头和多机同步器的连接示例。
|
||||
|
||||

|
||||
|
||||
### 多机同步存图
|
||||
|
||||
#### 查看设备的USB端口
|
||||
|
||||
```bash
|
||||
ros2 run orbbec_camera list_devices_node
|
||||
```
|
||||
|
||||

|
||||
|
||||
#### 参数配置
|
||||
|
||||
##### multi_camera_synced.launch.py
|
||||
|
||||
1. `usb_port` 设置为设备的USB端口。
|
||||
2. `device_num` 设置为2,说明启动了两个相机。
|
||||
3. `sync_mode` 设置为 primary,说明相机设备设置为主机模式。
|
||||
4. 从机设置 `trigger_out_enabled` 为 false。
|
||||
|
||||

|
||||
|
||||
##### multi_save_rgbir_params.json
|
||||
|
||||
配置多个设备的USB端口和名称。
|
||||
|
||||

|
||||
|
||||
##### camera_params.yaml
|
||||
|
||||
启用左IR摄像头。
|
||||
|
||||
`enable_left_ir: true`
|
||||
|
||||
##### start_multi_sync.sh
|
||||
|
||||
`{data: 100}` 表示每台相机的每个流存储100张图片。
|
||||
|
||||

|
||||
|
||||
#### 启动多机同步存图
|
||||
|
||||
启动多个Orbbec摄像头(选择1)。
|
||||
|
||||
* 终端1
|
||||
|
||||
```bash
|
||||
cd ~/ros2_ws/src/OrbbecSDK_ROS2/orbbec_camera/tools
|
||||
sudo chmod +x start_multi_sync.sh
|
||||
bash start_multi_sync.sh
|
||||
```
|
||||
|
||||

|
||||
|
||||
同步保存图片(选择4)。
|
||||
|
||||
* 终端2
|
||||
|
||||
```bash
|
||||
cd ~/ros2_ws/src/OrbbecSDK_ROS2/orbbec_camera/tools
|
||||
bash start_multi_sync.sh
|
||||
```
|
||||
|
||||
### 脚本解析
|
||||
|
||||
`multicamera_sync` - 保存图片以及解析脚本存放目录。
|
||||
|
||||
* `ouput` - 保存图片目录
|
||||
* `Python` - 解析脚本目录
|
||||
|
||||
注意:`multicamera_sync` 需要复制到当前工作空间目录(与 `install` 目录同级)。
|
||||
|
||||
#### 配置文件
|
||||
|
||||
* `Config.ini` 配置相机实际帧率和最大误差时间戳阈值。
|
||||
* `DevicesInfo.txt` 配置相机数量以及相机的pid、vid、SN号等参数。
|
||||
* `StreamProfileInfo.txt` 配置相机分辨率、帧率以及编码格式。
|
||||
|
||||
注意:`DevicesInfo.txt` 和 `StreamProfileInfo.txt` 是解析脚本所需要的文件,需要复制到 `TotalModeFrames` 文件夹同级目录( `TotalModeFrames` 目录由存图脚本创建,用于存储多相机同步采集的图像数据)。
|
||||
|
||||
#### 运行脚本
|
||||
|
||||
运行解析脚本解析多机同步存储的图片。
|
||||
|
||||
```bash
|
||||
cd ~/ros2_ws/multicamera_sync/Python
|
||||
python3 SyncFramesMain.py
|
||||
```
|
||||
|
||||
#### 输出结果
|
||||
|
||||
* `matchFrames`:同一组摄像头不完整的数据集,存在摄像头图片信息缺失。
|
||||
* `notMatchFrames`:同一组摄像头完整的数据集。
|
||||
* `abnormal`:同一组摄像头完整的数据集,且相机同步时间超过 `Config.ini` 设置的参数 `tspRangeThreshold`。
|
||||
@@ -1,53 +0,0 @@
|
||||
## 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, similarly to the initial camera node setup discussed in the [Starting Camera Node](./start_camera_node.MD) document.
|
||||
|
||||
### 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:
|
||||
|
||||

|
||||
@@ -1,53 +0,0 @@
|
||||
## 在ROS 2中启用和可视化点云
|
||||
|
||||
本节演示如何从相机节点启用点云数据输出,并使用RViz2进行可视化,类似于之前讨论的[启动相机节点](./start_camera_node.MD)文档中的初始相机节点设置。
|
||||
|
||||
### 启用深度点云
|
||||
|
||||
#### 启用深度点云的命令
|
||||
|
||||
要激活深度信息的点云数据流,请使用以下命令:
|
||||
|
||||
```bash
|
||||
ros2 launch orbbec_camera gemini_330_series.launch.py enable_point_cloud:=true
|
||||
```
|
||||
|
||||
#### 在RViz2中可视化深度点云
|
||||
|
||||
运行上述命令后,执行以下步骤来可视化深度点云:
|
||||
|
||||
1. 打开RViz2。
|
||||
2. 添加一个`PointCloud2`显示。
|
||||
3. 选择`/camera/depth/points`主题进行可视化。
|
||||
4. 将固定帧设置为`camera_link`以正确对齐数据。
|
||||
|
||||
##### 示例可视化
|
||||
|
||||
以下是在RViz2中可能看到的深度点云的样子:
|
||||
|
||||

|
||||
|
||||
### 启用彩色点云
|
||||
|
||||
#### 启用彩色点云的命令
|
||||
|
||||
要启用彩色点云功能,请输入以下命令:
|
||||
|
||||
```bash
|
||||
ros2 launch orbbec_camera gemini_330_series.launch.py enable_colored_point_cloud:=true
|
||||
```
|
||||
|
||||
#### 在RViz2中可视化彩色点云
|
||||
|
||||
要可视化彩色点云数据:
|
||||
|
||||
1. 在执行命令后启动RViz2。
|
||||
2. 添加一个`PointCloud2`显示面板。
|
||||
3. 从列表中选择`/camera/depth_registered/points`主题。
|
||||
4. 确保固定帧设置为`camera_link`。
|
||||
|
||||
##### 示例可视化
|
||||
|
||||
在RViz2中彩色点云的结果应类似于这样:
|
||||
|
||||

|
||||
@@ -0,0 +1,15 @@
|
||||
# Predefined presets
|
||||
|
||||
| Preset | Features | Recommended use cases |
|
||||
| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| Default | - Best visual perception``- Overall good performance in accuracy, fill rate, tiny objects, etc. | - Generic `<br>`- Robotics |
|
||||
| Hand | - Clear hand and finger edges | - Gesture recognition |
|
||||
| High Accuracy | - Depth of high confidence `<br>`- Barely noise depth values `<br>`- Lower fill rate | - Collision avoidance `<br>`- Object scanning |
|
||||
| High Density | - Higher fill rate `<br>`- More tiny objects `<br>`- May suffer from noise depth values | - Object recognition `<br>`- Pick & place `<br>`- Foreground & background animation |
|
||||
| Medium Density | - Balanced performance in fill rate and accuracy `<br>`- In comparison to Default: lower fill rate, better edge quality | - Generic and alternative to Default |
|
||||
| Custom | - User defined Preset `<br>`- Derived from Presets above, with customized modifications, e.g. a new configuration for the post-processing pipeline, modified mean intensity set point of depth AE function, etc. | - Better depth performance achieved using customized configurations in comparison to using predefined presets `<br>`- For well-established custom configurations |
|
||||
|
||||
Choose the appropriate preset name based on your specific use case and set it as the value for the `device_preset`
|
||||
parameter.
|
||||
|
||||
|
||||
@@ -1,83 +0,0 @@
|
||||
## Starting the Camera Node in ROS 2
|
||||
|
||||
This guide provides instructions on how to launch the camera node with a colored point cloud feature enabled using ROS 2.
|
||||
|
||||
### Command to Start the Node
|
||||
|
||||
To start the camera node, execute the following command in your terminal:
|
||||
|
||||
```bash
|
||||
ros2 launch orbbec_camera gemini_330_series.launch.py enable_colored_point_cloud:=true
|
||||
```
|
||||
|
||||
This command initiates the camera node and enables the colored point cloud.
|
||||
|
||||
### Published Topics
|
||||
|
||||
Once the camera node is running, it will publish data on several ROS topics. Below is a list of the available topics:
|
||||
|
||||
- **IMU Data and IMU Information:**
|
||||
- `camera/accel/imu_info`
|
||||
- `camera/gyro/imu_info`
|
||||
- `camera/gyro_accel/sample`
|
||||
|
||||
- **Color Camera Topics:**
|
||||
- `/camera/color/camera_info`
|
||||
- `/camera/color/image_raw`
|
||||
- `/camera/color/image_raw/compressed`
|
||||
- `/camera/color/image_raw/compressedDepth`
|
||||
- `/camera/color/image_raw/theora`
|
||||
- `/camera/color/metadata`
|
||||
|
||||
- **Depth Camera Topics:**
|
||||
- `/camera/depth/camera_info`
|
||||
- `/camera/depth/image_raw`
|
||||
- `/camera/depth/image_raw/compressed`
|
||||
- `/camera/depth/image_raw/compressedDepth`
|
||||
- `/camera/depth/image_raw/theora`
|
||||
- `/camera/depth/metadata`
|
||||
- `/camera/depth/points`
|
||||
- `/camera/depth_filter_status`
|
||||
- `/camera/depth_registered/points`
|
||||
- `/camera/depth_to_color`
|
||||
- `/camera/depth_to_left_ir`
|
||||
- `/camera/depth_to_right_ir`
|
||||
|
||||
- **Infrared Camera Topics:**
|
||||
- `/camera/left_ir/camera_info`
|
||||
- `/camera/left_ir/image_raw`
|
||||
- `/camera/left_ir/image_raw/compressed`
|
||||
- `/camera/left_ir/image_raw/compressedDepth`
|
||||
- `/camera/left_ir/image_raw/theora`
|
||||
- `/camera/left_ir/metadata`
|
||||
- `/camera/right_ir/camera_info`
|
||||
- `/camera/right_ir/image_raw`
|
||||
- `/camera/right_ir/image_raw/compressed`
|
||||
- `/camera/right_ir/image_raw/compressedDepth`
|
||||
- `/camera/right_ir/image_raw/theora`
|
||||
- `/camera/right_ir/metadata`
|
||||
|
||||
- **Miscellaneous Topics:**
|
||||
- `/diagnostics`
|
||||
- `/parameter_events`
|
||||
- `/rosout`
|
||||
- `/rosout_agg`
|
||||
|
||||
### Visualizing Data in RViz2
|
||||
|
||||
To view the PointCloud or Image data, use RViz2:
|
||||
|
||||
1. Launch RViz2.
|
||||
2. Select the topic you wish to visualize from the list of published topics.
|
||||
3. Add the selected topic to RViz2 to start viewing the data.
|
||||
|
||||
### Example Visualizations
|
||||
|
||||
Here are examples of how the visualization might appear in RViz2:
|
||||
|
||||
- **PointCloud Visualization**
|
||||

|
||||
|
||||
- **Image Data Visualization**
|
||||

|
||||
|
||||
@@ -1,82 +0,0 @@
|
||||
## 在ROS 2中启动相机节点
|
||||
|
||||
本指南提供了使用ROS 2启动启用彩色点云功能的相机节点的指令。
|
||||
|
||||
### 启动节点的命令
|
||||
|
||||
要启动相机节点,请在终端执行以下命令:
|
||||
|
||||
```bash
|
||||
ros2 launch orbbec_camera gemini_330_series.launch.py enable_colored_point_cloud:=true
|
||||
```
|
||||
|
||||
此命令将启动相机节点并启用彩色点云。
|
||||
|
||||
### 发布的主题
|
||||
|
||||
一旦相机节点运行,它将在多个ROS主题上发布数据。以下是可用主题的列表:
|
||||
|
||||
- **IMU数据和IMU信息:**
|
||||
- `camera/accel/imu_info`
|
||||
- `camera/gyro/imu_info`
|
||||
- `camera/gyro_accel/sample`
|
||||
|
||||
- **彩色相机主题:**
|
||||
- `/camera/color/camera_info`
|
||||
- `/camera/color/image_raw`
|
||||
- `/camera/color/image_raw/compressed`
|
||||
- `/camera/color/image_raw/compressedDepth`
|
||||
- `/camera/color/image_raw/theora`
|
||||
- `/camera/color/metadata`
|
||||
|
||||
- **深度相机主题:**
|
||||
- `/camera/depth/camera_info`
|
||||
- `/camera/depth/image_raw`
|
||||
- `/camera/depth/image_raw/compressed`
|
||||
- `/camera/depth/image_raw/compressedDepth`
|
||||
- `/camera/depth/image_raw/theora`
|
||||
- `/camera/depth/metadata`
|
||||
- `/camera/depth/points`
|
||||
- `/camera/depth_filter_status`
|
||||
- `/camera/depth_registered/points`
|
||||
- `/camera/depth_to_color`
|
||||
- `/camera/depth_to_left_ir`
|
||||
- `/camera/depth_to_right_ir`
|
||||
|
||||
- **红外相机主题:**
|
||||
- `/camera/left_ir/camera_info`
|
||||
- `/camera/left_ir/image_raw`
|
||||
- `/camera/left_ir/image_raw/compressed`
|
||||
- `/camera/left_ir/image_raw/compressedDepth`
|
||||
- `/camera/left_ir/image_raw/theora`
|
||||
- `/camera/left_ir/metadata`
|
||||
- `/camera/right_ir/camera_info`
|
||||
- `/camera/right_ir/image_raw`
|
||||
- `/camera/right_ir/image_raw/compressed`
|
||||
- `/camera/right_ir/image_raw/compressedDepth`
|
||||
- `/camera/right_ir/image_raw/theora`
|
||||
- `/camera/right_ir/metadata`
|
||||
|
||||
- **杂项主题:**
|
||||
- `/diagnostics`
|
||||
- `/parameter_events`
|
||||
- `/rosout`
|
||||
- `/rosout_agg`
|
||||
|
||||
### 在RViz2中可视化数据
|
||||
|
||||
要查看点云或图像数据,请使用RViz2:
|
||||
|
||||
1. 启动RViz2。
|
||||
2. 从发布的主题列表中选择您希望可视化的主题。
|
||||
3. 将选定的主题添加到RViz2中开始查看数据。
|
||||
|
||||
### 示例可视化
|
||||
|
||||
以下是在RViz2中可视化可能出现的示例:
|
||||
|
||||
- **点云可视化**
|
||||

|
||||
|
||||
- **图像数据可视化**
|
||||

|
||||