Enhancing your existing robotic skills by learning how to design and build multifunctional robots using Robots Operating System libraries and tools Key FeaturesSuccessfully design and simulate your 3D robot model and use powerful algorithms and tools to program and set up your robotsWork through concrete examples that will help you build your own robotic systems of varying complexity levelsDiscover the best practices and troubleshooting solutions everyone needs when working on ROSBook DescriptionThis learning path is designed to help you program and build your robots using open source ROS libraries and tools. We start with the installation and basic concepts, then continue with the more complex modules available in ROS, such as sensor and actuator integration (drivers), navigation and mapping (so you can create an autonomous mobile robot), manipulation, computer vision, perception in 3D with PCL, and more. We then discuss advanced concepts in robotics and how to program using ROS. You'll get a 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. We'll go through great projects such as building a self-driving car, an autonomous mobile robot, and image recognition using deep learning and ROS. You can find beginner, intermediate, and expert ROS robotics applications inside! It includes content from the following Packt Effective Robotics Programming with ROS - Third EditionMastering ROS for Robotics ProgrammingROS Robotics ProjectsWhat you will learnUnderstand the concepts of ROS, the command-line tools, visualization GUIs, and how to debug ROSConnect robot sensors and actuators to ROSObtain and analyze data from cameras and 3D sensorsDig deep into the ROS Pluginlib, ROS nodelets, and Gazebo pluginsInterface I/O boards such as Arduino, robot sensors, and high-end actuators with ROSGet to grips with teleoperating robots using hand gesturesBuild ROS-based applications using Matlab and AndroidBuild interactive applications using TurtleBotTable of ContentsGetting Started with ROSROS Architecture and ConceptsVisualization and Debugging ToolsThe Navigation Stack - Robot SetupsThe Navigation Stack - Beyond SetupsManipulation with MoveIt!Using Sensors and Actuators with ROSComputer VisionPoint CloudsWorking with 3D Robot Modeling in ROSSimulating Robots Using ROS and GazeboWorking with Pluginlib, Nodelets, and Gazebo PluginsWriting ROS Controllers and Visualization PluginsInterfacing I/O Boards, Sensors, and Actuators to ROSProgramming Vision Sensors using ROS, Open-CV, and PCLBuilding and Interfacing Differential Drive Mobile Robot Hardware in ROSExploring the Advanced Capabilities of ROS-MoveIt!ROS for Industrial RobotsTroubleshooting and Best Practices in ROSFace Detection and Tracking Using ROS, OpenCV and Dynamixel Servos< Title page......Page 2 Copyright and Credits......Page 3 ROS Programming: Building Powerful Robots......Page 4 Packt Upsell......Page 5 Why subscribe?......Page 6 PacktPub.com......Page 7 Preface......Page 42 Who this learning path is for......Page 43 What this learning path covers......Page 44 To get the most out of this learning path......Page 46 Download the example code files......Page 47 Conventions used......Page 48 Get in touch......Page 49 Reviews......Page 50 Effective Robotics Programming with ROS, Third Edition......Page 51 Getting Started with ROS......Page 52 PC installation......Page 55 Installing ROS Kinetic using repositories......Page 56 Configuring your Ubuntu repositories......Page 57 Setting up your source.list file......Page 59 Setting up your keys......Page 60 Installing ROS......Page 61 Initializing rosdep......Page 62 Setting up the environment......Page 63 Getting rosinstall......Page 65 How to install VirtualBox and Ubuntu......Page 66 Downloading VirtualBox......Page 67 Creating the virtual machine......Page 68 Using ROS from a Docker image......Page 71 Installing Docker......Page 72 Getting and using ROS Docker images and containers......Page 73 Installing ROS in BeagleBone Black......Page 75 Prerequisites......Page 77 Setting up the local machine and source.list file......Page 81 Setting up your keys......Page 82 Installing the ROS packages......Page 83 Initializing rosdep for ROS......Page 84 Setting up the environment in the BeagleBone Black......Page 85 Getting rosinstall for BeagleBone Black......Page 86 Basic ROS example on the BeagleBone Black......Page 87 Summary......Page 88 ROS Architecture and Concepts......Page 89 Understanding the ROS Filesystem level......Page 90 The workspace......Page 92 Packages......Page 94 Metapackages......Page 96 Messages......Page 97 Services......Page 99 Understanding the ROS Computation Graph level......Page 100 Nodes and nodelets......Page 102 Topics......Page 104 Services......Page 105 Messages......Page 106 Bags......Page 107 The ROS master......Page 108 Parameter Server......Page 109 Understanding the ROS Community level......Page 110 Tutorials to practise with ROS......Page 111 Navigating through the ROS filesystem......Page 112 Creating our own workspace......Page 113 Creating an ROS package and metapackage......Page 114 Building an ROS package......Page 115 Playing with ROS nodes......Page 116 Learning how to interact with topics......Page 119 Learning how to use services......Page 122 Using Parameter Server......Page 125 Creating nodes......Page 126 Building the node......Page 129 Creating msg and srv files......Page 131 Using the new srv and msg files......Page 134 The launch file......Page 137 Dynamic parameters......Page 139 Summary......Page 143 Visualization and Debugging Tools......Page 144 Debugging ROS nodes......Page 147 Using the GDB debugger with ROS nodes......Page 148 Attaching a node to GDB while launching ROS......Page 149 Profiling a node with valgrind while launching ROS......Page 150 Enabling core dumps for ROS nodes......Page 151 Logging messages......Page 152 Outputting logging messages......Page 153 Setting the debug message level......Page 154 Configuring the debugging level of a particular node......Page 155 Giving names to messages......Page 157 Conditional and filtered messages......Page 158 Showing messages once, throttling, and other combinations......Page 159 Using rqt_console and rqt_logger_level to modify the logging level on the fly......Page 160 Inspecting the system......Page 163 Inspecting the node's graph online with rqt_graph......Page 166 Setting dynamic parameters......Page 169 Dealing with the unexpected......Page 171 Visualizing nodes diagnostics......Page 173 Plotting scalar data......Page 175 Creating a time series plot with rqt_plot......Page 176 Image visualization......Page 179 Visualizing a single image......Page 180 3D visualization......Page 182 Visualizing data in a 3D world using rqt_rviz......Page 183 The relationship between topics and frames......Page 187 Visualizing frame transformations......Page 188 Saving and playing back data......Page 190 What is a bag file?......Page 191 Recording data in a bag file with rosbag......Page 192 Playing back a bag file......Page 193 Inspecting all the topics and messages in a bag file......Page 194 Using the rqt_gui and rqt plugins......Page 196 Summary......Page 197 The Navigation Stack - Robot Setups......Page 198 The navigation stack in ROS......Page 199 Creating transforms......Page 201 Creating a broadcaster......Page 202 Creating a listener......Page 203 Watching the transformation tree......Page 205 Publishing sensor information......Page 206 Creating the laser node......Page 207 Publishing odometry information......Page 209 How Gazebo creates the odometry......Page 211 Using Gazebo to create the odometry......Page 214 Creating our own odometry......Page 216 Creating a base controller......Page 220 Creating our base controller......Page 222 Creating a map with ROS......Page 225 Saving the map using map_server......Page 227 Loading the map using map_server......Page 229 Summary......Page 230 The Navigation Stack - Beyond Setups......Page 231 Creating a package......Page 232 Creating a robot configuration......Page 233 Configuring the costmaps - global_costmap and local_costmap......Page 236 Configuring the common parameters......Page 237 Configuring the global costmap......Page 239 Configuring the local costmap......Page 240 Base local planner configuration......Page 241 Creating a launch file for the navigation stack......Page 242 Setting up rviz for the navigation stack......Page 244 The 2D pose estimate......Page 245 The 2D nav goal......Page 247 The static map......Page 248 The particle cloud......Page 249 The robot's footprint......Page 250 The local costmap......Page 251 The global costmap......Page 252 The global plan......Page 253 The local plan......Page 254 The planner plan......Page 255 The current goal......Page 256 Adaptive Monte Carlo Localization......Page 258 Modifying parameters with rqt_reconfigure......Page 260 Avoiding obstacles......Page 261 Sending goals......Page 263 Summary......Page 266 Manipulation with MoveIt!......Page 267 The MoveIt! architecture......Page 268 Motion planning......Page 270 The planning scene......Page 271 World geometry monitor......Page 272 Kinematics......Page 273 Collision checking......Page 274 Integrating an arm in MoveIt!......Page 275 What's in the box?......Page 276 Generating a MoveIt! package with the Setup Assistant......Page 277 Integration into RViz......Page 285 Integration into Gazebo or a real robotic arm......Page 289 Simple motion planning......Page 290 Planning a single goal......Page 291 Planning a random target......Page 292 Planning a predefined group state......Page 294 Displaying the target motion......Page 295 Motion planning with collisions......Page 296 Adding objects to the planning scene......Page 297 Removing objects from the planning scene......Page 299 Motion planning with point clouds......Page 300 The pick and place task......Page 302 The planning scene......Page 303 The target object to grasp......Page 304 The support surface......Page 305 Perception......Page 307 Grasping......Page 308 The pickup action......Page 311 The place action......Page 313 The demo mode......Page 316 Simulation in Gazebo......Page 317 Summary......Page 318 Using Sensors and Actuators with ROS......Page 319 Using a joystick or a gamepad......Page 320 How does joy_node send joystick movements?......Page 322 Using joystick data to move our robot model......Page 323 Using Arduino to add sensors and actuators......Page 327 Creating an example program to use Arduino......Page 328 Robot platform controlled by ROS and Arduino......Page 331 Connecting your robot motors to ROS using Arduino......Page 333 Connecting encoders to your robot......Page 337 Controlling the wheel velocity......Page 341 Using a low-cost IMU - 9 degrees of freedom......Page 342 Installing Razor IMU ROS library......Page 344 How does Razor send data in ROS?......Page 347 Creating an ROS node to use data from the 9DoF sensor in our robot......Page 349 Using robot localization to fuse sensor data in your robot......Page 351 Using the IMU - Xsens MTi......Page 353 How does Xsens send data in ROS?......Page 354 Using a GPS system......Page 355 How GPS sends messages......Page 357 Creating an example project to use GPS......Page 358 Using a laser rangefinder - Hokuyo URG-04lx......Page 359 Understanding how the laser sends data in ROS......Page 361 Accessing the laser data and modifying it......Page 363 Creating a launch file......Page 365 Using the Kinect sensor to view objects in 3D......Page 366 How does Kinect send data from the sensors, and how do we see it?......Page 367 Creating an example to use Kinect......Page 370 Using servomotors - Dynamixel......Page 372 How does Dynamixel send and receive commands for the movements?......Page 374 Creating an example to use the servomotor......Page 376 Summary......Page 377 Computer Vision......Page 378 ROS camera drivers support......Page 380 FireWire IEEE1394 cameras......Page 381 USB cameras......Page 385 Making your own USB camera driver with OpenCV......Page 387 ROS images......Page 392 Publishing images with ImageTransport......Page 393 OpenCV in ROS......Page 394 Installing OpenCV 3.0......Page 395 Using OpenCV in ROS......Page 396 Visualizing the camera input images with rqt_image_view......Page 397 Camera calibration......Page 398 How to calibrate a camera......Page 399 Stereo calibration......Page 403 The ROS image pipeline......Page 408 Image pipeline for stereo cameras......Page 411 ROS packages useful for Computer Vision tasks......Page 414 Visual odometry......Page 416 Using visual odometry with viso2......Page 417 Camera pose calibration......Page 418 Running the viso2 online demo......Page 421 Performing visual odometry with viso2 with a stereo camera......Page 424 Performing visual odometry with an RGBD camera......Page 425 Installing fovis......Page 426 Using fovis with the Kinect RGBD camera......Page 427 Computing the homography of two images......Page 429 Summary......Page 430 Point Clouds......Page 431 Understanding the PCL......Page 432 Different point cloud types......Page 433 Algorithms in PCL......Page 434 The PCL interface for ROS......Page 435 My first PCL program......Page 437 Creating point clouds......Page 439 Loading and saving point clouds to the disk......Page 442 Visualizing point clouds......Page 445 Filtering and downsampling......Page 449 Registration and matching......Page 453 Partitioning point clouds......Page 457 Segmentation......Page 460 Summary......Page 464 Mastering ROS for Robotics Programming......Page 465 Working with 3D Robot Modeling in ROS......Page 466 ROS packages for robot modeling......Page 467 Understanding robot modeling using URDF......Page 468 Creating the ROS package for the robot description......Page 471 Creating our first URDF model......Page 472 Explaining the URDF file......Page 474 Visualizing the robot 3D model in RViz......Page 476 Interacting with pan and tilt joints......Page 477 Adding physical and collision properties to a URDF model......Page 478 Understanding robot modeling using xacro......Page 479 Using properties......Page 480 Using the math expression......Page 481 Using macros......Page 482 Conversion of xacro to URDF......Page 483 Creating the robot description for a seven DOF robot manipulator......Page 484 Arm specification......Page 485 Type of joints......Page 486 Explaining the xacro model of seven DOF arm......Page 487 Using constants......Page 488 Using macros......Page 489 Including other xacro files......Page 490 Using meshes in the link......Page 491 Working with the robot gripper......Page 492 Viewing the seven DOF arm in RViz......Page 493 Understanding joint state publisher......Page 495 Understanding the robot state publisher......Page 496 Creating a robot model for the differential drive mobile robot......Page 497 Questions......Page 501 Summary......Page 502 Simulating Robots Using ROS and Gazebo......Page 503 Simulating the robotic arm using Gazebo and ROS......Page 504 The Robotic arm simulation model for Gazebo......Page 505 Adding colors and textures to the Gazebo robot model......Page 507 Adding transmission tags to actuate the model......Page 508 Adding the gazebo_ros_control plugin......Page 509 Adding a 3D vision sensor to Gazebo......Page 510 Simulating the robotic arm with Xtion Pro......Page 512 Visualizing the 3D sensor data......Page 513 Moving robot joints using ROS controllers in Gazebo......Page 516 Understanding the ros_control packages......Page 517 Different types of ROS controllers and hardware interfaces......Page 518 How the ROS controller interacts with Gazebo......Page 519 Interfacing joint state controllers and joint position controllers to the arm......Page 521 Launching the ROS controllers with Gazebo......Page 522 Moving the robot joints......Page 524 Simulating a differential wheeled robot in Gazebo......Page 525 Adding the laser scanner to Gazebo......Page 527 Moving the mobile robot in Gazebo......Page 529 Adding joint state publishers in the launch file......Page 530 Adding the ROS teleop node......Page 531 Questions......Page 533 Summary......Page 534 Working with Pluginlib, Nodelets, and Gazebo Plugins......Page 535 Understanding pluginlib......Page 536 Creating plugins for the calculator application using pluginlib......Page 537 Working with pluginlib_calculator package......Page 539 Step 1 - Creating calculator_base header file......Page 540 Step 2 - Creating calculator_plugins header file......Page 541 Step 3 - Exporting plugins using calculator_plugins.cpp......Page 542 Step 4 - Implementing plugin loader using calculator_loader.cpp......Page 543 Step 5 - Creating plugin description file: calculator_plugins.xml......Page 544 Step 6 - Registering plugin with the ROS package system......Page 545 Step 7 - Editing the CMakeLists.txt file......Page 546 Step 8: Querying the list of plugins in a package......Page 547 Step 9 - Running the plugin loader......Page 548 Understanding ROS nodelets......Page 549 Creating a nodelet......Page 550 Step 1 - Creating a package for nodelet......Page 551 Step 2 - Creating hello_world.cpp nodelet......Page 552 Step 3 - Explanation of hello_world.cpp......Page 553 Step 4 - Creating plugin description file......Page 554 Step 5 - Adding the export tag in package.xml......Page 555 Step 6 - Editing CMakeLists.txt......Page 556 Step 7 - Building and running nodelets......Page 557 Step 8 - Creating launch files for nodelets......Page 559 Understanding the Gazebo plugins......Page 561 Creating a basic world plugin......Page 562 Questions......Page 565 Summary......Page 566 Writing ROS Controllers and Visualization Plugins......Page 567 Understanding pr2_mechanism packages......Page 569 pr2_controller_interface package......Page 570 Initialization of the controller......Page 571 Starting the ROS controller......Page 572 Updating ROS controller......Page 573 Stopping the controller......Page 574 pr2_controller_manager......Page 575 Writing a basic real-time joint controller in ROS......Page 576 Step 1 – Creating controller package......Page 577 Step 2 – Creating controller header file......Page 578 Step 3 – Creating controller source file......Page 579 Step 4 – Explanation of the controller source file......Page 580 Step 5 – Creating plugin description file......Page 581 Step 6 – Updating package.xml......Page 582 Step 7 – Updating CMakeLists.txt......Page 583 Step 8 – Building controller......Page 584 Step 9 – Writing controller configuration file......Page 585 Step 10 – Writing launch file for the controller......Page 586 Step 11 – Running controller along with PR2 simulation in Gazebo......Page 587 Understanding ros_control packages......Page 589 Understanding ROS visualization tool (RViz) and its plugins......Page 590 Displays panel......Page 591 RViz toolbar......Page 592 Views......Page 593 Time panel......Page 594 Dockable panels......Page 595 Writing a RViz plugin for teleoperation......Page 596 Methodology of building RViz plugin......Page 597 Step 1 – Creating RViz plugin package......Page 598 Step 2 – Creating RViz plugin header file......Page 599 Step 3 – Creating RViz plugin definition......Page 601 Step 4 – Creating plugin description file......Page 603 Step 5 – Adding export tags in package.xml......Page 604 Step 6 – Editing CMakeLists.txt......Page 605 Step 7 – Building and loading plugins......Page 606 Questions......Page 608 Summary......Page 609 Interfacing I/O Boards, Sensors, and Actuators to ROS......Page 610 Understanding the Arduino-ROS interface......Page 611 What is the Arduino-ROS interface?......Page 613 Understanding the rosserial package in ROS......Page 614 Installing rosserial packages on Ubuntu 14.04/15.04......Page 616 Understanding ROS node APIs in Arduino......Page 619 ROS - Arduino Publisher and Subscriber example......Page 621 Arduino-ROS, example - blink LED and push button......Page 625 Arduino-ROS, example - Accelerometer ADXL 335......Page 628 Arduino-ROS, example - ultrasonic distance sensor......Page 631 Equations to find distance using the ultrasonic range sensor......Page 632 Arduino-ROS, example - Odometry Publisher......Page 635 Interfacing Non-Arduino boards to ROS......Page 637 Setting ROS on Odroid-C1 and Raspberry Pi 2......Page 638 How to install an OS image to Odroid-C1 and Raspberry Pi 2......Page 642 Installation in Windows......Page 643 Installation in Linux......Page 644 Connecting to Odroid-C1 and Raspberry Pi 2 from a PC......Page 645 Configuring an Ethernet hotspot for Odroid-C1 and Raspberry Pi 2......Page 646 Installing Wiring Pi on Odroid-C1......Page 648 Installing Wiring Pi on Raspberry Pi 2......Page 649 Blinking LED using ROS on Odroid-C1 and Raspberry Pi 2......Page 650 Push button + blink LED using ROS on Odroid-C1 and Raspberry Pi 2......Page 652 Running LED blink in Odroid-C1......Page 655 Running button handling and LED blink in Odroid-C1......Page 656 Running LED blink in Raspberry Pi 2......Page 657 Interfacing Dynamixel actuators to ROS......Page 658 Questions......Page 659 Summary......Page 660 Programming Vision Sensors using ROS, Open-CV, and PCL......Page 661 Understanding ROS - OpenCV interfacing packages......Page 662 Understanding ROS - PCL interfacing packages......Page 663 Installing ROS perception......Page 664 Interfacing USB webcams in ROS......Page 666 Working with ROS camera calibration......Page 669 Converting images between ROS and OpenCV using cv_bridge......Page 672 Image processing using ROS and OpenCV......Page 673 Step 1: Creating ROS package for the experiment......Page 674 Step 2: Creating source files......Page 675 Step 3: Explanation of the code......Page 676 Publishing and subscribing images using image_transport......Page 677 Converting OpenCV-ROS images using cv_bridge......Page 678 Finding edges on the image......Page 680 Visualizing raw and edge detected image......Page 681 Step 4: Editing the CMakeLists.txt file......Page 682 Step 5: Building and running example......Page 683 Interfacing Kinect and Asus Xtion Pro in ROS......Page 684 Interfacing Intel Real Sense camera with ROS......Page 687 Working with point cloud to laser scan package......Page 689 Interfacing Hokuyo Laser in ROS......Page 692 Interfacing Velodyne LIDAR in ROS......Page 694 Working with point cloud data......Page 696 How to publish a point cloud......Page 697 How to subscribe and process the point cloud......Page 699 Writing a point cloud data to a PCD file......Page 701 Read and publish point cloud from a PCD file......Page 702 Streaming webcam from Odroid using ROS......Page 705 Questions......Page 708 Summary......Page 709 Building and Interfacing Differential Drive Mobile Robot Hardware in ROS......Page 710 Introduction to Chefbot- a DIY mobile robot and its hardware configuration......Page 711 Flashing Chefbot firmware using Energia IDE......Page 714 Serial data sending protocol from LaunchPad to PC......Page 715 Serial data sending protocol from PC to Launchpad......Page 716 Discussing Chefbot interface packages on ROS......Page 717 Computing odometry from encoder ticks......Page 722 Computing motor velocities from ROS twist message......Page 724 Running robot stand alone launch file using C++ nodes......Page 726 Configuring the Navigation stack for Chefbot......Page 727 Configuring the gmapping node......Page 728 Configuring the Navigation stack packages......Page 730 Common configuration (local_costmap) and (global_costmap)......Page 731 Configuring global costmap parameters......Page 732 Configuring local costmap parameters......Page 733 Configuring base local planner parameters......Page 734 Configuring DWA local planner parameters......Page 735 Configuring move_base node parameters......Page 736 Understanding AMCL......Page 739 Understanding RViz for working with the Navigation stack......Page 742 2D Pose Estimate button......Page 743 Visualizing the particle cloud......Page 744 The 2D Nav Goal button......Page 745 Displaying the static map......Page 746 Displaying the robot footprint......Page 747 Displaying the global and local cost map......Page 748 Displaying the global plan, local plan, and planner plan......Page 749 The current goal......Page 750 Obstacle avoidance using the Navigation stack......Page 751 Working with Chefbot simulation......Page 752 Building a room in Gazebo......Page 753 Adding model files to the Gazebo model folder......Page 755 Sending a goal to the Navigation stack from a ROS node......Page 758 Questions......Page 761 Summary......Page 762 Exploring the Advanced Capabilities of ROS-MoveIt!......Page 763 Motion planning using the move_group C++ interface......Page 764 Motion planning a random path using MoveIt! C++ APIs......Page 765 Motion planning a custom path using MoveIt! C++ APIs......Page 767 Collision checking in robot arm using MoveIt!......Page 769 Adding a collision object in MoveIt!......Page 770 Removing a collision object from the planning scene......Page 775 Checking self collision using MoveIt! APIs......Page 776 Working with perception using MoveIt! and Gazebo......Page 778 Grasping using MoveIt!......Page 784 Working with robot pick and place task using MoveIt!......Page 786 Creating Grasp Table and Grasp Object in MoveIt!......Page 788 Pick and place action in Gazebo and real Robot......Page 791 Understanding Dynamixel ROS Servo controllers for robot hardware interfacing......Page 792 The Dynamixel Servos......Page 793 Dynamixel-ROS interface......Page 795 Interfacing seven DOF Dynamixel based robotic arm to ROS MoveIt!......Page 796 Creating a controller package for COOL arm robot......Page 797 MoveIt! configuration of the COOL Arm......Page 800 Questions......Page 802 Summary......Page 803 ROS for Industrial Robots......Page 804 Understanding ROS-Industrial packages......Page 805 Goals of ROS-Industrial......Page 806 ROS-Industrial - a brief history......Page 807 Benefits of ROS-Industrial......Page 808 Installing ROS-Industrial packages......Page 809 Block diagram of ROS-Industrial packages......Page 810 Creating URDF for an industrial robot......Page 812 Creating MoveIt! configuration for an industrial robot......Page 813 Updating the MoveIt! configuration files......Page 816 Testing the MoveIt! configuration......Page 818 Installing ROS-Industrial packages of universal robotic arm......Page 819 Installing the ROS interface of universal robots......Page 821 Understanding the Moveit! configuration of a universal robotic arm......Page 823 Working with MoveIt! configuration of ABB robots......Page 825 Understanding the ROS-Industrial robot support packages......Page 828 Visualizing the ABB robot model in RViz......Page 830 ROS-Industrial robot client package......Page 831 Designing industrial robot client nodes......Page 832 ROS-Industrial robot driver package......Page 834 Understanding MoveIt! IKFast plugin......Page 836 Creating the MoveIt! IKFast plugin for the ABB-IRB6640 robot......Page 837 Prerequisites for developing the MoveIt! IKFast plugin......Page 838 OpenRave and IK Fast Module......Page 839 MoveIt! IK Fast......Page 840 Installing MoveIt! IKFast package......Page 841 Installing OpenRave on Ubuntu 14.04.3......Page 842 Creating the COLLADA file of a robot to work with OpenRave......Page 844 Generating the IKFast CPP file for the IRB 6640 robot......Page 846 Creating the MoveIt! IKFast plugin......Page 847 Questions......Page 850 Summary......Page 851 Troubleshooting and Best Practices in ROS......Page 852 Setting up Eclipse IDE on Ubuntu 14.04.3......Page 853 Setting ROS development environment in Eclipse IDE......Page 855 Global settings in Eclipse IDE......Page 856 ROS compile script for Eclipse IDE......Page 858 Adding ROS Catkin package to Eclipse......Page 860 Adding run configurations to run ROS nodes in Eclipse......Page 864 Best practices in ROS......Page 866 ROS C++ coding style guide......Page 867 Standard naming conventions used in ROS......Page 868 Code license agreement......Page 869 ROS code formatting......Page 870 ROS code documentation......Page 871 Console output......Page 872 Best practices in the ROS package......Page 873 Important troubleshooting tips in ROS......Page 874 Usage of roswtf......Page 875 Questions......Page 878 Summary......Page 879 ROS Robotics Projects......Page 880 Face Detection and Tracking Using ROS, OpenCV and Dynamixel Servos......Page 881 Overview of the project......Page 882 Hardware and software prerequisites......Page 883 Installing dependent ROS packages......Page 885 Installing the usb_cam ROS package......Page 886 Creating a ROS workspace for dependencies......Page 887 Interfacing Dynamixel with ROS......Page 896 Installing the ROS dynamixel_motor packages......Page 897 Creating face tracker ROS packages......Page 898 The interface between ROS and OpenCV......Page 899 Working with the face-tracking ROS package......Page 901 Understanding the face tracker code......Page 903 Understanding CMakeLists.txt......Page 906 The track.yaml file......Page 908 The launch files......Page 909 Running the face tracker node......Page 910 The face_tracker_control package......Page 911 The start_dynamixel launch file......Page 912 The pan controller launch file......Page 913 The pan controller configuration file......Page 914 The servo parameters configuration file......Page 915 The face tracker controller node......Page 916 Creating CMakeLists.txt......Page 918 Testing the face tracker control package......Page 919 Bringing all the nodes together......Page 921 Fixing the bracket and setting up the circuit......Page 922 The final run......Page 923 Questions......Page 924 Summary......Page 925 Building a Siri-Like Chatbot in ROS......Page 926 Social robots......Page 927 Building social robots......Page 929 Prerequisites......Page 930 Getting started with AIML......Page 931 AIML tags......Page 932 The PyAIML interpreter......Page 934 Installing PyAIML on Ubuntu 16.04 LTS......Page 935 Playing with PyAIML......Page 936 Loading multiple AIML files......Page 938 Creating an AIML bot in ROS......Page 940 The AIML ROS package......Page 941 Installing the ROS sound_play package......Page 942 Installing the dependencies of sound_play......Page 943 Installing the sound_play ROS package......Page 944 Creating the ros_aiml package......Page 945 The aiml_server node......Page 946 The AIML client node......Page 947 The aiml_tts client node......Page 948 The AIML speech recognition node......Page 949 start_chat.launch......Page 950 start_tts_chat.launch......Page 951 start_speech_chat.launch......Page 952 Questions......Page 954 Summary......Page 955 Controlling Embedded Boards Using ROS......Page 956 Getting started with popular embedded boards......Page 957 An introduction to Arduino boards......Page 958 How to choose an Arduino board for your robot......Page 959 Getting started with STM32 and TI Launchpads......Page 960 The Tiva C Launchpad......Page 962 Introducing the Raspberry Pi......Page 963 How to choose a Raspberry Pi board for your robot......Page 964 The Odroid board......Page 965 Interfacing Arduino with ROS......Page 966 Monitoring light using Arduino and ROS......Page 969 Running ROS serial server on PC......Page 971 Interfacing STM32 boards to ROS using mbed......Page 973 Interfacing Tiva C Launchpad boards with ROS using Energia......Page 976 Running ROS on Raspberry Pi and Odroid boards......Page 979 Connecting Raspberry Pi and Odroid to PC......Page 981 Controlling GPIO pins from ROS......Page 983 Creating a ROS package for the blink demo......Page 985 Running the LED blink demo on Raspberry Pi and Odroid......Page 988 Questions......Page 989 Summary......Page 990 Teleoperate a Robot Using Hand Gestures......Page 991 Teleoperating ROS Turtle using a keyboard......Page 992 Teleoperating using hand gestures......Page 993 Setting up the project......Page 996 Interfacing the MPU-9250 with the Arduino and ROS......Page 997 The Arduino-IMU interfacing code......Page 999 Visualizing IMU TF in Rviz......Page 1002 Converting IMU data into twist messages......Page 1004 Integration and final run......Page 1006 Teleoperating using an Android phone......Page 1008 Questions......Page 1011 Summary......Page 1012 Object Detection and Recognition......Page 1013 Getting started with object detection and recognition......Page 1014 The find_object_2d package in ROS......Page 1016 Installing find_object_2d......Page 1017 Installing from source code......Page 1018 Running find_object_2d nodes using webcams......Page 1019 Running find_object_2d nodes using depth sensors......Page 1024 Getting started with 3D object recognition......Page 1028 Introduction to 3D object recognition packages in ROS......Page 1029 Installing ORK packages in ROS......Page 1030 Detecting and recogniz Enhancing your existing robotic skills by learning how to design and build multifunctional robots using Robots Operating System libraries and tools About This Book Successfully design and simulate your 3D robot model and use powerful algorithms and tools to program and set up your robots Work through concrete examples that will help you build your own robotic systems of varying complexity levels Discover the best practices and troubleshooting solutions everyone needs when working on ROS Who This Book Is For This course targets robotic enthusiasts, developers, and researchers who would like to build robot applications using ROS. If you are looking to explore the advanced ROS features in your projects, then this learning path is for you. Basic knowledge of ROS, GNU/Linux, and programming concepts is assumed. What You Will Learn Understand the concepts of ROS, the command-line tools, visualization GUIs, and how to debug ROS Connect robot sensors and actuators to ROS Obtain and analyze data from cameras and 3D sensors 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 Get to grips with teleoperating robots using hand gestures Build ROS-based applications using Matlab and Android Build interactive applications using TurtleBot In Detail This learning path is designed to help you program and build your robots using open source ROS libraries and tools. We start with the installation and basic concepts, then continue with the more complex modules available in ROS, such as sensor and actuator integration (drivers), navigation and mapping (so you can create an autonomous mobile robot), manipulation, computer vision, perception in 3D with PCL, and more. We then discuss advanced concepts in robotics and how to program using ROS. You'll get a 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. We'll go through great projects such as building a self-driving car, an autonomous mobile robot, and image recognition using deep learning and ROS. You can find beginner, intermediate, and expert ROS robotics applications inside! It includes content from the following Packt products: Effective Robotics Programming with ROS - Third Edition ...