移植到新的飞行控制器板

ArduPilot 支持多种飞行控制器 随着新控制器的不断增加。本页阐述了将 ArduPilot 移植到新电路板的步骤,重点是使用以下工具将 ArduPilot 移植到基于 STM32 的电路板(最常见的类型)上 ChibiOS.

备注

任何对 ArduPilot 代码的固件定制都必须遵守 GPL3.0+ 开放源代码许可证的条款。ArduPilot 还提醒开发人员和制造商在开发新的(飞行)控制器时遵守相应的商标法和版权法。

../_images/gpl3.png

考虑加入 ArduPilot Discord 聊天室 与其他开发人员就此话题进行交流。

步骤 1 - 开始

  • 确定新飞行控制器使用的微控制器。如果它是我们已经支持的 MCU,例如 STM32F405、STM32F427、STM32F745、STM32F765、STM32F777、STM32H743 或 STM32H757,那么端口应该相对简单。如果是其他 MCU,请在 ArduPilot Discord 聊天室 咨询如何继续。

  • 确定晶体频率(通常为 8Mhz 或 24Mhz)。请参考原理图或阅读晶体上的文字,晶体上的文字通常是一个银色的小方块。

备注

MCU 必须至少有 1 MB 闪存才能运行飞行控制器代码。不过,闪存容量较小的处理器也可用于开发 DroneCAN 外围设备,这些外设集成了 ArduPilot 的许多外设驱动程序,如空速传感器、GPS、指南针、气压计等。请参见 ap-peripheral-landing-page 部分获取更多信息。

提示

慎重选择板名!请使用 13 个字符或更少的字符作为板名,否则当板名从飞行控制器发送到地面站(如 Mission Planner)时,可能会被截断。

第 2 步 - 为电路板创建 hwdef.dat 文件

  • libraries/AP_HAL_ChibiOS/hwdef 的名称(如 "new-board")。该目录名称最终将在构建过程中使用(如 "waf configure -board new-board"),因此名称应相对简短。

  • 将与电路板 CPU 相似的现有模板 hwdef.dat 复制/重命名到上述创建的目录中。例如,如果电路板使用 STMF40x 芯片,则将 MatekF405, SpeedyBeeF405MiniMambaF405v2 hwdefs(等)提供了可借鉴的范例。

提示

"这款" FMUV3 电路板 被大量注释,包含了硬件定义文件中使用的大部分 HAL 指令。此外,该 脚本目录 包含所支持微处理器的引脚功能分配,以供参考。

第 3 步 - 为电路板配置和构建最基本的固件

按照 编写代码 说明,或采取快捷方式阅读 BUILD.md 文件,其中包括执行以下操作:

  • CD ardupilot (或您的 克隆 ArduPilot 至)

  • ./waf 配置 --板 新板

  • ./waf 旋翼飞行器

如果构建成功,将在 build/new-board/bin/arducopter.apj 中生成一个 .apj 文件。

第 4 步 - 向电路板上传与 ArduPilot 兼容的引导加载程序

一些电路板预装了引导加载程序,而另一些则依赖电路板制造商使用 dfu 将固件安装到电路板上。无论哪种情况,为了方便地通过 USB 将 ArduPilot 载入电路板,必须使用以下方法将兼容 ArduPilot 的引导加载程序上传到电路板 dfu."dfu "可从以下网址下载 这里.

引导加载程序的源代码见 AP_Bootloader 但是,许多电路板的预编译二进制文件都可以在 工具/引导加载器 固件服务器上的目录。请参考 README.txt 看看现有的引导加载程序是否与新电路板兼容。

备注

请参阅本文档末尾的章节,了解如何为电路板创建引导加载程序。

备注

您的电路板必须插入 USB 进入 DFU 模式。进入 DFU 模式的方法通常是将电路板上的两个引脚短接在一起。有关如何完成此操作的详细信息,请参阅电路板文档。

将引导加载程序上传到电路板 dfu-util -a 0 --电源线地址 0x08000000 -D new-bootloader.bin -R

