ArduPilot Lua脚本入门:4步跑通自定义脚本的完整教程
2026/9/11 7:43:03 网站建设 项目流程

ArduPilot Lua脚本入门:4步跑通自定义脚本的完整教程

【免费下载链接】ardupilotArduPlane, ArduCopter, ArduRover, ArduSub source项目地址: https://gitcode.com/GitHub_Trending/ar/ardupilot

ArduPilot 的 Lua 脚本系统让你用一个 .lua 文件就能改飞控行为,不用重新编译固件,也不用啃 C++ 源码。无论是监测电池电压、驱动多路舵机,还是扩展任务逻辑,几行 Lua 脚本就能覆盖,是新手和普通用户扩展功能的最低成本路径。

学会 Lua 脚本后能干什么

脚本运行在固件内嵌的 Lua 5.3 解释器中,源码位于 libraries/AP_Scripting/。从 Lua 里可以直接调用:

  • ahrs 接口:姿态、位置、家点
  • SRV_Channels:舵机输出
  • 参数系统与地面站(GCS)文本消息
  • 串口、CAN 总线等外设

仓库自带一百多个示例脚本,全部放在 libraries/AP_Scripting/examples/,从最简单的 hello world 到电机矩阵配置、围栏入侵响应都有。第一步建议先翻例子找感觉,而不是直接写代码。

如何拿到支持脚本的飞控

闪存空间超过 1MB 的板子会自动启用脚本支持,主流 STM32F7/H7 板都在列,市面上绝大多数现成飞控可以直接用。没有硬件的话,SITL 仿真天然支持脚本系统,在本地环境里一条命令即可:

Tools/autotest/sim_vehicle.py -v ArduPlane

这会启动 ArduPlane 模拟器,运行起来就处于可加载脚本的状态。如果要烧录真实硬件,按标准流程走——这一步容易踩坑,烧完必须重启,新特性才生效:

waf configure --board=CubeBlack waf plane waf plane --upload

三条命令依次完成配置、编译和烧录 ArduPlane 固件。

怎么启用并上传第一个脚本 🔧

一共四步:

  1. 地面站把SCR_ENABLE参数设为 1,然后重启飞控。这是 Lua 脚本生效的前提。
  2. 把脚本放进scripts文件夹:真实硬件是 SD 卡的APM/scripts/目录,SITL 是工作目录下的 scripts 文件夹。
  3. 放入.lua文件后重新上电或重启仿真,系统会自动扫描并启动。
  4. 在地面站确认脚本已加载。

最小示例:

gcs:send_text(0, "hello, world")

这个脚本只做一件事:向地面站发一行文字。GCS 上出现 hello, world,说明整条脚本链路已经通了。

哪些脚本参数需要知道 📋

这是 Lua 脚本系统的核心参数,多数用户只需要动前两个:

参数作用说明
SCR_ENABLE开关脚本系统设 1 启用,需重启
SCR_HEAP_SIZE脚本内存堆大小报内存不足警告时调大
SCR_VM_I_COUNT虚拟机指令执行上限防止脚本占满 CPU
SCR_THD_PRIORITY脚本线程优先级按实时性需求微调
SCR_DEBUG_OPTS启用详细日志调试时打开

脚本的加载、启动与校验和流程集中在 AP_Scripting 目录下的 lua_scripts.cpp,想读懂这些参数的行为,从那个文件入手最快。

如何让脚本响应任务指令

任务列表里有一条 DO SCRIPTING 指令,可以调用指定脚本,飞行执行到该点时触发。对应的 C++ 实现在 libraries/AP_Mission/AP_Mission_Commands.cpp 的start_command_do_scripting函数中。这样 Lua 脚本就能和标准任务规划配合:前半程正常航点飞行,到关键节点交给脚本执行自定义逻辑。

脚本上线前要注意什么

  • 复杂的 Lua 脚本先在 SITL 里跑通,再上真机。
  • 关注SCR_HEAP_SIZE:堆不够时系统会给出警告,脚本因内存溢出崩溃前功尽弃。
  • 高频回调里别做重计算,脚本和控制回路共享 CPU。
  • 起飞前确认没有脚本抢占舵机或飞行模式,脚本乱动舵机比不动更危险。

下一步做什么 📚

  • libraries/AP_Scripting/README.md,了解构建时启用脚本的细节。
  • libraries/AP_Scripting/examples/复制一个脚本改起来,hello_world.lua 最容易入手。
  • API 清单参考libraries/AP_Scripting/docs/下的文档。
  • 遇到问题,到 ArduPilot 社区论坛按 scripting 关键词搜索,命中率很高。

【免费下载链接】ardupilotArduPlane, ArduCopter, ArduRover, ArduSub source项目地址: https://gitcode.com/GitHub_Trending/ar/ardupilot

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询