基于几何图形搭建障碍物地图的方法(MATLAB)

讲解一下,我的算法,基于几何图形搭建的障碍物地图的算法,一般使用在移动机器人路径规划或者地图构建的领域,算法是由matlab编写的,代码会提供下载链接,关于代码的讲解,现在开始。

1   基于几何图形搭建的障碍物地图的算法构建的障碍物图形如下图1所示:

                                           

                                                                                                图1

其中黑色线条围成的蓝色区域,即为障碍物区域,这些基本的几何图形构成了障碍物区域,本算法主要采用的是线性规划的原理构建的障碍物信息。如下所示,

                              

由这四条 直线构成的图形所围成的区域可以通过我写的Barrier函数完成障碍物区域的构建,你只需要先计算出构成你的障碍物图形的每一条边的直线方程即可,代码如下,

function  [numbarrier,quadrantBarrier] = Barrier( x,y,confine)
%构建障碍物区域
%输入参数
% x----x轴坐标
% y----y轴坐标
% confine----地图边界
% 输出参数
% orderBarrier----返回改点在第几象限
% numbarrier----该象限第几个障碍物,若numbarrier == 32代表到达地图边界,若numbarrier==0代表不在障碍物区域,numbarrier = 16,代表坐标轴
%%

quadrant = 0;
numbarrier = 0;
quadrantBarrier = 0;
%判断点在哪一个象限
if x >= 0 && y >= 0
    quadrant = 1;
elseif x < 0 && y > 0
    quadrant = 2;
elseif x < 0 && y < 0
    quadrant = 3;
else
    quadrant = 4;
end

switch (quadrant)
    case 1
        quadrantBarrier = 1; %第一象限
        if x <= 0||y <= 0
            numbarrier = 16;
        end
        if x >= confine || y >= confine
             numbarrier = 32; 
        end
        if x-2-y <= 0 && 0.5-y <= 0 && -x+2-y <= 0 && y-x-1 <= 0 && y-2.5 <= 0 && y+x-5 <= 0%第一象限障碍物区,这些方程即为构成该象限的障碍物区域方程,你需要在这里做变动定制成你的直线方程
            numbarrier = 1;%返回1表示在障碍物区域
        end

    case 2
        quadrantBarrier = 2; %第二象限
        if x >= 0||y <= 0
            numbarrier = 16;
        end
        if x <= -confine || y >= confine
             numbarrier = 32; 
        end
%%
% 对于组合图形 1 的描述
        if x+2.5-y <= 0 && -x-1.5-y <= 0 && y-x/3-13/6 <= 0
            numbarrier = 1;
        end
%         if y+x+1.5 <= 0 && x+4.5-y <= 0 && y-2*x-8.5 <= 0
%              numbarrier = 1;
%         end
        if -x-1.5-y <= 0 && y-2*x-8.5 <= 0 && y+x+0.5 <= 0 && x/3+13/6-y <= 0
             numbarrier = 1;
        end
%
    case 3
        quadrantBarrier = 3; %第三象限
        if x >= 0||y >= 0
            numbarrier = 16;
        end
        if x <= -confine || y <= -confine
             numbarrier = 32; 
        end
%%
% 对于组合图形 1 的描述        
        if x+1 <= 0 && -3.5-x <= 0 && y+1 <= 0 && -1.5-y <= 0
            numbarrier = 1;
        end
        if x+1.5 <= 0 && -3.5-x <= 0 && y+1.5 <= 0 && -2-y <= 0
            numbarrier = 1;
        end
        if x+1.5 <= 0 && -2.5-x <= 0 && y+2 <= 0 && -2.5-y <= 0 
             numbarrier = 1;
        end
%
    case 4
        quadrantBarrier = 4; %第四象限
        if x <= 0||y >= 0
            numbarrier = 16;
        end
        if x >= confine || y <= -confine
             numbarrier = 32; 
        end
        if 1.5*x-5-y <= 0 && -x-y <=0 && y+0.5 <=0
            numbarrier = 1;
        end
end

end

由以上算法可知,所有在numbarrier=1处的判断条件中的直线方程,你都因该改成你自己构建障碍物的方程。

2    障碍物区域搭建好了,还需要将该区域画出来

通过我写的drawMap函数,输入地图的边界就能画出第1节中的障碍物区域图,和图1的效果一样。代码如下所示,

function   drawMap(x_neg,x_pos,y_neg,y_pos)
%输入参数:
% x_neg----x轴负界
% x_pos----x轴正界
% y_neg----y轴负界
% y_pos----x轴正界

%画出y = 0曲线
x0_1 = x_neg:1:x_pos;
y0_1 = 0.*x0_1;
plot(x0_1,y0_1,'k--');

hold on;

