Purpose and scope

Robotics is a field in adolescence. From its beginnings in the 1960s with industrial robots, robots have been a fixture in factories. Since then, robotics has been a topic of active research in academic and industry labs, but economic breakthroughs came in fits and starts. Developments in the 1990's led to the success of mobile service robots, like the iRobot Roomba, that perform specific tasks in the home. The 2000's saw developments in medical robotics, with radiosurgical and laparoscopic surgical robots being widely adopted in hospitals. In the 2010's, advances in inexpensive sensors and actuators, and open-source software have now made it possible to build affordable robots that exhibit complex behaviors in human environments. Moreover, emerging applications like autonomous vehicles, drones, and warehouse robots have attracted billions of dollars of investment with no sign of slowing. However, the field and discipline of robotics is ever-changing. Techniques that were once only evaluated in labs are becoming field-tested in the real world, and new problems are emerging as society poses novel applications for robots.

The purpose of this book is to help launch a student's career toward developing the next generation of intelligent robots. These robots will be integrated into humans' daily lives, will understand and react to the world around them, and will perform tasks reliably. Robotics is however a complex and interdisciplinary field that spans mechanical engineering, electrical engineering, computer programming, and machine learning. At times, it also touches on mathematics, biomechanics, psychology, and neuroscience. This book does not try to teach skills from these fields (e.g., programming or computer-aided design) that are better learned elsewhere. Instead, the philosophy of the book is that robotics is the engineering and science of systems. What this means is that the job of a roboticist is to understand how a complex assembly of parts will work as a whole. This requires understanding both the functionality of the parts — e.g., sensing the world, understanding the world, making decisions, and taking action — and the connections between them. Building systems is also fun and rewarding. The act of building a robot, toiling for weeks (... or months ...) of effort, and watching it finally work (!!!) brings immense excitement and joy to its creators.

I argue for taking a systems approach to teaching robotics because it is the most practical way of moving robotics out of the lab and into the real world. I strongly believe that the future of progress in robotics is in interdisciplinary teams, and that students taught robotics from a systems perspective will be better prepared to avoid the dysfunctions and pitfalls that tend to emerge from these teams. Perhaps popular media has done a disservice to the field by perpetuating the archetype of a "lone genius" developing a fantastical robot (as seen in movies like Iron Man, Big Hero 6, and Ex Machina). It is hard to develop intelligent robots because a huge range of technical expertise is needed... Mechanical design! Computer vision! Motion planning! Usability testing! This is more than any one person can do alone.

However, when a team of specialists are brought together, each of whom is taught to speak in his/her own technical languages, have his/her own technical concerns, and tend to work in certain "comfort zones," this causes isolation between parts of the project, gaps in understanding, and mistaken assumptions. I have personally seen several projects delayed and/or failed due to specialists' lack of understanding of each others' work, or a failure to understand the workings of a system as a whole. We certainly need specialists, no doubt, but we also need common ground in which to understand the importance of each other's needs, strengths, and weaknesses.

It is also my opinion that robotics should not be learned by focusing on a particular platform or application, but rather on broadly applicable techniques and skills. Because the field changes so rapidly, the student who learns a single platform runs the risk of sparse opportunities in that area when finishing their studies. Being stuck on a stale application will hamper one's ability to spark insights with colleagues, seeking a job, or starting a company. As a result, the topics in this book are curated to generalize across platforms, like mobile robots, autonomous vehicles, industrial manipulators, humanoid robots, medical robots, and more. To illustrate this philosophy, the vast range of tasks demanded of robot engineers can be thought of as a matrix, with applications in rows and technical areas in columns:


Figure 1. Robotics is a field that cuts across technical areas and application areas.

For each entry of this matrix, developing a successful component requires an engineer to blend technical know-how about the subject (column) with the special demands of the application (row).

The main sections of the book are arranged vertically, covering six technical areas: Mathematical Models, Motion Planning, Dynamics and Control, Perception, Learning and Calibration, and Systems Engineering. (Columns and book sections are not in one-to-one correspondence; the modeling column is split between several sections.) The material covered by the book attempts to survey a mixture of classical, "tried and true" topics as well as modern topics that verge on the state-of-the-art. To bookend the technical material with a broader context, the Introduction to Robots section discusses robotics history, and the Application Areas section discusses some of the domain knowledge employed in common robotics applications.

Historical context


There are many high-quality references

Spong et al.

Autonomous mobile robots.

