diff --git a/README.MD b/README.MD index 38616cf0..9ef372ae 100644 --- a/README.MD +++ b/README.MD @@ -31,6 +31,8 @@ supports ROS 2 Foxy, Humble, and Jazzy distributions. * [Product support](#product-support) * [DDS Tuning](#dds-tuning) * [Frequently Asked Questions](#frequently-asked-questions) + * [No Data Stream from Multiple Cameras](#no-data-stream-from-multiple-cameras) + * [Why Are There So Many Launch Files Here?](#why-are-there-so-many-launch-files-here) * [Other useful links](#other-useful-links) * [License](#license) @@ -631,21 +633,29 @@ net.core.rmem_max=2147483647 net.core.rmem_default=2147483647 ``` +If you use Fast DDS, you can refer to the [Fast DDS Configuration](./docs/fastdds_tuning.md) file. + ## Frequently Asked Questions -No Picture from Multiple Cameras +### No Data Stream from Multiple Cameras -- it's possible that the power supply is insufficient. - To avoid this, do not connect all cameras to the same hub and use a powered hub instead. +**Insufficient Power Supply**: + - Ensure that all cameras are not connected to the same hub. + - Use a powered hub to provide sufficient power to each camera. +**High Resolution**: + - Try lowering the resolution to resolve data stream issues. -- It's also possible that the resolution is too high. - To resolve this, try lowering the resolution. +**Increase usbfs_memory_mb Value**: + - Increase the `usbfs_memory_mb` value to 128MB by running the following command: + ```bash + echo 128 | sudo tee /sys/module/usbcore/parameters/usbfs_memory_mb + ``` + - For making this change permanent, check [this link](https://github.com/OpenKinect/libfreenect2/issues/807). -Why are there so many launch files here +### Why Are There So Many Launch Files Here? -- The reason for the presence of multiple launch - files is due to the fact that the default resolutions and image formats of different cameras vary. - To make it easier to use, the launch files have been separated for each camera. +- Multiple launch files exist because different cameras have varying default resolutions and image formats. +- To simplify usage, each camera has its own launch file. ## Other useful links diff --git a/docs/fastdds_tuning.md b/docs/fastdds_tuning.md new file mode 100644 index 00000000..ebcd6731 --- /dev/null +++ b/docs/fastdds_tuning.md @@ -0,0 +1,159 @@ +Here's a professional, English version of the document you provided for your client regarding tuning Fast DDS for Orbbec +camera usage with ROS2: + +--- + +# 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.