Nothing Special   »   [go: up one dir, main page]

Roadmap - ERC Handbook

Download as pdf or txt
Download as pdf or txt
You are on page 1of 1

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.

You might also like