第 5 步 - 将最小固件上传到电路板上

如果使用Mission Planner地面站将固件加载到电路板上:

  • 用 USB 电缆将电路板连接到 Windows PC

  • 进入 MP 的初始设置>>安装固件屏幕,点击 加载自定义固件 并选择 .apj 文件,然后按确定。如果 "加载自定义固件 "链接不可用,请转到 "配置/调整>>规划器 "页面,将 "布局 "设为 "高级"。

  • 如果 MP 无法将固件加载到电路板上,可能是 hwdef.dat 文件中的 "APJ_BOARD_ID "与 .apj 固件文件不匹配。引导加载程序中的电路板 ID 列于引导加载程序的 README.txt 文件。临时解决办法是更改 hwdef.dat 文件中的 APJ_BOARD_ID 以匹配引导加载程序。从长远来看,需要创建一个专门针对新板卡的引导加载程序,以便地面站能够将该板卡与其他板卡区分开来,并自动加载正确的固件。

    备注

    每次对电路板定义文件进行修改时,都必须清理编译,并在重新编译前重新配置 WAF:

  • ./waf 清洁

  • ./waf 配置 --板 新板

备注

Windows7/8 用户可能需要创建一个 .ini 文件,以便识别 USB 设备。在 Windows10 中,电路板应能自动识别。

如果使用 waf 上传(仅限 Linux 和 MacOSX):

  • 用 USB 电缆将电路板连接到电脑

  • 命令在 BUILD.md 但简而言之 ./waf 旋翼飞行器 --上传

上传后,电路板上的 LED 灯很可能不会亮起,但应该可以从您喜欢的地面站连接到电路板。地面站 HUD 上应该会出现一条错误信息,提示 "气压计启动失败"。

第 6 步 - 填写 hwdef.dat,指定每个外设功能使用的引脚

  • 阅读 fmuv3 hwdef.dat 文件 (用于 The Cube),以了解必须指定的全部硬件配置列表。

  • 开始为每条总线(SPI、I2C、UART、CAN 等)填写新电路板的 hwdef.dat 文件。理想情况下,您可以参考电路板的原理图来确定引脚应如何配置,但如果没有原理图,则可以采用试错法,因为在每个 CPU 上,可用于每个外设功能的引脚数量有限。请参见 AP_HAL_ChibiOS/hwdef/scripts 目录 作为每种外设功能可使用哪些引脚的指南

  • 当您在 hwdef.dat 文件中输入新值时,您可以重新编译并上传固件,以测试每个外设功能是否已开始工作。

提示

要快速检查 hwdef.dat 文件是否有任何错误,请运行 libraries/AP_HAL_ChibiOS/hwdef/scripts/chibios_hwdef.py 脚本,并查找输出中的错误和警告

第 7 步 - 调出传感器

与第 6 步类似,在 hwdef.dat 文件中添加传感器相关配置,首先是气压计,然后是 IMU、指南针,最后是其他传感器。

上传固件并测试传感器是否正常工作。

步骤 8 - 启用参数存储

对于带存储的电路板,应在 hwdef.dat 文件中指定所使用的存储方法(FRAM 或闪存)。

有关如何启用 FRAM 的示例,请在...中搜索 "ramtron"。 fmuv3 hwdef.dat 文件。简而言之,就是添加这样几行:

  • # 以便 RAMTROM 规范 存储

  • 定义 hal_with_ramtron 1

对于使用闪存的电路板,需要选择引导加载程序的加载地址,以便加载代码时不会擦除参数。请参阅第 5.1.2 节中的 FLASH_RESERVE_START_KB 值。 skyviper-f412skyviper-v2450 作为参考。

也可以在没有存储空间的电路板上使用 ardupilot。在这种情况下,配置参数在启动时将使用默认值。

可以通过在 hwdef.dat 文件的同一目录下创建 defaults.parm 文件来定义参数默认值。在包含另一个 hwdef.dat 文件的情况下,也可以考虑使用 @包括 path_to_other_defaults_parm 在新的 defaults.parm 文件中。

