尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

如何为 ESP32 板(esp32buzz/esp32diy)构建 ArduCopter 固件并处理构建报错?

如何为 ESP32 板(esp32buzz/esp32diy)构建 ArduCopter 固件并处理构建报错? 如何为 ESP32 板esp32buzz/esp32diy构建 ArduCopter 固件并处理构建报错【免费下载链接】ardupilotArduPlane, ArduCopter, ArduRover, ArduSub source项目地址: https://gitcode.com/GitHub_Trending/ar/ardupilot本文针对 ArduPilot 的 ESP32 移植版AP_HAL_ESP32说明如何为esp32buzz或esp32diy板构建 ArduCopter 固件并处理构建过程中会出现的两类典型报错。整个流程在 Linux 上经过测试文档明确说明 Build currently tested on linux最终产出可写入开发板的固件镜像并给出刷写后的串口验证方法。准备环境构建依赖两条工具链ArduPilot 自身的依赖和 Espressif ESP-IDF当前使用 esp-idf v5.3。ESP32 的工具链和 ESP-IDF 以 git submodule 形式随仓库提供不需要单独预装完整 IDF 环境。获取 ardupilot 源码后先安装 ArduPilot 的构建依赖Ubuntu 或 Arch 二选一# Ubuntu Tools/environment_install/install-prereqs-ubuntu.sh # 或 Arch Tools/environment_install/install-prereqs-arch.sh安装 ESP-IDF 所需的系统级 Python 依赖Ubuntu 示例Arch 文档给出的是pacman -S对应包sudo apt-get install git wget flex bison gperf cmake ninja-build ccache libffi-dev libssl-dev dfu-util sudo apt-get install python3 python3-pip python3-setuptools初始化子模块并拉取 ESP-IDFcd ardupilot git submodule update --init --recursive # 确保 IDF 存在于 modules/esp_idf支持已有 submodule也会自动 clone ./Tools/scripts/esp32_get_idf.sh cd modules/esp_idf ./install.sh unset IDF_PATH source ./export.sh cd ../../..esp32_get_idf.sh 会把modules/esp_idf固定到release/v5.3分支的指定提交如果本地 IDF 版本不对脚本会提示并尝试切换。构建时 waf 优先使用环境变量IDF_PATH否则回落到modules/esp_idf见 esp32.py。配置并构建 ArduCopter 固件文档强调了一个关键顺序必须先运行一次不带参数的./waf configure再运行带--board的配置命令否则会出现后文第二节的build.ninja报错。cd ardupilot ./waf configure # 二选一 ./waf configure --boardesp32buzz --debug # 或 ./waf configure --boardesp32diy --debug ./waf copter--board参数对应 hwdef 目录下的板型esp32buzz板名esp32-buzzSPI 接 bmp280/MPU9250和esp32diy板名esp32-diyI2C 接 ICM20XXX 作为默认 INS。文档特别标注不要使用./waf build当前该命令是坏的Do NOT use ./waf build, its broken right now应直接使用./waf copter这类目标命令。构建完成后ESP-IDF 的完整工程构建目录位于build/esp32{BOARD}/esp-idf_build/{BOARD}替换为你配置时使用的板名如buzz、diy。从其他机器刷写时需要这三个文件文档原文路径build/board/esp-idf_build/bootloader/bootloader.bin build/board/esp-idf_build/ardupilot.bin build/board/esp-idf_build/partition_table/partition-table.bin构建完成后可以查看build/board/esp-idf_build/flash_project_args获取刷写参数提示。处理构建报错文档AP_HAL_ESP32/README.md列出了两类实际会遇到过的构建问题1.ninja: error: loading build.ninja: No such file or directory原因是 configure 顺序不对。解决方法./waf configure # 先执行一次不带参数的 configure ./waf configure --boardesp32buzz --debug # 再执行带 --board 的配置 ./waf copter2. 与CONFIG...宏相关的编译报错例如出现这类编译错误/警告in expansion of macro configSUPPORT_STATIC_ALLOCATION warning: CONFIG_SUPPORT_STATIC_ALLOCATION is not defined文档的解释这表示 IDF 依赖的sdkconfig文件过期或与当前 IDF 不同步文档称正常情况下不应发生如果发生建议提交 bug 报告。处理方式sdkconfig.defaults文件变更、或手动删除sdkconfig都会使sdkconfig被删除并重新生成如果需要在不删除文件的情况下修改 sdkconfig可用ninja menuconfig。进入build/esp32{BOARD}/esp-idf_build目录执行{BOARD}同样替换为你的板名cd build/esp32buzz/esp-idf_build ninja menuconfig文档给出的 menuconfig 操作步骤按 tab×3 后 enter 进入 [Save]再按 tab 后 [OK] 更新 sdkconfig看到 config written 提示后按 enter 关闭对话框最后按 tab 再 enter 退出 [Exit] 框退出后该目录下的sdkconfig应已更新。若要使 sdkconfig 的修改持久化并提交回 git应编辑sdkconfig.defaults或在 menuconfig 后使用ninja save-defconfig工具用 defconfig 替换sdkconfig.defaults。刷写固件并验证推荐的刷写方式是让 waf 直接上传构建目标与前面一致ESPBAUD921600 ./waf copter --upload如果串口没有被自动检测到可以手动指定端口例如ESPPORT/dev/ttyport ESPBAUD921600 ./waf copter --uploadport替换为实际串口号。刷写完成后用任意终端程序以 115200 波特率、软件流控、8N1 设置连接到同一个 COM 端口如/dev/ttyUSB0可以看到hal.console-printf(...)等控制台输出。文档中附有一段 esp32buzz 上 ArduPlane 的文档示例启动日志其中可见boot: Partition Table、wifi: mode : softAP以及Sensor failure: INS: unable to initialise driver等行说明串口能看到 boot 消息、WiFi 和传感器初始化状态该日志属于文档示例不同板型和传感器配置下输出会有差异不要将其中的具体数值当作固定预期。也可以不走 waf直接使用 ESP-IDF 的构建系统make 或 ninja操作build/esp32{BOARD}/esp-idf_build目录例如ninja flash、ninja monitor需要指定端口/波特率时在命令前设置ESPTOOL_PORT/dev/ttyUSB1、ESPTOOL_BAUD921600。限制说明构建目前只在 Linux 上经过测试文档列出的测试硬件是 ESP32 开发板加 GY-91 10DOF 传感器板引脚接线见 README 中的 Test hardware 一节文档 Known Bugs 一节记录当前存在 slow but functional wifi implementation for tcp udp 这一已知问题。【免费下载链接】ardupilotArduPlane, ArduCopter, ArduRover, ArduSub source项目地址: https://gitcode.com/GitHub_Trending/ar/ardupilot创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表