Latombe, Choset et al on motion planning.

Thrun and Burgard on state estimation and mapping

Springer Handbook of Robotics, Siciliano and Khatib.

Conferences and journals: ICRA, IROS, IJRR, IEEE TRO, Auro, RSS, RA-L. Speciality conferences: HRI, SSRR, ISRR, ISER, WAFR, IJFR, CoRL.

Notes for students

Robotics is a popular choice for teaching engineering and programming in K-12 education. Competitions and robotics kits, like FIRST robotics, Lego Mindstorms, and VEX Robotics teach the basic principles of computing, electrical engineering, and mechanical engineering using robotics. Certainly, robots are fun, engaging, and motivating examples of engineering in action. However, if this describes your past experience in robotics, the content of this book may prove to be a bit of a surprise! You will find a lot more math and a lot less tinkering. What gives?

Frankly, there is a big gap between "fun" robotics found in education and the "serious" robotics found in research and industry. To bridge this gap, a deep understanding of advanced material is necessary. An enormous amount of design, planning, effort, and understanding is needed to take a robot from 80% to 99+% reliability. This book is designed to start your journey into "serious" robotics by providing a scaffolding of theoretical principles upon which you can build a deeper understanding.

After mastering the topics covered in this book, you should be prepared to dive into the vast wealth of advanced robotics material: technical reports, academic papers, and specialized advanced textbooks. Making a real-world product will also take a large amount of hacking (or, to say it more professionally: "testing, evaluation, and development") to get right.


This book is intended for an advanced undergraduate or beginning graduate students who have some mathematical and programming background. Calculus, linear algebra, and a few serious programming courses are essential for understanding the material. Background on multivariate calculus, introductory probability, data structures, and algorithms are recommended, but not assumed by the text.


Programming is an essential skill for a roboticist, and knowledge of programming will be needed to make full use of this book. You should have had exposure to basic data structures, like arrays, linked lists, and trees, and some object-oriented programming concepts like classes and methods.

Code for the programming exercises in this book are available in the Python programming language, using the Klamp't robotics software package (as of writing, on version 0.8.1). This package supports modeling, visualization, simulation, and planning for a wide variety of robots. Klamp't has been publicly available since 2014, and is cross-platform, supporting Mac, Windows, and Linux, and also has a web-based interface.

Professional robotics is dominated by the C++ and Python programming languages, with C++ primarily used for high-performance code, and Python primarily for rapid prototyping, interface code, and behavior scripting. The Robot Operating System (ROS) middleware is currently the dominant middleware package and package distribution framework in robotics. Hence, it is worthwhile for students to learn in conjunction with theory. At time of writing, ROS works best on the Linux Ubuntu OS, and has a C++ and Python API.

Notes for instructors

This book is designed to survey a wide variety of topics from different disciplines, and it is inadvisable to teach the entire book in a semester. Instead, a coherent semester-long or quarter-long course could be created by selecting a few topics.

Below are suggested outlines of some potential courses that can be covered by this book:

  • Intelligent robotics: intro, motion planning, perception, learning and calibration, system integration.

  • Robot system design: intro, modeling, dynamics and control, system integration.

  • Robot dynamics and control: intro, modeling, dynamics and control, learning and calibration.

  • Mobile robots: modeling, motion planning, dynamics and control, perception.

It is often highly instructive to include a hardware component in a robotics course to give students practical experience. However, to minimize the potential frustration of working with hardware, the robot hardware should be robust, and the software infrastructure should be mature and have a fairly shallow learning curve. Some suggested hardware platforms include the Rethink Robotics Baxter, Aldebaran Robotics Nao, the UR-X series of robots from Universal Robotics, iRobot Create, and DARWIN-Op.

Klamp't is not the only simulation toolkit available to the robotics educator. The most commonly used alternatives include Webots, V-REP, and Gazebo. Gazebo does have an advantage in that it is more tightly integrated into ROS, which makes the transition from simulation to real robots somewhat easier. This comes at the price of the steep learning curve of ROS with its esoteric semantics and hundreds of packages. The advantage of using Klamp't is that it provides a unified API for simulation and much of the "under-the-hood stuff" that is so important to learn in robotics — e.g., kinematics, dynamics, and planning. In my experience, only having to learn one software package tends to make it easier for students to digest the theory. Programming exercises in Klamp't corresponding to each chapter are provided with the book's supplementary material, and solutions to programming exercises can be obtained from the author.

In [ ]: