Revision as of 15:07, 13 October 2013 by Rrodrf04 (talk | contribs) (Dynamic window algorithm)

Jump to: navigation, search
  • Project name: Turtlebot robot indoor navigation
  • Dates: July 2013 -
  • Degree: Summer Research Residence
  • Authors: Ruben
  • Contact:
  • SVN Repositories:
  • Tags: ROS, navigation, turtlebot
  • Technologies: kinect, pcl, openni, c++, cmake, ROS
  • State: Ongoing

ROS Fuerte Installation on Ubuntu 12.04

Repository configuration

First we need to add the repository

sudo sh -c 'echo "deb precise main" > /etc/apt/sources.list.d/ros-latest.list'

and setup the keys

wget -O - | sudo apt-key add -


We need to refresh the cache of your package manager

sudo apt-get update

In our case, we decide to install ros-fuerte-desktop-full that is recommended in the ROS web, but you can also install other as explained on the web

sudo apt-get install ros-fuerte-desktop-full

Enviroment Configuration

Now we need to configure the enviroment variables

echo "source /opt/ros/fuerte/setup.bash" >> ~/.bashrc

For refresh the enviroment variables of your terminal you can reset it or type

 . ~/.bashrc

Turtlebot installation

The turtlebot installation is very simple, you only have to type in your terminal

 sudo apt-get install ros-fuerte-turtlebot*


Feasible Solutions

The feasible solutions are Dynamic Window and Potencial Field :

1.-Dynamic Window : is a velocity-based local planner that calculates the optimal collision-free ('admissible') linear and angular velocity for a robot required to reach its goal

2.-Potential-field : In the pontetial-field navigation each obstacle has an obstacle 'force field' for repelling the robot, and the goal has a attraction fiel

Dynamic window algorithm

1.- Calculate the desired velocities ( angular and linear ).

2.- Select the allowable velocities ( angular and linear ) , this is compute the dynamic window, after this step we have a allowable velocities range ( [ min linear, max linear ], [ min angular, max angular ])

3.- For each tuple [ v, w ] determine the closest obstacle

4.- Determine if the distance to the closest obstacle is within the robots braking distance.

5.- Now, we can calculate the score of this tuple, the velocities that are more near to desired velocities will get a more score

6.- Now we select the velocity that has the most score

7.- If the score is higher than a minimun score return this tuple, else the linear and angular velocities will be 0

In pseudocode (source)

  BEGIN DWA(robotPose,robotGoal,robotModel)
  desiredV = calculateV(robotPose,robotGoal)
  laserscan = readScanner()
  allowable_v = generateWindow(robotV, robotModel)
  allowable_w  = generateWindow(robotW, robotModel)
  for each v in allowable_v
     for each w in allowable_w
     dist = find_dist(v,w,laserscan,robotModel)
     breakDist = calculateBreakingDistance(v)
     if (dist > breakDist)  //can stop in time
        heading = hDiff(robotPose,goalPose, v,w)
        clearance = (dist-breakDist)/(dmax - breakDist)
        cost = costFunction(heading,clearance, abs(desired_v - v))
        if (cost > optimal)
           best_v = v
           best_w = w
           optimal = cost
   set robot trajectory to best_v, best_w



In these experiments, the robot will try to reach the position (3,3) from the origin.

1. Simple scenario Simple navigation

2. A wall scenario Navigation with obstacle

3. A realistic scenario

Path Planning



Graph SLAM