【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 编写不同版本可能略有差异。欢迎交流讨论

相关新闻

终极指南:使用Downr1n轻松实现iOS设备自由降级

终极指南:使用Downr1n轻松实现iOS设备自由降级

终极指南:使用Downr1n轻松实现iOS设备自由降级 【免费下载链接】downr1n downgrade tethered checkm8 idevices ios 14, 15. 项目地址: https://gitcode.com/gh_mirrors/do/downr1n 你是否曾因iOS系统更新后设备变慢而烦恼?或者需要特定系统版本来…

2026/7/19 18:34:01阅读更多 →
原来选IP广播企业有这么多门道,究竟哪家才好?

原来选IP广播企业有这么多门道,究竟哪家才好?

在选择IP广播企业时,很多人会发现其中门道不少。一个合适的IP广播企业能为校园、园区、政企等场景提供优质的广播系统,满足多样化的使用需求。那么,究竟哪家IP广播企业才好呢?接下来为你深入分析选择要点,并介绍重庆优…

2026/7/19 18:34:01阅读更多 →
将你的A3 PDF切成A4大小的!PaperSlice开源软件

将你的A3 PDF切成A4大小的!PaperSlice开源软件

更好的阅读体验,请阅读原文 PaperSlice 一个简单、高效、专业的 PDF 海报切分工具 将大型 PDF 页面自动切分为多个标准纸张大小,轻松打印超大海报、图纸和文档。 📌 什么是 PaperSlice? PaperSlice 是一款面向桌面用户的 PDF …

2026/7/19 18:34:01阅读更多 →
ngx_output_chain_get_buf

ngx_output_chain_get_buf

1 定义 ngx_output_chain_get_buf 函数 定义在 src/core/ngx_output_chain.cstatic ngx_int_t ngx_output_chain_get_buf(ngx_output_chain_ctx_t *ctx, off_t bsize) {size_t size;ngx_buf_t *b, *in;ngx_uint_t recycled;in ctx->in->buf;size ctx->buf…

2026/7/20 0:15:05阅读更多 →
互联网大厂常见Java面试题及答案汇总(2026持续更新)

互联网大厂常见Java面试题及答案汇总(2026持续更新)

金九银十即将来袭,又是一个跳槽的好季节,准备跳槽的同学都摩拳擦掌准备大面好几场,今天为大家准备了互联网面试必备的 1 到 5 年 Java 面试者都需要掌握的面试题,分别 JVM,并发编程,MySQL,Tomca…

2026/7/20 0:15:05阅读更多 →
python数据可视化技巧的100个练习 -- 31. 类别数据的点图

python数据可视化技巧的100个练习 -- 31. 类别数据的点图

重要性★★★☆☆ 难度★★☆☆☆ 你是一家零售公司的数据分析师。你的经理要求你可视化最近产品发布的客户满意度评级分布。评级是分类的,范围从“非常不满意”到“非常满意”。创建一个点图以显示每个评级类别的频率。使用 Python 进行数据处理和可视化。在代码中生成输入…

2026/7/20 0:13:05阅读更多 →
智能体走进物理世界,千里科技携舱驾协同成果亮相WAIC 2026

智能体走进物理世界,千里科技携舱驾协同成果亮相WAIC 2026

在2026世界人工智能大会(WAIC 2026)举办期间,千里科技董事长、阶跃星辰董事长印奇作为特邀嘉宾出席大会开幕式并在大会主论坛(上午场)发表主题演讲《当智能体进入物理世界》。在印奇看来,"智能体"…

2026/7/20 0:13:05阅读更多 →
商汤大装置发布“技术-生态-商业”闭环布局,共启“国产AI基础设施规模化商用元年”

商汤大装置发布“技术-生态-商业”闭环布局,共启“国产AI基础设施规模化商用元年”

7月18日,在WAIC 2026商汤科技 “基座大模型架构创新与生态合作论坛”上,商汤科技联合创始人、大装置事业群总裁杨帆发表《智变共生——加速AI基础设施持续升级》主题演讲,系统呈现了商汤大装置国产AI基础设施“技术-生态-商业”闭环布局&…

2026/7/20 0:13:05阅读更多 →
2026郑州美发学校避坑指南:拆解5种教学方式,谁在“流水线”谁在“真传技”?

2026郑州美发学校避坑指南:拆解5种教学方式,谁在“流水线”谁在“真传技”?

2026年想在郑州学美发,很多零基础学员最先搜索的问题就是:郑州美发学校哪家好?这个问题没有一个只看学校名字就能得出的答案。因为不同学校的课程方向、学习周期、教学方式和适合人群并不一样。有的更适合零基础,有的偏向发型师进修,还有的只做某一项短期技术培训。对于完全没…

2026/7/20 0:11:05阅读更多 →
Go语言静态资源打包方案对比与实践指南

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

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

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

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

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

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

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

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

2026/7/20 0:50:54阅读更多 →
2026 WAIC:努比亚二代“豆包手机”NaviX Ultra亮相,智能体验全面升级!

2026 WAIC:努比亚二代“豆包手机”NaviX Ultra亮相,智能体验全面升级!

7月18日智东西消息,在2026 WAIC期间,努比亚联合字节豆包打造的二代“豆包手机”努比亚NaviX Ultra首次亮相,相比一代有诸多升级。智能体手机理念中兴通讯终端事业部总裁、努比亚总裁倪飞表示,智能体手机要从人操作手机变为手机帮人…

2026/7/20 0:01:04阅读更多 →
努比亚NaviX Ultra亮相WAIC,智能体手机能否让用户生活更简单?

努比亚NaviX Ultra亮相WAIC,智能体手机能否让用户生活更简单?

努比亚NaviX Ultra:外观与功能双升级在2026 WAIC期间,首次亮相的努比亚NaviX Ultra吸引了众多目光。它是努比亚联合字节豆包打造的二代“豆包手机”,与一代努比亚M153相比,外观设计变化较大。其机身背部搭载横向排布的大尺寸影像模…

2026/7/20 0:01:04阅读更多 →
C# 将逗号分割的字符串转换为long,并添加到List<long>

C# 将逗号分割的字符串转换为long,并添加到List<long>

目录 方法1:使用Split和Convert.ToInt64 方法2:使用LINQ的Select和ToList 方法3:使用TryParse进行异常安全转换(推荐) 如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天…

2026/7/20 0:01:04阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/19 22:50:49阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/19 14:50:26阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/19 18:50:36阅读更多 →