【UAV】UAV Scenario 仿真教程:无人机飞行与激光雷达点云生成【含matlab代码】
UAV Scenario 仿真教程无人机飞行与激光雷达点云生成摘要在无人机自主算法开发中仿真环境是验证算法有效性的重要一环。MATLAB 的 UAV Toolbox 提供了uavScenario对象能够帮助我们快速搭建包含静态障碍物如建筑物和运动平台如无人机的 3D 场景并支持挂载多种传感器如 INS、GPS、激光雷达生成仿真数据。本文将基于官方示例一步步演示如何创建一个城市建筑场景让无人机沿预定轨迹飞行并通过机载激光雷达实时采集点云数据用于后续的建图或定位算法测试。1. 引言无人机仿真场景能够定义静态障碍物建筑、地面等和动态平台无人机支持全局坐标系下的轨迹定义和坐标系转换提供可视化功能便于观察飞行过程集成传感器模型生成逼真的感知数据。本教程将构建一个包含 11 栋建筑物的场景无人机搭载激光雷达沿预设路径飞行并同步采集点云。2. 创建 UAV 场景首先我们创建一个uavScenario对象指定更新频率和参考位置经纬高。% 创建 UAV 场景更新频率 2Hz参考位置 [75 -46 0]sceneuavScenario(UpdateRate2,ReferenceLocation[75-460]);添加一个地面平面颜色设为灰色。% 定义颜色color.Gray0.651*ones(1,3);color.Green[0.39220.83140.0745];color.Red[100];% 添加地面多边形范围 高度范围addMesh(scene,polygon,{[-250-150;200-150;200180;-250180],[-40]},color.Gray);3. 添加建筑物网格我们加载预定义的建筑物多边形数据buildingData.mat该文件包含了 11 组多边形顶点。利用addMesh函数以“多边形拉伸”方式生成三维建筑高度从 10 米到 30 米不等。load(buildingData.mat);% 逐个添加建筑每组多边形和高度范围addMesh(scene,polygon,{buildingData{1}(1:4,:),[030]},color.Green);addMesh(scene,polygon,{buildingData{2}(2:5,:),[030]},color.Green);addMesh(scene,polygon,{buildingData{3}(2:10,:),[030]},color.Green);addMesh(scene,polygon,{buildingData{4}(2:9,:),[030]},color.Green);addMesh(scene,polygon,{buildingData{5}(1:end-1,:),[030]},color.Green);addMesh(scene,polygon,{buildingData{6}(1:end-1,:),[015]},color.Green);addMesh(scene,polygon,{buildingData{7}(1:end-1,:),[030]},color.Green);addMesh(scene,polygon,{buildingData{8}(2:end-1,:),[010]},color.Green);addMesh(scene,polygon,{buildingData{9}(1:end-1,:),[015]},color.Green);addMesh(scene,polygon,{buildingData{10}(1:end-1,:),[030]},color.Green);addMesh(scene,polygon,{buildingData{11}(1:end-2,:),[030]},color.Green);使用show3D显示场景并调整坐标轴范围。show3D(scene);xlim([-250200]);ylim([-150180]);zlim([050]);运行后您将看到一个包含绿色建筑和灰色地面的三维场景。4. 定义无人机平台无人机平台uavPlatform是传感器的载体。我们使用 NED北-东-下参考系初始位置和姿态从飞行日志数据flightData.mat中加载。load(flightData.mat);% 创建平台指定参考系、初始位置和姿态欧拉角转四元数platuavPlatform(UAV,scene,...ReferenceFrameNED,...InitialPositionposition(:,:,1),...InitialOrientationeul2quat(orientation(:,:,1)));% 设置平台外观四旋翼模型红色并旋转180度使方向正确updateMesh(plat,quadrotor,{10},color.Red,[000],eul2quat([00pi]));注意position和orientation是从flightData.mat中读取的三维数组分别表示每个时刻的位置x,y,z和欧拉角roll,pitch,yaw。5. 安装激光雷达传感器在无人机上挂载一个激光雷达点云生成器uavLidarPointCloudGenerator并用uavSensor封装。安装位置相对于无人机机体坐标系为[0,0,-1]即无人机下方 1 米。% 创建激光雷达模型lidarmodeluavLidarPointCloudGenerator(...AzimuthResolution0.3324099,...ElevationLimits[-2020],...ElevationResolution1.25,...MaxRange90,...UpdateRate2,...HasOrganizedOutputtrue);% 挂载到平台lidaruavSensor(Lidar,plat,lidarmodel,MountingLocation[0,0,-1]);6. 沿预定轨迹飞行并采集点云现在我们让无人机按预定义的轨迹运动并在每个激光雷达更新时刻读取点云数据。为了可视化我们预先创建轨迹线图和点云散点图并利用数据源动态刷新。6.1 场景可视化与绘图初始化[ax,plotFrames]show3D(scene);xlim([-250200]);ylim([-150180]);zlim([050]);view([-11030]);axis equal;hold on;创建轨迹线白色和点云散点图青色。注意调整数据源属性以提高绘图效率。% 轨迹线trajplot3(nan,nan,nan,Color[111],LineWidth2);traj.XDataSourceposition(:,2,1:idx1);traj.YDataSourceposition(:,1,1:idx1);traj.ZDataSource-position(:,3,1:idx1);% 点云散点图colormap(jet);ptpointCloud(nan(1,1,3));scatterplotscatter3(nan,nan,nan,1,[0.30200.74510.9333],ParentplotFrames.UAV.Lidar);scatterplot.XDataSourcereshape(pt.Location(:,:,1),[],1);scatterplot.YDataSourcereshape(pt.Location(:,:,2),[],1);scatterplot.ZDataSourcereshape(pt.Location(:,:,3),[],1);scatterplot.CDataSourcereshape(pt.Location(:,:,3),[],1)-min(reshape(pt.Location(:,:,3),[],1));6.2 仿真循环初始化场景然后逐帧推进时间。每次读取激光雷达数据若更新成功则刷新可视化。setup(scene);foridx0:size(position,3)-1% 读取当前激光雷达数据[isupdated,lidarSampleTime,pt]read(lidar);ifisupdated% 快速更新场景视图show3D(scene,Time,lidarSampleTime,FastUpdatetrue,Parentax);% 刷新所有数据源refreshdata;drawnow limitrate;end% 推进仿真时间advance(scene);% 移动平台到下一个位置位置姿态move(plat,[position(:,:,idx1),zeros(1,6),eul2quat(orientation(:,:,idx1)),zeros(1,3)]);% 更新所有传感器updateSensors(scene);endhold off;在此循环中move函数的参数向量包含位置3个、速度3个、角速度3个、四元数4个、加速度3个等此处我们仅指定位置和姿态其余置零。7. 运行结果与可视化仿真过程中您将看到无人机在建筑群间飞行同时激光雷达实时扫描周围环境生成的点云以彩色散点图形式显示在场景中颜色代表高度。轨迹线则记录飞行路径。实际运行时会动态更新8. 总结本教程演示了如何使用 MATLAB UAV Toolbox 构建一个包含建筑障碍物的三维场景让无人机沿预定轨迹飞行并挂载激光雷达采集点云数据。该框架可以轻松扩展至更多传感器如 GPS、IMU和更复杂的轨迹适用于 SLAM、路径规划、避障等算法的快速原型验证。参考资料MATLAB UAV Scenario 文档uavLidarPointCloudGenerator 文档完整代码整合如下您可以复制到 MATLAB 中直接运行% 创建场景sceneuavScenario(UpdateRate2,ReferenceLocation[75-460]);% 添加地面和颜色定义color.Gray0.651*ones(1,3);color.Green[0.39220.83140.0745];color.Red[100];addMesh(scene,polygon,{[-250-150;200-150;200180;-250180],[-40]},color.Gray);% 加载建筑数据load(buildingData.mat);addMesh(scene,polygon,{buildingData{1}(1:4,:),[030]},color.Green);addMesh(scene,polygon,{buildingData{2}(2:5,:),[030]},color.Green);addMesh(scene,polygon,{buildingData{3}(2:10,:),[030]},color.Green);addMesh(scene,polygon,{buildingData{4}(2:9,:),[030]},color.Green);addMesh(scene,polygon,{buildingData{5}(1:end-1,:),[030]},color.Green);addMesh(scene,polygon,{buildingData{6}(1:end-1,:),[015]},color.Green);addMesh(scene,polygon,{buildingData{7}(1:end-1,:),[030]},color.Green);addMesh(scene,polygon,{buildingData{8}(2:end-1,:),[010]},color.Green);addMesh(scene,polygon,{buildingData{9}(1:end-1,:),[015]},color.Green);addMesh(scene,polygon,{buildingData{10}(1:end-1,:),[030]},color.Green);addMesh(scene,polygon,{buildingData{11}(1:end-2,:),[030]},color.Green);% 显示场景show3D(scene);xlim([-250200]);ylim([-150180]);zlim([050]);% 加载飞行数据load(flightData.mat);% 创建无人机平台platuavPlatform(UAV,scene,ReferenceFrameNED,...InitialPositionposition(:,:,1),InitialOrientationeul2quat(orientation(:,:,1)));updateMesh(plat,quadrotor,{10},color.Red,[000],eul2quat([00pi]));% 创建激光雷达传感器lidarmodeluavLidarPointCloudGenerator(AzimuthResolution0.3324099,...ElevationLimits[-2020],ElevationResolution1.25,...MaxRange90,UpdateRate2,HasOrganizedOutputtrue);lidaruavSensor(Lidar,plat,lidarmodel,MountingLocation[0,0,-1]);% 可视化准备[ax,plotFrames]show3D(scene);xlim([-250200]);ylim([-150180]);zlim([050]);view([-11030]);axis equal;hold on;% 轨迹和点云绘图trajplot3(nan,nan,nan,Color[111],LineWidth2);traj.XDataSourceposition(:,2,1:idx1);traj.YDataSourceposition(:,1,1:idx1);traj.ZDataSource-position(:,3,1:idx1);colormap(jet);ptpointCloud(nan(1,1,3));scatterplotscatter3(nan,nan,nan,1,[0.30200.74510.9333],ParentplotFrames.UAV.Lidar);scatterplot.XDataSourcereshape(pt.Location(:,:,1),[],1);scatterplot.YDataSourcereshape(pt.Location(:,:,2),[],1);scatterplot.ZDataSourcereshape(pt.Location(:,:,3),[],1);scatterplot.CDataSourcereshape(pt.Location(:,:,3),[],1)-min(reshape(pt.Location(:,:,3),[],1));% 仿真主循环setup(scene);foridx0:size(position,3)-1[isupdated,lidarSampleTime,pt]read(lidar);ifisupdatedshow3D(scene,Time,lidarSampleTime,FastUpdatetrue,Parentax);refreshdata;drawnow limitrate;endadvance(scene);move(plat,[position(:,:,idx1),zeros(1,6),eul2quat(orientation(:,:,idx1)),zeros(1,3)]);updateSensors(scene);endhold off;本博客基于 MATLAB R2024a 编写不同版本可能略有差异。欢迎交流讨论

