Skip to main content

Overview

Communication is a subsystem that allows other subsystem to exchange messages and perform various actions needed for the ERC tasks. Consider the Rover Architecture diagram defined in this page:

image.png

Rover Architecture

The Communications node is center to all important subsystems. It bridges the two different types of networks present on the rover: the Ethernet Network and the ROS2 Network. Through its use, Jonny Boi (the Jetson) can communicate with the Basestation or with the Microcontrollers over the bridged network.

Messages are typically sent as protobuffers, wrapped into an appropriate PBEnvelope (TODO: Link to an explanation of the envelope), if they are sent over the network towards the Microcontrollers or Basestation. However, to communicate with the other ROS2 nods, such as "Behavior", we cannot simply forward raw protobuffers. For that, the Communications node will either convert the incoming protobuf packets received over UDP into custom ROS2 messages before publishing them over an appropriate topic that the Behavior or Controller node can subscribe to, or, alternatively, subscribe to a published topic and convert the ROS2 messages into Protobuffers.

Read all of the ROS2 documentation prior to continuing, especially the entries regarding interfaces:
https://docs.ros.org/en/humble/Concepts/Basic/About-Interfaces.html

You will also need a bit of background networking and C++ knowledge, with a focus on UDP packet transmission. Below there are a few sources that can help you out, but make sure to do your own research as well:

https://beej.us/guide/bgnet/html/split-wide/ -> Covers most topics