
机器人智能硬件【免费下载链接】MissionPlannerMission Planner Ground Control Station for ArduPilot (c# .net)项目地址https://gitcode.com/gh_mirrors/mi/MissionPlanner点击查看免费下载Mission Planner 是 ArduPilot 生态中最常用的地面控制站GCS采用 C#/.NET 开发覆盖飞行规划、参数配置、固件刷写、日志分析与遥测监控等完整链路。本文以仓库根目录的 README.md 为骨架结合仓库内构建脚本、配置文件与核心源码系统讲解如何在 Windows/Linux 上从源码编译、如何部署运行 Linux 预编译包、软件对外部网络服务的依赖关系、离线使用方式以及默认数据目录布局读者读完后可以独立完成环境搭建、源码构建与离线部署。项目定位与仓库布局Mission Planner 是一个面向 ArduPilot 系列飞控ArduCopter、ArduPlane、ArduSub、Rover、AntennaTracker 等的跨平台地面站。仓库根目录下即可看到典型的 C#/.NET 解决方案结构MissionPlanner.sln 与 MissionPlanner.csproj桌面端主工程目标框架为net472输出目录沿用bin\Release\net461\约定ExtLibs/内置第三方与自研库包括 GMap.NET 地图引擎、Mavlink 协议库、DroneCAN/UAVCAN、GDAL、ZedGraph、7zip 等GCSViews/地面站各功能视图如飞行数据FlightData、飞行规划FlightPlanner、配置ConfigurationViewLinux/Linux 构建与运行脚本、文档及冒烟测试源码MissionPlannerTests/MSTest 单元测试工程。从入口 Program.cs 可以看出主程序在Main中调用Start(args)随后创建MainV2主窗体并进入 WinForms 消息循环Application.Run(new MainV2())。这也是后续理解启动日志、目录初始化与插件加载流程的起点。Windows 下从源码编译环境要求与 VS2022 配置导入官方推荐在 Windows 上使用Visual Studio 2022编译仓库根目录提供了组件清单 vs2022.vsconfig。该文件是 VS Installer 的导入配置涵盖 .NET Framework 4.8 SDK/Targeting Pack、.NET Core SDK、MSBuild、NuGet、Windows 10 SDK、Xamarin、UWP、Azure 工具链等数十个组件。导入步骤打开 Visual Studio Installer点击“更多More”选择“导入配置Import configuration”选择仓库根目录下的vs2022.vsconfig文件。这样即可按官方清单一次性装齐开发所需组件避免在功能繁多的 VS 安装界面中自行挑选。需要说明的是仓库也保留有 vs2019.vsconfig 与 vs2026.vsconfig但 README 当前明确要求的版本是 VS2022。若使用 VSCode 加 C# 插件目前只能解析代码、无法完成构建。获取代码与子模块通过 Git 克隆仓库后需要在 Mission Planner 目录下初始化子模块git clone https://github.com/ArduPilot/MissionPlanner.git cd MissionPlanner git submodule update --init子模块中包含 Mono 源码等依赖Linux 构建时则明确“不需要 Mono 源码子模块”见下文。如果你在 VS2022 中直接使用 IDE 内置 Git 工具同样可以完成克隆与子模块拉取。执行构建在 Visual Studio 中打开MissionPlanner.sln从“生成Build”菜单选择生成 MissionPlannerBuild MissionPlanner即可。主工程 MissionPlanner.csproj 的目标框架为net472并引用了大量 NuGet 包Accord、BouncyCastle、CSMatIO、DotNetZip、Flurl 等首次构建会自动还原这些依赖。Linux 下构建与运行方式一使用官方 Linux 预编译包推荐Linux x86_64 的发布包MissionPlanner-linux-x86_64.tar.gz及配套.sha256校验文件在 GitHub Actions 的Linux Build工作流产物中提供合并到 master 后自动生成。包内包含已编译好的可执行程序、托管依赖、Mono 兼容程序集facades、XML 序列化辅助、原生 Skia 库以及启动脚本 Linux/run.sh无需安装 .NET SDK、Mono 编译器、NuGet、Git 或源码副本。在 Ubuntu 22.04/24.04 或 Debian 上安装运行时依赖并解压运行sudo apt update sudo apt install mono-runtime ca-certificates-mono libgdiplus fonts-dejavu-core \ libmono-system-windows-forms4.0-cil libmono-system-web-extensions4.0-cil \ libmono-system-management4.0-cil libmono-system-servicemodel4.0a-cil \ libmono-system-data-entity4.0-cil libmono-system-net-http4.0-cil sha256sum -c MissionPlanner-linux-x86_64.tar.gz.sha256 tar -xzf MissionPlanner-linux-x86_64.tar.gz ./MissionPlanner-linux-x86_64/run.sh其他发行版需要等价的 Mono 6.8 WinForms/运行时程序集、libgdiplus、字体以及 X11 会话或 XWayland。请注意该归档不捆绑Mono 运行时与系统 C 库也不会自动安装依赖串口连接需要用户具备设备访问权限通常为dialout组成员视频与语音等可选功能分别依赖 GStreamer 与语音软件Windows 驱动安装器与 GDAL 绑定不包含在内。升级方式为重新解压新的 Linux 归档。启动脚本 Linux/run.sh 内部做了一系列 Mono 兼容处理值得关注设置MONO_IOMAPdrive:case解决文件名字母大小写问题源码 Program.cs 的启动提示也提到该环境变量通过mono-tools与mono-facades目录让运行时找到编译器辅助与转发程序集设置LIBOVERLAY_SCROLLBAR0与清空GTK_MODULES规避 Ubuntu 传统 GTK 滚动条模块导致 Mono WinForms 启动崩溃的问题将LD_LIBRARY_PATH指向应用目录及x64、runtimes/linux-x64/native以加载原生库支持--self-test参数转去执行mono LinuxSmokeTest.exe见下文测试一节。若启动异常可用 README 提示的方式打开调试日志MONO_LOG_LEVELdebug ./run.sh方式二在 Linux 上从源码构建先安装 .NET 10 SDK然后在 Ubuntu/Debian 上安装构建依赖并执行sudo apt install mono-devel rsync ./Linux/build.sh ./Linux/run.shLinux/build.sh 是完整的一键打包脚本其关键逻辑包括前置检查dotnet、mono、mcs、rsync、tar、gzip、sha256sum缺一不可且当前架构必须是x86_64调用dotnet build MissionPlanner.csproj --configuration Release并传入-p:MissionPlannerLinuxBuildtrue -p:EnableWindowsTargetingtrue以及自定义的 Linux/Build.targets用version.exe生成version.txt拷贝System.Speech.dll通过sed为MissionPlanner.exe.config注入 Linux 的libdl.so.2dllmap并移除(%file:%line)日志格式以规避 Mono 下的日志死锁用mcs编译 Linux/SmokeTest.cs 生成LinuxSmokeTest.exe作为无需编译器的运行时自检工具用rsync排除 Windows 驱动、GDAL、架构无关的 DLL、调试符号等后打包同时把 Mono 的 facades 与mcs.exe辅助编译器打进包内保证运行期不需要系统编译器生成BUILD-INFO.txt记录源码修订号、工作区是否修改、构建时间、SDK 与 Mono 版本并输出tar.gz与sha256校验文件。脚本还支持通过环境变量覆盖 Mono 的非标准安装位置MONO_POSIX_PATHMono.Posix 程序集路径、MONO_FACADES_PATH、MONO_MCS_PATH、MONO_COPYRIGHT_PATH并尊重标准 NuGet 变量如NUGET_PACKAGES额外的dotnet build选项如--no-restore可直接追加在build.sh之后。构建产物位于bin/linux/MissionPlanner-linux-x86_64/可运行应用目录bin/linux/MissionPlanner-linux-x86_64.tar.gz可分发的归档bin/linux/MissionPlanner-linux-x86_64.tar.gz.sha256校验和。其他平台的可用性与限制Mission Planner 的多平台形态如下Android可通过 Play Store 安装对应仓库中的 ExtLibs/Xamarin/ 移动端工程LinuxMono可运行但并非所有功能都可用本仓库的 Linux/README.md 详细说明了运行依赖与限制macOS/iOS原生支持仍属实验性质官方不建议新手使用macOS 用户更推荐通过 Boot Camp 或 Parallels 运行 Windows 版。在 Linux 上启动时Program.cs 会通过反射检测Mono.Runtime类型以识别 Mono 环境并注册MonoTableLayoutSettingsConverter等兼容处理启动时还会检查 Mono 主版本低于 6 会提示升级。README 建议的调试方式MONO_LOG_LEVELdebug ./run.sh也与 Program.cs 输出的调试提示一致。对外部网络服务的依赖与隐私控制README 以表格形式完整列出了 Mission Planner 运行时依赖的外部服务。这些依赖集中在 app.config 的appSettings中多数可通过修改missionplanner.exe.config或界面选项调整或关闭。核心条目包括服务来源用途关闭方式https://firmware.oborne.me启动时每天一次的更新检查全局 CDN编辑missionplanner.exe.confighttps://firmware.ardupilot.org稳定版更新、固件元数据、固件、用户告警、GStreamer、SRTM、SITL稳定版更新可改配置其余不可关闭https://github.com测试版beta更新编辑missionplanner.exe.confighttps://raw.githubusercontent.com旧参数元数据、SITL 配置文件不可关闭https://api.github.comArduPilot 预置参数文件不可关闭https://raw.oborne.me参数元数据生成器 CDN已非主源用户按需触发可改配置https://maps.google.com高程 API已因滥用移除N/Ahttps://discuss.cubepilot.org受影响板卡的 SB2 报告仅在用户操作时触发https://altitudeangel.comUTM 数据用户自行启用https://autotest.ardupilot.orgdataflash 日志元数据、参数元数据不可关闭多家地图服务商google/bing/openstreetmap 等地图源用户可选https://www.cloudflare.com地理位置NFZ 选择用不可关闭https://esua.cad.gov.hk香港禁飞区用户可选https://ssl.google-analytics.com匿名统计页面加载、异常、事件、启动耗时、固件上传类型在 Config Planner OptOut Anon Stats 关闭https://api.dronelogbook.com日志上传已禁用N/Ahttps://ardupilot.org / https://www.youtube.com帮助链接与教学视频用户触发https://files.rfdesign.com.auRFD 固件用户触发https://teck.airmarket.ioairmarket已禁用N/Aapp.config中可看到更新机制的三个关键键UpdateLocationVersion稳定版版本号、UpdateLocationMD5与UpdateLocationZip指向firmware.ardupilot.org而 beta 通道的BetaUpdateLocation*指向 GitHub Releases。更新逻辑实现在 Utilities/Update.cs启动时按domaster/dobeta标志选择MasterUpdateLocationMD5、BetaUpdateLocationMD5或UpdateLocationMD5做 MD5 比对随后拉起Updater.exe完成增量更新在 Mono 环境下则通过/bin/bash -c mono Updater.exe ...启动。README 中“每天一次更新检查”的行为正是通过这套配置与代码实现的因此关闭对应 URL 即可阻止联网检查。离线使用与本地数据缓存可跨 PC 迁移的缓存位置README 给出了 Windows 下的离线缓存目录Linux 对应路径见后文位置用途是否可跨 PC 迁移C:\ProgramData\Mission Planner\gmapcache地图缓存是C:\ProgramData\Mission Planner\srtm高程数据缓存是C:\ProgramData\Mission Planner\*.pdef.xml参数缓存是C:\ProgramData\Mission Planner\LogMessages*.xmlDF 日志元数据缓存是这些目录正是由 ExtLibs/Utilities/Settings.cs 中GetDataDirectory()共享数据目录与GetUserDataDirectory()用户数据目录两个方法计算得出。地图缓存挂载点可以在 Program.cs 看到启动时设置GMap.NET.GMaps.Instance.PrimaryCache new Maps.MyImageCache()并根据Settings.Instance[mapCache]决定地图访问模式在线/离线。SRTM 高程缓存的目录由 ExtLibs/Utilities/srtm.cs 的datadirectory属性管理其内部按N/S 纬度 E/W 经度 .hgt规则组织瓦片文件并支持 1201×1201SRTM3与 3601×3601SRTM1两种分辨率的双线性插值读取。离线数据支持的格式高程ElevationSRTM 缓存、WGS84/EGM96 大地水准面的 GeoTiff、DTED影像Images地图缓存Map Cache、WMS、WMTS、GDAL。其中 WMS/WMTS 提供器在 Program.cs 中注册Maps.WMSProvider.Instance、Maps.WMTSProvider.InstanceGDAL 支持则在检测到应用目录存在gdal子目录时自动挂载MissionPlanner.Utilities.GDAL.GetProvider()。默认目录布局Windows 与 LinuxREADME 明确了两级目录约定位置用途C:\ProgramData\Mission Planner所有跨用户内容C:\Users\USERNAME\Documents\Mission Planner所有按用户区分的个人内容在 Linux 上这些目录对应/home/user/.local/share/Mission Planner/。源码层面Settings.cs 的GetDataDirectory()在 Mono 环境下直接返回用户数据目录Windows 下返回CommonApplicationData \Mission Planner\GetUserDataDirectory()Settings.cs则在 Unix 且旧路径~/Documents/Mission Planner不存在时改用LocalApplicationData计算即~/.local/share/Mission Planner/——这与 README 的说明完全吻合。默认日志目录为GetUserDataDirectory() logsSettings.cs日志文件同时会写入共享数据目录下的trace.log见 Program.cs。程序启动时会在控制台直接打印这些关键路径Program.csData Dir、Log Dir、Running Dir、User Data Dir是排查“配置/缓存/日志去哪了”类问题的第一手信息。构建与运行的正确性验证Linux 冒烟自检Linux 包内置了无需编译器的自检程序 Linux/SmokeTest.cs构建时由mcs编译为LinuxSmokeTest.exe可通过启动脚本直接触发DISPLAY:101 ./Linux/run.sh --self-test其中DISPLAY指向嵌套的 Xephyr 显示启动脚本尊重该环境变量。据 Linux/README.md 描述CI 在 Ubuntu 22.04 容器中以运行时依赖加虚拟 X 显示器的方式解压归档并执行该测试加载 FlightData 界面、检查其操作控件、往返读写一个 XML 主题全程不连接飞控。维护者还可以在干净的运行时 Docker 容器中执行MISSIONPLANNER_TEST_DISPLAY:101 ./Linux/test-package.sh复测归档未设置该变量时容器使用自带 Xvfb 显示。单元测试与协议级回归仓库的 MissionPlannerTests/ 工程覆盖多个层面FlightPlannerTests、DownloadTests、BoardDetectTests、FirmwareTests、GitHubContentTests等。其中 MissionPlannerTests/Mavlink/README.md 详细描述了Sysid32Tests这是一个针对 MAVLink 32 位系统 ID 扩展的 MSTest 类覆盖八种标志组合的独立线路夹具、无符号边界 ID、CRC/签名、分片读取、拒绝/恢复、载荷广播、旧版 MAVLink 1、tlog 回放、车辆/检查器/订阅隔离与实时链路目标过滤。可通过vstest.console.exe配合/TestCaseFilter:FullyQualifiedName~Sysid32Tests单独运行。该类测试还包含与 Linux GUI/SITL 的集成方案用Linux/build.sh产出归档在 Xephyr 上启动临时 Rover SITL真实连接 FlightData 界面完成参数读写、MAVFTP 参数下载、任务上传/下载与指令确认的端到端校验。这从测试层面印证了 README 中“Linux 构建产物可独立运行”的说法。CA 证书与 Windows 串口驱动签名README 提到MSI 安装过程中会把一张 CA 证书安装到系统根证书存储用于签署 Windows 串口驱动。这部分对应仓库 Drivers/ 目录下的大量.inf/.cat驱动文件arduino、chibios、cube、holybro、px4fmu、vrbrain、stmcdc、ubloxusb 等以及 signed.cer。使用预编译 MSI 安装时该证书随安装自动注册保证 USB 串口驱动如 USB CDC可被系统正确识别与签名验证。小结Mission Planner 的完整使用链路可以概括为三条源码编译Windows 走 VS2022 vs2022.vsconfigLinux 走Linux/build.sh、免编译部署下载 Linux x86_64 归档安装 Mono 运行时依赖后./run.sh、离线使用利用C:\ProgramData\Mission Planner下的 gmapcache/srtm/pdef/LogMessages 缓存跨机迁移。其外部服务依赖高度集中在 app.config 中更新、参数元数据、地图源均可按 README 表格中的方式裁剪目录布局则由 ExtLibs/Utilities/Settings.cs 统一计算Linux 与 Windows 路径规则在 Linux/README.md 中有对等说明。结合 MissionPlannerTests/ 的协议与 GUI 回归测试开发者可以在任何环节获得可验证的构建与运行保障。赞分享机器人智能硬件【免费下载链接】MissionPlannerMission Planner Ground Control Station for ArduPilot (c# .net)项目地址https://gitcode.com/gh_mirrors/mi/MissionPlanner点击查看免费下载相关推荐Mission Planner Linux 版从发布包运行、源码构建到冒烟测试的完整指南Mission Planner Linux 版从发布包运行、源码构建到冒烟测试的完整指南 导读 本文以仓库中的 Linux/README.md https:/机器人智能硬件Plot类型安全机制深度解析为什么你的HTML代码永远不会出错Plot类型安全机制深度解析为什么你的HTML代码永远不会出错 在Web开发中HTML代码的错误往往是难以察觉却影响深远的问题。而Plot作为一款基于Swi终极指南qbittorrent-nox-static一键安装教程5分钟拥有跨平台BT工具终极指南qbittorrent nox static一键安装教程5分钟拥有跨平台BT工具 qbittorrent nox static是一款强大的bash脚上一篇Cockpit 浏览器集成测试架构全解从 Webdriver BiDi 到虚拟机的测试体系下一篇pandoc 如何将 BibLaTeX 书目转换为 Pandoc 元数据以 biblatex-augustine 命令测试为实例的深度解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考