Difference between revisions of "Ruben-RV-ROS01"

From robotica.unileon.es
Jump to: navigation, search
(Dynamic window algorithm)
Line 131: Line 131:
  
 
ongoing
 
ongoing
 +
 +
 +
==Convert sensor_msgs/Range to sensor_msgs/LaserScan message==
 +
 +
 +
==Stop and resume actual navigation in ROS navigation stack==
 +
 +
 +
==Goals correction for navigation stack==

Revision as of 23:22, 26 February 2014

  • Project name: Turtlebot robot indoor navigation
  • Dates: July 2013 -
  • Degree: Summer Research Residence
  • Authors: Ruben
  • Contact: runix404@gmail.com
  • 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 http://packages.ros.org/ros/ubuntu precise main" > /etc/apt/sources.list.d/ros-latest.list'

and setup the keys

wget http://packages.ros.org/ros.key -O - | sudo apt-key add -

Installation

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*

Navigation

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
   END

Experiments

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

Voronoi

ongoing

Graph SLAM

ongoing


Convert sensor_msgs/Range to sensor_msgs/LaserScan message

Stop and resume actual navigation in ROS navigation stack

Goals correction for navigation stack