Roadmap for Robotics
Robotics is a vast field which often
overlaps with many other disciplines
ranging from machine learning to physics.
For a beginner this can be pretty
intimidating, we know, we’ve been there.
To make it easier to get started, we have
collected the following resources. You can
also find more resources at our website.
A common beginning
As a beginner, the most important thing is
to start learning a language since it opens
up a lot of opportunities in terms of
projects to work on and things to do. Also
keep in mind that once you know one
language well, it’s relatively easy to pick
up another one quickly.
In robotics, different languages have
different uses:
1. Automation: Machine Learning:
python for basic stuff, C++ for more
advanced stuff
2. Embedded systems and electronics:
C
3. Modelling: python, MATLAB
We would recommend starting with either
python or C/C++. Knowing both is pretty
much essential for advanced robotics.
Here are some places where you can get
started:
Python
Web tutorial
Corey Schafer’s video tutorials
FreeCodeCamp Video Tutorials
Browser based tutorial
Beej’s Guide (follow if you already
know programming)
C++
Welcome to C++ Playlist - YouTube
Web tutorial
MATLAB & Simulink
MATLAB Onramp and Simulink
Onramp. These courses introduce
you to the MATLAB and Simulink
environments. Many other self paced
courses can be found here.
This interesting “How to” playlist by
MATLAB teaches some basics how
to’s with MATLAB & Simulink, check
out the videos which are required for
solving any doubts.
Versioning with Git this video will
help with using Git & Version control
with your Simulink projects.
Development Environment
Writing code isn’t just as simple as typing
into a text editor. Usually there are many
other components involved such as a
compiler, external libraries, path
environments, a terminal, version control,
documentation etc… Don’t worry if you
don’t know what these things mean,
together they are generally known as your
development environment. To begin with,
make sure you are comfortable with the
following
Linux Operating System: Linux is an
open source operating system - this
means that anyone can view and
propose changes to its source code.
It comes in many variants, Ubuntu
being the recommended choice for
beginners. It’s essential to have
access to linux (either through dual
booting, virtual machine or WSL -
more on these here) due to its tight
integration with many of the tools
used to program robots (and
development in general).
Linux Terminal: While most of us are
familiar with the point and click
based interface of windows,
computers first started off as
terminals - text based prompts that
you had to type into. The terminal is
still used for pretty much everything
in software development and is an
essential skill. YouTube Tutorial
Git: When working on complex code,
or as part of a team, keeping track of
changes to the code becomes very
important. Git provides a way to do
this and much more. Platforms such
as GitHub and GitLab have become
the bedrock of the open source
community in recent years. YouTube
Tutorial
Electronics
The Electronics part of Robotics can be
divided into 3 parts : Microcontroller,
Sensors and Actuators. Sensors and
Actuators (through drivers) are interfaced
with the microcontroller to form the
electronics system of the robot. Basic
electronics components like wires,
resistors, capacitors are used in
interfacing and this whole assembly is
mounted on a breadboard, prototyping
board or a printed circuit board (Based on
the stage of the project).
To start off with learning about
microcontrollers (structure, layout, how to
program) one is advised to start with
learning Arduino. Arduino is a low cost,
open source and easy to learn
microcontroller. The syntax used to
program Arduino is similar to that of
C/C++ and a software called Arduino IDE
is used to program it. Arduino has its own
set of official tutorials. One can also find
many tutorials on YouTube channels like
Jeremy Blum, Paul McWhorter, etc. There
is also a basic tutorial and more info
regarding Arduino IDE, from us over here.
There is an online simulator which is
capable of simulating Arduino projects,
called TinkedCad, in case one is not
willing to buy an Arduino board.
After learning Arduino and understanding
the basic concepts regarding working of a
microcontroller one can dive deep and try
out other microcontrollers like STM32
(BluePill), etc.
Sensors are electronic components used
by the robot to get information about the
environment. Some few examples of
sensors are wheel encoders, temperature
sensors, depth cameras (Kinect), LiDARs,
Ultrasound sensors, etc. On the other
hand actuators are components using
which the robot brings about changes in
the environment. Ex. Motors (DC, Stepper,
Servo, BLDC), Linear Actuators (Solenoid
or a linear servo), etc. Actuators are
interfaced with the microcontroller using
drivers because of the different power
budgets of the microcontroller and the
actuators.
After interfacing one might want to
assemble it on a prototyping board or
even a PCB (for long term use). A
software called EAGLE is used to design a
PCB. One can download and install it free
of cost from the official website of
AutoDesk. Tutorials on Jeremy Blum’s and
Terminal Two’s YouTube Channel are a
great place to start PCB designing using
EAGLE.
Automation
Robot Operating System (ROS)
Think about how you might go about
automating a human like robot that helps
out at home. Would you just write one big
program to control all its behaviour
(navigation, motion, obstacle detection,
battery monitoring, speech processing
etc..)? The much smarter thing to do
would be to have smaller independent
programs for each of these which can
communicate with each other (i.e one
program for moving around, one for
talking, one for picking things up etc..).
The problem that arises now is how would
these individual programs communicate.
The Robot Operating System provides a
solution for this. It is not an actual OS,
rather a framework which makes
communication and coordination easier.
Check out this and this video, and this
text for more.
To setup your ROS environment check out
this.
The official ROS tutorials are very good
for introduction. The concepts are given in
a concise manner, and a lot of example
code (Python as well as C++) is given for
understanding. Also read about various
ROS parameters here.
In case of specific questions, try googling
them. Many questions might have been
asked before by someone else and an
answer might be available on ROS
Answers.
A Recommended course: Hello (Real)
World with ROS - Robot Operating
System - TU Delft OCW
Also refer Morgan Quigley’s Programming
Robots with ROS
Path Planning
Path planning is the process of “finding” a
path or a trajectory for a robot by avoiding
obstacles or following set dynamic or
kinematic constraints of a robot. Quite
literally, it’s something we as humans do
quite instinctively, but robots find it
difficult and we try to make them
“intelligent” by using some algorithms
which can be called as path planning
algorithms. Path planning plays an integral
part in robot automation because most of
the robots have to plan a path. Even in the
case of robotic arms, moving the end
effector from a given spatial coordinate to
another given spatial coordinate requires
“planning of a trajectory” the arm must
follow. However, the constraints and
dimensions for planning the path or
trajectory are different from that used to
plan in a ground robot. Read more over
here.
Most of the old planning algorithms have
many implementations. Check out this
book for an in-depth introduction. The
best way to learn about any planning
algorithm is to look for the research paper
and go through it. Read about Graph
based algorithms like A Star and Dijkstra
here. Some information about a Sampling
based algorithm - RRT can be found here.
However, to find some implementations of
the algorithms, you can refer to the Open
Motion Planning Library for industry-level
implementations of the algorithms. (OMPL
is written in C/C++, beware!!). For a better
understanding and visualisation of how
various algorithms work, take a look at
this repository. It’s written in python!
Simultaneous Localization and
Mapping (SLAM)
As the name suggests, what SLAM
achieves is simultaneously map and
localise in an environment. Historically,
mapping and localization were done
individually. Doing both of them
simultaneously poses some difficulties.
Check out the playlist by Cyrill Stachniss
on SLAM for an in-depth course. Linear
algebra and Probability and Statistics are
quite important for a better
understanding.
Robot Perception
Robot Perception is something that is
really underappreciated by beginners as
the difficulties behind it are not properly
understood. It’s quite hard to comprehend
how hard can seeing, analysing and
extracting useful data from a 3D world
can be for a robot, as we as humans are
quite comfortable in picking and placing
objects that are in front of us with utmost
precision. It’s easy for us to avoid tripping
over a branch while walking(of course if
we see it). But the same is very complex
for robots. Robot Perception specifically
deals with this aspect of making
intelligent robots.
To understand how a robot perceives the
environment, you need to know about the
depth map, how we create it and what are
its uses (this is a resource using which
you can make a depth map yourselves.
Generally, depth maps are made by using
two cameras, each giving a different
perspective of the same scene, thus
creating a depth image, just like our eyes).
Using depth maps is one of the classical
methods of analysing a 3D environment.
Sensors play an important role in any
robotic task. High-quality Cameras,
LiDARs etc are used. To get started with
perception by using images, OpenCV is a
good starting point. For perception using
Point Clouds, Point Cloud Library is a
good starting point(PCL can only be used
using C++).
There are many advancements that are
taking place. With the advent of Neural
Networks, Convolution Neural
Networks(CNN’s) are used to extract and
analyse important information from depth
maps thus enabling image and point cloud
segmentation, classification tasks etc.
Machine Learning / AI
Much of the computer based tools we use
follow the same principle - they are a
collection of straightforward instructions
for the computer to follow so that it can
solve a task. Machine Learning on the
other hand, is about how the computer
can learn to solve a task from examples,
much like we humans learn.
Courses
Andrew Ng’s classic machine
learning course is generally a
good place to start.Note that
the exercises are in
Octave/MATLAB but it’s
recommended to try them out in
python. This repository has a
translated version of the
exercises.
Deep Learning by
deeplearning.ai is a more
advanced course by Andrew NG
focusing on Deep Learning.
After completing one of the
above, to explore more
advanced subfields within
machine learning, Stanford has
a good set of courses
Computer Vision
(recommended to do this
before the other two)
Natural Language
Processing
Reinforcement Learning
(also check out this book)
Software Tools
Numpy: Mathematics and
Linear Algebra library for
python. Essential to know.
YouTube Tutorial |
Documentation
Matplotlib: Plotting library for
python. Essential to know.
YouTube Tutorial |
Documentation
SciKitLearn: Machine Learning
toolkit in python. YouTube
Tutorial | Documentation
OpenCV: Computer vision
toolkit YouTube Tutorial |
Documentation
Pytorch: Deep Learning
framework YouTube Tutorial |
Documentation
Tensorflow: Deep Learning
framework YouTube Tutorial |
Documentation
Control Systems
Control systems help to control the
movements and functions of the robot.
We need the controllers because the
dynamics vary with the time. When the
robot moves up in a slope and then down
in the slope, or first travels on smooth
concrete, then on a carpeted floor. So
physical modelling of the “System”
becomes crucial for designing a good
controller.
We give a reference state to a controller.
The controller also has sensor feedback,
using the reference state and sensor
feedback controller generates a control
signal needed to reach the reference
state. This control signal is fed to the
“System”. The system dynamics
determine how the system behaves to this
control input. If the controller is good,
hopefully, the “System” will reach our
desired reference state. For more check
this.
To get started with control systems
and theory - Control of Mobile
Robots course by Magnus Egerstedt
(Georgia Tech), also on Coursera by
the same name.
Understanding PID Control - Playlist
by MATLAB explains PID control in
detail. Also read about the controller
over here.
Read about more advanced
controllers like Linear-Quadratic
Regulator (LQR) and Model
Predictive Control (MPC) here.
This playlist teaches some more
basic concepts of Control Theory
and how to practically apply them.
This playlist teaches State space
equations, pole placement and
concepts like controllability. These
become essential when dealing with
the math behind Control Theory.
Mechanical Design
CAD
Fusion360 is a good starting point to get
yourself familiar with 3D modelling to
model anything you can think of! This is
the link from where it can be downloaded.
Make sure you have an Autodesk account
linked with your institute id for free
access.
To get started with it check out official
tutorials on Autodesk website.
SOLIDWORKS by Dassault Systems is a
major CAD platform that is used for 3D
design and basic simulations. It has
slightly more functionalities than F360
and is very good for the design of
manufactured goods and design
engineering. You can easily find SW
tutorials on Youtube, however, this Lynda
tutorial series on SW is very nice- Lynda
Tutorials SolidWorks. [Use BITS mail]
For more information on how to get
Solidworks, get in touch with an ERC
member.