深蓝路径规划作业-第六章

作业要求:

在matlab中,写一个走廊约束的分段贝塞尔曲线生成。

•给出了贝塞尔到单项多项式之间的转换。

•该走廊已被预定义。

•只需要限制自己的位置。

作业结果:

一、边界条件:

设置地图和分段数,设置五个正方形区域的走廊,每个分为八段(即是7阶多项式)

path = [50, 50;
       100, 120;
       180, 150;
       250, 80;
       280, 0];             % 飞行走廊中各个矩形区域的中心点
x_length = 100;
y_length = 100;

首尾条件: 其起始坐标为[50,50],终止坐标为[280,0]。

生成飞行走廊:

%% 显示规划出的轨迹和相应的飞行走廊
plot(path(:,1), path(:,2), '*r'); hold on;
for i = 1:n_seg
    plot_rect([corridor(1,i);corridor(2,i)], corridor(3, i), corridor(4,i));hold on;
end
hold on;
x_pos = [];y_pos = [];
idx = 1;
function plot_rect(center, x_r, y_r)
    p1 = center+[-x_r;-y_r];
    p2 = center+[-x_r;y_r];
    p3 = center+[x_r;y_r];
    p4 = center+[x_r;-y_r];
    plot_line(p1,p2);
    plot_line(p2,p3);
    plot_line(p3,p4);
    plot_line(p4,p1);
end

function plot_line(p1,p2)
    a = [p1(:),p2(:)];    
    plot(a(1,:),a(2,:),'b'

给每段轨迹设置固定时间为1

%% 定义每一段的时间,这里简单的将每段的时间都设置为1
ts = zeros(n_seg, 1);
for i = 1:n_seg
    ts(i,1) = 1;
end

调用minisnap函数解出多项式系数

% 获取x和y方向的多项式系数
poly_coef_x = MinimumSnapCorridorBezierSolver(1, path(:, 1), corridor, ts, n_seg, n_order, v_max, a_max);
poly_coef_y = MinimumSnapCorridorBezierSolver(2, path(:, 2), corridor, ts, n_seg, n_order, v_max, a_max);

显示规划出的轨迹和相应的飞行走廊

plot(path(:,1), path(:,2), '*r'); hold on;
for i = 1:n_seg
    plot_rect([corridor(1,i);corridor(2,i)], corridor(3, i), corridor(4,i));hold on;
end
hold on;
x_pos = [];y_pos = [];
idx = 1;

 绘制相应的贝塞尔曲线

%% #####################################################
% STEP 4: 绘制相应的贝塞尔曲线
for k = 1:n_seg
    for t = 0:0.01:1
        x_pos(idx) = 0.0;
        y_pos(idx) = 0.0;
        for i = 0:n_order
            basis_p = nchoosek(n_order, i) * t^i * (1-t)^(n_order-i);   % 此处的nchoosek对应于C_n_i
             x_pos(idx) = x_pos(idx) + poly_coef_x((k-1)*(n_order + 1) + i + 1) * basis_p * ts(k) ;
             y_pos(idx) = y_pos(idx) + poly_coef_y((k-1)*(n_order + 1) + i + 1) * basis_p * ts(k) ;
        end
        idx = idx + 1;
    end
end
scatter(ts(1)*poly_coef_x(1:8),ts(1)*poly_coef_y(1:8),100,"r");
scatter(ts(2)*poly_coef_x(9:16),ts(2)*poly_coef_y(9:16),100,"g");
scatter(ts(3)*poly_coef_x(17:24),ts(3)*poly_coef_y(17:24),100,"b");
scatter(ts(4)*poly_coef_x(25:32),ts(4)*poly_coef_y(25:32),100,"c");
scatter(ts(5)*poly_coef_x(33:40),ts(5)*poly_coef_y(33:40),100,"m");
plot(x_pos',y_pos',"Linewidth",2.0,"color","k");

% 求解贝塞尔多项式系数
function poly_coef = MinimumSnapCorridorBezierSolver(axis, waypoints, corridor, ts, n_seg, n_order, v_max, a_max)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值