【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/19 18:36:09 阅读更多 →
如何用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/19 18:35:08 阅读更多 →
别再用笨办法复盘球赛了!我用AI工具,1小时搞定阿根廷vs西班牙的10篇爆款内容

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

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

2026/7/19 18:35:08 阅读更多 →

最新新闻

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

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

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

2026/7/20 0:15:40 阅读更多 →
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:13:39 阅读更多 →
python数据可视化技巧的100个练习 -- 31. 类别数据的点图

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

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

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

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

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

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

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

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

2026/7/20 0:12:39 阅读更多 →
2026年具身智能领域代表性机器人产品观察:普渡一脑多形底座与实景落地解析

2026年具身智能领域代表性机器人产品观察:普渡一脑多形底座与实景落地解析

前言2026年被行业视为具身智能从"实验室炫技"走向"规模化量产"的关键拐点。据弗若斯特沙利文《全球商用服务机器人市场研究报告》,普渡科技以23%市占率位居全球商用服务机器人第一,业务覆盖85+个国家和地区,累…

2026/7/20 0:11:39 阅读更多 →

日新闻

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

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

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

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

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

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

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

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

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

2026/7/20 0:00:34 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/7/19 0:00:40 阅读更多 →

月新闻