Developers, developers, developers…
Robotics needs software engineers and software developers in general. A lot of them. This article is for those software developers who have never considered programming for robots. We are going to see some reasons why you should become a developer for robotics, what that would entail for you, and how you can start.
Why become a robotics developer?
The first question you may want to ask is why should you consider becoming a robotics developer. I can think of the following reasons:
- Programming robots has a big future. The number of robots used in the world is increasing exponentially.
Forecast of number of robots in the world for the next years (source visualcapitalist.com)
I’m not just talking about industrial robots, but also robots targeting commercial and consumer spaces. I’m talking about robots that interact with humans and help them with their tasks. I’m talking about service robots.
Even if the industrial and military robot sectors are growing, the one that is growing even faster is service robotics.
- Not enough engineers… yet. Due to the increasing demand for robots, many companies are considering having a robotics division. I know that because every week we get companies as clients of our academy (Robot Ignite Academy) who want to start providing training to their engineers on how to program robots. These are companies that do not have robotics divisions, but are considering creating one, and cannot find properly trained people that know how to program robots.
What is starting to happen in robotics already happened very recently with data engineers and deep learning just a few years ago.
Today, every company wants to have a machine learning engineer, and hence, you can find machine learning engineers everywhere. The machine learning space is now too crowded. However, that is not the case for robotics programming. Now is the best time to jump onto the robotics wagon and be one of the first in this field.
- The demand for robotics engineers is very high. You only have to take a look at the robotics-worldwide mailing list to see how many job offers relating to robotics programmers are posted every day. The offers include all kinds of working environments: you can work for companies, for startups, for research institutes, or even do a PhD on the subject. We have created a specific web page, the ROS Jobs page, where we put all the jobs related to programming robots. Jobs are divided in several types, like PhD/Post-Doc, internships, software engineers, research engineers, and hardware engineers.
- Just to let you know, at the last conference about Robot Operating Systems, the ROSCON2017, all the companies attending were indicating that they were hiring. All of them.
- Salaries. Salaries for programming robots are not bad (at least in the USA; I don’t have data about it for other countries. Please contact me if you do). Here are some examples of salaries extracted from different recruitment webs:
Robotics salary range in USA (source Sokanu)
Salary for an actual robotics software developer job offer
- It is super cool! Let’s face it, saying that you are developing software for robots is a lot cooler that programming accountant software or an app to request pizza on the beach. Society considers robots to be one of the coolest things in technology.
- You can make a difference. What is especially interesting with service robots is that the key to having a useful robot is not the hardware, but the software. The hardware that allows a robot to clean your house already exists. The biggest limiting factor for having service robots is software. So, your job can contribute to finally bringing robots to real life.
[irp posts=”6751″ name=”The Need For Robotics Standards”]
Why are there not enough developers for robotics?
In general, software developers do not like to deal with the hardware.
It is very likely that you are a developer and have never thought about entering into the robotics realm. You probably think that by programming for robots, you would need to know about electronics, and maybe even mechanics. You probably think that hardware and software are so coupled in robots that you cannot touch one without touching the other.
For example, some years ago, I had to make the navigation system for a robot. However, our navigation program was not working at all. We thought that there was something wrong with the program, but after extensive review, we found that it actually was a problem with the electronics of the laser scanner that we used to localize the robot. There were some micro-interruptions in the voltage level that made the laser reboot. In order to find that error, we had to go to the basics and find where the problem within the physical laser was. For that, you need to mess with the electronics. You have to take the laser out from the robot, put it on your table, and start doing experiments. Different voltages and different interruptions to the power in order to try to reproduce the effect in a controlled environment. That is a lot of interaction with the hardware.
That interaction with the hardware is something that many software developers don’t like. After all, they decided to become developers of software, not hardware!!
Roboticists programming robots
Due to that, the programming of robots has been done by roboticists, which are the people that build the robots. Perhaps some of them are not directly involved in the creation of the robot, but they definitely have no problem getting into the hardware and trying to fix it when something goes wrong in order to make their program work.
But let’s face it, most roboticists are not as good programmers as they are developers. That is why robotics could benefit so much from having lots of expert programmers entering the field.
The good news is that getting developers into the field is easier than ever. Thanks to the Robot Operating System (ROS), you can completely abstract the hardware from the software, so you can program a robot just by knowing the robot’s ROS API. By using the ROS API, you can forget about the hardware and just concentrate on the software that makes the robot do what you want.
What is the robot’s ROS API?
The ROS API is the list of ROS topics, services, action servers, and messages that a given robot is providing to give access its hardware, that is, sensors and actuators. If you are not familiar with ROS, you may not understand what these terms mean. But simply put in developer’s language, topics/services/messages are like the software functions you can call on a robot to get the data from the sensors and make the robot take action. It also includes the parameters you can pass to those functions.
Most modern robot builders are providing off-the-shelf ROS APIs; for example, ROS-Components shop, which provides all its hardware running with a ROS API.
If the robot you want to work with does not run ROS, you can make the robot work with ROS by ROSifying it. To ROSify means to adapt your robot to work with ROS. To ROSify a robot usually requires knowledge to access the hardware. You need to learn how to communicate with the electronics that provide the sensor data or access the motors of the robot. In this post, I’m not dealing with that subject because it’s out of the scope of developers.
What is ROS anyway?
ROS stands for Robot Operating System. Even if it says so, ROS is not a real operating system since it goes on top of Linux Ubuntu. ROS is a framework on top of the O.S. that allows you to abstract the hardware from the software. And that is good news for you because this implies that you can actually create programs for robots without having to deal with the hardware. Yay!
ROS for service robots
ROS is becoming the standard in robotics programming, at least in the service robots sector. Initially, ROS started at the university level, but quickly spread into the corporate world. Every day, more and more companies and startups are basing their business in ROS.
[irp posts=”7810″ name=”On not using ROS for your robotics startup”]
Before ROS, every robot had to be programmed with the manufacturer’s own API. This means that if you changed robots, you had to start the entire software again, apart from having to learn the new environment. Furthermore, you had to know a lot about how to interact with the electronics of the robot in order to understand how your program was doing. The situation was similar to the computers of the 80s, when every computer had its own operating system and you had to create the same program for every type of computer. ROS is for robots like Windows is for PCs or Android for phones.
By having a ROSified robot, that is, a robot that runs on ROS, you can create programs that can be shared among different robots. You can build a navigation program, which is a program that makes the robot move around without colliding, for a four-wheel robot built by company A and then use the same exact code to move a two-wheel robot built by company B… or even use it on a drone from company C.
ROS for industrial robots
ROS is being used in many of the service robots that are created at present. On the other side, industrial robotics companies are still not completely convinced about using it, mainly because they will lose the power of having a proprietary system. However, three years ago, an international group called ROS-Industrial was created whose aim is to make industrial manufacturers of robots understand that ROS is for them, since they will be able to use all the software off-the-shelf that other people have created for other ROS robots.
ROS for agricultural robots
In the same vein as ROS-Industrial, ROS-Agriculture is another international group that aims to introduce ROS for agriculture robots. I highly recommend that you follow this group if you are interested because they are a very motivated team that can do crazy things with several tons of machines by using ROS. Check out, for instance, this video about an autonomous tractor running ROS, built by Kyler Laird of the ROS-Agriculture group.
How to develop for robots with ROS
Now, if you are convinced about becoming a robotics developer, here are the steps that you can take to become a robotics developer:
- Setting Up
The first thing is to set your system up so that you can get ROS installed in your development system. Let’s see how to set up your machine for programming for robots with ROS. You basically have two options:
- Install everything on your computer, see below.
- Use our online ROS Development Studio that already provides everything set up and requires only a web browser.
Which operating system should you use with ROS?
ROS works on Linux Ubuntu or Linux Debian. So, let’s start by installing it.
What I recommend is for you to install one of the latest versions of Ubuntu in your computer. As of today, 25th May 2018, I recommend installing Ubuntu 18.04. You can skip this step if you use the ROS Development Studio.
But I’m using Windows/Mac, not Linux. Can I still develop in ROS?
If you want to use Windows or Mac for ROS development, you have three options:
- Experimental support already exists for OSX, Gentoo and a version for Windows in under way, but I really don’t recommend you use them yet. Check this page for more information about ROS on those systems.
- Use a virtual machine with Ubuntu installed on your home O.S. Here is a video about how to install Ubuntu 18.04 on Virtual Box.
- Use the ROS Development Studio, where you can fully develop for ROS using only a web browser. This is our online platform that provides a full ROS environment working with your web browser.
Once you have an Ubuntu system working, you need to install ROS. Here are the instructions to install ROS. I recommend that you install the ROS Melodic version, installing the desktop-full option. Check the installation page to understand what these instructions mean.
You can skip this step if you use the ROS Development Studio.
ROS Development Studio
Now is the moment to start learning ROS.
You need to know in advance how to program in C++ or Python. Also, you need to be comfortable using the Linux shell. These two are mandatory. If you still don’t know any of these, I recommend you start with the following courses online:
As I already mentioned, ROS can be programmed by C++ or Python. However, if you don’t know C++ very well, do not try to get into ROS with C++. If that is your situation, please learn ROS with Python. Of course, you can start learning C++ now because C++ is the language used in the industry and you will need to do the transition from ROS Python to ROS C++ later, but your initial learning of ROS should be done by programming in Python. I know you are going to think that you can handle it and take both things at the same time, but… Bad decision. And good luck.
Final comment, bindings also exist for other languages, like Prolog, Lisp, Nodejs, or R. Find a complete list of currently supported languages here. I do not recommend that you learn ROS with any of those languages. ROS is complicated enough without you complicating it more with experimental languages.
If you have the basics of programming in any of those languages and in the use of the shell, the next step is to learn ROS. In order to do that, I recommend that you read this post that describes the 5 methods to learn ROS. From all the methods there, I’m going to recommend to you our online Robot Ignite Academy because it is the fastest and most comprehensive route to learn it. This is not something that I say, but what our customers say. Our online academy has a cost, but it will speed up your learning of ROS considerably (additionally, if you like it, you can use the discount coupon DDA9EA2E for a 10% discount).
On the other side, Open Robotics, the organization that builds and maintains ROS, provides a long list of tutorials here. The list is so big that it can be overwhelming. If you decide to use this method to learn ROS, then I recommend that you go by the following order for the tutorials, for optimal learning:
- Navigating the ROS file system
- Creating a ROS package
- Understanding topics
- Writing publishers and subscribers
- Examining publishers and subscribers
- Writing service client
- Examining service client
- Creating Msg and Srv
- Understanding service params
- Defining custom messages
- Recording and playing back data
- ROS TF
- ROS URDF
- ROS Control
- ROS Navigation
A fast path to learn ROS
As a final recommendation, apart from delivering ROS at the Master of Robotics of LaSalle University, I am delivering a live online class about ROS every Tuesday at 18:00 CEST/CET. I recommend that you attend and practice a new ROS subject with me every Tuesday at the ROS Developers Live Class.
You will need a C++ or Python code editor. Follow this page to get an overview of the main IDEs you can use for writing ROS code.
You can skip this step if you use the ROS Development Studio since it comes with an integrated IDE in your browser.
Additionally, if you have any questions about how to do things, why this or that does not work, use the ROS answers forum to post your question.
How can you test the programs you are developing for a robot? I am assuming here that you do not have access to a robot; actually, that you do not want to have access!! Remember: developers!!
Well, you have several options to test your ROS programs without having to use a robot.
You use mocks
If you are a developer, you already know what mocks are. You can create your own mocks that emulate the connection to the different parts of the ROS API of your robot. On this page, you will find some information about how to use mocks in ROS.
Working with mocks in ROS is not an easy option since it requires a lot of preparation work. Also, it is of very limited usefulness since it can only produce what you have put on it previously. Using mocks is an option that I don’t really recommend for developing. Use it only if you cannot use any of the other options below or if you are creating unit tests. In my personal experience, I have never used them. I have always used one of the next two options.
You use ROS bags
ROS provides a way to record in a log file the full ROS API of a robot while running in a real life situation, and then run it back later on another computer. This log file is called a ROS bag. When you run a ROS bag on another computer, the computer will be showing the same ROS API to your programs that was recorded.
You can learn how to use ROS bags here: record and replay of ROS bags.
ROS bags are a limited system in the sense that you can only use them for when you want to create an algorithm that does something from sensor data. This means that you cannot generate commands to the robot because it is only a reproduction of data, so you can get the same data as the robot got when recorded, but you cannot decide new actions for the robot.
You use simulations
So if you want to go pro without having to use a real robot, you should use simulations of robots. Simulations are the next step in software development. This is like having the real robot on your side, but without having to care for the electronics, hardware, and physical space. Roboticists consider simulations to be the ugly brother of robotics. Roboticists usually hate to use the simulation because it is not the real robot. Roboticists like the contact with the real thing. But fortunately, we are here talking with the opposite kind of people, those who want to keep their hands off the hardware. For those, simulations are key.
Let me tell you one thing: even if roboticists do not admit it, robot simulations are the key to intelligent robots. More on that in future posts, but remember you read it here first!
[irp posts=”3102″ name=”The Construct Manifesto”]
In the case of simulations, you have a simulation of the robot running in your computer that can run and act like the real robot. Once the simulation is running, your computer will present to your programs the same ROS API that you would have had if you were in the computer of the real robot. That is exactly the same as in the case of the ROS bags, with the advantage that you can now actually send commands to the robot and the simulated robot will reply accordingly to your commands. That is awesome!
To use robot simulations, ROS provides the Gazebo simulator already installed. You only need to have the simulation of the robot you want to program it for running. Usually, the companies’ creators of the robot provide the simulation of their robot that you can download and run on the Gazebo simulator.
Summit XL robot simulation running in Gazebo 9
Installing simulations and making them run could be a little more of hassle. If you want to avoid all that work, I recommend using our ROS Development Studio that contains the simulations ready to be launched with a single click, as well as having ROS, IDE, and other useful tools.
Additional robotics concepts you need to master
The final step to becoming a robotics developer is to master some robotics subjects.
I’m sure that as a software engineer, you already understand many of the subjects above because they closely relate to the normal job of a software developer. However, there are still some concepts closely tied to robotics that a software engineer needs to master (in the same sense that if you need to create invoices, you need to understand some concepts of accounting). Robots are living things, I mean, things that move around. That entails a series of new concepts that you need to learn (your program is not going to stay in a fixed place anymore).
What follows is a list of concepts that you need to understand to be able to create programs for robots. I have included a link to online courses that teach these subjects:
- Forward kinematics
- Inverse kinematics
- Rigid body dynamics
- URDF robot model description
- Robot navigation (including SLAM, localization, path planning, and obstacle avoidance)
- Robot manipulation
- What is a frame reference system?
- Robot joint control
- Robotics perception
We are going to see all these concepts in a coming series of posts entitled “ROS for Software Developers.” If you want to be notified when we publish those new posts, please enter your email in the following form.
In this post, I have shown the future of becoming a robotics developer and how you can become one. Let me know in the comments what doubts you may have and which problems you encounter when following this path.
Related articles about ROS that may clarify things for you
Here are some additional links that can provide you with more information about the future of ROS and how to become a developer of ROS.
- ROS Developers Conference 2018: an online conference where you can learn by practice with Robotics developers from worldwide universities and companies. In addition, all the participants will receive the e-book ROS Developers Guide.
- ROS Best Practices
- The ROS Developers Podcast