About Mastering ROS for Robotics Programming

Design, build and simulate complex robots using Robot Operating System and master its out-of-the-box functionalities

The area of robotics is gaining huge momentum among corporate people, researchers, hobbyists, and students. The major challenge in robotics is its controlling software. The Robot Operating System (ROS) is a modular software platform to develop generic robotic applications.

This book discusses the advanced concepts in robotics and how to program using ROS. It starts with deep overview of the ROS framework, which will give you a clear idea of how ROS really works. During the course of the book, you will learn how to build models of complex robots, and simulate and interface the robot using the ROS MoveIt motion planning library and ROS navigation stacks.

After discussing robot manipulation and navigation in robots, you will get to grips with the interfacing I/O boards, sensors, and actuators of ROS. One of the essential ingredients of robots are vision sensors, and an entire chapter is dedicated to the vision sensor, its interfacing in ROS, and its programming. You will discuss the hardware interfacing and simulation of complex robot to ROS and ROS Industrial (Package used for interfacing industrial robots). Finally, you will get to know the best practices to follow when programming using ROS.

  • Create a robot model of a Seven-DOF robotic arm and a differential wheeled mobile robot
  • Working with motion planning of a Seven-DOF arm using MoveIt!
  • Implement autonomous navigation in differential drive robots using SLAM and AMCL packages in ROS
  • Dig deep into the ROS Pluginlib, ROS nodelets, and Gazebo plugins
  • Interface I/O boards such as Arduino, Robot sensors, and High end actuators with ROS
  • Simulation and motion planning of ABB and Universal arm using ROS Industrial
  • Explore the ROS framework using its latest version

Book Details

  • Why should we learn ROS?
  • Why we prefer ROS for robot?
  • Why we do not prefer ROS for robot?
  • Understanding the ROS file system level
  • Understanding the ROS computation graph level
  • Understanding ROS nodes, messages, topics, services, bags
  • Understanding ROS Master
  • Using ROS Parameter
  • Understanding ROS community level
  • Running ROS Master and ROS Parameter server
  • Creating a ROS package
  • Working with ROS topics
  • Adding custom msg and srv files
  • Working with ROS services
  • Working with ROS actionlib
  • Applications of topics, services, and actionlib
  • Maintaining the ROS package
  • Releasing your ROS package
  • Creating a wiki page for your ROS package
  • ROS packages for robot modeling
  • Understanding robot modeling using URDF
  • Creating the ROS package for the robot description
  • Working with 3D Robot Modeling in ROS
  • Creating our first URDF model
  • Explaining the URDF code
  • Understanding robot modeling using xacro
  • Creating our first Xacro model
  • Explanation first Xacro model
  • Conversion of xacro to URDF
  • Creating a robot description for a seven DOF robot manipulator
  • Working with the joint state publisher and robot state publisher
  • Creating Robot description for a differential wheeled robot
  • Simulating robotics arms in Gazebo
  • Adding sensors to the robotic arm simulation
  • Interfacing Gazebo to ROS
  • Adding ROS controllers to robots
  • Working with the robotic arm joint control
  • Simulating the mobile robot in Gazebo
  • Adding sensors to mobile robot simulation
  • Moving the mobile robot in Gazebo using a keyboard teleop
  • Installing MoveIt!
  • MoveIt! architecture
  • The move_group node
  • Motion planning using MoveIt!
  • MoveIt! planning scene
  • MoveIt! kinematics handling
  • MoveIt! collision checking
  • Generating MoveIt! configuration package using Setup Assistant tool
  • Using the Rviz Motion Planning plugin
  • Interfacing the MoveIt! configuration package to Gazebo
  • ROS Navigation hardware requirements
  • Working with Navigation packages
  • Understanding the move_base node
  • Working with Navigation stack
  • Building a map using SLAM
  • Running SLAM on the differential drive robot
  • Implementing autonomous navigation using AMCL and a static map
  • Understanding pluginlib
  • Implementing a sample plugin using pluginlib
  • Understanding ROS nodelets
  • Implementing a sample nodelet
  • Understanding and creating a Gazebo plugin
  • Understanding packages required for ROS controller development
  • Setting the ROS controller development environment
  • Understanding ros_control packages
  • Writing and running a basic ROS controller
  • Writing and running a Rviz plugin
  • Understanding the Arduino-ROS interface
  • Setting up the Arduino-ROS interface packages
  • Arduino-ROS,example-Chatter and Talker
  • Arduino-ROS , example—blink LED and push button
  • Arduino-ROS , example—Accelerometer ADXL 335
  • Arduino-ROS, example—ultrasonic distance sensor
  • Arduino-ROS, example—Odometry Publisher
  • Interfacing a non-Arduino board to ROS
  • Setting ROS on Odroid-C1 and Raspberry Pi 2
  • Working with Raspberry Pi and Odroid GPIOs using ROS
  • Interfacing Dynamixel actuators to ROS
  • Understanding ROS—OpenCV interfacing packages
  • Understanding ROS—PCL interfacing packages
  • Installing OpenCV and PCL interfaces in ROS
  • Interfacing USB webcams in ROS
  • Working with ROS camera calibration
  • Converting images between ROS and OpenCV using cv_bridge
  • Displaying images from webcam using OpenCV and cv_bridge
  • Interfacing Kinect and Asus Xtion Pro in ROS
  • Interfacing Intel Real Sense Camera in ROS
  • Working with the ROS depthimage_to_laserscan package
  • Interfacing Hokuyo Laser in ROS
  • Interfacing Velodyne in ROS
  • Programming using PCL-ROS interface
  • Streaming webcam from Odroid using ROS
  • Introduction to Chefbot: a DIY autonomous mobile robot
  • Flashing Chefbot firmware using Energia IDE
  • Discussing Chefbot interface package in ROS
  • Developing base controller and odometry node for Chefbot in ROS
  • Configuring Navigation stack for Chefbot
  • Understanding AMCL
  • Understanding RViz for working with Navigation stack
  • Obstacle avoidance using Navigation stack
  • Working with Chefbot simulation
  • Sending a goal to the Navigation stack from a ROS node
  • Motion planning of arm using MoveIt! C++ APIs
  • Working with collision checking in robot arm using MoveIt!
  • Working with perception in MoveIt! and Gazebo
  • Understanding grasping using the moveit_simple_grasps ROS package
  • Simple robot pick and place using MoveIt!
  • Understanding Dynamixel ROS servo controllers for robot hardware interfacing
  • Interfacing 7-DOF Dynamixel based robotic arm to ROS MoveIt!
  • Understanding ROS-Industrial packages
  • Installing ROS-Industrial packages in ROS
  • Block diagram of ROS-Industrial packages
  • Creating URDF for an industrial robot
  • Creating the MoveIt! interface for an industrial robot
  • Installing ROS-Industrial packages of Universal robotic arms
  • Understanding MoveIt! configuration of a universal robotic arm
  • Working with MoveIt! configuration of ABB robots
  • Understanding ROS-Industrial robot support packages
  • ROS-Industrial robot client package
  • ROS-Industrial robot driver package
  • Understanding MoveIt! IKFast plugin
  • Creating the MoveIt! IKFast plugin for an ABB-IRB6640 robot
  • Setting the ROS development environment in Eclipse IDE
  • Best practices in ROS
  • Best coding practices in ROS using C++
  • Important troubleshooting tips in ROS

