Since working with robots will be a development effort, most tools you will need will be development tool-kits. The Open Source Robotics Foundation (OSRF) has a great web page with resources. They support and maintain the Robotics Operating System (ROS). This is a vast collection of tools that you can install both on your existing system or as a container.
The reasoning behind a distribution
When you start experimenting with robots, you will discover many things that you did not expect when you started. Do you realise how much interpreting images matter to robotics development? In a distribution, you have all the tools that you will need before you know that you need them.
This makes it faster to get started and avoids complications as projects evolve. You will occupy disk space unnecessarily but the total size of the system is not big for a modern computer. As you progress in your project, make sure you know what to put in the robot and not. Your disk space restraints are much stricter there.
ROS – The biggest and obvious choice
As mentioned earlier, ROS has a vast library of functions. These range from hardware control, messaging between subsystems to vision libraries, and simulators. The project is well supported by the OSRF. They are in turn supported by many industry leaders, and their commercial subsidiary supports the same companies in their efforts.
Despite the vast range of choices and the high level of sophistication, a new user can get started using some standard components. Thanks to the cooperative methods of the OSRF, there are many robots that have been built using the ROS. Many are consumer products that you can buy for a reasonable amount and start your project for a specific task. Currently available products are one on wheels, legs, and wings on flying drones. You can even find water dwellers, including submarines.
This project will last you through to industrial use if you aim to go there. There is a bit of a learning curve getting started but you have a lot to learn about robotics anyway. In fact, when you plan your first project, you will most certainly miss many features you need just for basic use.
Mobile Robotics Programming Toolkit
As you will see when you start with robots, much of the job will be programming. This toolkit helps you with SLAM (Simultaneous Localisation and Mapping) and other path-planning tools. Many of the tools have to do with vision. an interesting piece of this tool kit is the support for the Kinect hardware. The libfreenect libraries are the underlying ones for this project. To add it to your Ubuntu install, you can pick up the PPA and install it with apt. Compiling your own requires gcc-7 or newer, clang-4, or newer. For more information and what you need to do when you are using ROS, goto their GitHub page.
Named ‘Yet Another Robot Platform’, it is based on the idea that you use as much as possible of existing tools. YARP is a collection of C++ libraries that defines communication protocols for all levels of robotics projects. You have three components of YARP, YARPos, YARPsig, and YARPdev. They are all concerned with how to send data between the components of your project. The YARPos component creates interfaces towards the OS you are running. This makes it easy to switch the OS or hardware of one component while retaining the same YARP streams of data. This is required for running the other parts of the system. YARPsig handles signal processing tasks, it interfaces with OpenCV and similar libraries. It does not do the processing. YARPdev provides interfaces to all manner of devices you need. Think cameras, microphones, motor drivers, and more. YARP will make the interface to the overall system. You will also use it to configure your devices. YARP will help you plan all other software so you can use what is existing out there. In fact, you also have the option to run some components under ROS while others run YARP. There are many options available and you can transition between the two gradually.
When you start out with robotics, you will need many software parts. Each controller and embedded computer have different needs and systems. Every camera has anew driver. All the data needs to move around between subsystems and components. It gets really complicated. To get started faster, you need to have a system that coordinates everything. You do this by having a coordinating function for messages and data. These are organised as ‘topics’, ‘nodes’, and ‘services’. The reason for these different functions is that sometimes, you want to execute commands, sometimes you want to make data available to many other parts of the system and you will also be able to send all the data out to the system in general.
This is where you need a distribution or a platform that keeps all this coordinated. ROS is the system that works with most, if not all hardware and types of projects. Remember to understand what you are trying to achieve with your design. This is particularly important when you are learning. If you have a goal, then all steps have a reason and an association. That is the basics of learning; To see the connection between reason and action.