%画出x = 0曲线
y0_2 = y_neg:1:y_pos;
x0_2 = 0.*y0_2;
plot(x0_2,y0_2,'k--');
hold on;

% scatter(0,0,'MarkerEdgeColor',[1 0 0],'MarkerFaceColor',[1 0 0], 'LineWidth',1);%画出(0,0)


%%
%绘制障碍物区域
syms x y

%描述障碍物不等式组
%第一象限
%%
%这也是一种画法,但是很诡异
% v1_1 = cat(6,x-2-y,0.5-y,-x+2-y,y-x-1,y-2.5,y+x-5);%全部化成<=0的不等式
% v1_1 = max(v1_1,[],6);
% contourf(x,y,-v1_1,[0,0]);
% colormap(display_color);
%%
[x1_1,y1_1] = solve(x-2-y == 0,0.5-y == 0,x,y);
[x1_2,y1_2] = solve(0.5-y == 0,-x+2-y == 0,x,y);
[x1_3,y1_3] = solve(-x+2-y == 0,y-x-1 == 0,x,y);
[x1_4,y1_4] = solve(y-x-1 == 0,y-2.5 == 0,x,y);
[x1_5,y1_5] = solve(y-2.5 == 0,y+x-5 == 0,x,y);
[x1_6,y1_6] = solve(x-2-y == 0,y+x-5 == 0,x,y);

plot(x1_1,y1_1,x1_2,y1_2,x1_3,y1_3,x1_4,y1_4,'-b',x1_5,y1_5,x1_6,y1_6,'-b');

X1_1 = [x1_1,x1_2,x1_3,x1_4,x1_5,x1_6,x1_1];
Y1_1 = [y1
### 回答1: 在matlab中随机生成障碍物地图需要以下步骤: 1. 定义地图大小和障碍物数量 首先,需要定义生成地图的大小和障碍物数量。这个可以根据实际需要设置。 2. 随机生成障碍物坐标 可以使用matlab中的rand函数生成0到1之间的随机数,然后乘上地图大小,得到障碍物地图上的位置。可以使用循环将多个障碍物放置在地图上。 3. 确定障碍物大小和形状 可以使用matlab中的rectangle函数、circle函数或polygon函数来生成不同形状和大小的障碍物。可以在随机生成障碍物坐标的循环中逐个生成障碍物。 4. 将障碍物添加到地图上 可以使用matlab中的imshow函数或imagesc函数将生成的障碍物地图输出显示出来。 需要注意的是障碍物的位置和形状生成过程中需要保证没有重叠和越界的情况。为了生成更加复杂的障碍物地图,还可以尝试使用其他生成算法和技术。 ### 回答2: Matlab 随机生成障碍物地图通常可以通过以下步骤实现: 1. 在一个二维平面内随机生成一定数量的,这些代表障碍物的位置。 2. 对于每个障碍物,可以随机生成其大小和形状。 3. 将所有障碍物和其大小、形状信息整合成障碍物列表。 4. 根据障碍物列表,可以把它们渲染在一个地图上,这样就得到了障碍物地图。 实现时需要注意的是,生成的障碍物应该要合理、真实地反映实际情况,避免出现过小或过大的障碍物,同时要考虑障碍物之间的遮挡关系,以免出现有些障碍物被其他障碍物遮挡住而无法被检测到的情况。 在实际应用中,也可以根据实际需求进一步对地图进行修正和优化,例如添加随机或定制的地形信息,或者应用一些形算法来优化障碍物地图的可行性和安全性。 ### 回答3: Matlab是一款非常强大的数学工具软件,非常适合进行数据理、建模、仿真和算法开发等方面的工作。在机器人领域中,Matlab也是广泛使用的工具之一。如果要在Matlab中随机生成障碍物地图,可以采用以下方法: 1. 定义地图大小和障碍物数量。首先需要定义地图的大小(比如200x200像素),以及障碍物的数量(比如50个)。 2. 随机生成障碍物坐标。通过Matlab的随机函数rand(),可以生成x和y坐标的随机数。注意坐标值应该在地图范围内,同时需要避免障碍物之间重合。 3. 绘制障碍物。使用Matlab的plot()函数,在相应的障碍物坐标绘制矩形或圆形,表示障碍物的位置和大小。 4. 可视化地图。使用Matlab的imshow()函数,显示生成的障碍物地图。在可视化时,可以使用不同的颜色区分障碍物和可行区域。 5. 调整障碍物大小和形状。如果需要生成不同大小和形状的障碍物,可以通过改变绘制形的线条属性(比如矩形的宽度和高度,圆形的半径),来实现障碍物的变化。 总的来说,通过Matlab的数学建模和可视化工具,可以快速生成随机的障碍物地图,并进行后续的机器人路径规划等工作。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值