These are the projects for the Udacity Robotics Software Engineer Nanodegree Program. Please clone the repo into the src
folder of your workspace with the --recursive
switch. It was built with ROS Kinetic.
Everything except the plugin are used in later projects; this is included for completeness.
The plugin is built as follows (instructions from Udacity lesson):
$ cd /home/workspace/build_my_world
$ mkdir build
$ cd build/
$ cmake ../
$ make # You might get errors if your system is not up to date!
$ export GAZEBO_PLUGIN_PATH=${GAZEBO_PLUGIN_PATH}:/home/workspace/myrobot/build
Run with gazebo build_my_world/world/the_office.world
The ball_chaser
package makes the robot move toward the white ball by checking the camera input for white pixels, and aims for the midpoint of the leftmost and rightmost found. Start with:
roslaunch my_robot world.launch
roslaunch ball_chaser ball_chaser.launch
Uses the Map Server, ACML, and Move Base packages to help localize and navigate.
Launch Gazebo and Rviz with:
roslaunch my_robot world.launch
Launch Map Server, ACML, and Move Base with:
roslaunch my_robot acml.launch
Optionally, start teleop with:
rosrun teleop_twist_keyboard teleop_twist_keyboard.py
This project uses rtabmap_ros
to map out the environment (using a smaller world than before to simplify the process). Start the world and move the robot around with teleop
:
roslaunch my_robot mini_world.launch
roslaunch my_robot mapping.launch
roslaunch my_robot teleop.launch
This image shows the route taken and the resulting map.
Here's the 3D map.
And here's the occupancy map.
The resulting database is available here, and can be put in my_robot/maps/rtabmap.db
to be used for localization, similar to the Where Am I? project.
roslaunch my_robot world.launch
roslaunch my_robot localization.launch
roslaunch my_robot teleop.launch
This project uses the turtlebot
and slam_gmapping
packages for localization and mapping. add_markers
places and removes RVIZ marker visualizations, which are triggered by pick_objects
controlling the robot's movement.
Test: ./scripts/test_slam.sh
Here's the map produced by navigating with the slam_gmapping
package. slam_gmapping
is a wrapper for gmapping
, which is itself a wrapper for OpenSlam's Gmapping. It uses laser-based SLAM and pose data to create an occupancy grid map (shown below) of the robot's environment.
Test: ./scripts/test_navigation.sh
Send robot to pickup/dropoff: ./scripts/pick_objects.sh
Turtlebot provides an Adaptive Monte Carlo Localization (AMCL) demo which allows the robot to identify its position in the environment.
Test: ./scripts/add_marker.sh
Put it all together: ./scripts/home_service.sh
home_service.sh
puts an RVIZ marker in the environment; the robot moves to this location to pick up the marker, then moves to a drop off point where the marker is put down again.