相关新闻

推荐2款不错的安卓实用工具,绝对是神器!

推荐2款不错的安卓实用工具,绝对是神器!

聊一聊一直都在介绍电脑使用软件。很多人找我问有没有手机软件。也有,只不过手机软件没来得及写。今天给大家分享2款安卓手机下载APP。希望能帮到有需要的朋友。软件介绍1.B站视频番剧安卓下载器工具需要登陆,然后点击更新内容。里面有详细的教程&#x…

2026/7/24 3:21:26 阅读更多 →
如何用Python光学仿真解决复杂光子器件设计难题?RCWA项目完全解析

如何用Python光学仿真解决复杂光子器件设计难题?RCWA项目完全解析

如何用Python光学仿真解决复杂光子器件设计难题?RCWA项目完全解析 【免费下载链接】Rigorous-Coupled-Wave-Analysis modules for semi-analytic fourier series solutions for Maxwells equations. Includes transfer-matrix-method, plane-wave-expansion-method,…

2026/7/23 17:06:55 阅读更多 →
别再用笨办法复盘球赛了!我用AI工具,1小时搞定阿根廷vs西班牙的10篇爆款内容

别再用笨办法复盘球赛了!我用AI工具,1小时搞定阿根廷vs西班牙的10篇爆款内容

深夜看球是很多球迷的常态,尤其是当阿根廷与西班牙这样的顶级强队相遇时,那种紧张刺激的氛围让人根本舍不得眨眼。然而,兴奋过后往往伴随着巨大的失落感:比赛结束了,脑子里全是那些精彩的过人、精妙的配合和争议的判罚…

