INTRODUCTION
Overview
Download and Install
Quick Start
Documentation
Publications

NONFRAMEWORK CODE
Driver Interfaces
Drivers
Libraries
Utilities

FRAMEWORK CODE
Interfaces
Components
Libraries
Utilities

Full Software Listings

DEVELOPER
Tutorials
Examples
Dev Guide
Dashboard

PEOPLE
Contributors
Users

SourceForge.net Logo
Project
Download
Mailing lists

 

         

libOrcaVfh
[Libraries]

VFH driver for LocalNav. More...

VFH driver for LocalNav.

The VFH driver implements the Vector Field Histogram Plus (VFH+) local navigation method by Ulrich and Borenstein. VFH+ provides real-time obstacle avoidance and waypoint-following capabilities for mobile robots.

LocalNav Configuration
  • LocalNav.Config.Driver (string)
    • Which local nav algorithm to use
    • Valid values: { "vfhdriver" }
    • Default: "vfhdriver"
VFH configuration

VFH Has lots of parameters. See the next section for hints on configuration.

Some important configuration parameters:

  • LocalNav.Config.Vfh.SafetyDist0ms (double) [m]
    • the distance the robot should keep from obstacles when travelling at 0 m/s.
  • LocalNav.Config.Vfh.SafetyDist1ms (double) [m]
    • the distance the robot should keep from obstacles when travelling at 1 m/s.
  • LocalNav.Config.Vfh.FreeSpaceCutoff0ms (double) [m]
    • Controls how close the robot has to be to an obstacle to be afraid of it, when travelling at 0 m/s. A small value makes the robot cautious, a large value makes it brave.
  • LocalNav.Config.Vfh.FreeSpaceCutoff1ms (double) [m]
    • See FreeSpaceCutoff0ms. The value used scales linearly with speed.
  • LocalNav.Config.Vfh.ObsCutoff0ms (double) [m]
    • Setting this differently to FreeSpaceCutoff0ms causes VFH to use some hysteresis in deciding what an obstacle is. For laser range-finders, setting it to FreeSpaceCutoff0ms seems to work just fine.
  • LocalNav.Config.Vfh.ObsCutoff1ms (double) [m]
    • see ObsCutoff0ms
  • LocalNav.Config.Vfh.WeightDesiredDir (double)
    • To force it to commit, VFH is provided with a built-in tendency to stick to its previous course of action. WeightDesiredDir and WeightCurrentDir determine the strength of this tendency.
  • LocalNav.Config.Vfh.WeightCurrentDir (double)
    • see WeightDesiredDir
  • LocalNav.Config.Vfh.CellSize (double) [m]
    • VFH builds a small local Occupancy Grid map for obstacle detection. This controls the width of each occupancy grid cell.
  • LocalNav.Config.Vfh.GridWidthInCells (int)
    • This parameter, together with CellSize, determine the size of the local occupancy grid.
  • LocalNav.Config.Vfh.GridWidthInCells (int)
    • The number of bins in VFH's local histogram.
  • LocalNav.Config.Vfh.MaxAcceleration (double) [m/s2]
    • maximum acceleration
  • LocalNav.Config.Vfh.MaxTurnrate0ms (double) [deg/s]
    • maximum turnrate at 0 m/s.
  • LocalNav.Config.Vfh.MaxTurnrate1ms (double) [deg/s]
    • maximum turnrate at 1m/s.
  • LocalNav.Config.Vfh.AbsoluteMaxTurnrate (double) [deg/s]
    • this is for safety. We'll never turn faster than this.
  • LocalNav.Config.Vfh.MinTurnRadiusSafetyFactor (double)
    • MinTurnRadius is calculated for the current speed and max turnrate. It is then multiplied by minTurnRadiusSafetyFactor, to account for side-slip while cornering quickly.
    • default 1.10

For the next three speed arguments: These are the absolute max values that VFH will use. Setting a path with a long time between waypoints will cause VFH to go slower.

  • LocalNav.Config.Vfh.MaxSpeed (double) [m/s]
    • the robot's maximum speed -- it will never try to go faster than this.
  • LocalNav.Config.Vfh.MaxSpeedNarrowOpening (double) [m/s]
    • Max speed while travelling through a narrow opening (defined as an opening of less than 80degrees). This is thresholded if the max_speed is decreased at run-time.
  • LocalNav.Config.Vfh.MaxSpeedWideOpening (double) [m/s]
    • Max speed while travelling along the border of an obstacle, when the opening is greater than 80 degrees. This is thresholded if the max_speed is decreased at run-time.
Hints for Configuration

(some of this is taken from the Player VFH documentation):

To get initiated with VFH, a good idea is to start with the default values, which are all pretty reasonable. Then start experimenting with safetyDist[0|1]ms and FreeSpaceCutoff[0|1]ms (and ObsCutoff[0|1]ms), to get a feeling for how they affect performance. Once comfortable, make the speed-controlling parameters more aggressive. In general, SafetySist determines how close the robot will come to an obstacle while turning (around a corner for instance). Setting this too low causes the robot to clip obstacles, while setting it too conservatively stops the robot getting through gaps like doorways. FreeSpaceCutoff determines how close a robot will get to an obstacle in the direction of motion before turning to avoid.

For 'slow' robots (like Pioneers), MaxSpeedNarrowOpening and MaxSpeedWideOpening can be set to MaxSpeed. The 0ms and 1ms variables can also be set to the same values as each other. From experience, it is recommeded that MaxTurnrate[0|1]ms should be at least 15% of MaxSpeed.

For 'fast' vehicles like Segways, firstly be aware that VFH control is potentially very dangerous: start conservatively and change things slowly. The speed-dependent parameters are much more important here: it helps to set the 0ms and 1ms variable differently. To control the dynamics, it's good to set MaxSpeedNarrowOpening very slow, and MaxSpeedWideOpening reasonably slow. This causes the robot to slow down generally near obstacles, so if it does collide it's less likely to be catastrophic. MaxTurnrate[0|1]ms is also important for controlling how aggressively the robot turns.

Unless you are familiar with the VFH algorithm, I don't recommend deviating from the default values for CellSize, WindowDiameter, or SectorAngle.

Notes and credits

The algorithm implemented here is described in this paper:

@inproceedings { 
  Ulrich98Reliable,
  Author = {Ulrich, I. and Borenstein, J.},
  Title = {VFH+: Reliable Obstacle Avoidance for Fast Mobile Robots},
  BookTitle = {IEEE International Conference on Robotics and Automation(ICRA '98)},
  Pages = {1572--1577},
  Year = {1998}
}

The code that implements the VFH algorithm was taken from Player, heavily modified, then re-submitted to the Player project.

Authors
  • LocalNav: Alex Brooks
  • VFH: Chris Jones, Brian Gerkey, Alex Brooks
 

Webmaster: Tobias Kaupp (tobasco at users.sourceforge.net)


Generated for Orca Robotics by  doxygen 1.4.5