资源简介
扫描当前环境特征,并实现环境信息的直线提取和匹配
代码片段和文件信息
function RHT
clear all;
clc;
close all;
load ‘data.txt‘;
data = data;%(:2:end);
f = 0; %失败累加器
Tf = 1000; %最大失败次数,若f>Tf,则程序结束
Td = 0.03; %距离门限,若点到直线距离d Tp = 15; %峰值门限,若S>Tp,则该直线是一条确定的直线
G = 0; %直线数量
[mn] = size(data);
coor = struct(‘x‘[]‘y‘[]);
for i=1:m;%数据处理,转化为坐标形式
for j=1:n;
if data(ij) >8000;
data(ij) = 0;
end
coor(i).x(j) = data(ij)*cos((j-1)*pi/360)/1000;
coor(i).y(j) = data(ij)*sin((j-1)*pi/360)/1000;
end
end
%subplot(211);
%plot(00‘--rs‘‘LineWidth‘2‘MarkerEdgeColor‘‘k‘‘MarkerFaceColor‘‘k‘‘MarkerSize‘5);hold on;
%plot(coor(1).xcoor(1).y‘k.‘);hold on;axis([-6 2 -1 3]);ylabel(‘y/m‘);grid on;
%title(‘激光数据图‘);
B = [];
%subplot(212);xlabel(‘x/m‘);ylabel(‘y/m‘);
for i=1:m;%取一组激光数据
plot(coor(i).xcoor(i).y‘g.‘);hold on;%绘制一组激光数据的地图
plot(00‘--rs‘‘LineWidth‘2‘MarkerEdgeColor‘‘k‘‘MarkerFaceColor‘‘k‘‘MarkerSize‘5);hold on;
k = 1;
while fTf,则程序结束
randnum = ceil(rand(13)*length(coor(i).x));
v = [coor(i).x(randnum);coor(i).y(randnum)]‘;
aa = (v(22)-v(12))/(v(21)-v(11));
bb = (v(21)*v(12)-v(11)*v(22))/(v(21)-v(11));
d = abs(v(32)-aa*v(31)-bb)/sqrt(aa^2+1);
if d S = 0;
t = 1;
for j=1:length(coor(i).x);
d = abs(coor(i).y(j)-aa*coor(i).x(j)-bb)/sqrt(aa^2+1);
if d S = S+1;
shuju(t) = j;
t = t+1;
end
end
if S>Tp;%直线上点的个数大于Tp,则该直线存在
a(k) = aa;b(k) = bb;ttt=2;state1(1) = 1;
for tt=1:length(shuju)-1;
if norm([coor(i).x(shuju(tt))-coor(i).x(shuju(tt+1))c
评论
共有 条评论