1. ArduPilot脚本开发环境搭建与第一个脚本
任务说明
在 ArduPilot SITL 中启用 Lua 脚本引擎,编写一个最小脚本,通过 SCR_USER1 参数触发执行,在飞控控制台输出 Hello ArduPilot,从而验证脚本从加载到执行的完整链路。
环境与依赖
- ArduPilot 源码(含
Tools/autotest/sim_vehicle.py) - Python3、已编译的
arducopterSITL 可执行文件 - 无需额外 Lua 依赖,脚本引擎内置于固件
脚本加载与执行流程
脚本代码
将以下内容保存为 scripts/hello.lua(相对 SITL 工作目录,即 SCR_ENABLE=1 时固件扫描的脚本目录):
-- hello.lua : 最小 ArduPilot Lua 脚本
function update()
gcs:send_text(0, "Hello ArduPilot")
return update, 1000 -- 每 1000ms 再次调用
end
return update, 1000 -- 首次注册,1s 后开始执行
运行步骤
- 在 SITL 启动参数中启用脚本引擎并指定脚本目录:
其中sim_vehicle.py -v ArduCopter --console --map \ -D -l 33.8,151.0,0,0 \ --add-param-file=scripts.parmscripts.parm内容:SCR_ENABLE 1 SCR_USER1 1 - 启动后进入 MAVProxy 控制台,输入
module load graph可忽略;关键观察飞控控制台输出。 - 在 MAVProxy 中执行
script hello或等待SCR_USER1触发(本脚本通过update()周期执行,无需手动触发)。
验证方法与通过条件
- 飞控控制台(
--console窗口)出现Hello ArduPilot文本,且每秒重复一次。 - MAVProxy 中执行
param show SCR_ENABLE返回1,说明脚本引擎已启用。 - 若控制台无输出,检查
scripts/hello.lua路径是否正确、SCR_ENABLE是否为 1,以及脚本是否被固件扫描到(启动日志中会有Lua: loaded提示)。
常见问题
- 脚本未加载:确认
SCR_ENABLE=1且脚本位于固件扫描目录(SITL 下为scripts/)。 - 无输出:
gcs:send_text(0, ...)的 severity 0 为普通消息,需在控制台查看;若使用 MAVProxy 需确保已连接。 - 重复执行过快:
return update, 1000中的 1000 为毫秒间隔,可按需调整。