news 2026/9/11 17:23:39

固件功能不够用?ArduPilot Lua脚本救场

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
固件功能不够用?ArduPilot Lua脚本救场

固件功能不够用?ArduPilot Lua脚本救场

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

ArduPilot Lua脚本让你在飞控上直接写逻辑:低电量喊话、巡检打灯、临时改飞行行为,不用碰C代码。它是ArduPilot官方内置的脚本引擎,多旋翼、固定翼、水陆车通用。

🧩 机制:ArduPilot Lua脚本怎么跑起来的

  • 独立线程跑虚拟机:固件里内置了一个Lua 5.3.6解释器,你的脚本跑在独立线程里,和飞控主循环分开,好比在车机里装脚本应用,不干扰发动机电脑。
  • 指令红线机制:SCR_VM_I_COUNT就像给脚本划的一道CPU时间红线,单次回调执行指令数超线,脚本被强制暂停。一条死循环写不出能把飞控拖死的事故。
  • 文件约定即入口:SD卡APM/scripts目录下的.lua文件在上电时自动扫描、逐个启动,一个文件一个任务。整套加载逻辑由AP_Scripting模块负责。

闪存大于1MB的飞控默认编译进脚本支持

🚀 如何配置与运行:ArduPilot Lua脚本最小闭环

第1步,刷带脚本支持的固件。闪存大于1MB的板子(如CubeBlack)编译时自动启用脚本,waf两条命令搞定:

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

刷完固件先核对板卡接线

第2步,改参数并重启:

参数默认值说明
SCR_ENABLE01=启用Lua,改完必须重启
SCR_HEAP_SIZE43/100/200KB脚本堆,按板子档位自动定
SCR_VM_I_COUNT10000单次回调指令红线
SCR_DEBUG_OPTS0调试位掩码,3=打印内存与运行耗时

第3步,放入脚本。.lua拷进SD卡的APM/scripts/(SITL模拟器放工作目录下的scripts/)。下面这个最小脚本每秒读一次电池电压发给地面站:

function update() local v = battery:voltage() gcs:send_text(0, "V=" .. tostring(v)) return update, 1000 end return update, 1000

第4步,上电验证。重启后脚本自动加载,开着SCR_DEBUG_OPTS=3在地面站消息栏就能看到脚本心跳和内存占用。跑通这一步,你的闭环就成了。

🌾 两个真实场景

场景一:低电量自动播报(巡检机)

需求:电量低于红线时地面站立刻收到报警,避免巡到一半失联。

  • battery:voltage()轮询总压,阈值可放进SCR_USER1参数,不用改脚本就能调
  • 越限后用gcs:send_text(6, ...)发高危级别报警
  • 连续越限可调用vehicle:set_mode()切回Land,兜底着陆
配置项取值说明
SCR_ENABLE1启用后重启
SCR_HEAP_SIZE100KB纯监控脚本,中档板子默认够用
SCR_DEBUG_OPTS3(调试期)确认无内存告警后改回0

场景二:测绘段联动工作灯(管道巡检)

需求:飞入测区时打开作业灯,飞出后自动关闭,省掉人工开关。

  • update()里轮询当前航点进度,进入测绘段判定为真
  • 对函数96(scripting3)调用SRV_Channels:set_output_pwm输出通光脉冲
  • 段结束输出1000灭灯,并用gcs:send_text记录开关时间
配置项取值说明
SCR_VM_I_COUNT20000多一次航点计算,红线放宽一档
SCR_LD_CHECKSUM计算值锁定已加载脚本,不符不允许解锁;-1为关

🚧 避坑:飞控脚本内存管理清单

  1. HEAP_SIZE别贪大(43/100/200KB由板子决定,够用就好,改后重启才生效)
  2. 红线被触就查逻辑(先怀疑回调写得太重,再考虑调VM_I_COUNT)
  3. 正式任务开校验和(SCR_LD_CHECKSUM防脚本被换,配SCR_RUN_CHECKSUM双保险)
  4. 线程优先级别乱抬(默认Normal即可,抬高会抢主循环CPU,官方明确警告影响稳定)
  5. 调试期挂DEBUG_OPTS=3(看内存与耗时曲线,定位完务必清零)
  6. 高频回调做轻计算(至少间隔100ms以上,内存吃紧时手动collectgarbage())
  7. 上天之前先SITL(脚本放工作目录跑Tools/autotest/sim_vehicle.py,翻车成本最低)

脚本装好后,飞控的想象力就交给你的业务了。

  • 官方说明与最小示例:libraries/AP_Scripting/README.md
  • 示例脚本库(100+个):libraries/AP_Scripting/examples/
  • 开箱即用的小应用:libraries/AP_Scripting/applets/

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

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/11 17:22:49

Windows 部署大模型 不联网 本地离线推理

Ollama:本地模型运行引擎 代码模型 (根据自身需求选用) 此处 以 qwen2.5-coder:7b-instruct 为例 (后来需要不联网翻译一些资料,用的是 translategemma:4b模型) Open WebUI:本地网页界面&am…

作者头像 李华
网站建设 2026/9/11 17:22:14

Java Swing船舶管理系统:从JDBC到FTP上报的存量系统解析与升级实践

简介:国内航运企业船舶管理系统是一套面向中小航运企业船舶管理场景的完整Java项目源码,适用于正在学习企业级管理系统开发的学生或初级程序员。资源包共69个文件,包含20个Java源文件、38个已编译的class文件、必要jar依赖及Excel数据文件&am…

作者头像 李华
网站建设 2026/9/11 17:21:30

G-Helper 快速上手指南:用一个 exe 接管你的华硕笔记本

G-Helper 快速上手指南:用一个 exe 接管你的华硕笔记本 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbook, E…

作者头像 李华
网站建设 2026/9/11 17:17:19

MidScene.js 自然语言驱动浏览器自动化:新手 30 分钟上手指南

MidScene.js 自然语言驱动浏览器自动化:新手 30 分钟上手指南 【免费下载链接】midscene GUI Agent for E2E Testing 项目地址: https://gitcode.com/GitHub_Trending/mid/midscene MidScene.js 是一个开源的 GUI 自动化 Agent:你用一句中文或英文…

作者头像 李华