2026/7/23 17:30:55 阅读更多 →

最新新闻

小安派工:园区弱电工程规划方案,适配长期扩容使用需求

小安派工:园区弱电工程规划方案,适配长期扩容使用需求

一、园区弱电缺少扩容规划容易出现的常见问题很多园区弱电方案仅满足当期建设需求,管线、机房、主干链路按照当下点位数量设计。运营一段时间后,随着智慧安防、停车系统、物联网采集、企业办公网络、充电桩配套弱电陆续新增,原有资源逐步饱和…

2026/7/24 10:24:27 阅读更多 →
AI时代并行计算优化技术与实战解析

AI时代并行计算优化技术与实战解析

1. 并行计算在AI时代的核心价值当AlphaGo击败李世石的那一刻,很多人第一次真切感受到人工智能的威力。但少有人注意到,支撑这场胜利的不仅是算法创新,更是背后庞大的计算集群——1920个CPU和280个GPU的并行计算能力。这揭示了一个关键事实&am…

2026/7/24 10:24:27 阅读更多 →
汽车HUD系统电源与照明控制:TPS99000S-Q1集成方案深度解析

汽车HUD系统电源与照明控制:TPS99000S-Q1集成方案深度解析

1. 项目概述:为什么汽车HUD需要一个“全能管家”? 在汽车座舱电子领域,尤其是抬头显示(HUD)和数字仪表盘这类直接关乎驾驶安全与体验的系统里,工程师们面临的核心挑战从来不只是“把图像投出来”那么简单。…

