无人机基础训练之三维地图定义与散点拟合插值附matlab代码

简介: 无人机基础训练之三维地图定义与散点拟合插值附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法       神经网络预测       雷达通信      无线传感器        电力系统

信号处理              图像处理               路径规划       元胞自动机        无人机

⛄ 内容介绍

三维路径规划所需的环境信息需要从地形模型中提取,良好的地形建模能有效提高路径规划效率;◆ 对于飞行环境中的较高的天然山体用指数函数来进行描述,数学模型可以表示为

⛄ 代码

clc

clear

close all


%% 初始化地形信息

mapRange = [100,100,100];           % 地图长、宽、高范围

N = 10;                             % 山峰个数

peaksInfo = struct;                 % 初始化山峰特征信息结构体

peaksInfo.center = [];              % 山峰中心

peaksInfo.range = [];               % 山峰区域

peaksInfo.height = [];              % 山峰高度

peaksInfo = repmat(peaksInfo,N,1);


%% 随机生成N个山峰的特征参数

for i = 1:N

   peaksInfo(i).center = [mapRange(1) * (rand*0.8+0.2), mapRange(2) * (rand*0.8+0.2)];

   peaksInfo(i).height = mapRange(3) * (rand*0.7+0.3);

   peaksInfo(i).range = mapRange*0.1*(rand*0.7+0.3);

end


%% 计算山峰曲面值

peaksData = [];

for x = 1:mapRange(1)

   for y = 1:mapRange(2)

       sum = 0;

       for k = 1:N

           h_i = peaksInfo(k).height;

           x_i = peaksInfo(k).center(1);

           y_i = peaksInfo(k).center(2);

           x_si = peaksInfo(k).range(1);

           y_si = peaksInfo(k).range(2);

           sum = sum + h_i * exp(-((x-x_i)/x_si)^2 - ((y-y_i)/y_si)^2);

       end

       peaksData(x,y) = sum;

   end

end


%% 构造曲面网格,用于后期MAP图插值判断三维路径是否与山峰交涉


% x列向量

x = [];

for i = 1:mapRange(1)

   x = [x; ones(mapRange(2),1) * i];

end


% y列向量

y = (1:mapRange(2))';

y = repmat(y,length(peaksData(:))/length(y),1);


% peaksData列向量

peaksData = reshape(peaksData,length(peaksData(:)),1);


% 构造X/Y/Z网格数据

[X,Y,Z] = griddata(x,y,peaksData,...

   linspace(min(x),max(x),100)',...

   linspace(min(y),max(y),100));


%% 画山峰曲面

surf(X,Y,Z)      % 画曲面图

shading flat     % 各小曲面之间不要网格



clc

clear

close all


%% 根据散点获得拟合曲线三维路径

x_seq = [0,1,2,3,4];

y_seq = [5,2,3,4,1];

z_seq = [3,4,5,2,0];


% 利用spline函数进行拟合插值

k = length(x_seq);

t_seq = linspace(0,1,k);

T_seq = linspace(0,1,100);

X_seq = spline(t_seq,x_seq,T_seq);

Y_seq = spline(t_seq,y_seq,T_seq);

Z_seq = spline(t_seq,z_seq,T_seq);


% 画拟合曲线图

figure

hold on

scatter3(x_seq, y_seq, z_seq, 100, 'bs','MarkerFaceColor','g')

plot3(X_seq, Y_seq, Z_seq, 'r','LineWidth',2)

grid on

title('散点拟合曲线')


%% 计算曲线的曲率、挠率

% 计算三阶导数

f = [X_seq; Y_seq; Z_seq];          % 表示函数

delta = 1 / length(X_seq);

f1 = gradient(f)./delta;            % 一阶导

f2 = gradient(f1)./delta;           % 二阶导

f3 = gradient(f2)./delta;           % 三阶导

f1 = f1';

f2 = f2';

f3 = f3';


% 曲率、挠率

v = cross(f1,f2,2);                % 一阶导与二阶导做外积

e = dot(f3,v,2);                   %(r',r'',r''')混合积

c = zeros(length(T_seq),1);        % 定义矩阵c储存一阶导二阶导叉乘模长,d储存一阶导模长

d = c;

for i = 1:length(f)

   c(i) = norm(v(i,:));             % 一阶导二阶导外积的模长

   d(i) = norm(f1(i,:));            % 一阶导模长

end

k = c./(d.^3);                     % 曲率

torsion = e./c.^2;                 % 挠率


%% 画图

% 曲率图

figure

plot(k, 'r','LineWidth',2)

title('曲率图')


% 挠率图

figure

plot(torsion, 'r','LineWidth',2)

title('挠率图')

⛄ 运行结果

⛄ 参考文献


⛳️ 代码获取关注我

❤️部分理论引用网络文献,若有侵权联系博主删除
❤️ 关注我领取海量matlab电子书和数学建模资料


相关文章
|
1月前
|
机器学习/深度学习 存储 算法
基于Actor-Critic(A2C)强化学习的四旋翼无人机飞行控制系统matlab仿真
基于Actor-Critic强化学习的四旋翼无人机飞行控制系统,通过构建策略网络和价值网络学习最优控制策略。MATLAB 2022a仿真结果显示,该方法在复杂环境中表现出色。核心代码包括加载训练好的模型、设置仿真参数、运行仿真并绘制结果图表。仿真操作步骤可参考配套视频。
58 0
|
4月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
216 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
|
4月前
|
存储 算法 搜索推荐
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
本文提供了2022年华为杯数学建模竞赛B题的详细方案和MATLAB代码实现,包括方形件组批优化问题和排样优化问题,以及相关数学模型的建立和求解方法。
139 3
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
|
4月前
|
数据采集 存储 移动开发
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
本文介绍了2023年五一杯数学建模竞赛B题的解题方法,详细阐述了如何通过数学建模和MATLAB编程来分析快递需求、预测运输数量、优化运输成本,并估计固定和非固定需求,提供了完整的建模方案和代码实现。
105 0
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
|
7月前
|
机器学习/深度学习 算法 安全
m基于Qlearning强化学习工具箱的网格地图路径规划和避障matlab仿真
MATLAB 2022a中实现了Q-Learning算法的仿真,展示了一种在动态环境中进行路线规划和避障的策略。Q-Learning是强化学习的无模型方法,通过学习动作价值函数Q(s,a)来优化智能体的行为。在路线问题中,状态表示智能体位置,动作包括移动方向。通过正负奖励机制,智能体学会避开障碍物并趋向目标。MATLAB代码创建了Q表,设置了学习率和ε-贪心策略,并训练智能体直至达到特定平均奖励阈值。
113 15
|
7月前
|
数据安全/隐私保护
耐震时程曲线,matlab代码,自定义反应谱与地震波,优化源代码,地震波耐震时程曲线
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
基于混合整数规划的微网储能电池容量规划(matlab代码)
基于混合整数规划的微网储能电池容量规划(matlab代码)
|
7月前
|
算法 调度
含多微网租赁共享储能的配电网博弈优化调度(含matlab代码)
含多微网租赁共享储能的配电网博弈优化调度(含matlab代码)
|
7月前
|
Serverless
基于Logistic函数的负荷需求响应(matlab代码)
基于Logistic函数的负荷需求响应(matlab代码)
|
7月前
|
供应链 算法
基于分布式优化的多产消者非合作博弈能量共享(Matlab代码)
基于分布式优化的多产消者非合作博弈能量共享(Matlab代码)