Add net_camera examples

This commit is contained in:
jj
2025-02-26 16:41:26 +08:00
parent dd8352d568
commit e3cd971152
8 changed files with 209 additions and 117 deletions
+21 -17
View File
@@ -1,27 +1,31 @@
# lower_cpu_usage # [benchmark](./benchmark)
How to reduce CPU usage of one or more cameras in OrbbecSDK_ROS2. The goal of this tool is to benchmark the performance of various OrbbecSDK_ROS2 camera configurations. The benchmark results depend on the camera and settings used.(Currently only works with ROS2 Humble).
# multi_camera_synced # [disparity_search_offset](./disparity_search_offset)
How to use multi-camera synced in OrbbecSDK_ROS2.
# interleave_ae_mode
How to use interleave_ae in OrbbecSDK_ROS2.
# disparity_search_offset
How to use disparity_search_offset in OrbbecSDK_ROS2. How to use disparity_search_offset in OrbbecSDK_ROS2.
# gmsl_camera # [gmsl_camera](./gmsl_camera)
How to use gmsl_camera in OrbbecSDK_ROS2. How to use gmsl_camera in OrbbecSDK_ROS2.Show how to start Single GMSL camera ,Multi GMSL camera , and Multi GMSL camera synced.
# multi_camera_synced_verification_tool # [interleave_ae_mode](./interleave_ae_mode)
How to verify the synchronization accuracy of multi-camera synced. How to use interleave_ae in OrbbecSDK_ROS2.Show how to use interleave_ae in Gemini 330 series cameras.
# benchmark # [lower_cpu_usage](./lower_cpu_usage)
The goal of this tool is to benchmark the performance of various OrbbecSDK_ROS2 camera configurations. The benchmark results depend on the camera and settings used.(Currently only works with ROS2 Humble). How to reduce CPU usage of one or more cameras in OrbbecSDK_ROS2.
# [multi_camera_synced](./multi_camera_synced)
How to use multi-camera synced in OrbbecSDK_ROS2.
# [multi_camera_synced_verification_tool](./multi_camera_synced_verification_tool)
How to verify the synchronization accuracy of multi-camera synced.Show how to use the save_rgbir tool and Python script to analyze the synchronization between cameras and between different cameras.
# [net_camera](./net_camera)
How to use net_camera in OrbbecSDK_ROS2.Show how to start Single Net camera ,Multi Net camera.
@@ -12,15 +12,13 @@ The definition of disparity search range: For any pixel *(u_l, v)* in the left i
The disparity_search_offset related parameters are set in [gemini_330_series.launch.py](../../launch/gemini_330_series.launch.py) The disparity_search_offset related parameters are set in [gemini_330_series.launch.py](../../launch/gemini_330_series.launch.py)
disparity_range_mode : Disparity search length,can only be set to 64, 128 and 256. * `disparity_range_mode` : Disparity search length,can only be set to 64, 128 and 256.
* `disparity_search_offset` : Disparity search offset value,Disparity search offset value, can be set from 0 to 127.
disparity_search_offset : Disparity search offset value,Disparity search offset value, can be set from 0 to 127. * `disparity_offset_config` : Disparity search offset interleave frames.
* `offset_index0` : Frame 0 disparity search offset value.
disparity_offset_config : Disparity search offset interleave frames. * `offset_index1` : Frame 1 disparity search offset value.
offset_index0 : Frame 0 disparity search offset value.
offset_index1 : Frame 1 disparity search offset value.
| disparity range mode | disparity search offset | Minimum depth of inclined wall (mm) | | disparity range mode | disparity search offset | Minimum depth of inclined wall (mm) |
| :------------------: | :---------------------: | :---------------------------------: | | :------------------: | :---------------------: | :---------------------------------: |
+2 -3
View File
@@ -34,9 +34,8 @@ In addition, GMSL multi-camera synced does not require Multi-Camera Sync Hub Pro
### Additional Parameter Settings ### Additional Parameter Settings
gmsl_trigger_fps : set hardware soc trigger source frame rate. * `gmsl_trigger_fps` : set hardware soc trigger source frame rate.
* `enable_gmsl_trigger` : enable hardware soc trigger.
enable_gmsl_trigger : enable hardware soc trigger.
### Run the launch ### Run the launch
@@ -1,6 +1,6 @@
# Using interleave_ae with Gemini330 series cameras # Using interleave_ae with Gemini330 series cameras
> This section describes how to use interleave_ae in Gemini330 series cameras (minimum camera firmware version [1.4.00](https://www.orbbec.com/docs/g330-firmware-release/)) > This section describes how to use interleave_ae in Gemini 330 series cameras (minimum camera firmware version [1.4.00](https://www.orbbec.com/docs/g330-firmware-release/))
## Parameter Introduction ## Parameter Introduction
@@ -27,7 +27,7 @@ Open multi_camera_synced.launch.py, and configure the camera settings as shown b
4. Set `device_num` to `2`, meaning two cameras will be used. 4. Set `device_num` to `2`, meaning two cameras will be used.
5. Set `sync_mode` to `primary` to indicate that the `2-7` camera device is in primary mode. The multi-camera sync mode options can be found in the figure below. 5. Set `sync_mode` to `primary` to indicate that the `2-7` camera device is in primary mode. The multi-camera sync mode options can be found in the figure below.
6. Parameters from the `config_file_path` can override the parameters set in `gemini_330_series.launch.py` (optional). 6. Parameters from the `config_file_path` can override the parameters set in `gemini_330_series.launch.py` (optional).
7. For slave cameras, set trigger_out_enabled to false. 7. For slave cameras, set `trigger_out_enabled` to false.
| **Pattern Nam**e | **Setting effect description** | | **Pattern Nam**e | **Setting effect description** |
| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -0,0 +1,39 @@
# Net_camera
> This section describes how to use Net camera in OrbbecSDK_ROS2.Currently, only Femto_Mega devices are supported, and other Net devices will be supported in the near future.
## Parameter Introduction
Network device settings: default `enumerate_net_device` is set to true, which will automatically enumerate network devices.
If you do not want to automatically enumerate network devices,you can set `enumerate_net_device` to false, `net_device_ip` to the device's IP address, and `net_device_port` to the default value of 8090.
* `enumerate_net_device` : Enable automatically enumerate network devices.
* `net_device_ip` : Setting net device's IP address.
* `net_device_port` : Setting net device's port.Usually, you can set it to 8090.
## Single Net camera
For [femto_mega.launch.py](../../launch/femto_mega.launch.py) as an example:
### automatically enumerate network devices:
```bash
ros2 launch orbbec_camera femto_mega.launch.py enumerate_net_device:=true
```
### Specify IP address to start the device:
Note: `net_device_ip` needs to be changed to the IP address of the device, here it is 192.168.1.10
```bash
ros2 launch orbbec_camera femto_mega.launch.py enumerate_net_device:=false net_device_ip:=192.168.1.10 net_device_port:=8090
```
## Multi Net camera
For [multi_net_camera.launch.py](./multi_net_camera.launch.py) as an example:
```bash
ros2 launch orbbec_camera multi_net_camera.launch.py
```
@@ -0,0 +1,52 @@
from launch import LaunchDescription
from launch.actions import (
DeclareLaunchArgument,
IncludeLaunchDescription,
GroupAction,
ExecuteProcess,
)
from launch.launch_description_sources import PythonLaunchDescriptionSource
from launch_ros.actions import Node
from ament_index_python.packages import get_package_share_directory
import os
def generate_launch_description():
# Include launch files
package_dir = get_package_share_directory("orbbec_camera")
launch_file_dir = os.path.join(package_dir, "launch")
launch1_include = IncludeLaunchDescription(
PythonLaunchDescriptionSource(
os.path.join(launch_file_dir, "femto_mega.launch.py")
),
launch_arguments={
"camera_name": "camera_01",
"net_device_ip": "192.168.2.10",
"net_device_port": "8090",
"sync_mode": "standalone",
}.items(),
)
launch2_include = IncludeLaunchDescription(
PythonLaunchDescriptionSource(
os.path.join(launch_file_dir, "femto_mega.launch.py")
),
launch_arguments={
"camera_name": "camera_02",
"net_device_ip": "192.168.1.11",
"net_device_port": "8090",
"sync_mode": "standalone",
}.items(),
)
# If you need more cameras, just add more launch_include here, and change the usb_port and device_num
# Launch description
ld = LaunchDescription(
[
GroupAction([launch1_include]),
GroupAction([launch2_include]),
]
)
return ld
+88 -88
View File
@@ -12,93 +12,93 @@ import os
def generate_launch_description(): def generate_launch_description():
# Declare arguments # Declare arguments
args = [ args = [
DeclareLaunchArgument('camera_name', default_value='camera'), DeclareLaunchArgument("camera_name", default_value="camera"),
DeclareLaunchArgument('depth_registration', default_value='false'), DeclareLaunchArgument("depth_registration", default_value="false"),
DeclareLaunchArgument('serial_number', default_value=''), DeclareLaunchArgument("serial_number", default_value=""),
DeclareLaunchArgument('usb_port', default_value=''), DeclareLaunchArgument("usb_port", default_value=""),
DeclareLaunchArgument('device_num', default_value='1'), DeclareLaunchArgument("device_num", default_value="1"),
DeclareLaunchArgument('uvc_backend', default_value='libuvc'),#libuvc or v4l2 DeclareLaunchArgument("uvc_backend", default_value="libuvc"), # libuvc or v4l2
DeclareLaunchArgument('product_id', default_value=''), DeclareLaunchArgument("product_id", default_value=""),
DeclareLaunchArgument('enable_point_cloud', default_value='true'), DeclareLaunchArgument("enable_point_cloud", default_value="true"),
DeclareLaunchArgument('cloud_frame_id', default_value=''), DeclareLaunchArgument("cloud_frame_id", default_value=""),
DeclareLaunchArgument('enable_colored_point_cloud', default_value='false'), DeclareLaunchArgument("enable_colored_point_cloud", default_value="false"),
DeclareLaunchArgument('point_cloud_qos', default_value='default'), DeclareLaunchArgument("point_cloud_qos", default_value="default"),
DeclareLaunchArgument('connection_delay', default_value='100'), DeclareLaunchArgument("connection_delay", default_value="100"),
DeclareLaunchArgument('color_width', default_value='1280'), DeclareLaunchArgument("color_width", default_value="1280"),
DeclareLaunchArgument('color_height', default_value='720'), DeclareLaunchArgument("color_height", default_value="720"),
DeclareLaunchArgument('color_fps', default_value='30'), DeclareLaunchArgument("color_fps", default_value="30"),
DeclareLaunchArgument('color_format', default_value='MJPG'), DeclareLaunchArgument("color_format", default_value="MJPG"),
DeclareLaunchArgument('enable_color', default_value='true'), DeclareLaunchArgument("enable_color", default_value="true"),
DeclareLaunchArgument('flip_color', default_value='false'), DeclareLaunchArgument("flip_color", default_value="false"),
DeclareLaunchArgument('color_qos', default_value='default'), DeclareLaunchArgument("color_qos", default_value="default"),
DeclareLaunchArgument('color_camera_info_qos', default_value='default'), DeclareLaunchArgument("color_camera_info_qos", default_value="default"),
DeclareLaunchArgument('enable_color_auto_exposure', default_value='true'), DeclareLaunchArgument("enable_color_auto_exposure", default_value="true"),
DeclareLaunchArgument('color_ae_max_exposure', default_value='-1'), DeclareLaunchArgument("color_ae_max_exposure", default_value="-1"),
DeclareLaunchArgument('color_exposure', default_value='-1'), DeclareLaunchArgument("color_exposure", default_value="-1"),
DeclareLaunchArgument('color_gain', default_value='-1'), DeclareLaunchArgument("color_gain", default_value="-1"),
DeclareLaunchArgument('color_brightness', default_value='-1'), DeclareLaunchArgument("color_brightness", default_value="-1"),
DeclareLaunchArgument('enable_color_auto_white_balance', default_value='true'), DeclareLaunchArgument("enable_color_auto_white_balance", default_value="true"),
DeclareLaunchArgument('color_white_balance', default_value='-1'), DeclareLaunchArgument("color_white_balance", default_value="-1"),
DeclareLaunchArgument('depth_width', default_value='640'), DeclareLaunchArgument("depth_width", default_value="640"),
DeclareLaunchArgument('depth_height', default_value='576'), DeclareLaunchArgument("depth_height", default_value="576"),
DeclareLaunchArgument('depth_fps', default_value='30'), DeclareLaunchArgument("depth_fps", default_value="30"),
DeclareLaunchArgument('depth_format', default_value='Y16'), DeclareLaunchArgument("depth_format", default_value="Y16"),
DeclareLaunchArgument('enable_depth', default_value='true'), DeclareLaunchArgument("enable_depth", default_value="true"),
DeclareLaunchArgument('flip_depth', default_value='false'), DeclareLaunchArgument("flip_depth", default_value="false"),
DeclareLaunchArgument('depth_qos', default_value='default'), DeclareLaunchArgument("depth_qos", default_value="default"),
DeclareLaunchArgument('depth_camera_info_qos', default_value='default'), DeclareLaunchArgument("depth_camera_info_qos", default_value="default"),
DeclareLaunchArgument('ir_width', default_value='640'), DeclareLaunchArgument("ir_width", default_value="640"),
DeclareLaunchArgument('ir_height', default_value='576'), DeclareLaunchArgument("ir_height", default_value="576"),
DeclareLaunchArgument('ir_fps', default_value='30'), DeclareLaunchArgument("ir_fps", default_value="30"),
DeclareLaunchArgument('ir_format', default_value='Y16'), DeclareLaunchArgument("ir_format", default_value="Y16"),
DeclareLaunchArgument('enable_ir', default_value='true'), DeclareLaunchArgument("enable_ir", default_value="true"),
DeclareLaunchArgument('flip_ir', default_value='false'), DeclareLaunchArgument("flip_ir", default_value="false"),
DeclareLaunchArgument('ir_qos', default_value='default'), DeclareLaunchArgument("ir_qos", default_value="default"),
DeclareLaunchArgument('ir_camera_info_qos', default_value='default'), DeclareLaunchArgument("ir_camera_info_qos", default_value="default"),
DeclareLaunchArgument('enable_ir_auto_exposure', default_value='true'), DeclareLaunchArgument("enable_ir_auto_exposure", default_value="true"),
DeclareLaunchArgument('ir_ae_max_exposure', default_value='-1'), DeclareLaunchArgument("ir_ae_max_exposure", default_value="-1"),
DeclareLaunchArgument('ir_exposure', default_value='-1'), DeclareLaunchArgument("ir_exposure", default_value="-1"),
DeclareLaunchArgument('ir_gain', default_value='-1'), DeclareLaunchArgument("ir_gain", default_value="-1"),
DeclareLaunchArgument('ir_brightness', default_value='-1'), DeclareLaunchArgument("ir_brightness", default_value="-1"),
DeclareLaunchArgument('enable_sync_output_accel_gyro', default_value='true'), DeclareLaunchArgument("enable_sync_output_accel_gyro", default_value="true"),
DeclareLaunchArgument('enable_accel', default_value='false'), DeclareLaunchArgument("enable_accel", default_value="false"),
DeclareLaunchArgument('accel_rate', default_value='100hz'), DeclareLaunchArgument("accel_rate", default_value="100hz"),
DeclareLaunchArgument('accel_range', default_value='4g'), DeclareLaunchArgument("accel_range", default_value="4g"),
DeclareLaunchArgument('enable_gyro', default_value='false'), DeclareLaunchArgument("enable_gyro", default_value="false"),
DeclareLaunchArgument('gyro_rate', default_value='100hz'), DeclareLaunchArgument("gyro_rate", default_value="100hz"),
DeclareLaunchArgument('gyro_range', default_value='1000dps'), DeclareLaunchArgument("gyro_range", default_value="1000dps"),
DeclareLaunchArgument('liner_accel_cov', default_value='0.01'), DeclareLaunchArgument("liner_accel_cov", default_value="0.01"),
DeclareLaunchArgument('angular_vel_cov', default_value='0.01'), DeclareLaunchArgument("angular_vel_cov", default_value="0.01"),
DeclareLaunchArgument('publish_tf', default_value='true'), DeclareLaunchArgument("publish_tf", default_value="true"),
DeclareLaunchArgument('tf_publish_rate', default_value='0.0'), DeclareLaunchArgument("tf_publish_rate", default_value="0.0"),
DeclareLaunchArgument('ir_info_url', default_value=''), DeclareLaunchArgument("ir_info_url", default_value=""),
DeclareLaunchArgument('color_info_url', default_value=''), DeclareLaunchArgument("color_info_url", default_value=""),
# Network device settings: default net_device_ip is 192.168.1.10 and net_device_port is 8090 # Network device settings: default enumerate_net_device is set to true, which will automatically enumerate network devices
# If you don't want to use ip addr and port, set enumerate_net_device to true # If you do not want to automatically enumerate network devices,
# and leave net_device_ip blank , it can enumerate automate # you can set enumerate_net_device to false, net_device_ip to the device's IP address, and net_device_port to the default value of 8090
DeclareLaunchArgument('enumerate_net_device', default_value='false'), DeclareLaunchArgument("enumerate_net_device", default_value="false"),
DeclareLaunchArgument('net_device_ip', default_value=''), DeclareLaunchArgument("net_device_ip", default_value=""),
DeclareLaunchArgument('net_device_port', default_value='0'), DeclareLaunchArgument("net_device_port", default_value="0"),
DeclareLaunchArgument('log_level', default_value='none'), DeclareLaunchArgument("log_level", default_value="none"),
DeclareLaunchArgument('enable_publish_extrinsic', default_value='false'), DeclareLaunchArgument("enable_publish_extrinsic", default_value="false"),
DeclareLaunchArgument('enable_d2c_viewer', default_value='false'), DeclareLaunchArgument("enable_d2c_viewer", default_value="false"),
DeclareLaunchArgument('enable_lrm', default_value='true'), DeclareLaunchArgument("enable_lrm", default_value="true"),
DeclareLaunchArgument('enable_soft_filter', default_value='true'), DeclareLaunchArgument("enable_soft_filter", default_value="true"),
DeclareLaunchArgument('soft_filter_max_diff', default_value='-1'), DeclareLaunchArgument("soft_filter_max_diff", default_value="-1"),
DeclareLaunchArgument('soft_filter_speckle_size', default_value='-1'), DeclareLaunchArgument("soft_filter_speckle_size", default_value="-1"),
DeclareLaunchArgument('sync_mode', default_value='standalone'), DeclareLaunchArgument("sync_mode", default_value="standalone"),
DeclareLaunchArgument('depth_delay_us', default_value='0'), DeclareLaunchArgument("depth_delay_us", default_value="0"),
DeclareLaunchArgument('color_delay_us', default_value='0'), DeclareLaunchArgument("color_delay_us", default_value="0"),
DeclareLaunchArgument('trigger2image_delay_us', default_value='0'), DeclareLaunchArgument("trigger2image_delay_us", default_value="0"),
DeclareLaunchArgument('trigger_out_delay_us', default_value='0'), DeclareLaunchArgument("trigger_out_delay_us", default_value="0"),
DeclareLaunchArgument('trigger_out_enabled', default_value='false'), DeclareLaunchArgument("trigger_out_enabled", default_value="false"),
DeclareLaunchArgument('enable_frame_sync', default_value='true'), DeclareLaunchArgument("enable_frame_sync", default_value="true"),
DeclareLaunchArgument('ordered_pc', default_value='false'), DeclareLaunchArgument("ordered_pc", default_value="false"),
DeclareLaunchArgument('enable_depth_scale', default_value='true'), DeclareLaunchArgument("enable_depth_scale", default_value="true"),
DeclareLaunchArgument('align_mode', default_value='HW'), DeclareLaunchArgument("align_mode", default_value="HW"),
DeclareLaunchArgument('laser_energy_level', default_value='-1'), DeclareLaunchArgument("laser_energy_level", default_value="-1"),
DeclareLaunchArgument('enable_heartbeat', default_value='false'), DeclareLaunchArgument("enable_heartbeat", default_value="false"),
DeclareLaunchArgument('time_domain', default_value='global'), DeclareLaunchArgument("time_domain", default_value="global"),
] ]
# Node configuration # Node configuration
@@ -149,4 +149,4 @@ def generate_launch_description():
) )
] ]
) )
return ld return ld