以下是 如何为 Skyviper 设计

步骤 9 - 创建引导加载程序

在进行初始移植时,您可能乐意使用为其他电路板构建的引导加载程序。这虽然能让你快速上手,但也意味着引导加载程序不会为你的电路板提供正确的电路板 ID,也可能没有正确的 LED 显示屏。

要创建适合电路板的引导加载程序,需要为电路板创建 hwdef-bl.dat。该文件与 hwdef.dat 位于同一目录,格式相同,但不应包含 I2C、SPI 或 CAN 外围设备等内容。hwdef 目录中已经有很多 hwdef-bl.dat 文件的示例,你可以将其作为范例。

hwdef-bl.dat 中必须包含的关键信息有

  • 您必须将 FLASH_BOOTLOADER_LOAD_KB 设为主代码开始的位置(以千字节为单位)。这应该与主 hwdef.dat 中的 FLASH_RESERVE_START_KB 相同。

  • 必须将 FLASH_RESERVE_START_KB 设置为零(以便引导加载程序放在闪存的起始位置)。

  • 您的 SERIAL_ORDER 将控制引导加载程序在哪些端口上激活。USB 端口有 OTG1 就可以了,也可以列出一些串行 UART。

构建引导加载程序的步骤如下:

  • ./waf 配置 --板 您的官方 --启动程序

  • ./waf 清洗

  • ./waf 引导程序

步骤 10 - 电路板测试

提交到 ArduPilot 的电路板端口应在提交到 ArduPilot 以纳入项目之前进行测试。

测试装置应在电路板上安装接收器和 GPS/指南针。加载固件并测试以下内容:

  • 电路板启动并通过 USB 连接到 GCS(Mission Planner地面站、QGC、MAVProxy 等)。

  • 识别 GPS 和指南针。

  • 识别 RC,RC 输入跟随 TX

  • 俯仰和横滚报告(即 HUD 水平线)正确跟随(飞行)控制器运动(即 IMU 方向正确且正常工作)。使用 INSx_USE 参数单独测试每个 IMU。

  • 电路板通过默认的上膛检查进行上膛(如果 GPS 位于室内,可能需要强制上膛)

  • 直接连接电池(如果有机载电源传感器)或通过外部电源模块连接电池,并确保电压显示正确且有电流指示

  • 将输出设置为正常功能(如升降)后,在每个输出上安装一个测试伺服器,并在 MANUAL(手动)模式下使用 TX 对每个输出进行练习,以检查输出功能。应使用 BLHeli32 esc 测试 Bdshot 功能输出的直通模式通信(非 IOMCU 输出)。

  • 在将所有其他 UART 协议设置为 "无 "并将测试的 UART 设置为 GPS 后,将 GPS 移至每个 UART 输出,以确保 UART 正常工作。

  • 带有 CTS/RTS 线路的 UART 应使用已连接这些线路的遥测无线电,以确保它们在 BRD_SERx__CTSRTS=1 时正常工作。

下一步工作

如果您已经走到这一步,恭喜您已经将 ArduPilot 移植到了新的电路板上!请联系 ArduPilot Discord 聊天室 来宣布你的成功。

对于广泛使用的板卡,我们很可能会帮助您将板卡列入官方支持板卡列表,包括自动固件构建、通过地面站轻松上传以及上传到我们的 wiki!无论如何,我们欢迎新的端口,请联系我们。

要将电路板添加到官方构建列表中,请通过提交变更 PR 来获得预留的电路板 ID 号,如下所示 清单 ......在 1000 以上的列表中查找下一个新的板 ID。

然后提交拉取请求,在 AP_HAL_ChibiOS/hwdef 库文件夹下的电路板子文件夹中添加以下内容,并包含:

  • hwdef.dat 包含正确的电路板 ID

  • hwdef-bl.dat 含正确的电路板 ID

  • README.md 包含维基页面所需的电路板引脚、图像和配置数据

  • 如果需要特定于板卡的默认值,则使用 defaults.parm