# 89-685: Introduction to Robotics

## Fall 2016: Assignment 3

Due at 23:59:59, Sunday, March 19th, 2017.

## Purpose

In this assignment you will continue the navigation task from the previous assignment. This time you will create a simple executioner that will execute the navigation plan computed by the planner from the last assignment.
Your program will be given a starting location and a goal location, and should move the robot from the starting location to the goal location, along the shortest path connecting them.

## Input Parameters

The launch file of your program should include the following parameters (the values are given here as an example):
```<arg name="map_file" default="\$(find turtlebot_gazebo)/maps/playground.yaml" /> <param name="starting_location" value="0,0" /> <param name="goal_location" value="2,-1.5" /> <param name="robot_size" value="0.35" /> <param name="map_resolution" value="0.05" /> ```
A sample launch file can be found here.

## Algorithm

1. Invoke the planner from assignment 2 to compute the shortest path from the starting location to the goal location.
2. Smooth the path by choosing a set of waypoints on the path, such that the robot can move from one waypoint to the next one in a direct line (without turning). For example, if the path returned from A* is (1,1)→(1,2)→(1,3)→(2,3)→(2,4)→(2,5), and there is a direct line that connects (1,1) to (2,4) without getting into obstacles, then we can reduce the number of waypoints on the path to: (1,1)→(2,4)→(2,5).
3. Send the appropriate cmd_vel commands to the robot to make it move along the waypoints (define a threshold which specifies how close the robot should get near a waypoint, before it can move to the next one).

If there is no valid path from the starting location of the robot to its goal location (e.g., the goal location is outside the map boundaries), you should print a suitable error message and exit.

## The Rules

1. Make sure that your code is well organized and documented.
2. All parameter values should be configurable.
3. You should do this lab on your own. All the work you turn in should be yours, and not done in collaboration with anyone else. If you use any external sources of inspiration, other than ros.org, then let us know in `README` file.

## What to Hand In

You should hand in everything that someone else needs to run your code. For this assignment, that means your source code, manifest file, `CMakeFiles.txt` (if you're using C++), and launch files. You should not hand in executable files, or any other files that can be regenerated.

Your code should be easy to run. After getting a copy of your code, running

```catkin-make --pkg navigation_task roslaunch navigation_task navigation_task.launch ```
should be sufficient to execute your planner and move the robot along the navigation plan.

Finally, zip all the necessary files and submit the zip file to ros.exercises@gmail.com.

Good luck!