Vector Field Histogram
Avoid obstacles using vector field histogram
Libraries:
Navigation Toolbox /
Control Algorithms
Description
The Vector Field Histogram (VFH) block enables your vehicle to avoid obstacles based on range sensor data. Given a range sensor reading in terms of ranges and angles, and a target direction to drive toward, the VFH controller computes an obstacle-free steering direction.
For more information on the algorithm details, see Vector Field Histogram under Algorithms.
Examples
Path Following with Obstacle Avoidance in Simulink®
Use Simulink to avoid obstacles while following a path for a differential drive robot. This example uses ROS to send and receive information from a MATLAB®-based simulator. You can replace the simulator with other ROS-based simulators such as Gazebo®.
Limitations
The
Ranges
andAngles
inputs are limited to 4000 elements when generating code for models that use this block.
Ports
Input
Ranges — Range values from scan data
vector of scalars
Range values from scan data, specified as a vector of scalars in meters. These range values are distances from a sensor at specified angles. The vector must be the same length as the corresponding Angles vector.
Angles — Angle values from scan data
vector of scalars
Angle values from scan data, specified as a vector of scalars in radians. These angle values are the specific angles of the specified ranges. The vector must be the same length as the corresponding Ranges vector.
TargetDir — Target direction for vehicle
scalar
Target direction for the vehicle, specified as a scalar in radians. The forward direction of the vehicle is considered zero radians, with positive angles measured counterclockwise. You can use the TargetDir output from the Pure Pursuit block when generating controls from a set of waypoints.
Output
SteerDir — Steering direction for vehicle
scalar
Steering direction for the vehicle, specified as a scalar in radians. This obstacle-free direction is calculated based on the VFH+ algorithm. The forward direction of the vehicle is considered zero radians, with positive angles measured counterclockwise.
Parameters
Number of angular sectors — Number of bins used to create the histograms
180
(default) | scalar
Number of bins used to create the histograms, specified as a scalar. This parameter is nontunable. You can set this parameter only when the object is initialized.
Range distance limits (m) — Limits for range readings
[0.05 2]
(default) | two-element vector of scalars
Limits for range readings in meters, specified as a two-element vector of scalars. The range readings input are only considered if they fall within the distance limits. Use the lower distance limit to ignore false positives from poor sensor performance at lower ranges. Use the upper limit to ignore obstacles that are too far away from the vehicle.
Histogram thresholds — Thresholds for computing binary histogram
[3 10]
(default) | two-element vector of scalars
Thresholds for computing binary histogram, specified as a two-element vector of scalars. The algorithm uses these thresholds to compute the binary histogram from the polar obstacle density. Polar obstacle density values higher than the upper threshold are represented as occupied space (1) in the binary histogram. Values smaller than the lower threshold are represented as free space (0). Values that fall between the limits are set to the values of a previous computed binary histogram if one exists from previous iterations. If a previous histogram does not exist, the value is set as free space (0).
vehicle radius (m) — Radius of the vehicle
0.1
(default) | scalar
Radius of the vehicle, specified as a scalar in meters. This dimension defines the smallest circle that can circumscribe your vehicle. The vehicle radius is used to account for vehicle size when computing the obstacle-free direction.
Safety distance (m) — Safety distance around the vehicle
0.1
(default) | scalar
Safety distance left around the vehicle position in addiction to vehicle radius, specified as a scalar in meters. The vehicle radius and safety distance are used to compute the obstacle-free direction.
Minimum turning radius (m) — Minimum turning radius at current speed
0.1
(default) | scalar
Minimum turning radius for the vehicle moving at its current speed, specified as a scalar in meters.
Simulate using — Specify type of simulation to run
Code generation
(default) | Interpreted execution
Code generation
— Simulate model using generated C code. The first time you run a simulation, Simulink® generates C code for the block. The C code is reused for subsequent simulations, as long as the model does not change. This option requires additional startup time but the speed of the subsequent simulations is comparable toInterpreted execution
.Interpreted execution
— Simulate model using the MATLAB® interpreter. This option shortens startup time but has a slower simulation speed thanCode generation
. In this mode, you can debug the source code of the block.
Tunable: No
Target direction weight — Cost function weight for target direction
5
(default) | scalar
Cost function weight for moving toward the target direction, specified as
a scalar. To follow a target direction, set this weight to be higher than
the sum of Current direction weight and
Previous direction weight. To ignore the target
direction cost, set this weight to 0
.
Current direction weight — Cost function weight for current direction
2
(default) | scalar
Cost function weight for moving the vehicle in the current heading
direction, specified as a scalar. Higher values of this weight produce
efficient paths. To ignore the current direction cost, set this weight to
0
.
Previous direction weight — Cost function weight for previous direction
2
(default) | scalar
Cost function weight for moving in the previously selected steering
direction, specified as a scalar. Higher values of this weight produce
smoother paths. To ignore the previous direction cost, set this weight to
0
.
Algorithms
Vector Field Histogram
The block uses the VFH+ algorithm to compute the obstacle-free direction. First, the algorithm takes the ranges and angles from range sensor data and builds a polar histogram for obstacle locations. Then, it uses the input histogram thresholds 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 algorithm 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 block for your own application and environment, you must tune the algorithm
parameters. Parameter values depend on the type of vehicle, the range sensor, and
the hardware you use. For more information on the VFH algorithm, see controllerVFH
.
Extended Capabilities
C/C++ Code Generation
Generate C and C++ code using Simulink® Coder™.
Version History
Introduced in R2019b
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)
Asia Pacific
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 日本Japanese (日本語)
- 한국Korean (한국어)