diff --git a/docs/all_available_service_for_camera_control.md b/docs/all_available_service_for_camera_control.md
deleted file mode 100644
index 0b8d947a..00000000
--- a/docs/all_available_service_for_camera_control.md
+++ /dev/null
@@ -1,409 +0,0 @@
-# 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
-ros2 service call /camera/set_color_mirror std_srvs/srv/SetBool '{data: true}'
-```
-
-* `/camera/set_color_flip`
-
-```bash
-ros2 service call /camera/set_color_flip std_srvs/srv/SetBool '{data: true}'
-```
-
-* `/camera/set_color_rotation`
-
-```bash
-ros2 service call /camera/set_color_rotation orbbec_camera_msgs/srv/SetInt32 '{data: 180}'
-```
-
-* `/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
-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/set_depth_flip`
-
-```bash
-ros2 service call /camera/set_depth_flip std_srvs/srv/SetBool '{data: true}'
-```
-
-* `/camera/set_depth_rotation`
-
-```bash
-ros2 service call /camera/set_depth_rotation orbbec_camera_msgs/srv/SetInt32 '{data: 180}'
-```
-
-* `/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
-ros2 service call /camera/set_ir_mirror std_srvs/srv/SetBool '{data: true}'
-```
-
-* `/camera/set_ir_flip`
-
-```bash
-ros2 service call /camera/set_ir_flip std_srvs/srv/SetBool '{data: true}'
-```
-
-* `/camera/set_ir_rotation`
-
-```bash
-ros2 service call /camera/set_ir_rotation orbbec_camera_msgs/srv/SetInt32 '{data: 180}'
-```
-
-* `/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/set_ptp_config`
-
-```bash
-`ptp_config`ros2 service call /camera/set_ptp_config std_srvs/srv/SetBool '{data: true}'
-```
-
-* `/camera/get_ptp_config`
-
-```bash
-ros2 service call /camera/get_ptp_config` 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: []}'
-
-# Set SpatialFastFilter
-# filter_param: [radius]
-ros2 service call /camera/set_filter orbbec_camera_msgs/srv/SetFilter '{filter_name: SpatialFastFilter, filter_enable: true, filter_param: [4]}'
-
-# Set SpatialModerateFilter
-# filter_param: [disp_diff, magnitude, radius, ]
-ros2 service call /camera/set_filter orbbec_camera_msgs/srv/SetFilter '{filter_name: SpatialModerateFilter, filter_enable: true, filter_param: [160,1,3]}'
-```
-
-* `/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}'
-```
-
-* `/camera/send_software_trigger`
-
-```
-ros2 service call /camera/send_software_trigger std_srvs/srv/SetBool '{data: true}'
-```
-
-- `/camera/set_streams_enable`
-
-```bash
-ros2 service call /camera/set_streams_enable std_srvs/srv/SetBool '{data: false}'
-```
-
-- `/camera/get_streams_enable`
-
-```bash
-ros2 service call /camera/get_streams_enable std_srvs/srv/GetBool '{}'
-```
-
-- `/camera/write_customer_data`
-
-```bash
-ros2 service call /camera/write_customer_data orbbec_camera_msgs/srv/SetString '{data: "string"}'
-```
-
-- `/camera/read_customer_data`
-
-```bash
-ros2 service call /camera/read_customer_data orbbec_camera_msgs/srv/GetString '{}'
-```
-
-- `/camera/set_user_calib_params`
-
-```bash
-ros2 service call /camera/set_user_calib_params orbbec_camera_msgs/srv/SetUserCalibParams \
-'{k: [614.9613647460938, 0.0, 634.91552734375,
- 0.0, 614.65771484375, 391.407470703125,
- 0.0, 0.0, 1.0],
- d: [-0.03131488710641861,
- 0.032955970615148544,
- 9.096559369936585e-05,
- -0.0003368517500348389,
- -0.01115430984646082,
- 0.0, 0.0, 0.0],
- rotation: [0.9999880790710449, 0.0003024190664291382, -0.004874417092651129,
- -0.0002965621242765337, 0.9999992251396179, 0.001202247804030776,
- 0.004874777048826218, -0.0012007878394797444, 0.9999874234199524],
- translation: [-0.023897956848144532,
- -9.439220279455185e-05,
- -6.804073229432106e-06]}'
-```
-
-- `/camera/get_user_calib_params`
-
-```bash
-ros2 service call /camera/get_user_calib_params orbbec_camera_msgs/srv/GetUserCalibParams '{}'
-```
-
-> **Note**:
-> The following four services (`/camera/write_customer_data`, `/camera/read_customer_data`, `/camera/set_user_calib_params`, `/camera/get_user_calib_params`) are currently supported only on the 435Le module.
-> Each service can store only one set of data or string at a time.
diff --git a/docs/all_available_topics.md b/docs/all_available_topics.md
deleted file mode 100644
index 530962fa..00000000
--- a/docs/all_available_topics.md
+++ /dev/null
@@ -1,26 +0,0 @@
-# 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.
-- `/camera/device_status`: The device status of the camera.
diff --git a/docs/building_a_Debian_Package.md b/docs/building_a_Debian_Package.md
deleted file mode 100644
index 7441bfca..00000000
--- a/docs/building_a_Debian_Package.md
+++ /dev/null
@@ -1,45 +0,0 @@
-# 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
-```
diff --git a/docs/configuration_of_depth_NFOV_and_WFOV_modes.md b/docs/configuration_of_depth_NFOV_and_WFOV_modes.md
deleted file mode 100644
index ad4312c3..00000000
--- a/docs/configuration_of_depth_NFOV_and_WFOV_modes.md
+++ /dev/null
@@ -1,13 +0,0 @@
-# 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.
diff --git a/docs/depth_work_mode_switch.md b/docs/depth_work_mode_switch.md
deleted file mode 100644
index bdd82bb8..00000000
--- a/docs/depth_work_mode_switch.md
+++ /dev/null
@@ -1,32 +0,0 @@
-# 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"
-```
diff --git a/docs/efficient_intra_process_communication.md b/docs/efficient_intra_process_communication.md
deleted file mode 100644
index c2b11638..00000000
--- a/docs/efficient_intra_process_communication.md
+++ /dev/null
@@ -1,35 +0,0 @@
-# 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
diff --git a/docs/fastdds_tuning.md b/docs/fastdds_tuning.md
deleted file mode 100644
index 1e1ad021..00000000
--- a/docs/fastdds_tuning.md
+++ /dev/null
@@ -1,154 +0,0 @@
-# Fast DDS Optimization for Orbbec Camera with ROS2
-
-When operating with the default configuration, Fast DDS exhibits suboptimal transmission efficiency, resulting in
-significant image transmission delays when used with the Orbbec camera in ROS2. This document provides guidance on
-optimizing Fast DDS to enhance image transfer efficiency.
-
-## 1. Adjusting System Parameters
-
-### IP Fragmentation Time
-
-- **Path**: `/proc/sys/net/ipv4/ipfrag_time` (default: 30 seconds)
-- **Purpose**: Defines the duration that IP fragments are kept in memory.
-- **Adjustment**: Decrease this value to reduce the time window where no fragments are received, which can help reduce
- delays. Consider the specific needs of your environment as this setting affects all incoming fragments.
-
- **Example**: Set to 3 seconds.
-
- ```bash
- sudo sysctl net.ipv4.ipfrag_time=3
- ```
-
-### IP Fragmentation Memory Threshold
-
-- **Path**: `/proc/sys/net/ipv4/ipfrag_high_thresh` (default: 262144 bytes)
-- **Purpose**: Sets the maximum memory used to reassemble IP fragments.
-- **Adjustment**: Increase this value to allow more memory for fragment reassembly, which can improve handling of larger
- data packets.
-
- **Example**: Increase to 128 MB.
-
- ```bash
- sudo sysctl net.ipv4.ipfrag_high_thresh=134217728
- ```
-
-### Maximum Buffer Sizes
-
-- **Purpose**: Configures the maximum buffer sizes for receiving and sending data, which is critical for high-throughput
- data transmission.
-- **Adjustment**: Set the maximum buffer sizes for both receiving and sending operations.
-
- **Commands**:
-
- ```bash
- sudo sysctl -w net.core.rmem_max=2147483647
- sudo sysctl -w net.core.rmem_default=2147483647
- sudo sysctl -w net.core.wmem_max=2147483647
- sudo sysctl -w net.core.wmem_default=2147483647
- ```
-
-Alternatively, make these settings permanent by adding them to the `/etc/sysctl.d/10-fastrtps-max.conf` file.
-
-```bash
-sudo gedit /etc/sysctl.d/10-fastrtps-max.conf
-```
-
-add blow lines to the file:
-
-```bash
-net.core.rmem_max=2147483647
-net.core.rmem_default=2147483647
-net.core.wmem_max=2147483647
-net.core.wmem_default=2147483647
-```
-
-then save and exit the file. run `sudo sysctl -p` to apply the changes.
-
-For detailed guidance, refer
-to [ROS 2 DDS Tuning Documentation](https://docs.ros.org/en/foxy/How-To-Guides/DDS-tuning.html).
-
-## 2. Fast DDS Configuration
-
-Below is an example of a Fast DDS configuration file optimized for ROS2 usage with the Orbbec camera. This configuration
-enhances the overall data transmission by adjusting buffer sizes and transport settings.
-
-### Configuration File: `shm_fastdds.xml`
-
-Place this file in the `$HOME` directory.
-
-```xml
-
-
-
-
- UDP_transport
- UDPv4
- 10
- 65000
- 1048576
- 1048576
-
-
-
-
- profile_for_ros2_context
-
- UDP_transport
-
- false
- 1048576
- 1048576
-
-
-
-
- 127.0.0.1
-
-
-
-
-
-
-
-
-
- ASYNCHRONOUS
-
-
-
- 0
- 1000000
-
-
-
- PREALLOCATED_WITH_REALLOC
-
-
-
-
- AUTOMATIC
-
-
-
- 0
- 1000000
-
-
-
- PREALLOCATED_WITH_REALLOC
-
-
-```
-
-### Environment Variables
-
-Set the following environment variables to use the custom Fast DDS profile:
-
-```bash
-export RMW_IMPLEMENTATION=rmw_fastrtps_cpp
-export FASTRTPS_DEFAULT_PROFILES_FILE=$HOME/shm_fastdds.xml
-export RMW_FASTRTPS_USE_QOS_FROM_XML=1
-```
-
-This configuration aims to optimize the data flow and reduce transmission delays, improving the responsiveness and
-reliability of the Orbbec camera system in a ROS2 environment.
diff --git a/docs/images/image0.png b/docs/images/image0.png
deleted file mode 100644
index 2a357d45..00000000
Binary files a/docs/images/image0.png and /dev/null differ
diff --git a/docs/images/image1.png b/docs/images/image1.png
deleted file mode 100644
index ce16c090..00000000
Binary files a/docs/images/image1.png and /dev/null differ
diff --git a/docs/images/image2.png b/docs/images/image2.png
deleted file mode 100644
index 5fe8aa95..00000000
Binary files a/docs/images/image2.png and /dev/null differ
diff --git a/docs/images/image3.png b/docs/images/image3.png
deleted file mode 100644
index 1e419f84..00000000
Binary files a/docs/images/image3.png and /dev/null differ
diff --git a/docs/launch_parameters.md b/docs/launch_parameters.md
deleted file mode 100644
index 1b33be9d..00000000
--- a/docs/launch_parameters.md
+++ /dev/null
@@ -1,372 +0,0 @@
-# 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**
-
- * Enable 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
-* **upgrade_firmware**
-
- * The input parameter is the firmware path
-* **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.
-* **[color|depth|left_ir|right_ir|ir]_rotation**
-
- * Set stream image rotation
- * The possible values are `0`,`90`,`180`,`270`
-* **[color|depth|left_ir|right_ir|ir]_flip**
-
- * Enable the stream image flip
-* **[color|depth|left_ir|right_ir|ir]_mirror**
-
- * Enable the stream image mirror
-* **enable_point_cloud**
-
- * Enable the point cloud
-* **enable_colored_point_cloud**
-
- * Enable the RGB point cloud
-* **cloud_frame_id**
-
- * Modify the frame_id name within the ros message
-* **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**
-
- * Enable the Color auto exposure priority
-* **enable_color_auto_exposure**
-
- * Enable the Color auto exposure
-* **color_exposure**
-
- * Set the Color exposure
-* **color_gain**
-
- * Set the Color gain
-* **enable_color_auto_white_balance**
-
- * Enable the Color auto white balance
-* **color_white_balance**
-
- * Set the Color white balance
-* **color_ae_max_exposure**
-
- * Set the maximum exposure value for Color auto exposure
-* **color_brightness**
-
- * Set the Color brightness
-* **color_sharpness**
-
- * Set the Color sharpness
-* **color_gamma**
-
- * Set the Color gamma
-* **color_saturation**
-
- * Set the Color saturation
-* **color_contrast**
-
- * Set the Color contrast
-* **color_hue**
-
- * Set the Color hue
-* **enable_color_backlight_compensation**
-
- * Enable the Color backlight compensation
-* **color_powerline_freq**
-
- * Set the power line freq
- * The possible values are `disable`,`50hz`,`60hz`,`auto`
-* **enable_color_decimation_filter**
-
- * Enable the Color decimation filter
-* **color_decimation_filter_scale**
-
- * Set the Color decimation filter scale
-* **enable_depth_auto_exposure_priority**
-
- * Enable the Depth auto exposure priority
-* **mean_intensity_set_point**
-
- - Set the target mean intensity of the Depth image
- - For example: `mean_intensity_set_point:=100`
-
- > **Note:** This replaces the deprecated `depth_brightness`, which is still supported for backward compatibility.
- >
-* **enable_ir_auto_exposure**
-
- * Enable 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**
-
- * Enable the sync accel_gyro,and output IMU topic real-time data
-* **enable_accel**
-
- * Enable the Accelerometer,and output Accelerometer info topic data
-* **enable_accel_data_correction**
-
- * Enable the Accelerometer data correction
-* **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**
-
- * Enable the gyroscope,and output gyroscope info topic data
-* **enable_gyro_data_correction**
-
- * Enable the gyroscope data correction
-* **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
-* **linear_accel_cov**
-
- * Covariance of the linear acceleration
-* **angular_vel_cov**
-
- * Covariance of the angular velocity
-* **publish_tf**
-
- * Enable 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**
-
- * Set net device's IP address,this parameter is usually used [net camera](../orbbec_camera/examples/net_camera/README.MD)
-* **net_device_port**
-
- * Set 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**
-
- * Enable the extrinsics publish
-* **enable_d2c_viewer**
-
- * Publishes the D2C overlay image (for testing only)
-* **disparity_to_depth_mode**
-
- * `HW`: use hardware disparity to depth conversion
- * `SW`: use software disparity to depth conversion
-* **enable_ldp**
-
- * Enable 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**
-
- * Enable the trigger out signal,this parameter is usually used [multi camera synced](../orbbec_camera/examples/multi_camera_synced/README.MD)
-* **software_trigger_enabled**
-
- * Enable the software 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_ptp_config**
-
- * Enable PTP time synchronization
- * Only for Gemini 335Le
- * Note: To enable PTP time synchronization, you must set the **enable_sync_host_time** parameter to `false`.
-* **enable_frame_sync**
-
- * Enable the frame synchronization
-* **ordered_pc**
-
- * Enable filtering of invalid point clouds
-* **enable_depth_scale**
-
- * Enable the depth scale
-* **enable_decimation_filter**
-
- * Enable the Depth decimation filter.The Depth decimation filter setting parameter is `decimation_filter_scale`
-* **enable_hdr_merge**
-
- * Enable 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**
-
- * Enable the Depth sequence id filter.The Depth sequence id filter setting parameter is `sequence_id_filter_id`
-* **enable_threshold_filter**
-
- * Enable the Depth threshold filter.The Depth threshold filter setting parameter is `threshold_filter_max`,`threshold_filter_min`
-* **enable_hardware_noise_removal_filter**
-
- * Enable the Depth hardware noise removal filter
-* **enable_noise_removal_filter**
-
- * Enable the Depth software noise removal_filter.The Depth noise removal filter setting parameter is `noise_removal_filter_min_diff`,`noise_removal_filter_max_size`
-* **enable_spatial_filter**
-
- * Enable 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**
-
- * Enable the Depth temporal filter.The Depth temporal filter setting parameter is `temporal_filter_diff_threshold`,`temporal_filter_weight`
-* **enable_hole_filling_filter**
-
- * Enable the Depth hole filling filter.The Depth hole filling filter setting parameter is `hole_filling_filter_mode`
-* **enable_spatial_fast_filter**
-
- - Enable the Depth spatial fast filter. The Depth spatial fast filter setting parameter is `spatial_fast_filter_radius`.
-* **enable_spatial_moderate_filter**
-
- - Enable the Depth spatial moderate filter. The Depth spatial moderate filter setting parameters are `spatial_moderate_filter_diff_threshold`, `spatial_moderate_filter_magnitude`, `spatial_moderate_filter_radius`.
-* **align_mode**
-
- * The alignment mode to be used. Options are `HW` for hardware alignment and `SW` for software alignment
-* **align_target_stream**
-
- * Set align target stream mode
- * The possible values are `COLOR`,`DEPTH`
- * `COLOR`:Align depth to color
- * `DEPTH`:Align color to depth
-* **diagnostic_period**
-
- * Diagnostic period in seconds
-* **time_sync_period**
-
- * Interval for synchronizing the camera time with the host system.
- * Unit: seconds.
-
-> **Note** : This parameter only needs to be set when **`enable_sync_host_time = true`** and **`time_domain = device`** .
-
-* **enable_laser**
-
- * Enable 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**
-
- * Enable 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**
-
- * Enable 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**
-
- * Enable 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**
-
- * Enable 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.*
diff --git a/docs/predefined_presets.md b/docs/predefined_presets.md
deleted file mode 100644
index ba40063c..00000000
--- a/docs/predefined_presets.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# Predefined presets
-
-| Preset | Features | Recommended use cases |
-| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
-| Default | - Best visual perception``- Overall good performance in accuracy, fill rate, tiny objects, etc. | - Generic `
`- Robotics |
-| Hand | - Clear hand and finger edges | - Gesture recognition |
-| High Accuracy | - Depth of high confidence `
`- Barely noise depth values `
`- Lower fill rate | - Collision avoidance `
`- Object scanning |
-| High Density | - Higher fill rate `
`- More tiny objects `
`- May suffer from noise depth values | - Object recognition `
`- Pick & place `
`- Foreground & background animation |
-| Medium Density | - Balanced performance in fill rate and accuracy `
`- In comparison to Default: lower fill rate, better edge quality | - Generic and alternative to Default |
-| Custom | - User defined Preset `
`- 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 `
`- 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.
-
-
diff --git a/orbbec_camera/examples/README.MD b/orbbec_camera/examples/README.MD
index cdb515b1..8457fef3 100644
--- a/orbbec_camera/examples/README.MD
+++ b/orbbec_camera/examples/README.MD
@@ -4,19 +4,13 @@ These simple examples demonstrate how to easily use the camera with OrbbecSDK_RO
## List of Examples:
-| Name | Description | Experience Level |
-| :---------------------------------------------------------------------------: | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------- |
-| [Start_camera_node](./start_camera_node) | Hhow to launch the camera node with a colored point cloud feature enabled using OrbbecSDK_ROS2. | ⭐️ |
-| [Align_depth_color](./align_depth_color) | Align the depth image with the color image to create an overlay image. | ⭐️ |
-| [Point_cloud](./point_cloud) | How to enable point cloud data output from the camera node and visualize it using RViz2 | ⭐️ |
-| [Lower_cpu_usage](./lower_cpu_usage) | How to reduce CPU usage for one or more cameras in a ROS 2 environment. | ⭐️ |
-| [Net_camera](./net_camera) | How to use Net camera in OrbbecSDK_ROS2(Only Femto Mega nad Gemini 335Le) | ⭐️ |
-| [Gmsl_camera](./gmsl_camera) | How to use GMSL camera.(Only Gemini 335Lg) | ⭐️ |
-| [Benchmark](./benchmark) | The goal of this tool is to benchmark the performance of various OrbbecSDK_ROS2 camera configurations. | ⭐️⭐️ |
-| [Disparity_search_offset](./disparity_search_offset) | Use the disparity_search_offset function in the Gemini330 series cameras (minimum camera firmware version[1.4.60](https://www.orbbec.com/docs/g330-firmware-release/)). | ⭐️⭐️ |
-| [Interleave_ae_mode](./interleave_ae_mode) | 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/)) | ⭐️⭐️ |
-| [Multi_camera_synced](./multi_camera_synced) | How to use multi-camera synced with OrbbecSDK_ROS2 | ⭐️⭐️ |
-| [Multi_camera_synced_verification_tool](./multi_camera_synced_verification_tool) | How to verify the synchronization accuracy of multi-camera synchronization. | ⭐️⭐️⭐️ |
+| Name | Description | Experience Level | Document |
+| :---------------------------------------------------------------------------: | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------- | ----------------------------------------------------------------------------- |
+| [Lower_cpu_usage](./lower_cpu_usage) | How to reduce CPU usage for one or more cameras in a ROS 2 environment. | ⭐️ | [Lower_cpu_usage](https://orbbec.github.io/OrbbecSDK_ROS2/source/5_advanced_guide/performance/lower_cpu_usage.html) |
+| [Net_camera](./net_camera) | How to use Net camera in OrbbecSDK_ROS2(Only Femto Mega nad Gemini 335Le) | ⭐️ | [Net_camera](https://orbbec.github.io/OrbbecSDK_ROS2/source/5_advanced_guide/configuration/net_camera.html) |
+| [Gmsl_camera](./gmsl_camera) | How to use GMSL camera.(Only Gemini 335Lg) | ⭐️ | [Gmsl_camera](https://orbbec.github.io/OrbbecSDK_ROS2/source/5_advanced_guide/multi_camera/gmsl_camera.html) |
+| [Benchmark](./benchmark) | The goal of this tool is to benchmark the performance of various OrbbecSDK_ROS2 camera configurations. | ⭐️⭐️ | [Benchmark](https://orbbec.github.io/OrbbecSDK_ROS2/source/5_advanced_guide/performance/benchmark.html) |
+| [Multi_camera_synced_verification_tool](./multi_camera_synced_verification_tool) | How to verify the synchronization accuracy of multi-camera synchronization. | ⭐️⭐️⭐️ | [Multi_camera_synced_verification_tool](https://orbbec.github.io/OrbbecSDK_ROS2/source/5_advanced_guide/multi_camera/multi_camera_synced_verification_tool.html) |
diff --git a/orbbec_camera/examples/align_depth_color/README.MD b/orbbec_camera/examples/align_depth_color/README.MD
deleted file mode 100644
index f3024b65..00000000
--- a/orbbec_camera/examples/align_depth_color/README.MD
+++ /dev/null
@@ -1,39 +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:
-
-
diff --git a/orbbec_camera/examples/align_depth_color/image/image3.png b/orbbec_camera/examples/align_depth_color/image/image3.png
deleted file mode 100644
index 58322895..00000000
Binary files a/orbbec_camera/examples/align_depth_color/image/image3.png and /dev/null differ
diff --git a/orbbec_camera/examples/align_depth_color/image/image4.jpg b/orbbec_camera/examples/align_depth_color/image/image4.jpg
deleted file mode 100644
index b204c845..00000000
Binary files a/orbbec_camera/examples/align_depth_color/image/image4.jpg and /dev/null differ
diff --git a/orbbec_camera/examples/benchmark/README.MD b/orbbec_camera/examples/benchmark/README.MD
deleted file mode 100644
index 419c69c6..00000000
--- a/orbbec_camera/examples/benchmark/README.MD
+++ /dev/null
@@ -1,51 +0,0 @@
-# Ob_benchmark tool
-
-> 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)
-
-## Usage Instructions
-
-### Tool Configuration ([start_benchmark_params.json](../../config/tools/startbenchmark/start_benchmark_params.json))
-
-```json
-{
- "start_benchmark_params": {
- "camera_name": [
- "camera_01",
- "camera_02",
- "camera_03",
- "camera_04"
- ],
- "process_name": "component_conta",
- "switch_cycle": 300,
- "test_cycle": 1,
- "skip_number": 30
- }
-}
-
-```
-
-* `camera_name`: Names of the cameras to be configured. Example: `"camera_01"`, `"camera_02"`, etc.
-* `process_name`: The name of the process to be monitored. For example, `"component_conta"` will monitor the data of the container process.
-* `switch_cycle`: The cycle time for switching configurations, in seconds. For example, setting it to `300` means the configuration will switch every 300 seconds.
-* `test_cycle`: The testing cycle, in seconds. For example, setting it to `1` means the tool will collect data for the monitored process every 1 second.
-* `skip_number`: The number of data points to skip. For example, setting it to `30` means that the first 30 data points will be ignored.
-
-### Camera configuration (launch files)
-
-In the launch folder, there are multiple\.launch.py files (`ob_benchmark_0.launch.py`, `ob_benchmark_1.launch.py`, ..., `ob_benchmark_19.launch.py`). Each file corresponds to a different camera configuration.
-
-### Running the ob_benchmark tool
-
-To run the tool, use the following commands:
-
-```bash
-source install/setup.bash
-ros2 run orbbec_camera ob_benchmark_node
-```
-
-### Output Data Files
-
-The output data files will be stored in the ob_benchmark folder with filenames like `0.csv`, `1.csv`, ..., 19.csv. For example:
-
-* `0.csv` contains data from the `ob_benchmark_0.launch.py` configuration.
-* `1.csv` contains data from the `ob_benchmark_1.launch.py` configuration.
diff --git a/orbbec_camera/examples/disparity_search_offset/README.MD b/orbbec_camera/examples/disparity_search_offset/README.MD
deleted file mode 100644
index e61ae48f..00000000
--- a/orbbec_camera/examples/disparity_search_offset/README.MD
+++ /dev/null
@@ -1,47 +0,0 @@
-# Disparity_search_offset
-
-> This section describes how to use the disparity_search_offset function in the Gemini330 series cameras (minimum camera firmware version [1.4.60](https://www.orbbec.com/docs/g330-firmware-release/)).Disparity_search_offset is effective only for1280×720, 1280×800 and 640×400 resolutions of depth stream.
-
-## Function Introduction
-
-The definition of disparity search range: For any pixel *(u_l, v)* in the left image, by default, the corresponding disparity search range in the right image is *[ (u_l - 255, v)*, *(u_l, v) ]*, where the disparity search length is 256 and the maximum integer disparity is 255. If the starting point of the search is adjusted to *[ (u_l - 255 - offset, v)*, *(u_l - offset, v) ]*, the offset is defined as the disparity shift. Therefore, our disparity search range configuration includes both the disparity search length and the search position offset (which can also be referred to as the disparity shift).
-
-
-
-## Parameter Introduction
-
-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_search_offset` : Disparity search offset value,Disparity search offset value, can be set from 0 to 127.
-
-* `disparity_offset_config` : Disparity search offset interleave frames.
-
-* `offset_index0` : Frame 0 disparity search offset value.
-
-* `offset_index1` : Frame 1 disparity search offset value.
-
-| disparity range mode | disparity search offset | Minimum depth of inclined wall (mm) |
-| :------------------: | :---------------------: | :---------------------------------: |
-| 64 | 85 | Gemini 335L 388-406 |
-| 64 | 127 | Gemini 335L 302-317 |
-
-| disparity range mode | disparity search offset | Minimum depth of inclined wall (mm) |
-| :------------------: | :---------------------: | :---------------------------------------------: |
-| 128 | 0 | Gemini 335 233-249
Gemini 335L 453-475 |
-| 128 | 45 | Gemini 335 172-184
Gemini 335L 334-349 |
-| 128 | 127 | Gemini 335 117-125
Gemini 335L 226-236 |
-
-| disparity range mode | disparity search offset | Minimum depth of inclined wall (mm) |
-| :------------------: | :---------------------: | :---------------------------------: |
-| 256 | 85 | Gemini 335L 169-178 |
-| 256 | 127 | Gemini 335L 151-158 |
-
-## Run the launch
-
-Setting the disparity_search_offset parameter,`colcon build` again and run launch
-
-```bash
-ros2 launch orbbec_camera gemini_330_series.launch.py
-```
diff --git a/orbbec_camera/examples/disparity_search_offset/image/search_offset0.png b/orbbec_camera/examples/disparity_search_offset/image/search_offset0.png
deleted file mode 100644
index 27237215..00000000
Binary files a/orbbec_camera/examples/disparity_search_offset/image/search_offset0.png and /dev/null differ
diff --git a/orbbec_camera/examples/gmsl_camera/README.MD b/orbbec_camera/examples/gmsl_camera/README.MD
deleted file mode 100644
index b979d560..00000000
--- a/orbbec_camera/examples/gmsl_camera/README.MD
+++ /dev/null
@@ -1,50 +0,0 @@
-# GMSL_camera
-
-> This section describes how to use GMSL camera in OrbbecSDK_ROS2.Currently, only Gemini 335Lg GMSL devices are supported, and other GMSL devices will be supported in the near future.
-
-## Single GMSL camera
-
-The usage of GMSL camera in OrbbecSDK_ROS2 is the same as that of Gemini 330 series camera via USB.
-
-```bash
-ros2 launch orbbec_camera gemini_330_gmsl.launch.py
-```
-
-## Multi GMSL camera
-
-To get the `usb_port` of the GMSL camera, plug in the camera and run the following command in the terminal:
-
-```bash
-ros2 run orbbec_camera list_devices_node
-```
-
-For example, the obtained gmsl camera `usb_port`: `gmsl2-1`
-
-Go to the [multi_gmsl_camera.launch.py](./multi_gmsl_camera.launch.py) file and change the `usb_port`.
-
-```bash
-ros2 launch orbbec_camera multi_gmsl_camera.launch.py
-```
-
-> Note: By default, multi_gmsl_camera.launch.py only starts color and left_ir. If you want to start other sensors, please go to [camera_secondary_params.yaml](../../config/camera_secondary_params.yaml) to modify them.
-
-## Multi GMSL camera synced
-
-First, please see how to use [multi_camera_synced](../multi_camera_synced/README.MD).
-
-In addition, GMSL multi-camera synced does not require Multi-Camera Sync Hub Pro, so there is no need to set the `primary` mode. Each GMSL camera is `secondary`.
-
-### Additional Parameter Settings
-
-* `gmsl_trigger_fps` : set hardware soc trigger source frame rate.
-* `enable_gmsl_trigger` : enable hardware soc trigger.
-
-### Run the launch
-
-Please refer to the configuration in [multi_gmsl_camera_synced.launch.py.](multi_gmsl_camera_synced.launch.py)
-
-```bash
-ros2 launch orbbec_camera multi_gmsl_camera_synced.launch.py
-```
-
-> Note: By default, multi_gmsl_camera_synced.launch.py only starts color and left_ir. If you want to start other sensors, please go to [camera_secondary_params.yaml](../../config/camera_secondary_params.yaml) and [camera_params.yaml](../../config/camera_params.yaml) to modify them.
diff --git a/orbbec_camera/examples/interleave_ae_mode/README.MD b/orbbec_camera/examples/interleave_ae_mode/README.MD
deleted file mode 100644
index b8d6eb3f..00000000
--- a/orbbec_camera/examples/interleave_ae_mode/README.MD
+++ /dev/null
@@ -1,81 +0,0 @@
-# Using interleave_ae with Gemini330 series cameras
-
-> 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
-
-The interleave_ae related parameters are set in [gemini_330_series.launch.py](../../launch/gemini_330_series.launch.py)
-
-* `interleave_ae_mode` : Set laser or hdr interleave.
-
-* `interleave_frame_enable` : enable interleave frame mode.
-
-* `interleave_skip_enable` : enable skip frame mode.
-
-* `interleave_skip_index` : Set 0 for skip pattern ir, set 1 for skip flood ir.
-
-### interleave hdr
-
-When the `interleave_ae_mode` parameter is set to `hdr` and `interleave_frame_enable `is set to `true`, interleave hdr will be enabled
-
-* `hdr_index1_laser_control` : Frame 1 laser switch settings.
-
-* `hdr_index1_depth_exposure` : Frame 1 depth exposure value setting, not in AE mode.
-
-* `hdr_index1_depth_gain` : Frame 1 depth gain value setting, not in AE mode.
-
-* `hdr_index1_ir_brightness` : Frame 1 ir gain value setting.
-
-* `hdr_index1_ir_ae_max_exposure` : Frame 1 ir maximum exposure value setting in AE (auto exposure).
-
-* `hdr_index0_laser_control`: Frame 0 laser switch settings.
-
-* `hdr_index0_depth_exposure`: Frame 0 depth exposure value setting, not in AE mode.
-
-* `hdr_index0_depth_gain` : Frame 0 depth gain value setting, not in AE mode.
-
-* `hdr_index0_ir_brightness` : Frame 0 ir gain value setting.
-
-* `hdr_index0_ir_ae_max_exposure` : Frame 0 ir maximum exposure value setting in AE (auto exposure).
-
-### interleave laser
-
-When the `interleave_ae_mode` parameter is set to `laser` and `interleave_frame_enable `is set to `true`, interleave laser will be enabled
-
-* `laser_index1_laser_control` : Frame 1 laser switch settings.
-
-* `laser_index1_depth_exposure` : Frame 1 depth exposure value setting, not in AE mode.
-
-* `laser_index1_depth_gain` : Frame 1 depth gain value setting, not in AE mode.
-
-* `laser_index1_ir_brightness` : Frame 1 ir gain value setting.
-
-* `laser_index1_ir_ae_max_exposure` : Frame 1 ir maximum exposure value setting in AE (auto exposure).
-
-* `laser_index0_laser_control` : Frame 0 laser switch settings.
-
-* `laser_index0_depth_exposure` : Frame 0 depth exposure value setting, not in AE mode.
-
-* `laser_index0_depth_gain` : Frame 0 depth gain value setting, not in AE mode.
-
-* `laser_index0_ir_brightness` : Frame 0 ir gain value setting.
-
-* `laser_index0_ir_ae_max_exposure` : Frame 0 ir maximum exposure value setting in AE (auto exposure).
-
-## Run the launch
-
-Setting the interleave_ae parameter,`colcon build` again and run launch
-
-```bash
-ros2 launch orbbec_camera gemini_330_series.launch.py
-```
-
-#### Example Visualization
-
-
-
-
-
-## Multi_camera_synced + Interleave_ae
-
-Please refer to [multi_camera_synced](../multi_camera_synced/README.MD) and [Parameter Introduction](#parameter-introduction)
diff --git a/orbbec_camera/examples/interleave_ae_mode/image/interleave_ae0.jpeg b/orbbec_camera/examples/interleave_ae_mode/image/interleave_ae0.jpeg
deleted file mode 100644
index 7655e93f..00000000
Binary files a/orbbec_camera/examples/interleave_ae_mode/image/interleave_ae0.jpeg and /dev/null differ
diff --git a/orbbec_camera/examples/interleave_ae_mode/image/interleave_ae1.jpeg b/orbbec_camera/examples/interleave_ae_mode/image/interleave_ae1.jpeg
deleted file mode 100644
index ac4a770d..00000000
Binary files a/orbbec_camera/examples/interleave_ae_mode/image/interleave_ae1.jpeg and /dev/null differ
diff --git a/orbbec_camera/examples/lower_cpu_usage/README.MD b/orbbec_camera/examples/lower_cpu_usage/README.MD
deleted file mode 100644
index 08b77a69..00000000
--- a/orbbec_camera/examples/lower_cpu_usage/README.MD
+++ /dev/null
@@ -1,86 +0,0 @@
-## Reducing CPU Usage with Orbbec ROS Package
-
-This document outlines strategies for minimizing CPU usage in the **OrbbecSDK_ROS2 v2** environment when using **Gemini 330 series cameras**. The firmware version must be **no lower than 1.4.10**, and `device` should be set to **Default**.
-
-### Recommended Settings for Lower CPU Usage
-
-To achieve the lowest possible CPU usage in OrbbecSDK_ROS2, it is recommended to configure the following parameters.
-
-| Parameter | Recommendation | Note |
-| :--------------: | :------------------------------------: | :--------------------------------------------: |
-| `uvc_backend` | `v4l2` | Lower CPU usage compared to `libuvc` |
-| `color_format` | `RGB` | Lower CPU usage than `MJPG` |
-| `filter` | Only `hardware_noise_removal_filter` | Other filters significantly increase CPU usage |
-
-### Launch Files Used for Testing
-
-* `gemini_330_series_lower_cpu_usage.launch.py`
-* `multi_camera_lower_cpu_usage.launch.py`
-
-### Test environment
-
-#### Hardware Configuration
-
-* **CPU**: Intel i7-8700 @ 3.20GHz
-* **Memory**: 24 GB
-* **Storage**: Micron 2200S NVMe 256GB
-* **GPU**: NVIDIA GeForce GTX 1660Ti
-* **OS**: Ubuntu22.04
-
-#### ROS Configuration
-
-* **ROS Version**: ROS2 Humble
-* **SDK Version**: OrbbecSDK_ROS2 v2.2.1
-
-#### Camera Setup
-
-* Devices: 2x Gemini 335, 1x Gemini 336, 1x Gemini 336L
-* Firmware Version: 1.4.10
-
-### Test Setup
-
-* **Stream Settings:**
- * Depth / IR Left / IR Right: 848×480 @ 30fps
- * Color: 848×480 @ 30fps
-
-Note: The following CPU usage data focuses on `uvc_backend`, `color_format` and various filter combinations.
-
-### Test Results
-
-### 1. `uvc_backend` Comparison (RGB format)
-
-| libuvc CPU Usage | v4l2 CPU Usage | Absolute Change |
-| :--------------: | :------------: | :-------------: |
-| 182.8% | 118.8% | -64.0% |
-
-The CPU usage can be significantly reduced with v4l2 backend. In our implementation, v4l2 works without requiring any patches to the Linux kernel, allowing users to easily switch between v4l2 and libuvc and maintaining full compatibility with standard Linux distributions.
-
-### 2. `color_format` Comparison (MJPG vs RGB)
-
-| Backend | MJPG CPU Usage | RGB CPU Usage | Absolute Change |
-| :-----: | :------------: | :-----------: | :-------------: |
-| libuvc | 347.7% | 182.8% | -164.9% |
-| v4l2 | 170.0% | 118.8% | -51.2% |
-
-The CPU usage can be reduced if the RGB format is selected instead of MJPG, since the decoding of MJPG image will consume the host CPU resource.
-
-### 3. Filter Configuration Impact
-
-| Filters Applied | libuvc CPU Usage | CPU Usage Increase | v4l2 CPU Usage | CPU Usage Increase |
-| ----------------------------------------------------- | ---------------- | ------------------ | -------------- | ------------------ |
-| No Filter (benchmark) | 182.8% | 0.0%(benchmark) | 118.8% | 0.0%(benchmark) |
-| `(software)noise_removal_filter` | 218.0% | +35.2% | 128.5% | +9.7% |
-| `(software)noise_removal_filter + spatial_filter` | 469.6% | +286.8% | 336.7% | +217.9% |
-| `hardware_noise_removal_filter` | 186.3% | +3.5% | 115.4% | -3.4% |
-| `hardware_noise_removal_filter + spatial_filter` | 251.3% | +68.5% | 152.5% | +33.7% |
-
-Based on the test results, using only the `hardware_noise_removal_filter` results in a negligible change in CPU usage for both `libuvc` (+3.5%) and `v4l2` (-3.4%) compared to the no-filter benchmark, as this filter runs internally on the camera hardware. In contrast, other filters execute on the host system. Adding the `spatial_filter` to the hardware filter leads to a moderate increase in CPU usage, while applying the software-based `noise_removal_filter` —either alone or combined with `spatial_filter` —significantly increases CPU load. To maintain low CPU usage, it is recommended to avoid software-based filters and rely solely on the `hardware_noise_removal_filter`.
-
-## Further Optimization
-
-| Parameter | Recommendation | Note |
-| :----------------------------: | :----------------------------------------------: | :---------------------------------------------: |
-| `depth_registration` | `false` or `true` with `align_mode=HW` | Software alignment consumes more CPU |
-| `enable_point_cloud` | `false` | Disabling point cloud reduces CPU usage |
-| `enable_colored_point_cloud` | `false` | Disabling colored point cloud reduces CPU usage |
-
diff --git a/orbbec_camera/examples/multi_camera/README.MD b/orbbec_camera/examples/multi_camera/README.MD
deleted file mode 100644
index a6d514fd..00000000
--- a/orbbec_camera/examples/multi_camera/README.MD
+++ /dev/null
@@ -1,91 +0,0 @@
-# Multi-Camera
-
-- To get the `usb_port` of the camera, plug in the camera and run the following command in the terminal:
-
-```bash
-ros2 run orbbec_camera list_devices_node
-```
-
-- Set the `device_num` parameter to the number of cameras you have.
-- Go to the `OrbbecSDK_ROS2/launch/multi_xxx.launch.py` file and change the `usb_port`.
-- Don't forget to put the `include` tag inside the `group` tag.
- Otherwise, the parameter values of different cameras may become contaminated.
-
-```python
-from launch import LaunchDescription
-from launch.actions import DeclareLaunchArgument, IncludeLaunchDescription, GroupAction, ExecuteProcess
-from launch.launch_description_sources import PythonLaunchDescriptionSource
-from launch_ros.actions import Node
-from ament_index_python.packages import get_package_share_directory
-import os
-
-
-def generate_launch_description():
- # Include launch files
- package_dir = get_package_share_directory('orbbec_camera')
- launch_file_dir = os.path.join(package_dir, 'launch')
- launch1_include = IncludeLaunchDescription(
- PythonLaunchDescriptionSource(
- os.path.join(launch_file_dir, 'gemini2L.launch.py')
- ),
- launch_arguments={
- 'camera_name': 'camera_01',
- 'usb_port': '6-2.4.4.2', # replace your usb port here
- 'device_num': '2'
- }.items()
- )
-
- launch2_include = IncludeLaunchDescription(
- PythonLaunchDescriptionSource(
- os.path.join(launch_file_dir, 'gemini2L.launch.py')
- ),
- launch_arguments={
- 'camera_name': 'camera_02',
- 'usb_port': '6-2.4.1', # replace your usb port here
- 'device_num': '2'
- }.items()
- )
-
- # If you need more cameras, just add more launch_include here, and change the usb_port and device_num
-
- # Launch description
- ld = LaunchDescription([
- GroupAction([launch1_include]),
- GroupAction([launch2_include]),
- ])
-
- return ld
-
-```
-
-- To launch the cameras, run the following command:
-
-```bash
-ros2 launch orbbec_camera multi_camera.launch.py
-```
-
-## No Data Stream from Multiple Cameras
-
-**Insufficient Power Supply**:
-
-- Ensure that each camera is connected to a separate hub.
-- Use a powered hub to provide sufficient power to each camera.
-
-**High Resolution**:
-
-- Try lowering the resolution to resolve data stream issues.
-
-**Increase usbfs_memory_mb Value**:
-
-- Increase the `usbfs_memory_mb` value to 128MB (this is a reference value and can be adjusted based on your system’s needs)
- by running the following command:
-
-```bash
- echo 128 | sudo tee /sys/module/usbcore/parameters/usbfs_memory_mb
-```
-
-- To make this change permanent, check [this link](https://github.com/OpenKinect/libfreenect2/issues/807).
-
-## Image topic frame rate too low from Multiple Cameras
-
-Refer to the [Fast DDS Configuration](./docs/fastdds_tuning.md) file.
diff --git a/orbbec_camera/examples/multi_camera_synced/README.MD b/orbbec_camera/examples/multi_camera_synced/README.MD
deleted file mode 100644
index 1fec01d5..00000000
--- a/orbbec_camera/examples/multi_camera_synced/README.MD
+++ /dev/null
@@ -1,55 +0,0 @@
-# Multi_camera synced Instructions
-
-> The purpose of this document is to explain how to use multi-camera synced with OrbbecSDK_ROS2
-
-## Setup instructions
-
-* Please read the Multi-Camera Synchronization Setup Guide:[Multi-Camera Synchronization Setup](https://www.orbbec.com/docs/set-up-cameras-for-external-synchronization_v1-2/)
-* Make sure the camera is correctly connected to the multi-camera synchronizer.
-
-
-
-### Checking camera port with OrbbecSDK_ROS2
-
-```bash
-ros2 run orbbec_camera list_devices_node
-```
-
-### OrbbecSDK_ROS2 multi-camera synced configuration
-
-Open multi_camera_synced.launch.py, and configure the camera settings as shown below:
-
-
-
-1. `gemini_330_series.launch.py` is the launch file for starting the camera.
-
-2. Set `camera_name` to `G330_0`. For example, the published color image topic will be `/G330_0/color/image_raw`.
-
-3. Set `usb_port` to `2-2`, indicating that the camera device on port `2-2` is being used. This value can be found in the output of the `ros2 run orbbec_camera list_devices_node` command.
-
-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.
-
-| **Pattern Nam**e | **Setting effect description** |
-| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| free_run | -Support different frame rate settings
The -8-pin synchronization interface does not support external output of synchronization-related signals |
-| standalone(default) | ● Same as Primary by default
● Built-in RGBD frame synchronization
● 8-pin synchronous interface does not output signals to the outside by default |
-| primary | ● Set as primary camera
● 8-pin synchronous interface output signal to external device |
-| secondary | ● Set as secondary (passive synchronization; When there is a hardware continuous trigger signal input from the outside and the continuous trigger signal matches the currently set frame rate, the image is collected according to the external trigger signal; When there is no external trigger signal, the flow is stopped)
● 8-pin synchronous interface output signal to external device |
-| secondary_synced | ● Set to secondary synchronization (passive synchronization; When there is a hardware continuous trigger signal input from the outside and the continuous trigger signal matches the currently set frame rate, the image is collected according to the external trigger signal; When there is no external trigger signal, the image is collected according to the internal trigger signal at the set frame rate)
● 8-pin synchronous interface output signal to external device |
-| hardware_triggering | ● Set as hardware trigger (passive trigger; When there is a hardware trigger signal input from the outside and the trigger signal time interval is not less than the current upper limit, the image is collected according to the external trigger signal; When there is no external trigger signal, the image is not collected)
● 8-pin synchronous interface output signal to external device |
-| software_triggering | ● Set as software trigger (passive trigger; When there is a trigger command input from the host computer and the trigger command time interval is not less than the current upper limit, the image is collected according to the trigger command; When there is no trigger command, the image is not collected)
● 8-pin synchronous interface output signal to external device |
-
-* The master camera should be launched last.
-* Ideally, there should be a 2-second delay between starting each camera.
-
-### Run the following command to start the multi-camera synced
-
-```bash
-ros2 launch orbbec_camera multi_camera_synced.launch.py
-```
diff --git a/orbbec_camera/examples/multi_camera_synced/image/multi_camera_synced1.png b/orbbec_camera/examples/multi_camera_synced/image/multi_camera_synced1.png
deleted file mode 100644
index 87f2cbd5..00000000
Binary files a/orbbec_camera/examples/multi_camera_synced/image/multi_camera_synced1.png and /dev/null differ
diff --git a/orbbec_camera/examples/multi_camera_synced/image/multi_camera_synced2.png b/orbbec_camera/examples/multi_camera_synced/image/multi_camera_synced2.png
deleted file mode 100644
index 9c883b87..00000000
Binary files a/orbbec_camera/examples/multi_camera_synced/image/multi_camera_synced2.png and /dev/null differ
diff --git a/orbbec_camera/examples/multi_camera_synced_verification_tool/README.MD b/orbbec_camera/examples/multi_camera_synced_verification_tool/README.MD
deleted file mode 100644
index d4893ccf..00000000
--- a/orbbec_camera/examples/multi_camera_synced_verification_tool/README.MD
+++ /dev/null
@@ -1,159 +0,0 @@
-# Multi_camera_synced_verification_tool
-
-> This article will introduce how to verify the synchronization accuracy of multi-camera synchronization.
->
-> First, please see how to use [multi_camera_synced](../multi_camera_synced/README.MD).
-
-## Directory Structure
-
-```plaintext
-.
-├── multicamera_sync/
-│ ├── output/
-│ ├──20250218102900/
-│ ├──DevicesInfo.txt
-│ ├──StreamProfileInfo.txt
-│ ├── Python/
-│ ├──Config.ini
-├── gemini_330_series_synced_verify.launch.py
-├── multi_camera_synced_verify.launch.py
-```
-
-### multicamera_sync
-
-* `gemini_330_series_synced_verify.launch.py` : Single camera runs launch, which provides the camera running node for multi_camera_synced_verify.launch.py.
-* `multi_camera_synced_verify.launch.py` : Multi camer synced + launch of save_rgbir tool.
-
-#### output
-
-> The `ouput` folder is the folder where the camera pictures are output
-
-In the output example provided
-
-* `20250218102900` : Represents the camera image information collected at 10:29:00 on February 18, 2025.
-* `TotalModeFrames` : Camera image information storage directory.
-* `results-2025-02-25_163648` : The result after analyzing and matching the image information of TotalModeFrames.
-* `DevicesInfo.txt` : Camera equipment basic information (need to be modified).
-* `StreamProfileInfo.txt` : Camera video stream information (no need to modify).
-
-#### Python
-
-* `Config.ini` : Configuration file for Python analysis script (need to be modified).
-
-## Preparation for operation
-
-### save_rgbir node
-
-Edit multi_camera_synced_verify.launch.py and fill in the activated camera device,we can find that save_rgbir is started at the end.
-
-> IMPORTANT
->
-> If you are using ROS 2 Foxy, you need to launch the save_rgbir node first.
-
-```python
-# Launch description
- ld = LaunchDescription(
- [
- shared_orbbec_container,
- TimerAction(period=0.0, actions=[GroupAction([launch2_include])]),
- TimerAction(period=2.0, actions=[GroupAction([launch1_include])]),
- # The primary camera should be launched at last
- TimerAction(period=6.0, actions=[GroupAction([save_rgbir])]),
- # save_rgbir is synced verification tool
- ]
- )
-
- return ld
-```
-
-save_rgbir is a tool for saving images. The configuration file of this tool is in [multi_save_rgbir_params.json](../../config/tools/multisavergbir/multi_save_rgbir_params.json).
-
-```json
-{
- "save_rgbir_params": {
- "time_domain": "global",
- "usb_ports": [
- "2-1",
- "2-3"
- ],
- "camera_name": [
- "camera_01",
- "camera_02"
- ]
- }
-}
-```
-
-* `time_domain` : Timestamp Type
-* `usb_ports` : "primary", "secondary 1", "secondary 2", "secondary 3", fill in as many usb_ports as there are cameras
-* `camera_name` : The name of the camera setting, for example: camera_01
-
-### DevicesInfo.txt
-
-Edit DevicesInfo.txt. Only the `primarySerialNumber`, `index` and `serialNumber` parameters need to be changed. Other parameters do not need to be changed.Refer to the example of [20250218102900](./multicamera_sync/output/20250218102900).
-
-* `primarySerialNumber` : The SN serial number of the primary camera
-* `index` : Camera index
-* `serialNumber` : The SN serial number of the camera
-
-### Config.ini
-
-Edit Config.ini.Modify `frameRate` and `tspRangeThreshold`.
-
-## Run this example
-
-### Run launch and save camera pictures
-
-* First terminal
-
-```bash
-ros2 launch orbbec_camera multi_camera_synced_verify.launch.py
-```
-
-* Second terminal
-
-```bash
-ros2 service call /save_rgbir/start_capture orbbec_camera_msgs/srv/SetInt32 '{data: 100}'
-```
-
-When the terminal displays "over", the image is saved.A new multicamera_sync folder will be generated under the workspace.
-
-#### Camera pictures naming format
-
-Take [color_SNCP1E5420006D_Index0_g1739874543227_f0_s1739874543327_e50_d16_.jpg](./multicamera_sync/output/20250218102900/TotalModeFrames/SNCP1E5420006D_Index0/color_SNCP1E5420006D_Index0_g1739874543227_f0_s1739874543327_e50_d16_.jpg) as an example
-
-* `color` : This image is a snapshot of the color stream.
-* `SNCP1E5420006D` : The camera's SN serial number is CP1E5420006D.
-* `Index0` : Camera 0 (usually referred to primary camera).
-* `g1739874543227` : “g” represents the global timestamp, which means the global timestamp of this frame is 1739874543227.
-* `f0` : The 0th picture of the color stream acquisition of this camera.
-* `s1739874543327` : "s" represents the timestamp of the current system, which means the current system timestamp of this frame is 1739874543327.
-* `e50` : The exposure of this frame is 50.
-* `d16` : The gain of this frame is 16.
-
-### Analyzing camera image data
-
-You need to copy the modified [Python folder](./multicamera_sync/Python) to the new multi_camera_synced subdirectory, and copy the modified [DevicesInfo.txt ](./multicamera_sync/output/20250218102900/DevicesInfo.txt)and [StreamProfileInfo.txt](./multicamera_sync/output/20250218102900/StreamProfileInfo.txt) to the same level directory as the TotalModeFrames folder.
-
-* Finally everything is ready, run the python script
-
-```bash
-cd multicamera_sync/Python
-python3 SyncFramesMain.py
-```
-
-After the operation is successful, you can view the synchronization effect in the `results folder`
-
-## Files that need to be changed
-
-### Analysis tools
-
-* [multi_save_rgbir_params.json](../../config/tools/multisavergbir/multi_save_rgbir_params.json)
-* [DevicesInfo.txt ](./multicamera_sync/output/20250218102900/DevicesInfo.txt)
-* [Config.ini](./multicamera_sync/Python/Config.ini)
-
-### Camera Configuration
-
-[camera_params.yaml](../../config/camera_params.yaml)(Camera startup parameter settings)
-
-[multi_camera_synced_verify.launch.py](./multi_camera_synced_verify.launch.py)
diff --git a/orbbec_camera/examples/multi_camera_synced_verification_tool/multicamera_sync/Python/Config.ini b/orbbec_camera/examples/multi_camera_synced_verification_tool/multicamera_sync/Python/Config.ini
index 573f6ace..fcfc7475 100644
--- a/orbbec_camera/examples/multi_camera_synced_verification_tool/multicamera_sync/Python/Config.ini
+++ b/orbbec_camera/examples/multi_camera_synced_verification_tool/multicamera_sync/Python/Config.ini
@@ -1,5 +1,8 @@
[Parameter]
-# 单位:FPS,请依据数据集实际帧率填写,否则会导致匹配不准确
+# Unit: FPS. Please fill in according to the actual dataset frame rate,
+# otherwise the matching will be inaccurate.
frameRate=30
-# 单位:ms,当匹配后某组数据帧的时间戳极差大于等于tspRangeThreshold,文件名会增加标注
-tspRangeThreshold=4
\ No newline at end of file
+# Unit: ms. When the timestamp range difference of a matched frame group
+# is greater than or equal to tspRangeThreshold, the file name will be marked.
+tspRangeThreshold=4
+
diff --git a/orbbec_camera/examples/multi_camera_synced_verification_tool/multicamera_sync/Python/README.md b/orbbec_camera/examples/multi_camera_synced_verification_tool/multicamera_sync/Python/README.md
new file mode 100644
index 00000000..e0805178
--- /dev/null
+++ b/orbbec_camera/examples/multi_camera_synced_verification_tool/multicamera_sync/Python/README.md
@@ -0,0 +1,7 @@
+## config_frameMatch.py
+
+**Definition of the three folders:**
+
+- **matchFrames**: Data constrained within a half-frame.
+- **notMatchFrames**: Data not constrained within a half-frame, unmatched.
+- **abnormal**: Data within the group that exceeds the `tspRangeThreshold` setting.
\ No newline at end of file
diff --git a/orbbec_camera/examples/multi_camera_synced_verification_tool/multicamera_sync/Python/SyncFramesMain.py b/orbbec_camera/examples/multi_camera_synced_verification_tool/multicamera_sync/Python/SyncFramesMain.py
index 9bdead08..e85cb04a 100644
--- a/orbbec_camera/examples/multi_camera_synced_verification_tool/multicamera_sync/Python/SyncFramesMain.py
+++ b/orbbec_camera/examples/multi_camera_synced_verification_tool/multicamera_sync/Python/SyncFramesMain.py
@@ -4,9 +4,7 @@ import json
import platform
def list_subdirectories(path):
- # 遍历指定目录
for f in os.listdir(path):
- # 判断是否是子目录
if os.path.isdir(os.path.join(path, f)):
yield f
@@ -58,26 +56,21 @@ def sync_frames(frames_dir):
execute_sync_width_pid(frames_dir, pid)
def main():
- # 指定目录路径
frames_output_path = os.path.abspath("../output")
- # 获取所有子目录
subdirectories = list(list_subdirectories(frames_output_path))
if not subdirectories:
print("No subdirectories found in the specified directory.")
- # 打印子目录列表并让用户选择
for i, subdir in enumerate(subdirectories):
print(f"{i + 1}. {subdir}")
- # 获取用户输入
choice = input("Please select a subdirectory by number (or 'q' to quit): ")
if choice.lower() == 'q':
return
- # 验证用户输入
is_index_valid = False
try:
index = int(choice) - 1
@@ -94,4 +87,4 @@ def main():
if __name__ == "__main__":
- main()
\ No newline at end of file
+ main()
diff --git a/orbbec_camera/examples/multi_camera_synced_verification_tool/multicamera_sync/Python/script/config_frameMatch-Astra2_new.py b/orbbec_camera/examples/multi_camera_synced_verification_tool/multicamera_sync/Python/script/config_frameMatch-Astra2_new.py
index 9c7bc6fd..b6551274 100644
--- a/orbbec_camera/examples/multi_camera_synced_verification_tool/multicamera_sync/Python/script/config_frameMatch-Astra2_new.py
+++ b/orbbec_camera/examples/multi_camera_synced_verification_tool/multicamera_sync/Python/script/config_frameMatch-Astra2_new.py
@@ -8,19 +8,22 @@ import configparser
from pathlib import Path
from datetime import datetime
-## Config.ini中配置
-# 单位:FPS,请依据数据集实际帧率填写,否则会导致匹配不准确
+## Config.ini configuration
+# Unit: FPS. Please fill in according to the actual dataset frame rate,
+# otherwise it will cause inaccurate matching.
frameRate = -1
-# 单位:ms,当匹配后某组数据帧的时间戳极差大于等于tspRangeThreshold,文件名会增加标注
+# Unit: ms. When the timestamp range difference of a matched frame group
+# is greater than or equal to tspRangeThreshold, the file name will be marked.
tspRangeThreshold = -1
-## Python脚本自动解析, 不要修改
-primaryId = '-1' #主机ID
-mainPythonWorkPath = "" # SyncFramesMain.py的工作目录
-sourceFramesPath = "" # 请勿修改,固定值,TotalMode目录路径
-sourceRootPath = "" # 存放TotalMode的根目录
-resultPath = "" # 保存sync分析结果
-streamProfileDict = dict() # 保存Python结果
+## Parsed automatically by Python script, DO NOT modify
+primaryId = '-1' # Host ID
+mainPythonWorkPath = "" # Working directory of SyncFramesMain.py
+sourceFramesPath = "" # DO NOT modify, fixed value, path to TotalMode directory
+sourceRootPath = "" # Root directory containing TotalMode
+resultPath = "" # Path to save sync analysis results
+streamProfileDict = dict() # Store Python results
+
class PictureInfo(object):
class Struct(object):
@@ -35,6 +38,7 @@ class PictureInfo(object):
def make_struct(self, deviceId, sensorType, syncTimeStamp, picturePath, deviceIdFull, fileExt):
return self.Struct(deviceId, sensorType, syncTimeStamp, picturePath, deviceIdFull, fileExt)
+
class StreamProfileInfo:
def __init__(self, sensorType, width, height, format, fps):
self.sensorType = sensorType
@@ -43,6 +47,7 @@ class StreamProfileInfo:
self.format = format
self.fps = fps
+
def initPrimaryId():
global primaryId
@@ -59,12 +64,13 @@ def initPrimaryId():
return False
for item in data['devices']:
- if 'isPrimaryDevice' in item and 'index' in item and item['isPrimaryDevice']:
+ if 'isPrimaryDevice' in item and 'index' in item and item['isPrimaryDevice']:
primaryId = str(item['index'])
return True
return False
+
def initSyncConfigParams():
global frameRate, tspRangeThreshold
@@ -73,10 +79,10 @@ def initSyncConfigParams():
print(f"Initliaze synchronized config parameter failed. {configPath} not exists.")
return False
- # 创建ConfigParser对象
+ # Create ConfigParser object
config = configparser.ConfigParser()
- # 读取ini文件
+ # Read ini file
config.read(configPath, 'utf-8')
if not config.has_option('Parameter', 'frameRate'):
@@ -99,11 +105,12 @@ def initSyncConfigParams():
return True
+
def getDeviceCount():
deviceInfoPath = f"{sourceRootPath}/DevicesInfo.txt"
if not os.path.exists(deviceInfoPath):
print(f"Get device count failed. {deviceInfoPath} not exists")
- return 0
+ return 0
with open(deviceInfoPath, 'r') as f:
data = json.load(f)
@@ -114,6 +121,7 @@ def getDeviceCount():
return len(data['devices'])
+
def initProfileInfoDict():
global streamProfileDict
@@ -139,6 +147,7 @@ def initProfileInfoDict():
return len(streamProfileDict.items()) > 0
+
def initResultDir():
global resultPath
timeText = datetime.now().strftime("%Y-%m-%d_%H%M%S")
@@ -146,6 +155,7 @@ def initResultDir():
if not os.path.exists(resultPath):
os.makedirs(resultPath)
+
def isFrameFile(fileName):
fileExt = os.path.splitext(fileName)
if len(fileExt) < 2:
@@ -154,6 +164,7 @@ def isFrameFile(fileName):
frameExts = {".jpeg", ".jpg", ".png", ".raw", "bmp"}
return fileExt[1] in frameExts
+
def initPictureInfoDictionary(rootFilePath, pictureInfoDict):
frameFileCount = 0
for dirpath, dirnames, filenames in os.walk(rootFilePath):
@@ -170,21 +181,22 @@ def initPictureInfoDictionary(rootFilePath, pictureInfoDict):
sensorType = pictureNameList[0].replace('#', '_')
syncTimeStamp = int(pictureNameList[3][1:])
- # 创建结构体
+ # Create struct
pictureInfo = PictureInfo()
info = pictureInfo.make_struct(deviceId, sensorType, syncTimeStamp, filePath, os.path.basename(dirpath), os.path.splitext(fileName)[1])
- # 格式化字典一个key对应一个数组
+ # Format dictionary: one key corresponds to one array
pictureInfoDict.setdefault(deviceId, []).append(info)
-
+
if 0 == frameFileCount:
print("initialize pictureInfoDict failed. Not found frame file")
+
def matchFrame(pictureInfoDict):
global primaryId, frameRate
global streamProfileDict
- # 获取比较图像数组,取第一个设备的Color数组来进行比较
+ # Get comparison image array, take the Color array of the first device for comparison
compareList = []
for key in pictureInfoDict:
listTmp = list(pictureInfoDict[key])
@@ -195,12 +207,12 @@ def matchFrame(pictureInfoDict):
sorted_dict = dict(sorted(pictureInfoDict.items(), key=lambda x: x[1], reverse=False))
pictureInfoDict = sorted_dict
- # 根据开流情况动态分析,减少循环次数
+ # Dynamically analyze based on stream opening status to reduce loop iterations
hasColorProfile = 'OB_SENSOR_COLOR' in streamProfileDict
hasDepthProfile = 'OB_SENSOR_DEPTH' in streamProfileDict
hasIRProfile = 'OB_SENSOR_IR' in streamProfileDict
- # 匹配相邻帧
+ # Match adjacent frames
resultDict = {}
consumedList = []
dictIndex = 0
@@ -209,7 +221,7 @@ def matchFrame(pictureInfoDict):
resultDict.setdefault(dictIndex, []).append(comparePic)
for key in pictureInfoDict:
listTmp = list(pictureInfoDict[key])
- # 对比彩色
+ # Compare Color
if hasColorProfile:
for info in listTmp:
if info.deviceId == primaryId and info.sensorType == comparePic.sensorType:
@@ -223,7 +235,7 @@ def matchFrame(pictureInfoDict):
consumedList.append(info)
break
- # 对Depth
+ # Compare Depth
if hasDepthProfile:
for info in listTmp:
if info.deviceId == primaryId and info.sensorType == comparePic.sensorType:
@@ -237,7 +249,7 @@ def matchFrame(pictureInfoDict):
consumedList.append(info)
break
- # IR
+ # Compare IR
if hasIRProfile:
for info in listTmp:
if info.deviceId == primaryId and info.sensorType == comparePic.sensorType:
@@ -251,7 +263,7 @@ def matchFrame(pictureInfoDict):
consumedList.append(info)
break
- # 计算偏差
+ # Calculate deviation
for info in resultDict[dictIndex]:
info.tspDiff = info.syncTimeStamp - comparePic.syncTimeStamp
@@ -333,7 +345,7 @@ def handleSyncFrames():
for info in listTmp:
if info.tspDiff >= tspRangeThreshold:
path = abnormalPath + str(key) + "_" + info.sensorType + "_" + info.deviceIdFull + "_" + str(
- info.syncTimeStamp) + "_[" + str(info.tspDiff) + "]" + "_xxxxxx" + info.fileExt
+ info.syncTimeStamp) + "_[" + str(info.tspDiff) + "]" + "_xxxxxx" + info.fileExt
shutil.copy(info.picturePath, path)
else:
path = abnormalPath + str(key) + "_" + info.sensorType + "_" + info.deviceIdFull + "_" + str(
@@ -346,6 +358,7 @@ def handleSyncFrames():
info.syncTimeStamp) + "_[" + str(info.tspDiff) + "]" + info.fileExt
shutil.copy(info.picturePath, newFilePath)
+
def main():
if not initPrimaryId():
print("Initialize primaryId failed. exit.")
@@ -377,9 +390,3 @@ if __name__ == '__main__':
main()
print("Finish of Astra2 synchronize frame.")
-
-
-
-
-
-
diff --git a/orbbec_camera/examples/multi_camera_synced_verification_tool/multicamera_sync/Python/script/config_frameMatch-systemTimestamp.py b/orbbec_camera/examples/multi_camera_synced_verification_tool/multicamera_sync/Python/script/config_frameMatch-systemTimestamp.py
index 59574e76..302917cb 100644
--- a/orbbec_camera/examples/multi_camera_synced_verification_tool/multicamera_sync/Python/script/config_frameMatch-systemTimestamp.py
+++ b/orbbec_camera/examples/multi_camera_synced_verification_tool/multicamera_sync/Python/script/config_frameMatch-systemTimestamp.py
@@ -8,19 +8,21 @@ import configparser
from pathlib import Path
from datetime import datetime
-## Config.ini中配置
-# 单位:FPS,请依据数据集实际帧率填写,否则会导致匹配不准确
+## Config.ini configuration
+# Unit: FPS. Please fill in according to the actual dataset frame rate,
+# otherwise it will cause inaccurate matching.
frameRate = -1
-# 单位:ms,当匹配后某组数据帧的时间戳极差大于等于tspRangeThreshold,文件名会增加标注
+# Unit: ms. When the timestamp range difference of a matched frame group
+# is greater than or equal to tspRangeThreshold, the file name will be marked.
tspRangeThreshold = -1
-## Python脚本自动解析, 不要修改
-primaryId = '-1' #主机ID
-mainPythonWorkPath = "" # SyncFramesMain.py的工作目录
-sourceFramesPath = "" # 请勿修改,固定值,TotalMode目录路径
-sourceRootPath = "" # 存放TotalMode的根目录
-resultPath = "" # 保存sync分析结果
-streamProfileDict = dict() # 保存Python结果
+## Parsed automatically by Python script, DO NOT modify
+primaryId = '-1' # Host ID
+mainPythonWorkPath = "" # Working directory of SyncFramesMain.py
+sourceFramesPath = "" # DO NOT modify, fixed value, path to TotalMode directory
+sourceRootPath = "" # Root directory containing TotalMode
+resultPath = "" # Path to save sync analysis results
+streamProfileDict = dict() # Store Python results
class PictureInfo(object):
class Struct(object):
@@ -73,10 +75,10 @@ def initSyncConfigParams():
print(f"Initliaze synchronized config parameter failed. {configPath} not exists.")
return False
- # 创建ConfigParser对象
+ # Create ConfigParser object
config = configparser.ConfigParser()
- # 读取ini文件
+ # Read ini file
config.read(configPath, 'utf-8')
if not config.has_option('Parameter', 'frameRate'):
@@ -103,7 +105,7 @@ def getDeviceCount():
deviceInfoPath = f"{sourceRootPath}/DevicesInfo.txt"
if not os.path.exists(deviceInfoPath):
print(f"Get device count failed. {deviceInfoPath} not exists")
- return 0
+ return 0
with open(deviceInfoPath, 'r') as f:
data = json.load(f)
@@ -170,13 +172,13 @@ def initPictureInfoDictionary(rootFilePath, pictureInfoDict):
sensorType = pictureNameList[0].replace('#', '_')
syncTimeStamp = int(pictureNameList[5][1:])
- # 创建结构体
+ # Create struct
pictureInfo = PictureInfo()
info = pictureInfo.make_struct(deviceId, sensorType, syncTimeStamp, filePath, os.path.basename(dirpath), os.path.splitext(fileName)[1])
- # 格式化字典一个key对应一个数组
+ # Format dictionary: one key corresponds to one array
pictureInfoDict.setdefault(deviceId, []).append(info)
-
+
if 0 == frameFileCount:
print("initialize pictureInfoDict failed. Not found frame file")
@@ -185,7 +187,7 @@ def matchFrame(pictureInfoDict):
global primaryId, frameRate
global streamProfileDict
- # 获取比较图像数组,取第一个设备的Color数组来进行比较
+ # Get comparison image array, take the Color array of the first device for comparison
compareList = []
for key in pictureInfoDict:
listTmp = list(pictureInfoDict[key])
@@ -193,14 +195,14 @@ def matchFrame(pictureInfoDict):
if info.deviceId == primaryId and info.sensorType == 'color':
compareList.append(info)
- # 根据开流情况动态分析,减少循环次数
+ # Dynamically analyze based on stream opening status to reduce loop iterations
hasColorProfile = 'OB_SENSOR_COLOR' in streamProfileDict
hasDepthProfile = 'OB_SENSOR_DEPTH' in streamProfileDict
hasIRProfile = 'OB_SENSOR_IR' in streamProfileDict
hasIRLeftProfile = 'OB_SENSOR_IR_LEFT' in streamProfileDict
hasIRRightProfile = 'OB_SENSOR_IR_RIGHT' in streamProfileDict
- # 匹配相邻帧
+ # Match adjacent frames
resultDict = {}
consumedList = []
dictIndex = 0
@@ -209,7 +211,7 @@ def matchFrame(pictureInfoDict):
resultDict.setdefault(dictIndex, []).append(comparePic)
for key in pictureInfoDict:
listTmp = list(pictureInfoDict[key])
- # 对比彩色
+ # Compare Color
if hasColorProfile:
for info in listTmp:
if info.deviceId == primaryId and info.sensorType == comparePic.sensorType:
@@ -223,7 +225,7 @@ def matchFrame(pictureInfoDict):
consumedList.append(info)
break
- # 对Depth
+ # Compare Depth
if hasDepthProfile:
for info in listTmp:
if info.deviceId == primaryId and info.sensorType == comparePic.sensorType:
@@ -251,7 +253,7 @@ def matchFrame(pictureInfoDict):
consumedList.append(info)
break
- # 左IR
+ # Left IR
if hasIRLeftProfile:
for info in listTmp:
if info.deviceId == primaryId and info.sensorType == comparePic.sensorType:
@@ -265,7 +267,7 @@ def matchFrame(pictureInfoDict):
consumedList.append(info)
break
- # 右IR
+ # Right IR
if hasIRRightProfile:
for info in listTmp:
if info.deviceId == primaryId and info.sensorType == comparePic.sensorType:
@@ -279,7 +281,7 @@ def matchFrame(pictureInfoDict):
consumedList.append(info)
break
- # 计算偏差
+ # Calculate deviation
minTsp = min(resultDict[dictIndex], key=lambda x: x.syncTimeStamp)
for info in resultDict[dictIndex]:
info.tspDiff = info.syncTimeStamp - minTsp.syncTimeStamp
@@ -314,13 +316,6 @@ def handleSyncFrames():
print("init pictureInfoDict failed. pictureInfoDict.len = 0")
return
- # # Dump pictureInfoDict
- # for key in pictureInfoDict:
- # print("===================key:%s" % key)
- # listTmp = list(pictureInfoDict[key])
- # for info in listTmp:
- # print("=====================value : deviceId:%s\tsensorType:%s\tsyncTimeStamp:%s\tpicturePath:%s" % (info.deviceId,info.sensorType,info.syncTimeStamp,info.picturePath))
-
deviceCount = getDeviceCount()
print("=================device count:%d" % deviceCount)
@@ -362,7 +357,7 @@ def handleSyncFrames():
for info in listTmp:
if info.tspDiff >= tspRangeThreshold:
path = abnormalPath + str(key) + "_" + info.sensorType + "_" + info.deviceIdFull + "_" + str(
- info.syncTimeStamp) + "_[" + str(info.tspDiff) + "]" + "_xxxxxx" + info.fileExt
+ info.syncTimeStamp) + "_[" + str(info.tspDiff) + "]" + "_xxxxxx" + info.fileExt
shutil.copy(info.picturePath, path)
else:
path = abnormalPath + str(key) + "_" + info.sensorType + "_" + info.deviceIdFull + "_" + str(
diff --git a/orbbec_camera/examples/multi_camera_synced_verification_tool/multicamera_sync/Python/script/config_frameMatch.py b/orbbec_camera/examples/multi_camera_synced_verification_tool/multicamera_sync/Python/script/config_frameMatch.py
index d2e8410d..9b89a655 100644
--- a/orbbec_camera/examples/multi_camera_synced_verification_tool/multicamera_sync/Python/script/config_frameMatch.py
+++ b/orbbec_camera/examples/multi_camera_synced_verification_tool/multicamera_sync/Python/script/config_frameMatch.py
@@ -11,19 +11,21 @@ from datetime import datetime
import os
import re
-## Config.ini中配置
-# 单位:FPS,请依据数据集实际帧率填写,否则会导致匹配不准确
+## Config.ini configuration
+# Unit: FPS. Please fill in according to the actual dataset frame rate,
+# otherwise it will cause inaccurate matching.
frameRate = -1
-# 单位:ms,当匹配后某组数据帧的时间戳极差大于等于tspRangeThreshold,文件名会增加标注
+# Unit: ms. When the timestamp range difference of a matched frame group
+# is greater than or equal to tspRangeThreshold, the file name will be marked.
tspRangeThreshold = -1
-## Python脚本自动解析, 不要修改
-primaryId = '-1' #主机ID
-mainPythonWorkPath = "" # SyncFramesMain.py的工作目录
-sourceFramesPath = "" # 请勿修改,固定值,TotalMode目录路径
-sourceRootPath = "" # 存放TotalMode的根目录
-resultPath = "" # 保存sync分析结果
-streamProfileDict = dict() # 保存Python结果
+## Parsed automatically by Python script, DO NOT modify
+primaryId = '-1' # Host ID
+mainPythonWorkPath = "" # Working directory of SyncFramesMain.py
+sourceFramesPath = "" # DO NOT modify, fixed value, path to TotalMode directory
+sourceRootPath = "" # Root directory containing TotalMode
+resultPath = "" # Path to save sync analysis results
+streamProfileDict = dict() # Store Python results
class PictureInfo(object):
class Struct(object):
@@ -76,10 +78,10 @@ def initSyncConfigParams():
print(f"Initliaze synchronized config parameter failed. {configPath} not exists.")
return False
- # 创建ConfigParser对象
+ # Create ConfigParser object
config = configparser.ConfigParser()
- # 读取ini文件
+ # Read ini file
config.read(configPath, 'utf-8')
if not config.has_option('Parameter', 'frameRate'):
@@ -106,7 +108,7 @@ def getDeviceCount():
deviceInfoPath = f"{sourceRootPath}/DevicesInfo.txt"
if not os.path.exists(deviceInfoPath):
print(f"Get device count failed. {deviceInfoPath} not exists")
- return 0
+ return 0
with open(deviceInfoPath, 'r') as f:
data = json.load(f)
@@ -157,13 +159,13 @@ def isFrameFile(fileName):
frameExts = {".jpeg", ".jpg", ".png", ".raw", "bmp"}
return fileExt[1] in frameExts
-def extract_number(filename):
- """提取文件名中以'g'开头的数字部分"""
+def extract_number(filename):
+ """Extract the numeric part after 'g' in the filename"""
match_g = re.search(r'g(\d+)', filename)
if match_g:
return int(match_g.group(1))
-
- """提取文件名中以'd'开头的数字部分"""
+
+ """Extract the numeric part after 'd' in the filename"""
match_d = re.search(r'd(\d+)', filename)
if match_d:
return int(match_d.group(1))
@@ -172,7 +174,7 @@ def extract_number(filename):
def initPictureInfoDictionary(rootFilePath, pictureInfoDict):
frameFileCount = 0
for dirpath, dirnames, filenames in os.walk(rootFilePath):
- filenames.sort(key=extract_number) # 排序,按文件名中的'd'和'g'后面的数字从小到大排序
+ filenames.sort(key=extract_number) # Sort filenames by the numeric part after 'd' and 'g'
for fileName in filenames:
filePath = os.path.join(dirpath, fileName)
if not isFrameFile(fileName):
@@ -185,13 +187,13 @@ def initPictureInfoDictionary(rootFilePath, pictureInfoDict):
sensorType = pictureNameList[0].replace('#', '_')
syncTimeStamp = int(pictureNameList[3][1:])
- # 创建结构体
+ # Create struct
pictureInfo = PictureInfo()
info = pictureInfo.make_struct(deviceId, sensorType, syncTimeStamp, filePath, os.path.basename(dirpath), os.path.splitext(fileName)[1])
- # 格式化字典一个key对应一个数组
+ # Format dictionary: one key corresponds to one array
pictureInfoDict.setdefault(deviceId, []).append(info)
-
+
if 0 == frameFileCount:
print("initialize pictureInfoDict failed. Not found frame file")
@@ -200,7 +202,7 @@ def matchFrame(pictureInfoDict):
global primaryId, frameRate
global streamProfileDict
- # 获取比较图像数组,取第一个设备的Color数组来进行比较
+ # Get comparison image array, use the Color array of the first device for comparison
compareList = []
for key in pictureInfoDict:
listTmp = list(pictureInfoDict[key])
@@ -208,14 +210,14 @@ def matchFrame(pictureInfoDict):
if info.deviceId == primaryId and info.sensorType == 'color':
compareList.append(info)
- # 根据开流情况动态分析,减少循环次数
+ # Dynamically analyze based on stream opening status to reduce loop iterations
hasColorProfile = 'OB_SENSOR_COLOR' in streamProfileDict
hasDepthProfile = 'OB_SENSOR_DEPTH' in streamProfileDict
hasIRProfile = 'OB_SENSOR_IR' in streamProfileDict
hasIRLeftProfile = 'OB_SENSOR_IR_LEFT' in streamProfileDict
hasIRRightProfile = 'OB_SENSOR_IR_RIGHT' in streamProfileDict
- # 匹配相邻帧
+ # Match adjacent frames
resultDict = {}
consumedList = []
dictIndex = 0
@@ -224,7 +226,7 @@ def matchFrame(pictureInfoDict):
resultDict.setdefault(dictIndex, []).append(comparePic)
for key in pictureInfoDict:
listTmp = list(pictureInfoDict[key])
- # 对比彩色
+ # Compare color
if hasColorProfile:
for info in listTmp:
if info.deviceId == primaryId and info.sensorType == comparePic.sensorType:
@@ -238,7 +240,7 @@ def matchFrame(pictureInfoDict):
consumedList.append(info)
break
- # 对Depth
+ # Compare depth
if hasDepthProfile:
for info in listTmp:
if info.deviceId == primaryId and info.sensorType == comparePic.sensorType:
@@ -252,7 +254,7 @@ def matchFrame(pictureInfoDict):
consumedList.append(info)
break
- # IR
+ # Compare IR
if hasIRProfile:
for info in listTmp:
if info.deviceId == primaryId and info.sensorType == comparePic.sensorType:
@@ -266,7 +268,7 @@ def matchFrame(pictureInfoDict):
consumedList.append(info)
break
- # 对左IR
+ # Compare left IR
if hasIRLeftProfile:
for info in listTmp:
if info.deviceId == primaryId and info.sensorType == comparePic.sensorType:
@@ -280,7 +282,7 @@ def matchFrame(pictureInfoDict):
consumedList.append(info)
break
- # 对右IR
+ # Compare right IR
if hasIRRightProfile:
for info in listTmp:
if info.deviceId == primaryId and info.sensorType == comparePic.sensorType:
@@ -294,7 +296,7 @@ def matchFrame(pictureInfoDict):
consumedList.append(info)
break
- # 计算偏差
+ # Calculate deviation
minTsp = min(resultDict[dictIndex], key=lambda x: x.syncTimeStamp)
for info in resultDict[dictIndex]:
info.tspDiff = info.syncTimeStamp - minTsp.syncTimeStamp
@@ -377,7 +379,7 @@ def handleSyncFrames():
for info in listTmp:
if info.tspDiff >= tspRangeThreshold:
path = abnormalPath + str(key) + "_" + info.sensorType + "_" + info.deviceIdFull + "_" + str(
- info.syncTimeStamp) + "_[" + str(info.tspDiff) + "]" + "_xxxxxx" + info.fileExt
+ info.syncTimeStamp) + "_[" + str(info.tspDiff) + "]" + "_xxxxxx" + info.fileExt
shutil.copy(info.picturePath, path)
else:
path = abnormalPath + str(key) + "_" + info.sensorType + "_" + info.deviceIdFull + "_" + str(
diff --git a/orbbec_camera/examples/multi_camera_synced_verification_tool/multicamera_sync/Python/script/config_frameMatch_Gemini2VL.py b/orbbec_camera/examples/multi_camera_synced_verification_tool/multicamera_sync/Python/script/config_frameMatch_Gemini2VL.py
index e5ec145c..2d769150 100644
--- a/orbbec_camera/examples/multi_camera_synced_verification_tool/multicamera_sync/Python/script/config_frameMatch_Gemini2VL.py
+++ b/orbbec_camera/examples/multi_camera_synced_verification_tool/multicamera_sync/Python/script/config_frameMatch_Gemini2VL.py
@@ -8,19 +8,21 @@ import configparser
from pathlib import Path
from datetime import datetime
-## Config.ini中配置
-# 单位:FPS,请依据数据集实际帧率填写,否则会导致匹配不准确
+## Config.ini configuration
+# Unit: FPS. Please fill in according to the actual dataset frame rate,
+# otherwise it will cause inaccurate matching.
frameRate = -1
-# 单位:ms,当匹配后某组数据帧的时间戳极差大于等于tspRangeThreshold,文件名会增加标注
+# Unit: ms. When the timestamp range difference of a matched frame group
+# is greater than or equal to tspRangeThreshold, the file name will be marked.
tspRangeThreshold = -1
-## Python脚本自动解析, 不要修改
-primaryId = '-1' #主机ID
-mainPythonWorkPath = "" # SyncFramesMain.py的工作目录
-sourceFramesPath = "" # 请勿修改,固定值,TotalMode目录路径
-sourceRootPath = "" # 存放TotalMode的根目录
-resultPath = "" # 保存sync分析结果
-streamProfileDict = dict() # 保存Python结果
+## Parsed automatically by Python script, DO NOT modify
+primaryId = '-1' # Host ID
+mainPythonWorkPath = "" # Working directory of SyncFramesMain.py
+sourceFramesPath = "" # DO NOT modify, fixed value, path to TotalMode directory
+sourceRootPath = "" # Root directory containing TotalMode
+resultPath = "" # Path to save sync analysis results
+streamProfileDict = dict() # Store Python results
class PictureInfo(object):
class Struct(object):
@@ -73,10 +75,10 @@ def initSyncConfigParams():
print(f"Initliaze synchronized config parameter failed. {configPath} not exists.")
return False
- # 创建ConfigParser对象
+ # Create ConfigParser object
config = configparser.ConfigParser()
- # 读取ini文件
+ # Read ini file
config.read(configPath, 'utf-8')
if not config.has_option('Parameter', 'frameRate'):
@@ -103,7 +105,7 @@ def getDeviceCount():
deviceInfoPath = f"{sourceRootPath}/DevicesInfo.txt"
if not os.path.exists(deviceInfoPath):
print(f"Get device count failed. {deviceInfoPath} not exists")
- return 0
+ return 0
with open(deviceInfoPath, 'r') as f:
data = json.load(f)
@@ -170,13 +172,13 @@ def initPictureInfoDictionary(rootFilePath, pictureInfoDict):
sensorType = pictureNameList[0].replace('#', '_')
syncTimeStamp = int(pictureNameList[3][1:])
- # 创建结构体
+ # Create structure
pictureInfo = PictureInfo()
info = pictureInfo.make_struct(deviceId, sensorType, syncTimeStamp, filePath, os.path.basename(dirpath), os.path.splitext(fileName)[1])
- # 格式化字典一个key对应一个数组
+ # Format dictionary: one key corresponds to one array
pictureInfoDict.setdefault(deviceId, []).append(info)
-
+
if 0 == frameFileCount:
print("initialize pictureInfoDict failed. Not found frame file")
@@ -185,7 +187,7 @@ def matchFrame(pictureInfoDict):
global primaryId, frameRate
global streamProfileDict
- # 获取比较图像数组,取第一个设备的Color数组来进行比较
+ # Get comparison image array, take the Color array of the first device for comparison
compareList = []
for key in pictureInfoDict:
listTmp = list(pictureInfoDict[key])
@@ -193,14 +195,14 @@ def matchFrame(pictureInfoDict):
if info.deviceId == primaryId and info.sensorType == 'color':
compareList.append(info)
- # 根据开流情况动态分析,减少循环次数
+ # Dynamically analyze based on stream status to reduce loop iterations
hasColorProfile = 'OB_SENSOR_COLOR' in streamProfileDict
hasDepthProfile = 'OB_SENSOR_DEPTH' in streamProfileDict
hasIRProfile = 'OB_SENSOR_IR' in streamProfileDict
hasIRLeftProfile = 'OB_SENSOR_IR_LEFT' in streamProfileDict
hasIRRightProfile = 'OB_SENSOR_IR_RIGHT' in streamProfileDict
- # 匹配相邻帧
+ # Match adjacent frames
resultDict = {}
consumedList = []
dictIndex = 0
@@ -209,7 +211,7 @@ def matchFrame(pictureInfoDict):
resultDict.setdefault(dictIndex, []).append(comparePic)
for key in pictureInfoDict:
listTmp = list(pictureInfoDict[key])
- # 对比彩色
+ # Compare color
if hasColorProfile:
for info in listTmp:
if info.deviceId == primaryId and info.sensorType == comparePic.sensorType:
@@ -223,7 +225,7 @@ def matchFrame(pictureInfoDict):
consumedList.append(info)
break
- # 对Depth
+ # Compare depth
if hasDepthProfile:
for info in listTmp:
if info.deviceId == primaryId and info.sensorType == comparePic.sensorType:
@@ -237,7 +239,7 @@ def matchFrame(pictureInfoDict):
consumedList.append(info)
break
- # IR
+ # Compare IR
if hasIRProfile:
for info in listTmp:
if info.deviceId == primaryId and info.sensorType == comparePic.sensorType:
@@ -251,7 +253,7 @@ def matchFrame(pictureInfoDict):
consumedList.append(info)
break
- # 对左IR
+ # Compare left IR
if hasIRLeftProfile:
for info in listTmp:
if info.deviceId == primaryId and info.sensorType == comparePic.sensorType:
@@ -265,7 +267,7 @@ def matchFrame(pictureInfoDict):
consumedList.append(info)
break
- # 对右IR
+ # Compare right IR
if hasIRRightProfile:
for info in listTmp:
if info.deviceId == primaryId and info.sensorType == comparePic.sensorType:
@@ -279,7 +281,7 @@ def matchFrame(pictureInfoDict):
consumedList.append(info)
break
- # 计算偏差
+ # Calculate deviation
minTsp = min(resultDict[dictIndex], key=lambda x: x.syncTimeStamp)
for info in resultDict[dictIndex]:
info.tspDiff = info.syncTimeStamp - minTsp.syncTimeStamp
@@ -362,7 +364,7 @@ def handleSyncFrames():
for info in listTmp:
if info.tspDiff >= tspRangeThreshold:
path = abnormalPath + str(key) + "_" + info.sensorType + "_" + info.deviceIdFull + "_" + str(
- info.syncTimeStamp) + "_[" + str(info.tspDiff) + "]" + "_xxxxxx" + info.fileExt
+ info.syncTimeStamp) + "_[" + str(info.tspDiff) + "]" + "_xxxxxx" + info.fileExt
shutil.copy(info.picturePath, path)
else:
path = abnormalPath + str(key) + "_" + info.sensorType + "_" + info.deviceIdFull + "_" + str(
diff --git a/orbbec_camera/examples/multi_camera_synced_verification_tool/multicamera_sync/Python/script/config_frameMatch_g330.py b/orbbec_camera/examples/multi_camera_synced_verification_tool/multicamera_sync/Python/script/config_frameMatch_g330.py
index b74cef24..345cb9c5 100644
--- a/orbbec_camera/examples/multi_camera_synced_verification_tool/multicamera_sync/Python/script/config_frameMatch_g330.py
+++ b/orbbec_camera/examples/multi_camera_synced_verification_tool/multicamera_sync/Python/script/config_frameMatch_g330.py
@@ -11,19 +11,19 @@ from datetime import datetime
import os
import re
-## Config.ini中配置
-# 单位:FPS,请依据数据集实际帧率填写,否则会导致匹配不准确
+## Config.ini configuration
+# Unit: FPS. Please fill in according to the actual frame rate of the dataset, otherwise the matching will be inaccurate.
frameRate = -1
-# 单位:ms,当匹配后某组数据帧的时间戳极差大于等于tspRangeThreshold,文件名会增加标注
+# Unit: ms. When the timestamp range of a matched group of data frames is greater than or equal to tspRangeThreshold, the filename will be marked.
tspRangeThreshold = -1
-## Python脚本自动解析, 不要修改
-primaryId = '-1' #主机ID
-mainPythonWorkPath = "" # SyncFramesMain.py的工作目录
-sourceFramesPath = "" # 请勿修改,固定值,TotalMode目录路径
-sourceRootPath = "" # 存放TotalMode的根目录
-resultPath = "" # 保存sync分析结果
-streamProfileDict = dict() # 保存Python结果
+## Automatically parsed by Python script, do not modify
+primaryId = '-1' # Primary device ID
+mainPythonWorkPath = "" # Working directory of SyncFramesMain.py
+sourceFramesPath = "" # Do not modify, fixed value, path to TotalMode directory
+sourceRootPath = "" # Root directory where TotalMode is stored
+resultPath = "" # Save sync analysis results
+streamProfileDict = dict() # Save Python results
class PictureInfo(object):
class Struct(object):
@@ -78,10 +78,10 @@ def initSyncConfigParams():
print(f"Initliaze synchronized config parameter failed. {configPath} not exists.")
return False
- # 创建ConfigParser对象
+ # Create ConfigParser object
config = configparser.ConfigParser()
- # 读取ini文件
+ # Read ini file
config.read(configPath, 'utf-8')
if not config.has_option('Parameter', 'frameRate'):
@@ -108,7 +108,7 @@ def getDeviceCount():
deviceInfoPath = f"{sourceRootPath}/DevicesInfo.txt"
if not os.path.exists(deviceInfoPath):
print(f"Get device count failed. {deviceInfoPath} not exists")
- return 0
+ return 0
with open(deviceInfoPath, 'r') as f:
data = json.load(f)
@@ -159,7 +159,7 @@ def isFrameFile(fileName):
frameExts = {".jpeg", ".jpg", ".png", ".raw", "bmp"}
return fileExt[1] in frameExts
-def extract_number(filename):
+def extract_number(filename):
match_d = re.search(r'_d(\d+)', filename)
if match_d:
return int(match_d.group(1))
@@ -167,13 +167,13 @@ def extract_number(filename):
match_g = re.search(r'_g(\d+)', filename)
if match_g:
return int(match_g.group(1))
-
+
return float('inf')
def initPictureInfoDictionary(rootFilePath, pictureInfoDict):
frameFileCount = 0
for dirpath, dirnames, filenames in os.walk(rootFilePath):
- filenames.sort(key=extract_number) # 排序,按文件名中的'_d'和'_g'后面的数字从小到大排序
+ filenames.sort(key=extract_number) # Sort files by numbers following '_d' and '_g' in filename, ascending
for fileName in filenames:
filePath = os.path.join(dirpath, fileName)
if not isFrameFile(fileName):
@@ -188,13 +188,13 @@ def initPictureInfoDictionary(rootFilePath, pictureInfoDict):
exp = str(pictureNameList[6][0:])
gain = str(pictureNameList[7][0:])
- # 创建结构体
+ # Create structure
pictureInfo = PictureInfo()
info = pictureInfo.make_struct(deviceId, sensorType, syncTimeStamp, filePath, os.path.basename(dirpath), os.path.splitext(fileName)[1],exp,gain)
- # 格式化字典一个key对应一个数组
+ # Format dictionary: one key corresponds to one array
pictureInfoDict.setdefault(deviceId, []).append(info)
-
+
if 0 == frameFileCount:
print("initialize pictureInfoDict failed. Not found frame file")
@@ -203,7 +203,7 @@ def matchFrame(pictureInfoDict):
global primaryId, frameRate
global streamProfileDict
- # 获取比较图像数组,取第一个设备的Color数组来进行比较
+ # Get comparison image array, use Color array of the first device for comparison
compareList = []
for key in pictureInfoDict:
listTmp = list(pictureInfoDict[key])
@@ -211,14 +211,14 @@ def matchFrame(pictureInfoDict):
if info.deviceId == primaryId and info.sensorType == 'color':
compareList.append(info)
- # 根据开流情况动态分析,减少循环次数
+ # Dynamically analyze according to stream situation to reduce loop count
hasColorProfile = 'OB_SENSOR_COLOR' in streamProfileDict
hasDepthProfile = 'OB_SENSOR_DEPTH' in streamProfileDict
hasIRProfile = 'OB_SENSOR_IR' in streamProfileDict
hasIRLeftProfile = 'OB_SENSOR_IR_LEFT' in streamProfileDict
hasIRRightProfile = 'OB_SENSOR_IR_RIGHT' in streamProfileDict
- # 匹配相邻帧
+ # Match adjacent frames
resultDict = {}
consumedList = []
dictIndex = 0
@@ -227,7 +227,7 @@ def matchFrame(pictureInfoDict):
resultDict.setdefault(dictIndex, []).append(comparePic)
for key in pictureInfoDict:
listTmp = list(pictureInfoDict[key])
- # 对比彩色
+ # Compare color
if hasColorProfile:
for info in listTmp:
if info.deviceId == primaryId and info.sensorType == comparePic.sensorType:
@@ -241,7 +241,7 @@ def matchFrame(pictureInfoDict):
consumedList.append(info)
break
- # 对Depth
+ # Compare depth
if hasDepthProfile:
for info in listTmp:
if info.deviceId == primaryId and info.sensorType == comparePic.sensorType:
@@ -255,7 +255,7 @@ def matchFrame(pictureInfoDict):
consumedList.append(info)
break
- # IR
+ # Compare IR
if hasIRProfile:
for info in listTmp:
if info.deviceId == primaryId and info.sensorType == comparePic.sensorType:
@@ -269,7 +269,7 @@ def matchFrame(pictureInfoDict):
consumedList.append(info)
break
- # 对左IR
+ # Compare IR Left
if hasIRLeftProfile:
for info in listTmp:
if info.deviceId == primaryId and info.sensorType == comparePic.sensorType:
@@ -283,7 +283,7 @@ def matchFrame(pictureInfoDict):
consumedList.append(info)
break
- # 对右IR
+ # Compare IR Right
if hasIRRightProfile:
for info in listTmp:
if info.deviceId == primaryId and info.sensorType == comparePic.sensorType:
@@ -297,7 +297,7 @@ def matchFrame(pictureInfoDict):
consumedList.append(info)
break
- # 计算偏差
+ # Calculate deviation
minTsp = min(resultDict[dictIndex], key=lambda x: x.syncTimeStamp)
for info in resultDict[dictIndex]:
info.tspDiff = info.syncTimeStamp - minTsp.syncTimeStamp
@@ -380,7 +380,7 @@ def handleSyncFrames():
for info in listTmp:
if info.tspDiff >= tspRangeThreshold:
path = abnormalPath + str(key) + "_" + info.sensorType + "_" + info.deviceIdFull + "_" + str(
- info.syncTimeStamp) + "_[" + str(info.tspDiff) + "]" + "_xxxxxx" + "_"+ str(info.exp) + "_"+ str(info.gain) + info.fileExt
+ info.syncTimeStamp) + "_[" + str(info.tspDiff) + "]" + "_xxxxxx" + "_"+ str(info.exp) + "_"+ str(info.gain) + info.fileExt
shutil.copy(info.picturePath, path)
else:
path = abnormalPath + str(key) + "_" + info.sensorType + "_" + info.deviceIdFull + "_" + str(
diff --git a/orbbec_camera/examples/multi_camera_synced_verification_tool/multicamera_sync/Python/分析脚本.md b/orbbec_camera/examples/multi_camera_synced_verification_tool/multicamera_sync/Python/分析脚本.md
deleted file mode 100644
index 7b905132..00000000
--- a/orbbec_camera/examples/multi_camera_synced_verification_tool/multicamera_sync/Python/分析脚本.md
+++ /dev/null
@@ -1,6 +0,0 @@
-## config_frameMatch.py
-
-3个文件夹的定义:
-matchFrames:卡控在半帧内的数据。
-notMatchFrames:卡控不在半帧内的数据,未匹配上的。
-abnormal:组内超出tspRangeThreshold设置的数据
\ No newline at end of file
diff --git a/orbbec_camera/examples/net_camera/README.MD b/orbbec_camera/examples/net_camera/README.MD
deleted file mode 100644
index 4412fe16..00000000
--- a/orbbec_camera/examples/net_camera/README.MD
+++ /dev/null
@@ -1,69 +0,0 @@
-# Net_camera
-
-> This section describes how to use Net camera in OrbbecSDK_ROS2.Currently, only Femto_Mega, Gemini 335Le and Gemini 435Le devices are supported, and other Net devices will be supported in the near future.
-
-## Femto Mega & Gemini 435Le
-
-### Parameter Introduction
-
-Network device settings: `enumerate_net_device` is set to true, which will automatically enumerate network devices.
-
-If you do not want to automatically enumerate network devices,you can set `enumerate_net_device` to false, `net_device_ip` to the device's IP address, and `net_device_port` to the default value of 8090.
-
-* `enumerate_net_device` : Enable automatically enumerate network devices.
-* `net_device_ip` : Setting net device's IP address.
-* `net_device_port` : Setting net device's port.Usually, you can set it to 8090.
-
-### Single Net camera
-
-> If you need to run Gemini 435Le, you only need to replace [femto_mega.launch.py ](../../launch/femto_mega.launch.py)in the run command with [gemini435_le.launch.py](../../launch/gemini435_le.launch.py)
-
-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
-```
-
-## Gemini 335Le
-
-Network device settings: `enumerate_net_device` must be set to true, set `net_device_ip` to the IP address of the device, and set `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 [gemini_330_series.launch.py](../../launch/gemini_330_series.launch.py) as an example:
-
-#### automatically enumerate network devices:
-
-```bash
-ros2 launch orbbec_camera gemini_330_series.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 gemini_330_series.launch.py enumerate_net_device:=true 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/point_cloud/README.MD b/orbbec_camera/examples/point_cloud/README.MD
deleted file mode 100644
index 98748e5b..00000000
--- a/orbbec_camera/examples/point_cloud/README.MD
+++ /dev/null
@@ -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/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:
-
-
diff --git a/orbbec_camera/examples/point_cloud/image/image5.jpg b/orbbec_camera/examples/point_cloud/image/image5.jpg
deleted file mode 100644
index 03b65e9b..00000000
Binary files a/orbbec_camera/examples/point_cloud/image/image5.jpg and /dev/null differ
diff --git a/orbbec_camera/examples/point_cloud/image/image6.jpg b/orbbec_camera/examples/point_cloud/image/image6.jpg
deleted file mode 100644
index 29b1aad8..00000000
Binary files a/orbbec_camera/examples/point_cloud/image/image6.jpg and /dev/null differ
diff --git a/orbbec_camera/examples/start_camera_node/README.MD b/orbbec_camera/examples/start_camera_node/README.MD
deleted file mode 100644
index 9350c5b0..00000000
--- a/orbbec_camera/examples/start_camera_node/README.MD
+++ /dev/null
@@ -1,82 +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 enable_d2c_viewer:=true enable_right_ir:=true enable_left_ir:=true enable_sync_output_accel_gyro:=true enable_accel:=true enable_gyro:=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**
- 
diff --git a/orbbec_camera/examples/start_camera_node/image/image1.jpg b/orbbec_camera/examples/start_camera_node/image/image1.jpg
deleted file mode 100644
index 78875d2c..00000000
Binary files a/orbbec_camera/examples/start_camera_node/image/image1.jpg and /dev/null differ
diff --git a/orbbec_camera/examples/start_camera_node/image/image2.jpg b/orbbec_camera/examples/start_camera_node/image/image2.jpg
deleted file mode 100644
index fd19325e..00000000
Binary files a/orbbec_camera/examples/start_camera_node/image/image2.jpg and /dev/null differ