I have been approached by many people with various backgrounds and asked on what they could do to learn robotics, which books to read, and what kind of projects to do. Robotics is a very broad field. It is very difficult to comprehend all techniques in robotics. In this article, I will first go through a few fundamental techniques you need to learn and then branch out to several areas. I will only provide a basic introduction for each technique and then give you several links to good online material for more details. You can consider this article as a map of robotics for beginners.

**High school background**

Since robots are physical machines move in 3D world, you need to know **3D Geometry**. If you don’t remember what you have learned in you high school Geometry class, you could refresh your knowledge on those topics:

Coordinate system, rotation, transformation, sin/cos/tangent, Triangle Identities and all the other Trigonometry stuff.

They are very useful when you imagine how things are interacting with each other in 3D and compute the positions and motions of the robots.

Since robots interact with the environment or us in a physical world, you need to know **Physics**. You can refresh you knowledge on physics at this online resource or using your textbooks. For basic knowledge in robotics, you would need to know the following:

Vectors in Physics

Kinematics in Physics

Newton’s Laws in Physics

Work, Energy, & Power in Physics

Linear Momentum in Physics

Rotational Motion in Physics

Circular Motion and Gravitation in Physics

**College level background**

With high school knowledge on your belt, you would be able to work on some simple robotics projects that doesn’t involve with many moving parts (joints). You will have trouble to formally model a real-life robot, make correct calculate of the motion, or convert it to a computer program to control the robot. You need college level background to learn professional techniques in robotics.

First you need to know **linear algebra** for 3D computation. College linear algebra is usually designed to prepare you for many different domains since it is a very important tool for almost everything. But for robotics basics, you don’t need to know all that. You can start by learning the followings:

Solving Systems of Linear Equations, Vector Operations, Matrix Multiplication, Matrix Inverses, Matrix Transpose.

Vector and matrix are efficient ways of representing data and variables. They make all the computation easier to manage.

Then, if you like Computer Graphics, knowing graphics definitely make learning robotics easier. But it is not a prerequisite to learn robotics. If you have trouble to understand 3D transformation, you can read it in the context of 3D graphics.

Dynamics, control theory, and programming are good to know, but are not prerequisites.

**1. Basics of Robotics**

If you pick up a robotics textbook, mostly likely you will read in the following order: **coordinate systems, transformation, kinematics, inverse kinematics, velocity, statics, dynamics**, and so on. Then you may read chapters on **controls, sensors, trajectory generating, motion planning**. More advanced textbooks will contains **simultaneously localization and mapping, Kalman filter, particle filter, Bayesian filter, reinforcement learning, hidden Markov models, Kinematics/dynamics calibration, camera calibration, visual-servoing**, etc. They are all considered as basics of robotics. However, you don’t need to learn them all before you branch out to some special interesting robotics topics of your own.

If you are in **mechanical engineering or electrical engineering**, you will be very comfortable with kinematics, statics, dynamics, velocity, control, sensor, etc. You probably will be struggle a little bit with motion planning and simultaneously localization and mapping. You probably heard of Kalman filter, hidden Markov models, and system identification (which is kinematics/dynamics calibration). You will spend a lot time to learn particle filter, Bayesian filter, reinforcement learning. Some electrical engineering student may have learned camera calibration in an image processing class, and the visual-servoing is visual-based control (simple SISO system usually). So I would recommend you to learn in the following order: Kinematics, velocity, statics, dynamics, control and sensor (if you don’t already know), Kalman filter. Then you can decide on what to learn next according to your interests.

If you are a **computer science major** and you are not very good at force, momentum, or control, you should still learn kinematics and velocity (Jacobian). Motion planning and trajectory generating should be quite easy for you after learning data structures. Then you should learn Kalman filter and particle filter for simultaneously localization and mapping (SLAM). If you have learned either machine learning or data mining, you should be very comfortable with Bayesian filter, reinforcement learning, hidden Markov models. You have probably already learned camera calibration in your image processing class and you can view visual-servoing as an optimization approach. Statics and dynamics are not difficult. It will take you some time to get to know the details. If you don’t have control background, I don’t recommend you to start to learn it. But if you want, you can start with simple feedback control loops and PID controller. To better design your PID gains, you probably need to learn root locus and Bode plot. I took at lease four control theory courses and I found, in most cases, I only need knowledge of PID controller, root locus and Bode plot.

If you are **not an engineering major** student, learning college level robotics could be difficult for you since you would not know a lot of background knowledge. I would suggest you to start with kinematics and then follow either the EE/ME path or the CS path.

In the following I will provide the links to material for each knowledge point.

**1) Kinematics**

Kinematics is the basics of many things. **It maps the variables you can control to the variables you want to control.** For a chain robot, such as a robotic arm, you can control the joint angles with motors for example. But you really want to control the robotic tool mounted on the wrist of the robotic arm. You need to build the relationship between the joint angles and the tool pose so as to control the tool with the joint angles.

To build that relationship, you will want to put coordinate systems on each joint and use the coordinate transformation computation to compose the rotation or translation in all the joints to obtain the transformation between the tool and the world, which is the pose of the tool.

To define a coordinate system for each joint, we would need some kind of rule. Otherwise, different people would define the coordinate systems differently and it would be difficult to communicate, compare or collaborate. Usually people use Denavit–Hartenberg (DH) conventions. Then based on the coordinates systems, you can derive the DH parameters and then use them to compute a sequence of transformation matrices. Multiple them together will give you the forward kinematics that computes the tool position and orientation from the joint variables.

But for many problems, you are given a desired tool pose, not the joint variable. For example, you want to a robot to poke someone. What you know is the tool’s position and orientation. The robot or you as the roboticist to compute the joint variables from the tool’s position and orientation and control the robot with the joint variable to do the poking. It is a inverse kinematics problem that is less straight forward than the forward one. For simple robotic systems, you can be smart and find the geometry relationships between the joint variables and the tool pose. But for complicated systems, you will need to use Jacobian to compute the inverse kinematics.

Oussama Khatib at Stanford has 16 lectures of Introduction to Robotics at

It covers Forward Kinematics, Inverse Kinematics, Jacobians, Dynamics, Motion Planning and Trajectory Generation, Position and Force Control, and Manipulator Design.

Peter Corke at QUT has a MOOC class on Intro to Robotics and you can learn it for free. The course takes 6 weeks.

http://www.petercorke.com/MOOCs.html

It covers kinematics (forward and inverse), velocity (Jacobian), and dynamics and control. Peter’s new book Robotics, Vision & Control not only covers those topics, but also includes mobile robots, basic computer vision, and visual servoing. The best of all, the book provide Matlab examples.

Several weeks ago, I met Mark Spong. He was thinking about updating his popular robotics book Robot Modeling and Control soon. I have used this book in my Intro to Robotics class for six years. I selected the textbook because it is very easy to read. It would be exciting to read the new edition.

In Kinematics, to me the followings are the most important topics: 3D rotation matrix, rotation composition (Euler angles and Yaw-pitch-roll), rotate around a vector, homogeneous transformation matrix, DH convention, DH parameters, compute Euler angels or yaw-pitch-roll from a rotation matrix, Jacobian matrix for inverse kinematics.

A good exercise is compute the forward the inverse kinematics for a Nao robot and a Fanuc LR MATE 200IC arm. The links provides the papers that give the solutions.

Fanuc LR MATE 200IC Arm Kinematics