资讯动态

QGroundControl 3D View 完全指南:三维地图渲染、OSM 数据导入与 Gazebo 式相机控制

发布时间:2026/10/14 16:34:22 来源:尧图企业网站定制
无人机智能硬件【免费下载链接】qgroundcontrolCross-platform ground control station for drones (Android, iOS, Mac OS, Linux, Windows)项目地址https://gitcode.com/gh_mirrors/qg/qgroundcontrol点击查看免费下载QGroundControl 的 3D View 允许将飞行视图从平面地图升级为可交互的三维场景车辆、航线任务与地形建筑在同一视角中呈现。本篇基于当前仓库的文档与源码完整讲解 3D View 的启用方式、视图控制手势Gazebo 式相机模型、全部设置项含buildingLevelHeight、altitudeBias、keepSceneAlive的取值与底层实现以及 OSM 数据导入的完整数据链路读完后可在桌面端稳定使用并排错该功能。功能定位与能力边界3D View 用于在三维空间中可视化并监控车辆vehicle、环境、以及已规划的任务mission。与 Fly View 相比3D View 保留了绝大多数飞控能力同时把渲染载体从 2D 地图换成了 Qt Quick 3D 场景。核心用途导入并显示从 OpenStreetMap 网站下载的兴趣区域.osm文件的 3D 地图在 3D 中同时显示车辆及其任务航线继承 Fly View 的大部分能力包括运行自动飞行前检查单pre-flight checklist解锁arm车辆或检查其无法解锁的原因任务控制启动、继续、暂停、恢复引导车辆 解锁/上锁/紧急停止、起飞/降落、改变高度、返航RTL在地图视图与视频流视图之间切换如可用显示当前车辆的视频、任务、遥测等信息并在多台已连接车辆之间切换。两个重要限制文档原文声明整个 3D View 功能仍处于开发中使用过程中可能遇到各种问题Android 平台不可用——由于各 Android GPU 与驱动下渲染尚不可靠该功能被禁用。从源码看这一行为是强制的Viewer3DSettings构造函数在 Android 平台直接 调用setUserVisible(false)隐藏整个设置页工具条按钮也随之消失。启用 3D View 与界面结构3D View 默认关闭。启用路径为Settings → Fly View在3D View设置组中打开Enabled开关。进入 Fly View 后点击左侧工具条上的 3D View 图标即可切换到三维视图再次点击则切回 2D 地图视图。从源码看工具条按钮就是一个ToolStripActionViewer3DShowAction.qml按钮可见性绑定QGroundControl.settingsManager.viewer3DSettings.enabled.rawValue即设置未启用时按钮不显示点击时根据当前QGCViewer3DManager.displayMode在Map与View3D两种模式间切换图标与文案也随之变化3D 图标 / 3D View ↔ 纸飞机图标 / Fly。而三维场景本身是按需加载的FlyView.qml 中通过Loader监听displayModeChanged仅在进入View3D模式时才加载Viewer3DModel.qml场景。退出 3D 视图时是否销毁场景取决于keepSceneAlive设置后文详述这直接关系到内存占用。3D View 的主界面元素与 Fly View 相同只是底层换成了三维环境顶部还保留了与 Fly View 相同位置的比例尺scale bar用于显示屏幕上覆盖的地面距离。视图控制Gazebo 式相机手势模型3D View 的相机控制采用 Gazebo 式的地面点锚定ground-anchored手势模型所有手势都以光标或触点正下方的地面点为锚点因此在平移、环绕、缩放过程中你抓住的那个地面点始终停留在光标下方。鼠标操作操作手势行为平移Pan按住左键拖动抓取的地面点跟随光标移动环绕Orbit/旋转按住中键滚轮拖动绕光标下的地面点旋转。左右拖动改变航向拖动一个窗口宽度 360°上下拖动在正俯视与接近水平之间改变视角环绕触控板友好按住Shift 左键拖动为没有中键的触控板提供的替代环绕方式缩放Zoom滚轮/触控板滚动或按住右键上拖放大/下拖缩小向光标下的地面点靠近或远离该点在屏幕上保持不动触摸屏操作平移单指按住并移动缩放双指捏合手指靠近或分开旋转双指扭转场景绕手势下的地面点随手指转动倾斜Tilt双指并拢上下滑——上滑朝向地平线下滑朝向正俯视。比例尺显示在视图顶部紧邻工具条与 Fly View 相同的位置。需要注意在透视视图下屏幕各处比例不同比例尺显示的数值仅对屏幕中心所在的地面平面精确。源码中的相机姿态模型上述手势最终都汇聚到一个 C 相机控制器 Viewer3DCameraController。它用四个量完全描述相机位姿// 场景空间z 轴向上 // cameraPosition orbitCenter distance * (sin(tilt)sin(heading), // -sin(tilt)cos(heading), // cos(tilt)) // tilt 0 正俯视, tilt 90 水平。角度单位度 Q_PROPERTY(QVector3D orbitCenter ...) // 环绕中心地面锚点 Q_PROPERTY(qreal heading ...) // 航向角 Q_PROPERTY(qreal tilt ...) // 俯仰角 Q_PROPERTY(qreal distance ...) // 相机到锚点距离关键约束常量均为编译期常数kMinDistance 50、kMaxDistance 50000场景单位kMinTilt 0、kMaxTilt 85度不能真正贴地kDefaultDistance 1500、kDefaultFieldOfView 60。每个手势对应一组Q_INVOKABLE接口beginPan/panTo、beginOrbit/orbitTo、zoom/zoomBy双指捏合用比例缩放、rotateBy双指扭转、tiltBy双指竖直滑。其中_rotateAboutAnchor私有方法实现了刚体旋转后平移 orbitCenter 使锚点保持不动的数学核心。该行为有专门单元测试覆盖例如 Viewer3DCameraControllerTest.cc 用 800×600 视口验证了默认值、reset()与lookAt()的夹紧逻辑。而 QML 层的手势转发在 Viewer3DCameraControls.qmlDragHandler分别绑定左键平移、中键/Shift左键环绕、右键拖拽缩放每像素增益 3WheelHandler处理滚轮PinchHandler统一接管双指缩放/扭转/倾斜注释中解释了为何倾斜不用独立的双指 DragHandler——会与 PinchHandler 争抢独占 grab 导致手势随机失灵。无 OSM 地图时的默认视角若未加载.osm文件不会显示建筑但 3D View 仍会在车辆 home 位置为中心的地面贴块map-tile ground patch上显示车辆并默认以侧视角度展示。对应实现见 Viewer3DModel.qml 的_resetCameraForContent()地图已加载时reset()回默认俯视姿态未加载地图时调用lookAt(原点, 0, 75, 400)从侧面略高于地平线观察车辆俯视在无地形时看不出任何东西。设置项全解设置入口Application Settings → Fly View页签 →3D View设置组。设置组定义在 Viewer3D.SettingsGroup.jsonUI 布局定义在 Viewer3D.SettingsUI.json。设置项类型 / 取值默认值说明Enabledboolfalse启用/禁用 3D View关闭时场景立即退回 2D 地图3D Map FileosmFilePathstring*.osm空要可视化区域的 OSM 文件路径桌面端通过Select File按钮选择Clear按钮可清空Average Building Level HeightbuildingLevelHeightdouble单位 m范围 0.5 ~ 203建筑每层层高标准高度用于将 OSM 中以层数表达的建筑高度换算为实际高度Vehicle Altitude BiasaltitudeBiasdouble单位 m范围 -1000 ~ 10000车辆及其任务相对地面的高度偏置用于修正飞控估计高度的系统偏差3D View 当前使用相对高度3D Map Data ProvidermapProviderenum当前仅OpenStreetMapOpenStreetMap3D 地形与建筑的数据来源当前仓库只实现了 OSM 一种Keep 3D scene alivekeepSceneAlivebooltrue退出 3D 视图回到 Fly View 时是否保留 3D 场景在内存中内存受限设备应关闭几个值得注意的实现细节UI 结构设置页分 General / Data 两组Data 组仅在enabled为真时启用enableWhen表达式。osmFilePath在桌面端渲染为文件选择控件过滤*.osm在移动端降级为纯文本输入框。当前 UI 还带有一条弃用提示The 3D View is deprecated and will be removed in a future release in favor of the GeoMap engine即该模块后续将由 GeoMap 引擎取代使用时请以仓库当前版本为准。altitudeBias的实际作用点它不是显示偏移而是真正进入几何计算。在 Viewer3DVehicleItems.qml 中航点位置lz _altitudeBias与车辆位置coordinate.altitude _altitudeBias都会加上偏置后再乘 10 转换到场景单位场景单位 米 × 10车辆 3D 模型如 DroneModelDjiF450.qml的pose_z同样加了该偏置。因此当你观察到车辆/航线整体贴地或悬空时调整这个参数可以在 -1000 ~ 1000 m 范围内修正。keepSceneAlive的实际作用点FlyView.qml 在退出 3D 模式时仅当keepSceneAlive为false才把viewer3DLoader.source置空释放场景为true时场景对象常驻再次切回 3D 无需重新加载 OSM 数据与瓦片。OSM 数据导入与三维渲染链路操作流程先在 OpenStreetMap 网站上下载目标区域的.osm文件再通过3D View设置中的3D Map File导入。未加载 OSM 文件时不显示建筑见视图控制一节的默认侧视行为。从源码结构看导入后经历一条清晰的流水线全部位于 src/Viewer3D/解析OsmParser 继承自抽象基类 Viewer3DMapProvider基类声明mapLoaded、gpsRef、mapBoundingBox()三个纯虚接口并规定边界框必须有序、不支持跨越 ±180° 反子午线的区域。OsmParser将解析工作交给后台线程OsmParserThread执行避免阻塞 UI解析完成后产出建筑三角网buildingToMesh()与经纬度边界框。地理基准地图的 GPS 参考点gpsRef通过 Viewer3DManager 汇聚——它同时监听地图提供器与当前激活车辆的坐标变化采用地图优先、车辆兜底的优先级GpsRefSource::Map/Vehicle/None场景原点即建立在该参考点上。越界检测Viewer3DManager提供静态方法coordinateWithinRegion()在每次车辆坐标或地图变更时检查车辆是否落在已加载 OSM 的经纬度包围盒内结果暴露为vehicleOutsideMapRegion属性越界时会写入警告日志Vehicle is outside the loaded OSM map region——这是排查建筑消失了/场景空旷时最直接的线索。地形纹理与几何Viewer3DTerrainTexture 负责以 home 位置为中心拉取地图瓦片拼出地面贴块无 OSM 时即此地面贴块纹理就绪后触发 Viewer3DTerrainGeometry 更新地球数据网格建筑网格则由 CityMapGeometry 输出其层高换算使用的正是buildingLevelHeight设置。场景组装Viewer3DModel.qml 用View3D容器组装一切SceneEnvironment开启 MSAA 抗锯齿与深度雾depthFar 50000场景单位即 5 km建筑Model使用灰色 PrincipledMaterial地面Model使用自定义CustomMaterial加载earthMaterial.vert/.frag着色器车辆与航点通过Repeater3D对multiVehicleManager.vehicles实例化每辆车自带PlanMasterController以静态方式渲染任务航线并可点击航点锥体waypointConeModel选中单个航点。mapProvider枚举当前仅有OpenStreetMap 0一个取值见 Viewer3DSettings.h设置界面因此表现为固定选项从源码结构看Viewer3DMapProvider抽象基类的存在意味着数据源是可扩展的插件式设计。相关源码与测试索引模式切换与 GPS 参考点管理src/Viewer3D/Viewer3DManager.cc相机控制器src/Viewer3D/Viewer3DCameraController.cc设置定义与平台裁剪src/Settings/Viewer3DSettings.cc、src/Settings/Viewer3D.SettingsGroup.json场景与手势 QMLsrc/Viewer3D/Viewer3DQml/Models3D/Viewer3DModel.qml、src/Viewer3D/Viewer3DQml/Models3D/Viewer3DCameraControls.qml、比例尺 Viewer3DScaleBar.qmlOSM 解析src/Viewer3D/Providers/Osm/单元测试test/Viewer3D/覆盖相机控制、管理器、地图提供器、地形几何/纹理、瓦片查询与实例化同文档族的 Fly View 参考docs/ko/qgc-user-guide/fly_view/fly_view.md、docs/ko/qgc-user-guide/fly_view/hud.md小结3D View 是 QGroundControl 中把 Fly View 的飞控能力抬升到三维空间的功能默认关闭、Android 不可用启用后通过工具条图标切换支持鼠标/触控板/触摸屏的 Gazebo 式锚定手势操作。配置上.osm文件提供建筑与边界框buildingLevelHeight0.5~20 m默认 3 m决定按层数换算的建筑高度altitudeBias±1000 m默认 0统一修正车辆与航线的相对高度keepSceneAlive默认 true权衡切回 2D 时的内存占用。由于该功能文档自述仍在开发中且 UI 层已标注将被 GeoMap 引擎取代使用时请以当前仓库版本的实际行为为准并善用vehicleOutsideMapRegion状态与日志Viewer3d.Viewer3DManager日志类别定位显示异常。赞分享无人机智能硬件【免费下载链接】qgroundcontrolCross-platform ground control station for drones (Android, iOS, Mac OS, Linux, Windows)项目地址https://gitcode.com/gh_mirrors/qg/qgroundcontrol点击查看免费下载相关推荐QGroundControl 3D View 完全指南3D 地图导入、Gazebo 风格视图控制与源码级设置解析QGroundControl 3D View 完全指南3D 地图导入、Gazebo 风格视图控制与源码级设置解析 QGroundControlQGC的 3无人机智能硬件QGroundControl 3D View 设置指南Fly View 三维地图的启用、OSM 数据加载与建筑/高度参数详解QGroundControl 3D View 设置指南Fly View 三维地图的启用、OSM 数据加载与建筑/高度参数详解 3D View 是 QGroun无人机智能硬件QGroundControl GeoMap 引擎技术预览完全指南3D 地图原理、启用方式与相机操作QGroundControl GeoMap 引擎技术预览完全指南3D 地图原理、启用方式与相机操作 本文围绕 QGroundControl 仓库中的 do无人机智能硬件创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