# Vector Field Histogram

In robotics, Vector Field Histogram (VFH) is a real time motion planning algorithm proposed by Johann Borenstein and Yoram Koren in 1991. The VFH utilizes a statistical representation of the robot's environment through the so-called histogram grid, and therefore places great emphasis on dealing with uncertainty from sensor and modeling errors. Unlike other obstacle avoidance algorithms, VFH takes into account the dynamics and shape of the robot, and returns steering commands specific to the platform. While considered a local path planner, i.e., not designed for global path optimality, the VFH has been shown to produce near optimal paths.
The original VFH algorithm was based on previous work on Virtual Force Field, a local path-planning algorithm. VFH was updated in 1998 by Iwan Ulrich and Johann Borenstein, and renamed VFH+ (unofficially "Enhanced VFH"). The approach was updated again in 2000 by Ulrich and Borenstein, and was renamed VFH*. VFH is currently one of the most popular local planners used in mobile robotics, competing with the later developed dynamic window approach. Many robotic development tools and simulation environments contain built-in support for the VFH, such as in the Player Project.

## VFH

The Vector Field Histogram was developed with aims of being computationally efficient, robust, and insensitive to misreadings. In practice, the VFH algorithm has proven to be fast and reliable, especially when traversing densely-populated obstacle courses.
At the center of the VFH algorithm is the use of statistical representation of obstacles, through histogram grids (see also occupancy grid). Such representation is well suited for inaccurate sensor data, and accommodates fusion of multiple sensor readings.
The VFH algorithm contains three major components:
* Cartesian histogram grid: a two-dimensional Cartesian histogram grid is constructed with the robot's range sensors, such as a sonar or a laser rangefinder. The grid is continuously updated in real time.
* Polar histogram: a one-dimensional polar histogram is constructed by reducing the Cartesian histogram around the momentary location of the robot.
* Candidate valley: consecutive sectors with a polar obstacle density below threshold, known as candidate valleys, is selected based on the proximity to the target direction.
Once the center of the selected candidate direction is determined, orientation of the robot is steered to match. The speed of the robot is reduced when approaching obstacles head-on.

## VFH+

The VFH+ algorithm improvements include:
* Threshold hysteresis: a hysteresis increases the smoothness of the planned trajectory.
* Robot body size: robots of different sizes are taken into account, eliminating the need to manually adjust parameters via low-pass filters.
* Obstacle look-ahead: sectors that are blocked by obstacles are masked in VFH+, so that the steer angle is not directed into an obstacle.
* Cost function: a cost function was added to better characterize the performance of the algorithm, and also gives the possibility of switching between behaviours by changing the cost function or its parameters.

## VFH*

In August 2000, Iwan Ulrich and Johann Borenstein published a paper describing VFH*, claiming improvement upon the original VFH algorithms by explicitly dealing with the shortcomings of a local planning algorithm, in that global optimality is not ensured. In VFH*, the algorithm verifies the steering command produced by using the A* search algorithm to minimize the cost and heuristic functions. While simple in practice, it has been shown in experimental results that this look-ahead verification can successfully deal with problematic situations that the original VFH and VFH+ cannot handle (the resulting trajectory is fast and smooth, with no significant slow down in presence of obstacles).