O'Reilly logo

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

A Systematic Approach to Learning Robot Programming with ROS

Book Description

A Systematic Approach to Learning Robot Programming with ROS provides a comprehensive, introduction to the essential components of ROS through detailed explanations of simple code examples along with the corresponding theory of operation. The book explores the organization of ROS, how to understand ROS packages, how to use ROS tools, how to incorporate existing ROS packages into new applications, and how to develop new packages for robotics and automation. It also facilitates continuing education by preparing the reader to better understand the existing on-line documentation.

The book is organized into six parts. It begins with an introduction to ROS foundations, including writing ROS nodes and ROS tools. Messages, Classes, and Servers are also covered. The second part of the book features simulation and visualization with ROS, including coordinate transforms.

The next part of the book discusses perceptual processing in ROS. It includes coverage of using cameras in ROS, depth imaging and point clouds, and point cloud processing. Mobile robot control and navigation in ROS is featured in the fourth part of the book

The fifth section of the book contains coverage of robot arms in ROS. This section explores robot arm kinematics, arm motion planning, arm control with the Baxter Simulator, and an object-grabber package. The last part of the book focuses on system integration and higher-level control, including perception-based and mobile manipulation.

This accessible text includes examples throughout and C++ code examples are also provided at https://github.com/wsnewman/learning_ros

