RoboReflections #1: Intro to Robotics and the Robot Operating System
Over the past nine months, I have been completing the courses that make up the ColumbiaX Artificial Intelligence MicroMasters as a Fellow of the Fusemachines AI Fellowship. The fellowship is a year-long program designed to develop Machine Learning & Artificial Intelligence Engineers through online courses, on-site training, mentorship, and hands-on experience with a variety of AI skills.
I am currently and excitedly enrolled in the MicroMasters’ Robotics course. I expect this course to be challenging, and I look forward learning a lot. Throughout the course, I intend to share my studies and my reflections thereon. This reflection covers what I learned in the first week of the course.
Note: This is part of the “RoboRefelections” series capturing my experience learning about Robotics through the ColumbiaX Artificial Intelligence MicroMasters’ Robotics course. Stay tuned. There’s more to come!
Introduction to Robotics
The first week of course content provided an overview of the course’s syllabus, explored the question “What is a robot?”, and introduced the Robot Operating System (ROS), the primary tool learners will use throughout the course.
When I discovered I would be taking a Robotics course, I immediately thought I would be doing embedded programming and electrical engineering. Contrary to my expectations, this course covers a different set of topics in Robotics. It exposes learners to the following:
- 3D space and transforms (how to operate in 3D space and how to reason about the relative location of things in 3D space)
- manipulations (how to model and analyze robot arms)
- mobility (how to model and analyze mobile robots)
- motion planning (how robots with no pre-programmed trajectory plan and execute paths to complete tasks)
- the Robot Operating System (through assignments and projects)
What is a Robot?
The Collins dictionary gives us a brief definition of robotics as “the science or technology of designing, building, and using robots.” But, what is a robot?
Apparently, the Robotics community has not converged on a single comprehensive definition of what a robot is. The term robot is similar to (artificial) intelligence in the variance and multiplicity of their existing definitions.
In situations where people must navigate the use of ambiguous terms, a common practice is to use examples, categorizations, and bound terms and statements to a context to convey meaning.
The course instructor Matei Ciocarlie used the first two of the above methods for communicating what a robot is and gave preference to the second of the two definitions below.
A device that can sense, plan, and act.
A self-powered device that effects physical change on the world.
In terms of manipulation, robots can be categorized as being pre-programmed, human-operated, and autonomous. Pre-programmed manipulators have been in use in industrial environments such as manufacturing and assembly for many years; human-operated robots are relatively new with applications in robotic surgery and bomb disposal; and autonomous robots are actively being researched and developed.
Through the lens of mobility, robots can be classified as wheeled, legged, aerial, or aquatic. These listed categories of robots are not exhaustive or mutually exclusive as a robot can be a hybrid of any of the aforementioned categories (because why not?). But, this categorization is useful for bringing to mind the various types and applications of robots and the environments in which they operate.
The Robotics Frontier
As previously mentioned, autonomous robots are actively being researched and developed. Equipping robots with autonomy is necessary for having robots operate in unforeseen and unstructured environments for which programmers cannot pre-program them to operate in. This means robots will need to sense, plan, and (re)act intelligently in those environments, which would allow robots and humans to safely share the same spaces and work more closely together.
The Robot Operating System (ROS)
ROS is an open source framework for creating robot software described by the Open Source Robotics Foundation (OSRF) as “a collection of tools, libraries, and conventions that aim to simplify the task of creating complex and robust robot behavior across a wide variety of robotic platforms.”
Note: Despite its name, ROS is not an operating system.
ROS Installation and Set up
I seamlessly installed and set up ROS using its well-documented installation instructions for Ubuntu Linux. I installed the Full Desktop installation because storage space (roughly 2GB) for the installation was not a limitation and I don’t know how much of the ROS software I will need.
After installing and setting up ROS, I turned my attention to completing key ROS tutorials. I completed tutorials 1–6 and 11–13 from the beginner section, focusing my efforts on the Python tutorials. These tutorials were a walk-through of frequently used tools in the standard workflow of developing robot software using ROS. They also covered necessary vocabulary I would encounter as I build using ROS.
The tutorials were easy and fun to complete. Look at my majestic turtle.
I tried drawing a musical note. Call me Picasso.
A robot project built using ROS is organized in workspaces that contain packages. These projects can be visualized as graphs showing the connections between components.
Each node in the graph is a program that ROS can use to communicate with another node. Nodes communicate over a typed and named data channel called a topic. In the image below, the topic is called
/turtle1/cmd_vel topic transmits messages (data) of type
geometry_msg/Twist, and because topics take on the type of the messages they transmit,
/turtle1/cmd_vel is also of type
ROS nodes are able to discover each other through a name service called the ROS master. Provided this service is running, nodes can communicate using the Publish-subscribe pattern, or PubSub for short.
We can describe the graph above by saying that the
/teleop_turtle node publishes messages of type
geometry_msg/Twist to the
/turtle1/cmd_vel/ topic to which the
/turtlesim/ node is subscribed.
In the first week of ColumbiaX’s Robotics course, I was introduced to robotics, looked at various types of robots, became aware of the ambiguity surrounding the term robot, and played with the Robot Operating System. I am excited about this course and look forward to learning more about robots and the Robot Operating System.