logo资料库

Mastering ROS for Robotics Programming.pdf

第1页 / 共481页
第2页 / 共481页
第3页 / 共481页
第4页 / 共481页
第5页 / 共481页
第6页 / 共481页
第7页 / 共481页
第8页 / 共481页
资料共481页,剩余部分请下载后查看
Cover
Copyright
Credits
About the Author
About the Reviewers
www.PacktPub.com
Table of Contents
Preface
Chapter 1: Introduction to ROS and Its Package Management
Why should we learn ROS?
Why we prefer ROS for robots
Why some do not prefer ROS for robots
Understanding the ROS file system level
ROS packages
ROS meta packages
ROS messages
The ROS services
Understanding the ROS computation graph level
Understanding ROS nodes
ROS messages
ROS topics
ROS services
ROS bags
Understanding ROS Master
Using the ROS parameter
Understanding ROS community level
What are the prerequisites to start with ROS?
Running ROS Master and ROS parameter server
Checking the roscore command output
Creating a ROS package
Working with ROS topics
Creating ROS nodes
Building the nodes
Adding custom msg and srv files
Working with ROS services
Working with ROS actionlib
Building the ROS action server and client
Creating launch files
Applications of topics, services, and actionlib
Maintaining the ROS package
Releasing your ROS package
Preparing the ROS package for the release
Releasing our package
Creating a Wiki page for your ROS package
Questions
Summary
Chapter 2: Working with 3D Robot Modeling in ROS
ROS packages for robot modeling
Understanding robot modeling using URDF
Creating the ROS package for the robot description
Creating our first URDF model
Explaining the URDF file
Visualizing the robot 3D model in Rviz
Interacting with pan and tilt joints
Adding physical and collision properties to a URDF model
Understanding robot modeling using xacro
Using properties
Using the math expression
Using macros
Conversion of xacro to URDF
Creating the robot description for a seven DOF robot manipulator
Arm specification
Type of joints
Explaining the xacro model of seven DOF arm
Using constants
Using macros
Including other xacro files
Using meshes in the link
Working with the robot gripper
Viewing the seven DOF arm in Rviz
Understanding joint state publisher
Understanding the robot state publisher
Creating a robot model for the differential drive mobile robot
Questions
Summary
Chapter 3: Simulating Robots Using ROS and Gazebo
Simulating the robotic arm using Gazebo and ROS
The Robotic arm simulation model for Gazebo
Adding colors and textures to the Gazebo robot model
Adding transmission tags to actuate the model
Adding the gazebo_ros_control plugin
Adding a 3D vision sensor to Gazebo
Simulating the robotic arm with Xtion Pro
Visualizing the 3D sensor data
Moving robot joints using ROS controllers in Gazebo
Understanding the ros_control packages
Different types of ROS controllers and hardware interfaces
How the ROS controller interacts with Gazebo
Interfacing joint state controllers and joint position controllers to the arm
Launching the ROS controllers with Gazebo
Moving the robot joints
Simulating a differential wheeled robot in Gazebo
Adding the laser scanner to Gazebo
Moving the mobile robot in Gazebo
Adding joint state publishers in the launch file
Adding the ROS teleop node
Questions
Summary
Chapter 4: Using the ROS MoveIt! and Navigation Stack
Installing MoveIt!
MoveIt! architecture
The move_group node
Motion planning using MoveIt!
Motion planning request adapters
MoveIt! planning scene
MoveIt! kinematics handling
MoveIt! collision checking
Generating MoveIt! configuration package using Setup Assistant tool
Step 1 – Launching the Setup Assistant tool
Step 2 – Generating the Self-Collision matrix
Step 3 – Adding virtual joints
Step 4 – Adding planning groups
Step 5 – Adding the robot poses
Step 6 – Setup the robot end effector
Step 7 – Adding passive joints
Step 8 – Generating configuration files
Motion planning of robot in Rviz using MoveIt! configuration package
Using the Rviz MotionPlanning plugin
Interfacing the MoveIt! configuration package to Gazebo
Step 1 – Writing the controller configuration file for MoveIt!
Step 2 – Creating the controller launch files
Step 3 – Creating the controller configuration file for Gazebo
Step 4 – Creating the launch file for Gazebo trajectory controllers
Step 5 – Debugging the Gazebo- MoveIt! interface
Understanding ROS Navigation stack
ROS Navigation hardware requirements
Working with Navigation packages
Understanding the move_base node
Working of Navigation stack
Localizing on the map
Sending a goal and path planning
Collision recovery behavior
Sending the command velocity
Installing ROS Navigation stack
Building a map using SLAM
Creating a launch file for gmapping
Running SLAM on the differential drive robot
Implementing autonomous navigation using AMCL and a static map
Creating an AMCL launch file
Questions
Summary
Chapter 5: Working with Pluginlib, Nodelets, and Gazebo Plugins
Understanding pluginlib
Creating plugins for the calculator application using pluginlib
Working with pluginlib_calculator package
Understanding ROS nodelets
Creating a nodelet
Step 1 – Creating a package for nodelet
Step 2 – Creating hello_world.cpp nodelet
Step 3 – Explanation of hello_world.cpp
Step 4 – Creating plugin description file
Step 5 – Adding the export tag in package.xml
Step 6 – Editing CMakeLists.txt
Step 7 – Building and running nodelets
Step 8 – Creating launch files for nodelets
Understanding the Gazebo plugins
Creating a basic world plugin
Questions
Summary
Chapter 6: Writing ROS Controllers and Visualization Plugins
Understanding pr2_mechanism packages
pr2_controller_interface package
Initialization of the controller
Starting the ROS controller
Updating ROS controller
Stopping the controller
pr2_controller_manager
Writing a basic real-time joint controller in ROS
Step 1 – Creating controller package
Step 2 – Creating controller header file
Step 3 – Creating controller source file
Step 4 – Explanation of the controller source file
Step 5 – Creating plugin description file
Step 6 – Updating package.xml
Step 7 – Updating CMakeLists.txt
Step 8 – Building controller
Step 9 – Writing controller configuration file
Step 10 – Writing launch file for the controller
Step 11 – Running controller along with PR2 simulation in Gazebo
Understanding ros_control packages
Understanding ROS visualization tool (RViz) and its plugins
Displays panel
RViz toolbar
Views
Time panel
Dockable panels
gins
Methodology of building Rviz plugin
Step 1 – Creating RViz plugin package
Step 2 – Creating RViz plugin header file
Step 3 – Creating RViz plugin definition
Step 4 – Creating plugin description file
Step 5 – Adding export tags in package.xml
Step 6 – Editing CMakeLists.txt
Step 7 – Building and loading plugins
Questions
Summary
Chapter 7: Interfacing I/O Boards, Sensors, and Actuators to ROS
Understanding the Arduino–ROS interface
What is the Arduino–ROS interface?
Understanding the rosserial package in ROS
Installing rosserial packages on Ubuntu 14.04/15.04
ROS – Arduino Publisher and Subscriber example
Arduino-ROS, example – blink LED and push button
Arduino-ROS, example – Accelerometer ADXL 335
Arduino-ROS, example – ultrasonic distance sensor
Equations to find distance using the ultrasonic range sensor
Arduino-ROS, example – Odometry Publisher
Interfacing Non-Arduino boards to ROS
Setting ROS on Odroid–C1 and Raspberry Pi 2
How to install an OS image to Odroid-C1 and Raspberry Pi 2
Installation in Windows
Installation in Linux
Connecting to Odroid-C1 and Raspberry Pi 2 from a PC
Configuring an Ethernet hotspot for Odroid-C1 and Raspberry Pi 2
Installing Wiring Pi on Odroid-C1
Installing Wiring Pi on Raspberry Pi 2
Blinking LED using ROS on Odroid-C1 and Raspberry Pi 2
Push button + blink LED using ROS on Odroid-C1 and Raspberry Pi 2
Interfacing Dynamixel actuators to ROS
Questions
Summary
Chapter 8: Programming Vision Sensors using ROS, Open-CV, and PCL
Understanding ROS – OpenCV interfacing packages
Understanding ROS – PCL interfacing packages
Installing ROS perception
Interfacing USB webcams in ROS
Working with ROS camera calibration
Converting images between ROS and OpenCV using cv_bridge
Image processing using ROS and OpenCV
Step 1: Creating ROS package for the experiment
Step 2: Creating source files
Step 3: Explanation of the code
Step 4: Editing the CMakeLists.txt file
Step 5: Building and running example
Interfacing Kinect and Asus Xtion Pro in ROS
Interfacing Intel Real Sense camera with ROS
Working with point cloud to laser scan package
Interfacing Hokuyo Laser in ROS
Interfacing Velodyne LIDAR in ROS
Working with point cloud data
How to publish a point cloud
How to subscribe and process the point cloud
Writing a point cloud data to a PCD file
Read and publish point cloud from a PCD file
Streaming webcam from Odroid using ROS
Questions
Summary
Chapter 9: Building and Interfacing Differential Drive Mobile Robot Hardware in ROS
Introduction to Chefbot- a DIY mobile robot and its hardware configuration
Flashing Chefbot firmware using Energia IDE
Serial data sending protocol from LaunchPad to PC
Serial data sending protocol from PC to Launchpad
Discussing Chefbot interface packages on ROS
Computing odometry from encoder ticks
Computing motor velocities from ROS twist message
Running robot stand alone launch file using C++ nodes
Configuring the Navigation stack for Chefbot
Configuring the gmapping node
Configuring the Navigation stack packages
Common configuration (local_costmap) and (global_costmap)
Configuring global costmap parameters
Configuring local costmap parameters
Configuring base local planner parameters
Configuring DWA local planner parameters
Configuring move_base node parameters
Understanding AMCL
Understanding RViz for working with the Navigation stack
2D Pose Estimate button
Visualizing the particle cloud
The 2D Nav Goal button
Displaying the static map
Displaying the robot footprint
Displaying the global and local cost map
Displaying the global plan, local plan, and planner plan
The current goal
Obstacle avoidance using the Navigation stack
Working with Chefbot simulation
Building a room in Gazebo
Adding model files to the Gazebo model folder
Sending a goal to the Navigation stack from a ROS node
Questions
Summary
Chapter 10: Exploring the Advanced Capabilities of ROS-MoveIt!
Motion planning using the move_group C++ interface
Motion planning a random path using MoveIt! C++ APIs
Motion planning a custom path using MoveIt! C++ APIs
Collision checking in robot arm using MoveIt!
Adding a collision object in MoveIt!
Removing a collision object from the planning scene
Checking self collision using MoveIt! APIs
Working with perception using MoveIt! and Gazebo
Grasping using MoveIt!
Working with robot pick and place task using MoveIt!
Creating Grasp Table and Grasp Object in MoveIt!
Pick and place action in Gazebo and real Robot
Understanding Dynamixel ROS Servo controllers for robot hardware interfacing
The Dynamixel Servos
Dynamixel-ROS interface
Interfacing seven DOF Dynamixel based robotic arm to ROS MoveIt!
Creating a controller package for COOL arm robot
MoveIt! configuration of the COOL Arm
Questions
Summary
Chapter 11: ROS for Industrial Robots
Understanding ROS-Industrial packages
Goals of ROS-Industrial
ROS-Industrial – a brief history
Benefits of ROS-Industrial
Installing ROS-Industrial packages
Block diagram of ROS-Industrial packages
Creating URDF for an industrial robot
Creating MoveIt! configuration for an industrial robot
Updating the MoveIt! configuration files
Testing the MoveIt! configuration
Installing ROS-Industrial packages of universal robotic arm
Installing the ROS interface of universal robots
Understanding the Moveit! configuration of a universal robotic arm
Working with MoveIt! configuration of ABB robots
Understanding the ROS-Industrial robot support packages
Visualizing the ABB robot model in RViz
ROS-Industrial robot client package
Designing industrial robot client nodes
ROS-Industrial robot driver package
Understanding MoveIt! IKFast plugin
Creating the MoveIt! IKFast plugin for the ABB-IRB6640 robot
Prerequisites for developing the MoveIt! IKFast plugin
OpenRave and IK Fast Module
MoveIt! IK Fast
Installing MoveIt! IKFast package
Installing OpenRave on Ubuntu 14.04.3
Creating the COLLADA file of a robot to work with OpenRave
Generating the IKFast CPP file for the IRB 6640 robot
Creating the MoveIt! IKFast plugin
Questions
Summary
Chapter 12: Troubleshooting and Best Practices in ROS
Setting up Eclipse IDE on Ubuntu 14.04.3
Setting ROS development environment in Eclipse IDE
Global settings in Eclipse IDE
ROS compile script for Eclipse IDE
Adding ROS Catkin package to Eclipse
Adding run configurations to run ROS nodes in Eclipse
Best practices in ROS
ROS C++ coding style guide
Standard naming conventions used in ROS
Code license agreement
ROS code formatting
ROS code documentation
Console output
Best practices in the ROS package
Important troubleshooting tips in ROS
Usage of roswtf
Questions
Summary
Index
Mastering ROS for Robotics Programming Design, build, and simulate complex robots using Robot Operating System and master its out-of-the-box functionalities Lentin Joseph BIRMINGHAM - MUMBAI
Mastering ROS for Robotics Programming Copyright © 2015 Packt Publishing All rights reserved. No part of this book may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, without the prior written permission of the publisher, except in the case of brief quotations embedded in critical articles or reviews. Every effort has been made in the preparation of this book to ensure the accuracy of the information presented. However, the information contained in this book is sold without warranty, either express or implied. Neither the author, nor Packt Publishing, and its dealers and distributors will be held liable for any damages caused or alleged to be caused directly or indirectly by this book. Packt Publishing has endeavored to provide trademark information about all of the companies and products mentioned in this book by the appropriate use of capitals. However, Packt Publishing cannot guarantee the accuracy of this information. First published: December 2015 Production reference: 1141215 Published by Packt Publishing Ltd. Livery Place 35 Livery Street Birmingham B3 2PB, UK. ISBN 978-1-78355-179-8 www.packtpub.com
Credits Project Coordinator Harshal Ved Proofreader Safis Editing Indexer Tejal Daruwale Soni Production Coordinator Melwyn D'sa Cover Work Melwyn D'sa Author Lentin Joseph Reviewers Jonathan Cacace Ruixiang Du Acquisition Editor Vivek Anantharaman Content Development Editor Athira Laji Technical Editor Ryan Kochery Copy Editor Merilyn Pereira Alpha Singh
About the Author Lentin Joseph is an author, entrepreneur, electronics engineer, robotics enthusiast, machine vision expert, embedded programmer, and the founder and CEO of Qbotics Labs (http://www.qboticslabs.com) from India. He completed his bachelor's degree in electronics and communication engineering at the Federal Institute of Science and Technology (FISAT), Kerala. For his final year engineering project, he made a social robot that can interact with people. The project was a huge success and was mentioned in many forms of visual and print media. The main features of this robot were that it can communicate with people and reply intelligently and 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 started with that project. After his graduation, for 3 years he worked in a start-up company focusing on robotics and image processing. In the meantime, he learned famous robotic software platforms such as Robot Operating System (ROS), V-REP, Actin (a robotic simulation tool), and image processing libraries such as OpenCV, OpenNI, and PCL. He also knows robot 3D designing and embedded programming on Arduino and Tiva Launchpad. After 3 years of work experience, he started a new company called Qbotics Labs, which mainly focuses on research to build up some great products in domains such as robotics and machine vision. He maintains a personal website (http://www.lentinjoseph.com) and a technology blog called technolabsz (http://www.technolabsz.com). He publishes his works on his tech blog. He was also a speaker at PyCon2013, India, on the topic Learning Robotics using Python.
Lentin is the author of the book Learning Robotics Using Python (refer to http:// learn-robotics.com to know more) by Packt Publishing. The book was about building an autonomous mobile robot using ROS and OpenCV. The book was launched in ICRA 2015 and was featured in the ROS blog, Robohub, OpenCV, the Python website, and various other such forums. Lentin was a finalist in the ICRA 2015 challenge, HRATC (http://www2.isr.uc.pt/~embedded/events/HRATC2015/Welcome.html). I dedicate this book to my parents because they gave me the inspiration to write this book. I also convey my regards to my friends who helped and inspired me to write this book.
About the Reviewers Jonathan Cacace was born in Naples, Italy, on December 13, 1987. He received has a bachelor's and master's degree in computer science from the University of Naples Federico II. Currently, he is attending a PhD Scholar Course in Information and Automation Engineering at the Department of Electrical Engineering and Information Technology (DIETI) in the same institution. His research is focused on autonomous action planning and execution by mobile robots, high-level and low-level control of UAV platforms, and human-robot interaction with humanoid robots in service task execution. He is the author and coauthor of several scientific publications in the robotics field, published at international conferences and scientific journals. Jonathan is a member of the PRISMA Laboratory (http://prisma.dieti.unina. it/) of the University of Naples Federico II. With his research group, he is involved in different EU-funded collaborative research projects focused on several topics, such as the use of unmanned aerial vehicles for search and rescue operations or service task execution (http://www.sherpa-project.eu/sherpa/ and http://www.arcas- project.eu/) and the dynamic manipulation of elastic objects using humanoid robotic platforms (http://www.rodyman.eu/). Ruixiang Du is currently a PhD student studying Robotics at Worcester Polytechnic Institute (WPI). He received his bachelor's degree in Automation from North China Electric Power University in 2011 and a master's degree in Robotics Engineering from WPI in 2013. Ruixiang has worked on various robotic projects with robot platforms ranging from medical robots, UAV/UGV, to humanoid robots. He was an active member of Team WPI-CMU for the DARPA Robotics Challenge. Ruixiang has general interests in robotics and in real-time and embedded systems. His research focus is on the control and motion planning of mobile robots in cluttered and dynamic environments.
www.PacktPub.com Support files, eBooks, discount offers, and more For support files and downloads related to your book, please visit www.PacktPub.com. Did you know that Packt offers eBook versions of every book published, with PDF and ePub files available? You can upgrade to the eBook version at www.PacktPub.com and as a print book customer, you are entitled to a discount on the eBook copy. Get in touch with us at service@packtpub.com for more details. At www.PacktPub.com, you can also read a collection of free technical articles, sign up for a range of free newsletters and receive exclusive discounts and offers on Packt books and eBooks. https://www2.packtpub.com/books/subscription/packtlib Do you need instant solutions to your IT questions? PacktLib is Packt's online digital book library. Here, you can search, access, and read Packt's entire library of books. Why subscribe? • Fully searchable across every book published by Packt • Copy and paste, print, and bookmark content • On demand and accessible via a web browser Free access for Packt account holders If you have an account with Packt at www.PacktPub.com, you can use this to access PacktLib today and view 9 entirely free books. Simply use your login credentials for immediate access.
分享到:
收藏