<aside> ☑️
Agenda:
*** The following is to understand the basics of ROS. Its important that you cover most of the content. Do not worry about remembering details just a rough overview and a basic understanding of the concepts. The documentation isn’t strictly necessary, the most important thing is the video series at the bottom below ROS2 Guides ***
https://www.youtube.com/watch?v=2lIV3dRvHmQ
https://www.youtube.com/watch?v=KAASuA3_4eg
Credit: Arthur Richards
ROS (in our context) stands for the Robot Operating System. It's not really an operating system as it runs on top of Ubuntu Linux, but it provides useful message passing and standards for robots.
ROS is great for being supported by lots of off-the-shelf robots, making it easy to share and build on existing software, and taking care of repetitive housekeeping tasks like logging. However, the learning curve is quite steep, it's quite limited to Ubuntu, the timing model is challenging, and it's hard to keep up with regular upgrades.
ROS provides us with extra capability that works well with robots, such as logging, code encapsulation, and organization in the form of nodes, as well as simple ways for those nodes to communicate with each other.
There are several different ROS2 distributions (also called releases), each offering its own set of features, updates, and levels of support. Newer distributions often include improvements to performance, tools, and stability, but may also introduce small changes in syntax that make code written for one distribution slightly different from another.
Some releases are Long Term Support (LTS), meaning they are maintained and supported for a longer period of time, which makes them more reliable for bigger projects. To avoid compatibility issues, it is important that a team agrees on and sticks to a single distribution. For our work, Bristol FSAI uses ROS2 Galactic, although other popular distributions include Foxy, Humble, and Iron, each with their own support timelines and features.
Key ROS concepts are nodes (programmes that talk using ROS) and topics (channels over which messages are exchanged). A ROS node works by publishing and/or subscribing to different ROS topics.
ROS topics are asynchronous, like emails. You send one, and you may or may not get an answer. ROS also supports services which are like phone calls. A service is called and gives a response. Services are often avoided because they block the caller.
There are also actions which are special arrangements of topics offering call, response, progress reports, cancellation, or completion. They're much more flexible and robust, but more complicated, and beyond the scope.

Gazebo and RViz are two important tools we can use alongside ROS2.