controllerVFH
Avoid obstacles using vector field histogram
Description
The controllerVFH
      System object™ enables your vehicle to avoid obstacles based on range sensor data using vector
      field histograms (VFH). Given laser scan readings and a target direction to drive toward, the
      object computes an obstacle-free steering direction.
controllerVFH specifically uses the VFH+ algorithm to compute an
      obstacle-free direction. First, the algorithm takes the ranges and angles from laser scan data
      and builds a polar histogram for obstacle locations. Then, the input histogram thresholds are
      used to calculate a binary histogram that indicates occupied and free directions. Finally, the
      algorithm computes a masked histogram, which is computed from the binary histogram based on
      the minimum turning radius of the vehicle.
The algorithm selects multiple steering directions based on the open space and possible driving directions. A cost function, with weights corresponding to the previous, current, and target directions, calculates the cost of different possible directions. The object then returns an obstacle-free direction with minimal cost. Using the obstacle-free direction, you can input commands to move your vehicle in that direction.
To use this object for your own application and environment, you must tune the properties of the algorithm. Property values depend on the type of vehicle, the range sensor, and the hardware you use.
To find an obstacle-free steering direction:
- Create the - controllerVFHobject and set its properties.
- Call the object with arguments, as if it were a function. 
To learn more about how System objects work, see What Are System Objects?
Creation
Description
VFH = controllerVFHVFH+ algorithm.
VFH = controllerVFH(Name,Value)Name,Value pairs. Name is the property name and Value is the
          corresponding value. Name must appear inside single quotes (' '). You
          can specify several name-value pair arguments in any order as
            Name1,Value1,...,NameN,ValueN. Properties not specified retain their
          default values.
Properties
Usage
Description
steeringDir = vfh(scan,targetDir)lidarScan object,
            scan. A target direction is given based on the target
          location.
To enable this syntax, you must set the UseLidarScan property to
            true. For example:
mcl = monteCarloLocalization('UseLidarScan',true); ... [isUpdated,pose,covariance] = mcl(odomPose,scan);
steeringDir = vfh(ranges,angles,targetDir)ranges and
            angles.
Input Arguments
Output Arguments
Object Functions
To use an object function, specify the
      System object as the first input argument. For
      example, to release system resources of a System object named obj, use
      this syntax:
release(obj)
Examples
References
[1] Borenstein, J., and Y. Koren. "The Vector Field Histogram - Fast Obstacle Avoidance for Mobile Robots." IEEE Journal of Robotics and Automation. Vol. 7, Number 3, 1991, pp.278–88.
[2] Ulrich, I., and J. Borenstein. "VFH : Reliable Obstacle Avoidance for Fast Mobile Robots." Proceedings. 1998 IEEE International Conference on Robotics and Automation. (1998): 1572–1577.
