一、VFH
向量场直方图算法,是一种由人工势场法改进而来的机器人导航算法。
算法会计算各个方向的行进代价,该方向的障碍越多,代价越高,并且会累加该方向不同距离的障碍物。
二、仿真
turtlebot_gazebo
clear all;close all;clear;
laserSub = rossubscriber('/scan');
[velPub, velMsg] = rospublisher('/mobile_base/commands/velocity');
vfh = controllerVFH;
vfh.UseLidarScan = true;
vfh.DistanceLimits = [0.05 1];
vfh.RobotRadius = 0.1;
vfh.MinTurningRadius = 0.2;
vfh.SafetyDistance = 0.1;
targetDir = 0;
rate = rateControl(10);
while rate.TotalElapsedTime < 30
% 雷达数据
laserScan = receive(laserSub);
ranges = double(laserScan.Ranges);
angles = double(laserScan.readScanAngles);
% 视野内物体
scan = lidarScan(ranges,angles);
%VFH计算物体角度
steerDir = vfh(scan, targetDir);
% 速度
if ~isnan(steerDir) % If steering direction is valid
desiredV = 0.2;
w = exampleHelperComputeAngularVelocity(steerDir, 1);
else % 机器人思考
desiredV = 0.0;
w = 0.5;
end
% 速度
velMsg.Linear.X = desiredV;
velMsg.Angular.Z = w;
velPub.send(velMsg);
end