diff --git a/orbbec_camera/examples/README.MD b/orbbec_camera/examples/README.MD index e3ec9242..c502d3ae 100644 --- a/orbbec_camera/examples/README.MD +++ b/orbbec_camera/examples/README.MD @@ -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 - -How to use multi-camera synced in OrbbecSDK_ROS2. - -# interleave_ae_mode - -How to use interleave_ae in OrbbecSDK_ROS2. - -# disparity_search_offset +# [disparity_search_offset](./disparity_search_offset) 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. diff --git a/orbbec_camera/examples/disparity_search_offset/README.MD b/orbbec_camera/examples/disparity_search_offset/README.MD index 3a726833..6cab0a65 100644 --- a/orbbec_camera/examples/disparity_search_offset/README.MD +++ b/orbbec_camera/examples/disparity_search_offset/README.MD @@ -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) -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_index0 : Frame 0 disparity search offset value. - -offset_index1 : Frame 1 disparity search offset value. +* `offset_index1` : Frame 1 disparity search offset value. | disparity range mode | disparity search offset | Minimum depth of inclined wall (mm) | | :------------------: | :---------------------: | :---------------------------------: | diff --git a/orbbec_camera/examples/gmsl_camera/README.MD b/orbbec_camera/examples/gmsl_camera/README.MD index 954829dd..b6652cd6 100644 --- a/orbbec_camera/examples/gmsl_camera/README.MD +++ b/orbbec_camera/examples/gmsl_camera/README.MD @@ -34,9 +34,8 @@ In addition, GMSL multi-camera synced does not require Multi-Camera Sync Hub Pro ### Additional Parameter Settings -gmsl_trigger_fps : set hardware soc trigger source frame rate. - -enable_gmsl_trigger : enable hardware soc trigger. +* `gmsl_trigger_fps` : set hardware soc trigger source frame rate. +* `enable_gmsl_trigger` : enable hardware soc trigger. ### Run the launch diff --git a/orbbec_camera/examples/interleave_ae_mode/README.MD b/orbbec_camera/examples/interleave_ae_mode/README.MD index c2805f0f..c59f0250 100644 --- a/orbbec_camera/examples/interleave_ae_mode/README.MD +++ b/orbbec_camera/examples/interleave_ae_mode/README.MD @@ -1,6 +1,6 @@ # 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 diff --git a/orbbec_camera/examples/multi_camera_synced/README.MD b/orbbec_camera/examples/multi_camera_synced/README.MD index 42dc92d6..4241ff35 100644 --- a/orbbec_camera/examples/multi_camera_synced/README.MD +++ b/orbbec_camera/examples/multi_camera_synced/README.MD @@ -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. 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). -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** | | ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | diff --git a/orbbec_camera/examples/net_camera/README.MD b/orbbec_camera/examples/net_camera/README.MD new file mode 100644 index 00000000..09406947 --- /dev/null +++ b/orbbec_camera/examples/net_camera/README.MD @@ -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 +``` diff --git a/orbbec_camera/examples/net_camera/multi_net_camera.launch.py b/orbbec_camera/examples/net_camera/multi_net_camera.launch.py new file mode 100644 index 00000000..c7fa28ee --- /dev/null +++ b/orbbec_camera/examples/net_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 diff --git a/orbbec_camera/launch/femto_mega.launch.py b/orbbec_camera/launch/femto_mega.launch.py index 35be3a0e..e1ea677a 100644 --- a/orbbec_camera/launch/femto_mega.launch.py +++ b/orbbec_camera/launch/femto_mega.launch.py @@ -12,93 +12,93 @@ import os def generate_launch_description(): # Declare arguments args = [ - DeclareLaunchArgument('camera_name', default_value='camera'), - DeclareLaunchArgument('depth_registration', default_value='false'), - DeclareLaunchArgument('serial_number', default_value=''), - DeclareLaunchArgument('usb_port', default_value=''), - DeclareLaunchArgument('device_num', default_value='1'), - DeclareLaunchArgument('uvc_backend', default_value='libuvc'),#libuvc or v4l2 - DeclareLaunchArgument('product_id', default_value=''), - DeclareLaunchArgument('enable_point_cloud', default_value='true'), - DeclareLaunchArgument('cloud_frame_id', default_value=''), - DeclareLaunchArgument('enable_colored_point_cloud', default_value='false'), - DeclareLaunchArgument('point_cloud_qos', default_value='default'), - DeclareLaunchArgument('connection_delay', default_value='100'), - DeclareLaunchArgument('color_width', default_value='1280'), - DeclareLaunchArgument('color_height', default_value='720'), - DeclareLaunchArgument('color_fps', default_value='30'), - DeclareLaunchArgument('color_format', default_value='MJPG'), - DeclareLaunchArgument('enable_color', default_value='true'), - DeclareLaunchArgument('flip_color', default_value='false'), - DeclareLaunchArgument('color_qos', default_value='default'), - DeclareLaunchArgument('color_camera_info_qos', default_value='default'), - DeclareLaunchArgument('enable_color_auto_exposure', default_value='true'), - DeclareLaunchArgument('color_ae_max_exposure', default_value='-1'), - DeclareLaunchArgument('color_exposure', default_value='-1'), - DeclareLaunchArgument('color_gain', default_value='-1'), - DeclareLaunchArgument('color_brightness', default_value='-1'), - DeclareLaunchArgument('enable_color_auto_white_balance', default_value='true'), - DeclareLaunchArgument('color_white_balance', default_value='-1'), - DeclareLaunchArgument('depth_width', default_value='640'), - DeclareLaunchArgument('depth_height', default_value='576'), - DeclareLaunchArgument('depth_fps', default_value='30'), - DeclareLaunchArgument('depth_format', default_value='Y16'), - DeclareLaunchArgument('enable_depth', default_value='true'), - DeclareLaunchArgument('flip_depth', default_value='false'), - DeclareLaunchArgument('depth_qos', default_value='default'), - DeclareLaunchArgument('depth_camera_info_qos', default_value='default'), - DeclareLaunchArgument('ir_width', default_value='640'), - DeclareLaunchArgument('ir_height', default_value='576'), - DeclareLaunchArgument('ir_fps', default_value='30'), - DeclareLaunchArgument('ir_format', default_value='Y16'), - DeclareLaunchArgument('enable_ir', default_value='true'), - DeclareLaunchArgument('flip_ir', default_value='false'), - DeclareLaunchArgument('ir_qos', default_value='default'), - DeclareLaunchArgument('ir_camera_info_qos', default_value='default'), - DeclareLaunchArgument('enable_ir_auto_exposure', default_value='true'), - DeclareLaunchArgument('ir_ae_max_exposure', default_value='-1'), - DeclareLaunchArgument('ir_exposure', default_value='-1'), - DeclareLaunchArgument('ir_gain', default_value='-1'), - DeclareLaunchArgument('ir_brightness', default_value='-1'), - DeclareLaunchArgument('enable_sync_output_accel_gyro', default_value='true'), - DeclareLaunchArgument('enable_accel', default_value='false'), - DeclareLaunchArgument('accel_rate', default_value='100hz'), - DeclareLaunchArgument('accel_range', default_value='4g'), - DeclareLaunchArgument('enable_gyro', default_value='false'), - DeclareLaunchArgument('gyro_rate', default_value='100hz'), - DeclareLaunchArgument('gyro_range', default_value='1000dps'), - DeclareLaunchArgument('liner_accel_cov', default_value='0.01'), - DeclareLaunchArgument('angular_vel_cov', default_value='0.01'), - DeclareLaunchArgument('publish_tf', default_value='true'), - DeclareLaunchArgument('tf_publish_rate', default_value='0.0'), - DeclareLaunchArgument('ir_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 - # If you don't want to use ip addr and port, set enumerate_net_device to true - # and leave net_device_ip blank , it can enumerate automate - DeclareLaunchArgument('enumerate_net_device', default_value='false'), - DeclareLaunchArgument('net_device_ip', default_value=''), - DeclareLaunchArgument('net_device_port', default_value='0'), - DeclareLaunchArgument('log_level', default_value='none'), - DeclareLaunchArgument('enable_publish_extrinsic', default_value='false'), - DeclareLaunchArgument('enable_d2c_viewer', default_value='false'), - DeclareLaunchArgument('enable_lrm', default_value='true'), - DeclareLaunchArgument('enable_soft_filter', default_value='true'), - DeclareLaunchArgument('soft_filter_max_diff', default_value='-1'), - DeclareLaunchArgument('soft_filter_speckle_size', default_value='-1'), - DeclareLaunchArgument('sync_mode', default_value='standalone'), - DeclareLaunchArgument('depth_delay_us', default_value='0'), - DeclareLaunchArgument('color_delay_us', default_value='0'), - DeclareLaunchArgument('trigger2image_delay_us', default_value='0'), - DeclareLaunchArgument('trigger_out_delay_us', default_value='0'), - DeclareLaunchArgument('trigger_out_enabled', default_value='false'), - DeclareLaunchArgument('enable_frame_sync', default_value='true'), - DeclareLaunchArgument('ordered_pc', default_value='false'), - DeclareLaunchArgument('enable_depth_scale', default_value='true'), - DeclareLaunchArgument('align_mode', default_value='HW'), - DeclareLaunchArgument('laser_energy_level', default_value='-1'), - DeclareLaunchArgument('enable_heartbeat', default_value='false'), - DeclareLaunchArgument('time_domain', default_value='global'), + DeclareLaunchArgument("camera_name", default_value="camera"), + DeclareLaunchArgument("depth_registration", default_value="false"), + DeclareLaunchArgument("serial_number", default_value=""), + DeclareLaunchArgument("usb_port", default_value=""), + DeclareLaunchArgument("device_num", default_value="1"), + DeclareLaunchArgument("uvc_backend", default_value="libuvc"), # libuvc or v4l2 + DeclareLaunchArgument("product_id", default_value=""), + DeclareLaunchArgument("enable_point_cloud", default_value="true"), + DeclareLaunchArgument("cloud_frame_id", default_value=""), + DeclareLaunchArgument("enable_colored_point_cloud", default_value="false"), + DeclareLaunchArgument("point_cloud_qos", default_value="default"), + DeclareLaunchArgument("connection_delay", default_value="100"), + DeclareLaunchArgument("color_width", default_value="1280"), + DeclareLaunchArgument("color_height", default_value="720"), + DeclareLaunchArgument("color_fps", default_value="30"), + DeclareLaunchArgument("color_format", default_value="MJPG"), + DeclareLaunchArgument("enable_color", default_value="true"), + DeclareLaunchArgument("flip_color", default_value="false"), + DeclareLaunchArgument("color_qos", default_value="default"), + DeclareLaunchArgument("color_camera_info_qos", default_value="default"), + DeclareLaunchArgument("enable_color_auto_exposure", default_value="true"), + DeclareLaunchArgument("color_ae_max_exposure", default_value="-1"), + DeclareLaunchArgument("color_exposure", default_value="-1"), + DeclareLaunchArgument("color_gain", default_value="-1"), + DeclareLaunchArgument("color_brightness", default_value="-1"), + DeclareLaunchArgument("enable_color_auto_white_balance", default_value="true"), + DeclareLaunchArgument("color_white_balance", default_value="-1"), + DeclareLaunchArgument("depth_width", default_value="640"), + DeclareLaunchArgument("depth_height", default_value="576"), + DeclareLaunchArgument("depth_fps", default_value="30"), + DeclareLaunchArgument("depth_format", default_value="Y16"), + DeclareLaunchArgument("enable_depth", default_value="true"), + DeclareLaunchArgument("flip_depth", default_value="false"), + DeclareLaunchArgument("depth_qos", default_value="default"), + DeclareLaunchArgument("depth_camera_info_qos", default_value="default"), + DeclareLaunchArgument("ir_width", default_value="640"), + DeclareLaunchArgument("ir_height", default_value="576"), + DeclareLaunchArgument("ir_fps", default_value="30"), + DeclareLaunchArgument("ir_format", default_value="Y16"), + DeclareLaunchArgument("enable_ir", default_value="true"), + DeclareLaunchArgument("flip_ir", default_value="false"), + DeclareLaunchArgument("ir_qos", default_value="default"), + DeclareLaunchArgument("ir_camera_info_qos", default_value="default"), + DeclareLaunchArgument("enable_ir_auto_exposure", default_value="true"), + DeclareLaunchArgument("ir_ae_max_exposure", default_value="-1"), + DeclareLaunchArgument("ir_exposure", default_value="-1"), + DeclareLaunchArgument("ir_gain", default_value="-1"), + DeclareLaunchArgument("ir_brightness", default_value="-1"), + DeclareLaunchArgument("enable_sync_output_accel_gyro", default_value="true"), + DeclareLaunchArgument("enable_accel", default_value="false"), + DeclareLaunchArgument("accel_rate", default_value="100hz"), + DeclareLaunchArgument("accel_range", default_value="4g"), + DeclareLaunchArgument("enable_gyro", default_value="false"), + DeclareLaunchArgument("gyro_rate", default_value="100hz"), + DeclareLaunchArgument("gyro_range", default_value="1000dps"), + DeclareLaunchArgument("liner_accel_cov", default_value="0.01"), + DeclareLaunchArgument("angular_vel_cov", default_value="0.01"), + DeclareLaunchArgument("publish_tf", default_value="true"), + DeclareLaunchArgument("tf_publish_rate", default_value="0.0"), + DeclareLaunchArgument("ir_info_url", default_value=""), + DeclareLaunchArgument("color_info_url", default_value=""), + # 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 + DeclareLaunchArgument("enumerate_net_device", default_value="false"), + DeclareLaunchArgument("net_device_ip", default_value=""), + DeclareLaunchArgument("net_device_port", default_value="0"), + DeclareLaunchArgument("log_level", default_value="none"), + DeclareLaunchArgument("enable_publish_extrinsic", default_value="false"), + DeclareLaunchArgument("enable_d2c_viewer", default_value="false"), + DeclareLaunchArgument("enable_lrm", default_value="true"), + DeclareLaunchArgument("enable_soft_filter", default_value="true"), + DeclareLaunchArgument("soft_filter_max_diff", default_value="-1"), + DeclareLaunchArgument("soft_filter_speckle_size", default_value="-1"), + DeclareLaunchArgument("sync_mode", default_value="standalone"), + DeclareLaunchArgument("depth_delay_us", default_value="0"), + DeclareLaunchArgument("color_delay_us", default_value="0"), + DeclareLaunchArgument("trigger2image_delay_us", default_value="0"), + DeclareLaunchArgument("trigger_out_delay_us", default_value="0"), + DeclareLaunchArgument("trigger_out_enabled", default_value="false"), + DeclareLaunchArgument("enable_frame_sync", default_value="true"), + DeclareLaunchArgument("ordered_pc", default_value="false"), + DeclareLaunchArgument("enable_depth_scale", default_value="true"), + DeclareLaunchArgument("align_mode", default_value="HW"), + DeclareLaunchArgument("laser_energy_level", default_value="-1"), + DeclareLaunchArgument("enable_heartbeat", default_value="false"), + DeclareLaunchArgument("time_domain", default_value="global"), ] # Node configuration @@ -149,4 +149,4 @@ def generate_launch_description(): ) ] ) - return ld \ No newline at end of file + return ld