Mailing lists


Old news
Old stuff


The vfh driver implements the Vector Field Histogram Plus local navigation method by Ulrich and Borenstein. VFH+ provides real-time obstacle avoidance and path following capabilities for mobile robots. Layered on top of a laser-equipped robot, vfh works great as a local navigation system (for global navigation, you can layer the wavefront driver on top of vfh).

The primary parameters to tweak to get reliable performance are safety_dist and free_space_cutoff. In general, safety_dist determines how close the robot will come to an obstacle while turning (around a corner for instance) and free_space_cutoff determines how close a robot will get to an obstacle in the direction of motion before turning to avoid. From experience, it is recommeded that max_turnrate should be at least 15% of max_speed.

To get initiated to VFH, I recommend starting with the default values for all parameters and experimentally adjusting safety_dist and free_space_cutoff to get a feeling for how the parameters affect performance. Once comfortable, increase max_speed and max_turnrate. Unless you are familiar with the VFH algorithm, I don't recommend deviating from the default values for cell_size, window_diameter, or sector_angle.

Compile-time dependencies
  • none

  • position : accepts target poses, to which vfh will attempt to drive the robot. Also passes through the data from the underlying position device. All data and commands are in the odometric frame of the underlying device.

  • position : the underlying robot that will be controlled by vfh.

  • laser : the laser that will be used to avoid obstacles

Configuration requests

Configuration file options
  • cell_size (length)
    • Default: 0.1 m
    • Local occupancy map grid size
  • window_diameter (integer)
    • Default: 61
    • Dimensions of occupancy map (map consists of window_diameter X window_diameter cells).
  • sector_angle (integer)
    • Default: 5
    • Histogram angular resolution, in degrees.
  • safety_dist (length)
    • Default: 0.1 m
    • The minimum distance the robot is allowed to get to obstacles.
  • max_speed (length / sec)
    • Default: 0.2 m/sec
    • The maximum allowable speed of the robot.
  • max_acceleration (length / sec / sec)
    • Default: 0.2 m/sec/sec
    • The maximum allowable acceleration of the robot.
  • min_turnrate (angle / sec)
    • Default: 10 deg/sec
    • The minimum allowable turnrate of the robot.
  • max_turnrate (angle / sec)
    • Default: 40 deg/sec
    • The maximum allowable turnrate of the robot.
  • free_space_cutoff (float)
    • Default: 2000000.0
    • Unitless value. The higher the value, the closer the robot will get to obstacles before avoiding.
  • obs_cutoff (float)
    • Default: free_space_cutoff
    • ???
  • weight_desired_dir (float)
    • Default: 5.0
    • Bias for the robot to turn to move toward goal position.
  • weight_current_dir (float)
    • Default: 3.0
    • Bias for the robot to continue moving in current direction of travel.
  • distance_epsilon (length)
    • Default: 0.5 m
    • Planar distance from the target position that will be considered acceptable.
  • angle_epsilon (angle)
    • Default: 10 deg
    • Angular difference from target angle that will considered acceptable.

driver ( name "p2os" provides ["odometry::position:1"] port "/dev/ttyS0" ) driver ( name "sicklms200" provides ["laser:0"] port "/dev/ttyS1" ) driver ( name "vfh" requires ["position:1" "laser:0"] provides ["position:0"] safety_dist 0.10 distance_epsilon 0.3 angle_epsilon 5 )
Chris Jones, Brian Gerkey, Alex Brooks

Generated on Tue May 3 14:16:12 2005 for Player by doxygen 1.3.6