In this project, a Turtlebot robot performs the tasks of a service robot by picking up a virtual object from one location in the simulated environment and dropping off to a different location following a calculated path. The Turtlebot has been placed in a custom world designed using the Gazebo Building Editor. It can then perform mapping of the environment using the onboard RGB-D cameras to generate a map of the environment. Using the map, the robot can then localise itself using AMCL, and navigate to set pickup and dropoff goal positions.
The project mainly consists of the following ROS packages:
- gmapping
- Package that is used to manually perform SLAM to generate the Map of the environment
- turtlebot_teleop
- Package that is used to teleoperate the robot using the keyboard to perform SLAM
- pgm_map_creator
- Package that is used to generate a .pgm map picture of the environment (alternative to the manual map generated by SLAM)
- turtlebot_gazebo
- Package that launches the turtlebot in the gazebo environment and uses the turtlebot_navigation and move_base packages to perform localization through AMCL and navigate to a set goal
- turtlebot_rviz_launchers
- Package that contains the rviz files with the required configurations to visualise SLAM and Navigation
In addition, the 2 custom programmed ROS Nodes are used to program and visualize the home service tasks.
- pick_objects
- The ROS Node programmed using C++ that uses the move_base_msgs and actionlib dependencies to command the turtlebot to navigate to 2 specified goals. It first commands the robot to the specified pickup goal, waits for 5 seconds as a representation of picking up the virtual object, and then commands it to drive to the dropoff pose to srop the virtual object
- add_markers
- This is the ROS Node responsible for visualising a Marker in Rviz to model the virtual object being picked up. It is first displayed at the same pickup position that the robot is commanded to move to until the robot reaches the position. Once it reaches, the marker disappears from the pickup position, and is then displayed after the robot drops the object at the drop-off location.
In addition to all the topics that are published and subscribed to by the Turtlebot packages, the topic /pick_object/reach_goal is published by the pick_objects node, which publishes a number as a flag when it reaches the designated goal. The flags published are as follows:
- 0 - if the robot failed to reach the specified goal due to any reason, for example if a valid path could not be found to reach the goal
- 1 - when the robot reaches the specified pick-up goal
- 2 - when the robot reaches the specified drop-off goal
The add_markers node subscribes to this topic to identify which position to display or delete the marker from.
ROS Kinetic in Ubuntu 16.04