• 大小: 4KB
    文件类型: .m
    金币: 2
    下载: 0 次
    发布日期: 2024-01-20
  • 语言: Matlab
  • 标签: 直线匹配  

资源简介

扫描当前环境特征,并实现环境信息的直线提取和匹配

资源截图

代码片段和文件信息

function RHT
clear all;
clc;
close all;

load ‘data.txt‘;
data = data;%(:2:end);

f = 0;      %失败累加器
Tf = 1000;   %最大失败次数,若f>Tf,则程序结束
Td = 0.03;    %距离门限,若点到直线距离dTp = 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

评论

共有 条评论