Skip to content

we propose a fleet of autonomous delivery robots, called Musky, that can provide transportation services for various kinds of small to medium-sized goods(<10 lbs) for short-range hauling(<5 Miles) using autonomous navigation

License

Notifications You must be signed in to change notification settings

karanamrahul/MusketeersDeliveryFramework

 
 

Repository files navigation

Musketeers: Autonomous pickup and delivery fleet

License

example workflow

Overview

The rapid rise of e-commerce services in the last decade, and its forecast for the future, have proved that the need for delivery services will be increasing, which needs to be addressed by improving the delivery infrastructure. Developments in technology have now made it possible to provide an autonomous solution, which can revolutionize the industry by creating an autonomous delivery network that can accomplish this task without the need for human intervention.
In this project, we propose a fleet of autonomous delivery robots, called Musky, that can provide transportation services for various kinds of small to medium-sized goods(<10 lbs) for short-range hauling(<5 Miles) using Multi Fleet GPS Waypoint Navigation.

Repository

This repository contains a multi-robot autonomous delivery framework, that works with husky robots from ClearPath robotics, in a simulation environment. The robots called "Musky" can be controlled via command line inputs, where they can be made to traverse to a preset location to pick up an order from a restaurant and will deliver it to a preset delivery location.

UML

Quad Chart
Project Proposal
Activity Diagram
Class Diagram

AIP Document

Doc Link

Sprint Planning

Doc Link

Phase 3 Progress

  • Generating a new world file, as localization is problematic in UMD world
  • Generated map for the above world using Gmapping and used the same for localization
  • Created new UML diagram to reflect the change in code structure
  • Created Stub Classes and Test cases stubs for the new UML
  • Created header and source files according to the stubs which passed the tests
  • Created a command line interface for controlling the fleet
  • Created a Graphical User Interface to communicate and control the robots
  • Created and released the package for the fleet system

Old World Files

Gazebo: Spawning Fleet of Huskies in temporary Dock Station image

Rviz: Spawning Fleet of Huskies in temporary Dock Station image

UMD Campus Map Mckeldin Library image

New World File

WhatsApp Image 2021-12-13 at 1 38 50 PM

Generated MAP for Localization

WhatsApp Image 2021-12-13 at 1 38 50 PM (1) WhatsApp Image 2021-12-13 at 1 38 50 PM (2)

Assumptions

  • The streets do not have any traffic or traffic signals, hence the robot can navigate freely on the pedestrian paths, except for a few obstacles along the way.
  • The obstacles present on the pedestrian paths are of dimensions such that they do not block the complete pathway and will allow the robot to maneuver around it.
  • The paths are even and do not contain extreme slopes.

Project tested on

  • Ubuntu 20.04 using Noetic

Technologies

Programing language: C++

Build system: cmake

Testing Library: Google Test

Continuous Integration: GitHub Actions CI, Coverall

Other: ROS, Gazebo, RViz, Clearpath Husky

Algorithms

  • husky_navigation package, which uses gmapping, move_base and frontier_exploration [BSD-3-Clause License].
  • CLI11 package for parsing command line input [BSD-3-Clause License].

Risk and Mitigations

  • Risk 1: Error in Path planning Algorithm due to unknown constraints which might lead to delay in delivery time or failed delivery. Mitigation: This can be mitigated by improving the path planning algorithm by feeding the planning data to supervised learning ML algorithms and training the path planner to predict obstacles/possible unknown constraints.
  • Risk 2: Unexpected shutdown of ROS Master might lead to the shutdown of all the available agents/Robots. Mitigation: This risk can be mitigated by migrating the whole project to ROS2 or by integrating a ROS1 bridge with ROS2.
  • Risk 3: One of the sensors required for path planning might malfunction leading to erratic behavior. Mitigation: If such a condition occurs, the robot will be made to override the autonomous navigation signals and a human operator will manually control the robot.

Setbacks

  • Due to narrow pathways, the robots are unable to find paths as the cost map generated have high padding. This can be mitigated by using smaller robots or by generating different paths.

