# Offloading Heavy Robot Compute to Remote Workstation
In this tutorial, we will explore the method for offloading computationally intensive processes, such as running computer vision models, to a remote workstation computer. This approach offers several advantages such as:
- Saving the robot's processing power.
- Utilizing the available GPU hardware on powerful workstations to run large deep learning models.
- Ability to strategically offload less critical high-computation processes to enhance Robot's efficiency.
- Saving robot's processing power.
- Increasing robot's efficiency by offloading high-power consuming processes.
- Utilizing available GPU hardware on powerful workstations to run large deep learning models.
We will delve into the process of **offloading [Stretch Deep Perception](https://github.com/hello-robot/stretch_ros2/tree/humble/stretch_deep_perception) ROS2 nodes**. These nodes are known for their demanding computational requirements and are frequently used in [Stretch Demos](https://github.com/hello-robot/stretch_ros2/tree/humble/stretch_demos).
@ -10,7 +10,7 @@ We will delve into the process of **offloading [Stretch Deep Perception](https:/
## 1. Setting a ROS_DOMAIN_ID
ROS2 utilizes [DDS](https://design.ros2.org/articles/ros_on_dds.html) as the default middleware for communication. **DDS enables nodes within the same physical network to seamlessly discover one another and establish communication, provided they share the same `ROS_DOMAIN_ID`**. This powerful mechanism ensures secure message passing between remote nodes as intended.
ROS2 utilizes [DDS](https://design.ros2.org/articles/ros_on_dds.html) as the default middleware for communication. **DDS enables nodes within the same physical network to seamlessly discover one another and establish communication, provided they share the same [ROS_DOMAIN_ID](https://docs.ros.org/en/humble/Concepts/Intermediate/About-Domain-ID.html)**. This powerful mechanism ensures secure message passing between remote nodes as intended.
By default, all ROS 2 nodes are configured with domain ID 0. To avoid conflicts, select a domain ID from the range of 0 to 101, and then set this chosen domain ID as the value for the `ROS_DOMAIN_ID` environment variable in both the Workstation and the Robot.
## 4. Verify Remote Workstation is able to discover Stretch Nodes
After launching the above core nodes, all the robot control interfaces and sensor data streams should be exposed to all the other nodes in the same physical network with common ROS_DOMAIN_ID set.
From the remote workstation try the following test commands:
```{.bash .shell-prompt}
# Check if all robot topics are visible.
@ -117,20 +117,82 @@ ros2 service call /stow_the_robot std_srvs/srv/Trigger
## 5. Offload Object Detection Node to Remote Workstation
From the workstation run the following to start
From the workstation run the object detection node which runs a YoloV5 model.
```{.bash .shell-prompt}
ros2 run stretch_deep_perception detect_objects
```
The node would start printing out the detected objects.