An open API service indexing awesome lists of open source software.

https://github.com/borisdayma/home_service_robot

Autonomously map and navigate a home environment to pick-up and drop-off objects
https://github.com/borisdayma/home_service_robot

localization slam

Last synced: about 2 months ago
JSON representation

Autonomously map and navigate a home environment to pick-up and drop-off objects

Awesome Lists containing this project

README

        

# Home Service Robot

*This repository presents my solution to the Udacity Home Service Robot Project. A SLAM algorithm is used to create a map of an environment. Then the map is used to localize a robot and plan its trajectory towards an object to pick-up and drop it off at another location. The entire project is created through ROS packages.*

![alt text](imgs/intro.jpg)

## Objective

The project is built entirely with ROS packages (some existing and some newly created). The objective is to create a map of an environment through SLAM, and then localize and navigate through it in order to reach target locations.

The project is split in several parts:

* design a custom environment,
* make a *wall follower* node to navigate autonomously following walls,
* use a SLAM algorithm to map the environment,
* create a *pick objects* node to go to target object location followed by drop off location,
* create a *add markers* node to display objects on rviz,
* establish a communication between nodes to notify of reached locations.

The robot used for navigation is *turtlebot* present as a standard ROS package.

## Architecture

The project is made of several ROS packages:

* *turtlebot_gazebo* loads our custom world environment in gazebo and creates a turtlebot robot,
* *turtlebot_teleop* for manually operating the turtlebot,
* *gmapping* uses the camera, laser & odometry in order to simultaneously localize the robot and map the environment (SLAM algorithm),
* *wall_follower* controls the robot and make it continuously follow the left wall,
* *amcl* is a probabilistic localization system that uses a particle filter to track a robot through a given map,
* *pick_objects* sends target pick-up and drop-off locations, and notify when those have been reached,
* *rviz* is used for visualization of the environment, the robot, and any other parameter (laser scan, localization particles, navigation cost maps and path, etc),
* *add_markers* is used to visualize simulated objects at pick-up and drop-off locations on rviz.

## Future work

The following required improvements have been identified:

* a package needs to be developed to send & receive object pick-up and drop-off targets in real time ;
* other SLAM packages need to be evaluated and compared for better performance ;
* the robot needs to be able to identify its initial location automatically ;
* custom robots need to be added to launch or script files.

## Installing

A script has been developed for quick installation:

* Copy the `setup.sh` script in your home directory.
* Ensure you don't have a **catkin_ws** directory as its contents may be deleted.
* Run `./setup.sh`

This will clone the full repository, including required ROS packages as sub-modules.

**Note**: Once installed, do not move or rename the packages folder as the Shell scripts rely on preserving relative paths.

## Running the scripts

The entire project can be run through the scripts present in `src/ShellScripts`.

The different scripts were developed in the following sequence:

* `test_slam.sh` - generate a map through SLAM while navigating manually
* `wall_follower.sh` - generate a map through SLAM while navigating autonomously following walls
* `test_navigation.sh` - load map generated through SLAM and define manually target navigation goals
* `pick_objects.sh` - run autonously the robot towards pick-up and drop-off locations
* `add_markers.sh` - add objects as markers to rviz
* `home_service.sh` - run autonomously the robot to pick up target object and bring it to drop off location, with rviz visualization

## Built With

* [SLAM Gmapping](https://github.com/ros-perception/slam_gmapping) - The SLAM algorithm
* [Turtlebot](https://github.com/turtlebot) - ROS robot model and its stack