ArduPilot Lua 脚本自定义指令系统完整指南:不动固件跑通第一条脚本

发布时间:2026/9/11 3:25:13

ArduPilot Lua 脚本自定义指令系统完整指南:不动固件跑通第一条脚本 ArduPilot Lua 脚本自定义指令系统完整指南不动固件跑通第一条脚本【免费下载链接】ardupilotArduPlane, ArduCopter, ArduRover, ArduSub source项目地址: https://gitcode.com/GitHub_Trending/ar/ardupilot想给飞控加功能难道只能改核心固件重新编译ArduPilot 自定义指令系统Lua 脚本引擎就是为解决这个问题存在的把一个.lua文件放进飞控就能读传感器、切模式、执行自己的逻辑不用动一行固件。 Lua 脚本引擎到底在做什么可以把 AP_Scripting 模块 理解成飞控里装了一台小型解释器它负责加载脚本、给脚本分配内存、把脚本线程挂在低优先级上跑并通过绑定接口vehicle、ahrs、params、gcs这些对象让脚本安全地读写飞控状态。你写的脚本不会和飞控主循环抢 CPU——每个脚本单轮能执行的虚拟机指令数有上限超了会被叫停所以就算脚本写得差也不至于拖垮姿态控制。脚本的开关和边界全部由SCR_前缀参数控制源码定义见 AP_Scripting.cpp常用 6 个参数名作用建议值SCR_ENABLE脚本系统总开关1启用 Lua1改后需重启SCR_HEAP_SIZE分配给脚本的堆内存1KB~1MB默认即可脚本报内存不足时加到 80000SCR_VM_I_COUNT单轮 VM 指令上限防脚本占满 CPU默认 10000长脚本调到 100000~200000SCR_DEBUG_OPTS调试位掩码bit1 打印内存/耗时bit5 记录脚本校验和调试期设 1交付前清 0SCR_THD_PRIORITY脚本线程优先级默认故意设低保持默认 0别乱抬SCR_LD_CHECKSUM起飞前校验已加载脚本不匹配禁止解锁-1关部署稳定后填入计算值 脚本能直接帮你干成的 3 件事以下 3 个方向都来自仓库里现成的 appletlibraries/AP_Scripting/applets/每个都附带.md说明改个名拷走就能用。用通道切脚本一套飞机多种行为目标不重传文件只靠遥控器通道或 GCS 在几组脚本间热切换比如作业模式和返航护航模式各挂一个脚本。做法参考Script_Controller.lua的套路脚本里用rc:channel()读通道值决定加载哪个脚本切换由控制器脚本统一接管旧脚本先干净退出再加载新的。关键参数SCR_ENABLE1通道映射用遥控器自身的 AUX 通道设置不涉及 SCR 参数。参数上锁防止远程误改目标机器交付后禁止任何人通过 GCS 远程改关键参数PID、围栏阈值但本地地面调试不受影响。做法param-lockdown.lua会拦截参数写入请求并回 GCS 消息用一个PARAM_LOCK_ENAB开关随时解除锁定。关键参数SCR_ENABLE1、PARAM_LOCK_ENAB1文档提示 ArduPilot 4.7 及以上才建议启用。电池容量估算把标称容量变成实测值目标标称容量和老化后的真实容量往往对不上影响航程判断和降落电量。做法BattEstimate.lua在飞行中持续采样电压与电流落地后把累计放电量写入 DataFlash 日志几架次下来就能校准真实容量。关键参数开启对应日志的LOG_BITMASK位SCR_HEAP_SIZE保持默认即可脚本本身很轻。第一条 ArduPilot 脚本跑通步骤确认固件带脚本引擎AP_Scripting_config.h 里程序空间上限超过 1MB 的构建自动开启脚本支持——ArduCopter、ArduPlane 等标准构建都包含先在 SITL 模拟器里验证最稳妥模拟器的脚本放在启动目录下的scripts/文件夹。启用地面站把SCR_ENABLE设为 1重启飞控。传脚本把.lua文件拷进 SD 卡的APM/scripts/目录固件启动时会自动建这个目录。验证看 GCS 控制台以Lua:开头的消息——加载成功、报错都会在这里打出来。需要自己编译时只跑这一段命令git clone https://gitcode.com/GitHub_Trending/ar/ardupilot cd ardupilot Tools/environment_install/install-prereqs-ubuntu.sh -y✅ 参数、性能与安全清单内存GCS 里看到 Required SCR_HEAP_SIZE over xxx 提示就按提示值上调改后重启。垃圾回收长时运行脚本里定期调用collectgarbage()别等内存吃满。高频回调用协程返回值控制节奏return update, 100表示每 100ms 执行一次重计算别塞进 100ms 级的循环。调试日志SCR_DEBUG_OPTS设 1 可看每个脚本的内存与耗时定位慢脚本后再归 0。SITL 先行任何新脚本先在模拟器飞一遍确认不报 Lua: 错误再上实机。校验和部署稳定后用SCR_LD_CHECKSUM/SCR_RUN_CHECKSUM锁住脚本内容防止 SD 卡被换、脚本被改。目录开关SCR_DIR_DISABLE的 bit1 会关闭APM/scripts目录加载——脚本没生效时别漏查它。脚本没生效按这个顺序排查Q脚本放了但没跑先查什么顺序是SCR_ENABLE是否为 1 且已重启 → 文件扩展名是不是.lua、有没有在APM/scripts/→ GCS 控制台搜Lua:开头的报错 →SCR_DIR_DISABLE是否把目录禁了。Q参数改完要不要重启飞控SCR_ENABLE、SCR_HEAP_SIZE、SCR_THD_PRIORITY、SCR_DIR_DISABLE标注了 RebootRequired必须重启SCR_USER1~6、SCR_DEBUG_OPTS这类运行时参数不用。Q脚本跑挂会拖垮飞控吗单轮指令数被SCR_VM_I_COUNT封顶线程默认最低优先级脚本异常会被捕获并以Lua:报错显示——它更可能是不工作而不是炸机但逻辑错误仍可能影响飞行行为所以坚持 SITL 先行。Q任务Mission里的 DO SCRIPTING 指令和脚本什么关系任务项下发脚本启动命令后AP_Mission 会把脚本挂到任务执行链上脚本跑完该任务项才算完成这就是自定义指令进入任务规划的标准入口。下一步从 libraries/AP_Scripting/examples/ 挑一个最简单的脚本如hello_world.lua拷进APM/scripts/在 SITL 里把第一条Lua:日志跑出来想直接上功能翻一遍 applets 目录 的.md说明多数脚本改几个参数就能装机。更多问答可去 ArduPilot 社区论坛Discourse的 Scripting 板块。【免费下载链接】ardupilotArduPlane, ArduCopter, ArduRover, ArduSub source项目地址: https://gitcode.com/GitHub_Trending/ar/ardupilot创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/11 3:25:13