2026/7/24 10:24:27 阅读更多 →
AI大模型为什么开始跑到边缘设备上?——本地大模型部署正在成为新的行业趋势

AI大模型为什么开始跑到边缘设备上?——本地大模型部署正在成为新的行业趋势

这两年,如果要评选AI行业最热门的关键词,“大模型”一定榜上有名。从 ChatGPT 到 DeepSeek,再到 Qwen、Gemma、MiniCPM 等各种轻量化模型,大模型的发展速度远远超出了很多人的预期。但如果你仔细观察,会发现 AI 行业正…

2026/7/24 10:24:27 阅读更多 →
小安派工:商场弱电桥架安装,水平与垂直走向施工规范

小安派工:商场弱电桥架安装,水平与垂直走向施工规范

一、商场弱电桥架施工场景特点商场包含商铺弱电、公共广播、监控安防、WiFi覆盖、客流统计、大屏显示等多个系统,桥架多集中于吊顶夹层、设备竖井、走廊通道,存在机电、消防、暖通多管线交叉叠加的情况。相较于普通建筑,商场对桥架平整度、走…

2026/7/24 10:24:27 阅读更多 →
数据中心备用发电机自动切换原理与运维实践详解

数据中心备用发电机自动切换原理与运维实践详解

数据中心备用发电机转向主供电源:完整切换流程与运维实践 在数据中心运维中,电力供应的稳定性直接关系到业务连续性。当市电出现故障时,备用发电机自动切换承担主供电源角色是保障业务不中断的关键环节。本文将详细解析备用发电机转向主供电源…

2026/7/24 10:23:27 阅读更多 →

日新闻

用Highcharts 创建可拖拽三维散点立方体3D图表

用Highcharts 创建可拖拽三维散点立方体3D图表

该案例基于Highcharts scatter3d 三维散点图实现空间立方体散点可视化,核心特色:三维 X/Y/Z 三轴空间,所有散点分布在 0~10 立方体空间内;散点使用径向渐变实现立体 3D 圆球质感;支持鼠标 / 触屏拖拽画布,…

2026/7/24 0:00:29 阅读更多 →
AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口 AppCertDlls 位于 HKLM\System\CurrentControlSet\Control\Session Manager\AppCertDlls。本文的程序功能是只读列出这个键在 64 位和 32 位注册表视图中的全部值,并显示每条值的来源、名称、类型和可安全显示的数…

2026/7/24 0:00:29 阅读更多 →
我的编程之路:第一篇博客

我的编程之路:第一篇博客

大家好,我是一名编程初学者,同时这也是我编程学习之路上的第一篇博客。在这里,我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手,目前在学习c语言,我对编程世界充满了强烈的好奇。当然&…

2026/7/24 0:00:29 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/24 3:59:20 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/24 1:23:39 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 17:49:47 阅读更多 →

月新闻