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 固件。
怎么启用并上传第一个脚本 🔧
一共四步:
- 地面站把
SCR_ENABLE参数设为 1,然后重启飞控。这是 Lua 脚本生效的前提。 - 把脚本放进
scripts文件夹:真实硬件是 SD 卡的APM/scripts/目录,SITL 是工作目录下的 scripts 文件夹。 - 放入
.lua文件后重新上电或重启仿真,系统会自动扫描并启动。 - 在地面站确认脚本已加载。
最小示例:
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),仅供参考