1. ArduPilot脚本开发环境搭建与第一个脚本

任务说明

在 ArduPilot SITL 中启用 Lua 脚本引擎,编写一个最小脚本,通过 SCR_USER1 参数触发执行,在飞控控制台输出 Hello ArduPilot,从而验证脚本从加载到执行的完整链路。

环境与依赖

  • ArduPilot 源码(含 Tools/autotest/sim_vehicle.py)
  • Python3、已编译的 arducopter SITL 可执行文件
  • 无需额外 Lua 依赖,脚本引擎内置于固件

脚本加载与执行流程

scripts/ 目录 SCR_ENABLE=1 启动时扫描加载 脚本注册 update() 回调 SCR_USER1 触发执行

脚本代码

将以下内容保存为 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 后开始执行

运行步骤

  1. 在 SITL 启动参数中启用脚本引擎并指定脚本目录:
    sim_vehicle.py -v ArduCopter --console --map \
      -D -l 33.8,151.0,0,0 \
      --add-param-file=scripts.parm
    其中 scripts.parm 内容:
    SCR_ENABLE 1
    SCR_USER1 1
    
  2. 启动后进入 MAVProxy 控制台,输入 module load graph 可忽略;关键观察飞控控制台输出。
  3. 在 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 为毫秒间隔,可按需调整。