Robot Systems: Software Stack Overview
Tags: robot
Published: 2021-04-05 06:15:11

When you build your own robot, you need to make two essential decisions: Its hardware and software. My background is software development, so I will start to investigate the design questions for my robot from that direction as well.

This article summarizes my research results into robotic software. It is by no means complete, and it also does not rate the software projects. See it as a comprehensive and reason list of choices that you can consider when starting your own project.

_This article originally appeared at [my blog](https://admantium.com/blog/robo04_software/)_.

## Groups of Software

Before detailing the concrete software packages, let’s consider to which categories the software can be grouped:

- Robotic Middleware: The core system that abstracts a robot and its operations
- Motor Controllers: Software for steering the robot, based on the type of motors and the movement type
- Navigation: Software for orientation as well as a active route searching to reach a designated target
- Machine learning: A broad category, includes software the helps the robot in areas such as object detection and navigation
- Sensors: Reading data from the various additional sensors of the robot
- Remote Control: Allows the direct control of robots

## Robotic Middleware

The middleware abstracts a robot as a moving and operating entity. It also helps to establish common protocols for message exchanging between different computers, e.g. a workstation, and coordination, e.g. of multiple robots working towards a shared goal. The middleware is like the operating system of your robot: Enabling the overall system to work and connect to other systems.

[ROS](https://www.ros.org/)

- Open Source Robotic middleware
- Large open source community
- C++, Python, XML

[ROCK](https://www.rock-robotics.org/)

- Robotic Construction Kit, forms abstractions of a robot’s components
- [Github Repository](https://github.com/rock-core)
- C++, Ruby

[YARP](http://www.yarp.it/index.html)

- Connection sensors, processors, actuators
- [Github Repository](https://github.com/robotology/yarp)
- C++

[IsaaC SDK](https://developer.nvidia.com/isaac-sdk)

- Powerful simulation with state-of-the-art graphics cards
- Interoperates with ROS

[JohnnyFive](http://johnny-five.io/)

- JavaScript "runtime" for accessing microcontrollers, based on the Firmmata protocol
- [Firmata](https://github.com/firmata/) is a message protocol for Host-To-Board translation of microcontroller code (also used in the Rosserial package for communication between host node and serially attached microcontroller)
- Works on several different microcontrollers
  By far, the most often named project is [ROS], all the other projects I found while searching on Wikipedia, but did not find any project using this software.

## Motor Controllers

In a robot, electric motors are most often used. Motors serve the purpose of moving the robot itself, and they can be used to move an arm or other means for interactions with the environment.

The following software examples list very concrete motor controlling software for the Arduino microcontroller.

[L293D DC Motor](https://lastminuteengineers.com/l293d-dc-motor-arduino-tutorial)

- No special library needed
- Apply Pulse Width Modification for speed control, and H-Bridge for controlling direction

[L293D Stepper Motor](https://lastminuteengineers.com/stepper-motor-l293d-arduino-tutorial/)

- Include the Library `<Stepper.h>`
- Configure with the total number of steps per revolution and the connection pins

[L293 Servo Motor](https://lastminuteengineers.com/l293d-motor-driver-shield-arduino-tutorial/)

- Include the Library `<AFMotor.h>`
- Configure with the number of motors and their connecting pins

## Navigation

Navigation software includes libraries that help to make an abstract model of the surrounding environments. And with this model, algorithms will detect and dynamically apply path finding algorithms to reach a designated target.

The following software contains again very specific libraries for the ROS middleware. Take these libraries as examples about the type of abstractions that a robot needs to make.

[ROS SLAM Gmapping](http://wiki.ros.org/gmapping)

- SLAM = Simultaneous Localization and Mapping, allows a robot to detect its environment and interaction
- Gmapping is a particular algorithm that provides SLAM capabilities

[ROS TF](http://wiki.ros.org/tf)

- A robot is abstractly represented by coordinate frames of its different links
- The relationship between these links are described as offsets (translation, rotation)
- The TF library is the ROS standard to represent these offsets, and all packages for navigation and sensor need to transform their data to confirm to TF

[ROS Odometry](http://wiki.ros.org/navigation/Tutorials/RobotSetup/Odom)

- Odometry is the process of estimating an objects position based on a recording of its positions and velocity over a set of measurements in a given timeframe
- This display type visualizes Odometry values recorded with ROS

## Machine Learning

This category contains libraries that help the robot to become better in different aspects of robotics: Image detection, language understanding, or just plain machine learning itself.

[Image AI](https://github.com/OlafenwaMoses/ImageAI)

- Self-Contained Deep Learning and Computer Vision Library
- Python

[Snowboy Hotword Detection](https://github.com/Kitt-AI/snowboy)

- Precompiled Voice Recognition
- Python

[TensorFlow](https://www.tensorflow.org/)

- Neural Network Library based
- Python

[Keras](https://keras.io//)

- High Performance API for Tensor Flow based
- Python

[OpenCV](https://opencv.org/)

- Face Recognition Library
- C/C++/Python

## Sensors

Reading data from sensors is just one part of the coin. The other one is to make the data parseable for your robot. The following libraries are examples from the ROS middleware.

[Video Streaming](https://github.com/ros-drivers/video_stream_opencv)

- Video Streaming for web cameras and more specialized hardware

[ROS TF Library](http://wiki.ros.org/tf)

- Library for recording & storing robot frames over time

[ROS rpLIDAR](http://wiki.ros.org/rplidar)

- Light Detection & Ranging, a method to illuminate surfaces and measure their reflection for obtaining a 3D representation of objects
- [Other LIDAR packages](<<https://blog.generationrobots.com/en/lidar-integration-with-ros-quickstart-guide-and-projects-ideas/>)

## Control

This category includes software that enables direct control for your robot.

[ROS Teleop](https://github.com/ros-teleop/teleop_tools)

- Library for providing direct control commands to ROS robots using keyboard, mouse or joystick
  [Keyboard](http://wiki.ros.org/teleop_twist_keyboard)

[DTMF Controll](https://www.electronicshub.org/dtmf-mobile-controlled-robot-without-microcontroller/)

- Idea: Dial Tones of Phone represent direction keys to which the robot listens

[Bluetooth Controll](https://www.electronicshub.org/bluetooth-controlled-robot-using-arduino/)

- Add a Bluetooth Controller, intercept Bluetooth Messages as Control Inputs

# Conclusion

This article gave an overview about Robotics software. Starting from the robotic middleware, continuing with motor and navigation, to sensors and machine learning. By no means is this list complete - it is a selection of libraries that I encountered during my research and found interesting to investigate and present. The next article explains robotic hardware.