About the Author

Lentin Joseph

CEO/Founder of Qboticslabs

Lentin Joseph is an Author, Entrepreneur, electronics engineer, robotics enthusiast, machine vision expert, embedded programmer, and the founder and CEO of a robotics start-up called Qbotics Labs from India. He got his Bachelor's degree in electronics and communication engineering at the Federal Institute of Science and Technology (FISAT), Kerala.

In his final year engineering project, he created a Social robot, which can interact with people. The project was a huge success and got mentioned in visual and print media. The main feature of this robot was that it could communicate with people and reply intelligently. It also has some image-processing capabilities, such as face, motion, and color detection. The entire project was implemented using the Python programming language. His interest in robotics, image processing, and Python began this project.

After graduation, he worked at a start-up company based on robotics and image processing for 3 years. In the meantime, he learned famous robotic software platforms—such as Robot Operating system (ROS), V-REP, and Actin (a robotic simulation tool)—and image processing libraries, such as OpenCV, OpenNI, and PCL. He also knows about robot 3D designing, embedded programming on Arduino, and Stellaris Launchpad.

After 3 years of work experience, he started a new company called Qbotics Labs, which is mainly focused on research to build great products in domains such as wearable technology, robotics, machine vision, green technology, and online education. He maintains a personal website and a technology blog called Technolabsz. He publishes his works on his tech blog. He was a speaker at PyCon2013 India, and he spoke on the topic of Application of Python in Robotics.

He is an author of book called "Learning Robotics using Python" published by PACKT. The book was about to building an autonomous mobile robot using ROS and OpenCV. The book was launched in ICRA 2015 and got featured in ROS blog, Robohub, OpenCV and Python website etc.

He was a finalist of ICRA 2015 challenge called HRATC He has also completed several MOOCs in robotics and image processing.

Chapters Preview

You can see the details explanations of contents in each Chapters on this book.