This summer I have developed a new exercise for the Robotics Academy at the JdeRobot organization called “Amazon Warehouse”. Its main aim is to help students learn to program a robot which autonomously localizes itself, navigates, detects pallets, picks, navigates with a pallet on it, and delivers it to the destination. Additionally, students will learn to work with Robot Operating System (ROS), popular ROS packages, and Gazebo.

Video showing the exercise environment, interface, and reference solution is available on the official JdeRobot YouTube channel:


Work done

Thanks to the last year’s GSoC participant at the JdeRobot, who have already developed neccessary infrastucture for the exercise (Gazebo world, robot model), I was more focused on programming robot model itself, connecting required packages, configuring parameters for ROS nodes, and fixing problem with main robot controller.

Here are the main tasks that been completed:

  1. Removed OMPL for planning
  2. Wrote YAML configuration files for ROS topics
  3. Rewrited GUI to accept and send only valid destinations and pallet locations
  4. Used gmapping SLAM (Simultaneous Localization and Mapping) package to create a .pgm map of the Gazebo world
  5. Added Adaptive Monte-Carlo Localization algorithm to get proper odometry of the robot from the generated map
  6. Intoduced Navigation Stack package for global planning
  7. Added move_base package for global, local planning
  8. Configured files for the proper global and local costmaps generations
  9. Solved the problem of the pallet-as-an-obstacle problem, when robot picks it
  10. Introduced navigation logic in the warehouse suggested by mentors (storage and delivery orders)
  11. Solved the problem with Actionlib being ran in one thread with the main script, which stucks the process
  12. Updated API commands for robot control
  13. Added a velocity multiplexer, so that robot can be operated from both API commands and Teleop widget
  14. Updated GUI interface for this exercise
  15. Finished complete version of the Amazon Warehouse exercise with a reference solution

Additionally, as there was some time left, we decided to start development of the second version of the exercise, where robot also will have to avoid dynamic obstacles, and in particular, other amazon robots operating the warehouse. Although I did not have enough time to implement this idea, in the final version of the exercise I actually made an updates so that it will be much easier in the future add more robots to the warehouse without any problems with ROS node namings, topics, and services.


During whole period I was mostly working on the The Robotics Club repository, where I and my mentors kept track of all the progress:

However, all final work should be accessed directly at the JdeRobot/RoboticsAcademy repository. The exercise itslef, with all required files and instructions is below:

There were 3 major pull requests to the repository:

  1. – introduction of basic exercise, where robot is directly controlled through the wheels API
  2. – major update where ````move_base``` and other packages where introduced. New API included
  3. – final update to the repository with minor fixes and GUI update

Additionally, two PRs where made to the JdeRobot/assets repository:


Additional documentation

Moreover, although JdeRobot organization is only starting to use GitHub pages for their official web pages, I made an update to the Robotics Academy’s website to include information about Amazon Warehouse exercise, simple result expectations, and reference solution:

Exercise test

To download exercise and launch exercise, one should first refer to the installation guide

To launch the example, follow the steps below:

0.Add following packages if you don’t have them already:

$ sudo wget -P /opt/ros/kinetic/share/hector_pose_estimation/
$ sudo apt-get install ros-kinetic-navigation

1.Source the gazebo setups:

$ source /opt/jderobot/share/jderobot/gazebo/
$ source /opt/jderobot/share/jderobot/gazebo/

2.Run Gazebo simulator:

$ cd launch
$ ROS_HOME=`pwd` roslaunch amazonrobot_1_warehouse.launch 

3.Navigate to exercise folder and run the practice and the user interface:

$ python2 amazonMap.conf amazonConf.yml

Further information and API commands are available in the exercise README