n8n代码节点实战指南:从调试机制到高效数据处理技巧

作为一个经常拿 n8n 当业务中台用的老玩家,我得先说实话:很多人把 n8n 当成一个"拉积木"工具,靠粘贴节点把流程串起来就完事了。但真到生产环境里跑一阵子你就会发现,最卡脖子的根本不是节点怎么连,而是代码…

2026/9/11 3:25:13

Physical AI边缘部署实战:低延迟视觉模型的原理与优化

1. 先搞清楚:Physical AI 为什么非“低延迟”不可1.1 Physical AI 到底是什么我最早接触 Physical AI 这个词,是在做机械臂视觉抓取项目的时候。当时团队内部争论了很久:这个东西和传统的计算机视觉、机器人控制到底有什么区别?后…

2026/9/11 5:40:26

Postman太臃肿?15款接口测试工具实测:从curl到Apifox全面对比

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/11 5:40:26

鸿蒙ArkUI布局完全指南:从Row/Column到Grid的实战与避坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/11 5:40:26

单机8卡GPU利用率低?一文讲透训练调优核心方法

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/11 5:40:26

POI 2010 GIL-Guilds图着色问题解析与实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/11 5:40:26

Arm-2D静态工程落地:Cortex-M嵌入式图形加速硬核实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/11 5:35:26

网页标题SEO合规性检查全流程:从长度截断到关键词布局

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/10 16:39:38

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/10 11:16:38

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/9 16:31:09

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/10 12:32:02

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/10 15:19:50

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/10 15:49:53

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码