Difference between revisions of "Ruben-RV-ROS01"
(→Dynamic window algorithm) |
(→Dynamic window algorithm) |
||
Line 88: | Line 88: | ||
BEGIN DWA(robotPose,robotGoal,robotModel) | 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 | + | END |
=== Experiments === | === Experiments === |
Revision as of 15:09, 13 October 2013
- 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
Contents
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*
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