Table of Contents

  1. Cover
  2. Halftitle
  3. Title
  4. Copyright
  5. Table of Contents
    1. List of Figures
    2. Preface
    3. Acknowledgments
    4. Author
    5. Section I: ROS Foundations
      1. Chapter 1: Introduction to ROS: ROS tools and nodes
        1. 1.1 Some ROS concepts
        2. 1.2 Writing ROS nodes
          1. 1.2.1 Creating ROS packages
          2. 1.2.2 Writing a minimal ROS publisher
          3. 1.2.3 Compiling ROS nodes
          4. 1.2.4 Running ROS nodes
          5. 1.2.5 Examining running minimal publisher node
          6. 1.2.6 Scheduling node timing
          7. 1.2.7 Writing a minimal ROS subscriber
          8. 1.2.8 Compiling and running minimal subscriber
          9. 1.2.9 Minimal subscriber and publisher node summary
        3. 1.3 More ROS tools: catkin_simple, roslaunch, rqt_console, and rosbag
          1. 1.3.1 Simplifying CMakeLists.txt with catkin_simple
          2. 1.3.2 Automating starting multiple nodes
          3. 1.3.3 Viewing output in a ROS console
          4. 1.3.4 Recording and playing back data with rosbag
        4. 1.4 Minimal simulator and controller example
        5. 1.5 Wrap-up
      2. Chapter 2: Messages, Classes and Servers
        1. 2.1 Defining custom messages
          1. 2.1.1 Defining a custom message
          2. 2.1.2 Defining a variable-length message
        2. 2.2 Introduction to ROS services
          1. 2.2.1 Service messages
          2. 2.2.2 ROS service nodes
          3. 2.2.3 Manual interaction with ROS services
          4. 2.2.4 Example ROS service client
          5. 2.2.5 Running example service and client
        3. 2.3 Using C++ classes in ROS
        4. 2.4 Creating library modules in ROS
        5. 2.5 Introduction to action servers and action clients
          1. 2.5.1 Creating an action server package
          2. 2.5.2 Defining custom action-server messages
          3. 2.5.3 Designing an action client
          4. 2.5.4 Running the example code
          5. 2.6 Introduction to parameter server
        6. 2.7 Wrap-Up
    6. Section II: Simulation and Visualization in ROS
      1. Chapter 3: Simulation in ROS
        1. 3.1 Simple two-dimensional robot simulator
        2. 3.2 Modeling for dynamic simulation
        3. 3.3 Unified robot description format
          1. 3.3.1 Kinematic model
          2. 3.3.2 Visual model
          3. 3.3.3 Dynamic model
          4. 3.3.4 Collision model
        4. 3.4 Introduction to Gazebo
        5. 3.5 Minimal joint controller
        6. 3.6 Using Gazebo plug-in for joint servo control
        7. 3.7 Building mobile-robot model
        8. 3.8 Simulating mobile-robot model
        9. 3.9 Combining robot models
        10. 3.10 Wrap-Up
      2. Chapter 4: Coordinate Transforms in ROS
        1. 4.1 Introduction to coordinate transforms in ROS
        2. 4.2 Transform listener
        3. 4.3 Using Eigen library
        4. 4.4 Transforming ROS datatypes
        5. 4.5 Wrap-Up
      3. Chapter 5: Sensing and Visualization in ROS
        1. 5.1 Markers and interactive markers in rviz
          1. 5.1.1 Markers in rviz
          2. 5.1.2 Triad display example
          3. 5.1.3 Interactive markers in rviz
        2. 5.2 Displaying sensor values in rviz
          1. 5.2.1 Simulating and displaying LIDAR
          2. 5.2.2 Simulating and displaying color-camera data
          3. 5.2.3 Simulating and displaying depth-camera data
          4. 5.2.4 Selection of points in rviz
        3. 5.3 Wrap-Up
    7. Section III: Perceptual Processing in ROS
      1. Chapter 6: Using Cameras in ROS
        1. 6.1 Projective transformation into camera coordinates
        2. 6.2 Intrinsic camera calibration
        3. 6.3 Intrinsic calibration of stereo cameras
        4. 6.4 Using OpenCV with ROS
          1. 6.4.1 Example OpenCV: finding colored pixels
          2. 6.4.2 Example OpenCV: finding edges
        5. 6.5 Wrap-Up
      2. Chapter 7: Depth Imaging and Point Clouds
        1. 7.1 Depth from scanning LIDAR
        2. 7.2 Depth from stereo cameras
        3. 7.3 Depth cameras
        4. 7.4 Wrap-Up
      3. Chapter 8: Point Cloud Processing
        1. 8.1 Simple point-cloud display node
        2. 8.2 Loading and displaying point-cloud images from disk
        3. 8.3 Saving published point-cloud images to disk
        4. 8.4 Interpreting point-cloud images with PCL methods
        5. 8.5 Object finder
        6. 8.6 Wrap-Up
    8. Section IV: Mobile Robots in ROS
      1. Chapter 9: Mobile-Robot Motion Control
        1. 9.1 Desired state generation
          1. 9.1.1 From paths to trajectories
          2. 9.1.2 A trajectory builder library
          3. 9.1.3 Open-loop control
          4. 9.1.4 Desired state publishing
        2. 9.2 Robot state estimation
          1. 9.2.1 Getting model state from Gazebo
          2. 9.2.2 Odometry
          3. 9.2.3 Combining odometry, GPS and inertial sensing
          4. 9.2.4 Combining odometry and LIDAR
        3. 9.3 Differential-drive steering algorithms
          1. 9.3.1 Robot motion model
          2. 9.3.2 Linear steering of a linear robot
          3. 9.3.3 Linear steering of a non-linear robot
          4. 9.3.4 Non-linear steering of a non-linear robot
          5. 9.3.5 Simulating non-linear steering algorithm
        4. 9.4 Steering with respect to map coordinates
        5. 9.5 Wrap-Up
      2. Chapter 10: Mobile-Robot Navigation
        1. 10.1 Map making
        2. 10.2 Path planning
        3. 10.3 Example move-base client
        4. 10.4 Modifying navigation stack
        5. 10.5 Wrap-Up
    9. Section V: Robot Arms in ROS
      1. Chapter 11: Low-Level Control
        1. 11.1 A one-DOF prismatic-joint robot model
        2. 11.2 Example position controller
        3. 11.3 Example velocity controller
        4. 11.4 Example force controller
        5. 11.5 Trajectory messages for robot arms
        6. 11.6 Trajectory interpolation action server for a seven-DOF arm
        7. 11.7 Wrap-Up
      2. Chapter 12: Robot Arm Kinematics
        1. 12.1 Forward kinematics
        2. 12.2 Inverse kinematics
        3. 12.3 Wrap-Up
      3. Chapter 13: Arm Motion Planning
        1. 13.1 Cartesian motion planning
        2. 13.2 Dynamic programming for joint-space planning
        3. 13.3 Cartesian-motion action servers
        4. 13.4 Wrap-Up
      4. Chapter 14: Arm Control with Baxter Simulator
        1. 14.1 Running Baxter simulator
        2. 14.2 Baxter joints and topics
        3. 14.3 Baxter’s grippers
        4. 14.4 Head pan control
        5. 14.5 Commanding Baxter joints
        6. 14.6 Using ROS joint trajectory controller
        7. 14.7 Joint-space record and playback nodes
        8. 14.8 Baxter kinematics
        9. 14.9 Baxter Cartesian moves
        10. 14.10 Wrap-Up
      5. Chapter 15: An Object-Grabber Package
        1. 15.1 Object-grabber code organization
        2. 15.2 Object manipulation query service
        3. 15.3 Generic gripper services
        4. 15.4 Object-grabber action server
        5. 15.5 Example object-grabber action client
        6. 15.6 Wrap-Up
    10. Section VI: System Integration and Higher Level Control
      1. Chapter 16: PerceptionBased Manipulation
        1. 16.1 Extrinsic camera calibration
        2. 16.2 Integrated perception and manipulation
        3. 16.3 Wrap-Up
      2. Chapter 17: Mobile Manipulation
        1. 17.1 Mobile manipulator model
        2. 17.2 Mobile manipulation
        3. 17.3 Wrap-Up
      3. Chapter 18: Conclusion
    11. Bibliography
    12. Index