移植到新的飞行控制器板¶
ArduPilot 支持多种飞行控制器 随着新控制器的不断增加。本页阐述了将 ArduPilot 移植到新电路板的步骤,重点是使用以下工具将 ArduPilot 移植到基于 STM32 的电路板(最常见的类型)上 ChibiOS.
备注
任何对 ArduPilot 代码的固件定制都必须遵守 GPL3.0+ 开放源代码许可证的条款。ArduPilot 还提醒开发人员和制造商在开发新的(飞行)控制器时遵守相应的商标法和版权法。
考虑加入 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, SpeedyBeeF405Mini或 MambaF405v2 hwdefs(等)提供了可借鉴的范例。
第 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-f412 和 skyviper-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