From bff88b0eb2ba06d940ec84184729ff21871c52f8 Mon Sep 17 00:00:00 2001 From: slz Date: Fri, 26 Sep 2025 11:38:11 +0800 Subject: [PATCH] Add common benchmark data and optimize document layout --- docs/source/3_quickstarts/orbbecviewer.md | 26 +- docs/source/3_quickstarts/quickstart.md | 3 +- .../4_application_guide/coordinate_systems.md | 2 +- .../5_advanced_guide/advanced_guide.rst | 12 + .../efficient_intra_process_communication.md | 0 .../performance/fastdds_tuning.md | 0 .../performance/lower_cpu_usage.md | 0 docs/source/6_benchmark/benchmark.rst | 2 +- docs/source/6_benchmark/benchmark_data.md | 19 +- .../benchmark.md => othertools.md} | 21 +- docs/source/6_benchmark/performance.md | 334 ------------------ .../_static/ros2_common_benchmark_data.xlsx | Bin 0 -> 9520 bytes .../_static/ros2_service_benchmark_cpp.xlsx | Bin 0 -> 23500 bytes .../ros2_service_benchmark_python.xlsx | Bin 0 -> 23481 bytes .../ros2_service_benchmark_cpp.xlsx | Bin 23521 -> 0 bytes .../ros2_service_benchmark_python.xlsx | Bin 23496 -> 0 bytes 16 files changed, 54 insertions(+), 365 deletions(-) rename docs/source/{6_benchmark => 5_advanced_guide}/performance/efficient_intra_process_communication.md (100%) rename docs/source/{6_benchmark => 5_advanced_guide}/performance/fastdds_tuning.md (100%) rename docs/source/{6_benchmark => 5_advanced_guide}/performance/lower_cpu_usage.md (100%) rename docs/source/6_benchmark/{performance/benchmark.md => othertools.md} (69%) delete mode 100644 docs/source/6_benchmark/performance.md create mode 100644 docs/source/_static/ros2_common_benchmark_data.xlsx create mode 100644 docs/source/_static/ros2_service_benchmark_cpp.xlsx create mode 100644 docs/source/_static/ros2_service_benchmark_python.xlsx delete mode 100644 docs/source/service_benchmark_data/ros2_service_benchmark_cpp.xlsx delete mode 100644 docs/source/service_benchmark_data/ros2_service_benchmark_python.xlsx diff --git a/docs/source/3_quickstarts/orbbecviewer.md b/docs/source/3_quickstarts/orbbecviewer.md index 922dd015..14c3f02d 100644 --- a/docs/source/3_quickstarts/orbbecviewer.md +++ b/docs/source/3_quickstarts/orbbecviewer.md @@ -1,4 +1,4 @@ -# OrbbecViewer tutorial +# OrbbecViewer QuickStarts ## Download @@ -28,18 +28,16 @@ Click the icon at the bottom left corner of the window to view the current camer Please refer to the list below for the latest camera firmware. [For more information, please click here.](https://www.orbbec.com/docs/g330-explore-camera-functions-in-orbbec-viewer/) - - **Repository link:**[Firmware Download](https://github.com/orbbec/OrbbecFirmware?tab=readme-ov-file#firmware-download) -| **Products list** | **Download link** | Latest version | -| ----------------- | ---------------------------------------------------------------------------------------------------- | -------------- | -| Femto Bolt | [Femto Bolt Firmware](https://github.com/orbbec/OrbbecFirmware/releases/tag/Femto-Bolt-Firmware) | v1.1.2 | -| Femto Mega | [Femto Mega Firmware](https://github.com/orbbec/OrbbecFirmware/releases/tag/Femto-Mega-Firmware) | v1.3.1 | -| Gemini 2 | [Gemini 2 Firmware](https://github.com/orbbec/OrbbecFirmware/releases/tag/Gemini2-Firmware) | v1.4.98 | -| Gemini 2 L | [Gemini 2L Firmware](https://github.com/orbbec/OrbbecFirmware/releases/tag/Gemini2L-Firmware) | v1.5.02 | -| Femto Mega I | [Femto Mega I Firmware](https://github.com/orbbec/OrbbecFirmware/releases/tag/Femto-Mega-I-Firmware) | v2.0.4 | -| Gemini 330 series | [Gemini 330 series Firmware](https://www.orbbec.com/docs/g330-firmware-release/?_gl=1) | | -| Gemini 215 | [Gemini 215](https://github.com/orbbec/OrbbecFirmware/releases/tag/Gemini215-Firmware) | v1.0.9 | -| Gemini 210 | [Gemini 210](https://github.com/orbbec/OrbbecFirmware/releases/tag/Gemini210-Firmware) | v1.0.9 | -| Gemini 435Le | [Gemini 435Le](https://github.com/orbbec/OrbbecFirmware/releases/tag/Gemin435Le-Firmware) | v1.3.2 | +| **Products list** | **Download link** | Latest version | +| ----------------------- | ------------------------------------------------------------------------------------------------- | -------------- | +| Femto Bolt | [Femto Bolt Firmware](https://github.com/orbbec/OrbbecFirmware/releases/tag/Femto-Bolt-Firmware) | v1.1.2 | +| Femto Mega | [Femto Mega Firmware](https://github.com/orbbec/OrbbecFirmware/releases/tag/Femto-Mega-Firmware) | v1.3.1 | +| Gemini 2 | [Gemini 2 Firmware](https://github.com/orbbec/OrbbecFirmware/releases/tag/Gemini2-Firmware) | v1.4.98 | +| Gemini 2 L | [Gemini 2L Firmware](https://github.com/orbbec/OrbbecFirmware/releases/tag/Gemini2L-Firmware) | v1.5.02 | +| Femto Mega I | [Femto Mega I Firmware](https://github.com/orbbec/OrbbecFirmware/releases/tag/Femto-Mega-I-Firmware) | v2.0.4 | +| Gemini 330 series | [Gemini 330 series Firmware](https://www.orbbec.com/docs/g330-firmware-release/?_gl=1) | | +| Gemini 215 | [Gemini 215](https://github.com/orbbec/OrbbecFirmware/releases/tag/Gemini215-Firmware) | v1.0.9 | +| Gemini 210 | [Gemini 210](https://github.com/orbbec/OrbbecFirmware/releases/tag/Gemini210-Firmware) | v1.0.9 | +| Gemini 435Le | [Gemini 435Le](https://github.com/orbbec/OrbbecFirmware/releases/tag/Gemin435Le-Firmware) | v1.3.2 | diff --git a/docs/source/3_quickstarts/quickstart.md b/docs/source/3_quickstarts/quickstart.md index 722fba59..0f255589 100644 --- a/docs/source/3_quickstarts/quickstart.md +++ b/docs/source/3_quickstarts/quickstart.md @@ -1,4 +1,4 @@ -## QuickStarts +## ROS Package QuickStarts ### Introduction @@ -89,4 +89,3 @@ ros2 service call /camera/get_device_info orbbec_camera_msgs/srv/GetDeviceInfo ' ```bash ros2 bag record /camera/color/image_raw /camera/depth/image_raw ``` - diff --git a/docs/source/4_application_guide/coordinate_systems.md b/docs/source/4_application_guide/coordinate_systems.md index e21ff45d..93fcd27c 100644 --- a/docs/source/4_application_guide/coordinate_systems.md +++ b/docs/source/4_application_guide/coordinate_systems.md @@ -1,4 +1,4 @@ -### ROS2(Robot) vs Optical(Camera) Coordination Systems +### ROS2 Robot vs Camera Optical Coordination Systems * Point Of View: * Imagine we are standing behind of the camera, and looking forward. diff --git a/docs/source/5_advanced_guide/advanced_guide.rst b/docs/source/5_advanced_guide/advanced_guide.rst index 31a4efd5..4f38a379 100644 --- a/docs/source/5_advanced_guide/advanced_guide.rst +++ b/docs/source/5_advanced_guide/advanced_guide.rst @@ -4,6 +4,18 @@ Advanced Guide This chapter covers advanced features of the SDK, including multi-camera usage, and special configuration modes. + +Performance & Optimization +------------------------------------------------------ + +.. toctree:: + :maxdepth: 2 + + performance/lower_cpu_usage.md + performance/efficient_intra_process_communication.md + performance/fastdds_tuning.md + + Multi-Camera ------------------------------------------------------ diff --git a/docs/source/6_benchmark/performance/efficient_intra_process_communication.md b/docs/source/5_advanced_guide/performance/efficient_intra_process_communication.md similarity index 100% rename from docs/source/6_benchmark/performance/efficient_intra_process_communication.md rename to docs/source/5_advanced_guide/performance/efficient_intra_process_communication.md diff --git a/docs/source/6_benchmark/performance/fastdds_tuning.md b/docs/source/5_advanced_guide/performance/fastdds_tuning.md similarity index 100% rename from docs/source/6_benchmark/performance/fastdds_tuning.md rename to docs/source/5_advanced_guide/performance/fastdds_tuning.md diff --git a/docs/source/6_benchmark/performance/lower_cpu_usage.md b/docs/source/5_advanced_guide/performance/lower_cpu_usage.md similarity index 100% rename from docs/source/6_benchmark/performance/lower_cpu_usage.md rename to docs/source/5_advanced_guide/performance/lower_cpu_usage.md diff --git a/docs/source/6_benchmark/benchmark.rst b/docs/source/6_benchmark/benchmark.rst index 44582309..286bec7e 100644 --- a/docs/source/6_benchmark/benchmark.rst +++ b/docs/source/6_benchmark/benchmark.rst @@ -9,4 +9,4 @@ This chapter introduces how to use the benchmark tool and provides test results introduction.md benchmark_usage.md benchmark_data.md - performance.md \ No newline at end of file + othertools.md \ No newline at end of file diff --git a/docs/source/6_benchmark/benchmark_data.md b/docs/source/6_benchmark/benchmark_data.md index 93a1608c..0cadeed1 100644 --- a/docs/source/6_benchmark/benchmark_data.md +++ b/docs/source/6_benchmark/benchmark_data.md @@ -1,6 +1,19 @@ # Benchmark Data -This section records the data of using the benchmark tool to test different cameras +This section records the data of using the benchmark tool to test different cameras. Click the link to download the xlsx data. + + +## Common Benckmark Data + +Use the default launch file to run the `common_benchmark_node` and test for 1 hour of data. + +- [Common Benchmark Data](../../_static/ros2_common_benchmark_data.xlsx) + + +## Service Benchmark Data + +Use the default launch file to run the `service_benchmark_node` and `service_benchmark_node.py` separately. Each service is called 10 times, and the data is recorded. + +- [Service Benchmark Data cpp](../../_static/ros2_service_benchmark_cpp.xlsx) +- [Service Benchmark Data python](../../_static/ros2_service_benchmark_python.xlsx) -- [ROS2 Service Benchmark Data cpp](../service_benchmark_data/ros2_service_benchmark_cpp.xlsx) -- [ROS2 Service Benchmark Data python](../service_benchmark_data/ros2_service_benchmark_python.xlsx) \ No newline at end of file diff --git a/docs/source/6_benchmark/performance/benchmark.md b/docs/source/6_benchmark/othertools.md similarity index 69% rename from docs/source/6_benchmark/performance/benchmark.md rename to docs/source/6_benchmark/othertools.md index 95e01ca8..a3722283 100644 --- a/docs/source/6_benchmark/performance/benchmark.md +++ b/docs/source/6_benchmark/othertools.md @@ -1,4 +1,6 @@ -# Ob_benchmark tool +# Other Tools + +## 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) @@ -21,18 +23,17 @@ You can find example usage code in the [example](https://github.com/orbbec/Orbbe "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_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. +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 @@ -47,5 +48,5 @@ ros2 run orbbec_camera ob_benchmark_node 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. +- `0.csv` contains data from the `ob_benchmark_0.launch.py` configuration. +- `1.csv` contains data from the `ob_benchmark_1.launch.py` configuration. \ No newline at end of file diff --git a/docs/source/6_benchmark/performance.md b/docs/source/6_benchmark/performance.md deleted file mode 100644 index 320e0cb3..00000000 --- a/docs/source/6_benchmark/performance.md +++ /dev/null @@ -1,334 +0,0 @@ -# Performance & Optimization - -## 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) - -You can find example usage code in the [example](https://github.com/orbbec/OrbbecSDK_ROS2/tree/v2-main/orbbec_camera/examples). - -### Tool Configuration ([start_benchmark_params.json](https://github.com/orbbec/OrbbecSDK_ROS2/blob/v2-main/orbbec_camera/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. - -## Reducing CPU Usage with Orbbec ROS Package - -You can find example usage code in the [example](https://github.com/orbbec/OrbbecSDK_ROS2/tree/v2-main/orbbec_camera/examples). - -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 - -**`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. - -**`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. - -**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 Optimizationa - -| 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 | - -## Efficient intra-process communication - -### Introduction - -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 - -## 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. - -### 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). - -### 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/source/_static/ros2_common_benchmark_data.xlsx b/docs/source/_static/ros2_common_benchmark_data.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..f7e01b2e36fd10cc410e7c1f812e353836192448 GIT binary patch literal 9520 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 literal 0 HcmV?d00001 diff --git a/docs/source/_static/ros2_service_benchmark_cpp.xlsx b/docs/source/_static/ros2_service_benchmark_cpp.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..d33997ad4d20ca770e927d575ac802d5abade971 GIT binary patch literal 23500 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 literal 0 HcmV?d00001 diff --git a/docs/source/_static/ros2_service_benchmark_python.xlsx b/docs/source/_static/ros2_service_benchmark_python.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..13806225f242c8756aca8a9b50bb549a4de1bb53 GIT binary patch literal 23481 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

(bK-({K(uzr;&Q~O?p|av!#>(d*gS+@>B|b=- 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 literal 0 HcmV?d00001 diff --git a/docs/source/service_benchmark_data/ros2_service_benchmark_cpp.xlsx b/docs/source/service_benchmark_data/ros2_service_benchmark_cpp.xlsx deleted file mode 100644 index 4019aa39abb3fdb7adbf3948dcda31ad7b2fca90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23521 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

{zcGj7BBWzPXyDdz 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 OF7~yHK}H(?IQu`xj=SXm