Running the code

ROS Noetic is required to run the code, it's installation can be found at ROS Noetic installation

As kivy is used for the GUI, it needs to be installed as follow

pip install https://github.com/kivymd/KivyMD/archive/master.zip

To run the code, first open a terminal and download the repository

git clone https://github.com/sumedhreddy90/MusketeersDeliveryFramework.git

Then, add the downloaded repository into your ROS workspace's src folder (eg. catkin_ws/src)

After adding the repository, change the directory of the repository to the workspace repository

cd ~/catkin_ws

To build the changes use

catkin_make

To source the build files use

source devel/setup.bash

Launch files are provided that will spawn multiple robots in a gazebo environment and will simultaneously open rviz. To use the launch file, run the following command in the same terminal

roslaunch musky_nav multi_husky_delivery.launch 

Wait for all the windows to open fully, which can be verified by checking the ROS_INFO message in the terminal where the above launch file was launched. It should display Recovery behavior will clear layer 'obstacles'

After getting the above message, open a new terminal and navigate to the ROS workspace, using

cd ~/catkin_ws

and source the build files

source devel/setup.bash

To run the ROS node that controls the muskies, run the following code

rosrun musky_nav musk_init __name:=node1 1

Where __name:=node1 is used to create the instance of the node with a specified name, and 1 specifies the robot ID. The general command line code would be

rosrun musky_nav musk_init __name:=<node name> <Robot ID>

After the above command, the terminal will display all the options available for navigation

Where do you want the robot to go?

1 = Musketeers_Base-Station : 1 
2 = Musketeers_Base-Station : 2
3 = Musketeers_Base-Station : 3
4 = Musketeers_Base-Station : 4
5 = Chipotle
6 = Sub-way
7 = Taco-bell
8 = Panda Express
9 = Iribe
10 = Mckeldin Library
11 = J.M Patterson Hall
12 = Domain

Select one of the above mentioned options and the robot will plan the trajectory and will move accordingly

The bases are configured to cater to only the closes restaurants, hence, selection of the pickup location can be done as follows

The robots can also be controlled via a GUI as follows

rosrun musky_nav musketeers_gui.py

GUI

WhatsApp Image 2021-12-13 at 11 00 18 AM

Testing

To run the tests, run the following command from the workspace directory

rostest musky_nav ros_test.launch

Result for it would be

... logging to /home/starfleeet-robotics/.ros/log/rostest-starfleeet-25046.log
[ROSUNIT] Outputting test results to /home/starfleeet-robotics/.ros/test_results/musky_nav/rostest-test_ros_test.xml
[ INFO] [1639456426.976681234]: Waiting for the move_base action server to come up
[ INFO] [1639456431.979700155]: Waiting for the move_base action server to come up
[ INFO] [1639456436.979872319]: Waiting for the move_base action server to come up
[ INFO] [1639456441.980030316]: Waiting for the move_base action server to come up
[ INFO] [1639456446.980227198]: Waiting for the move_base action server to come up
[Testcase: testmusketeersTests] ... ok

[ROSTEST]-----------------------------------------------------------------------

[musky_nav.rosunit-musketeersTests/muskNavTest][passed]
[musky_nav.rosunit-musketeersTests/CommandVelTest][passed]
[musky_nav.rosunit-musketeersTests/concatTest][passed]
[musky_nav.rosunit-musketeersTests/master_test][passed]

SUMMARY
 * RESULT: SUCCESS
 * TESTS: 4
 * ERRORS: 0
 * FAILURES: 0

About

we propose a fleet of autonomous delivery robots, called Musky, that can provide transportation services for various kinds of small to medium-sized goods(<10 lbs) for short-range hauling(<5 Miles) using autonomous navigation

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 56.9%
  • HTML 20.4%
  • TeX 13.2%
  • CMake 3.2%
  • JavaScript 2.8%
  • CSS 2.3%
  • Other 1.2%