尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

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

固件功能不够用?ArduPilot Lua脚本救场 固件功能不够用?ArduPilot Lua脚本救场【免费下载链接】ardupilotArduPlane, ArduCopter, ArduRover, ArduSub source项目地址: https://gitcode.com/GitHub_Trending/ar/ardupilotArduPilot 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 --boardCubeBlack 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_OPTS3在地面站消息栏就能看到脚本心跳和内存占用。跑通这一步,你的闭环就成了。 两个真实场景场景一:低电量自动播报(巡检机)需求:电量低于红线时地面站立刻收到报警,避免巡到一半失联。用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为关 避坑:飞控脚本内存管理清单HEAP_SIZE别贪大(43/100/200KB由板子决定,够用就好,改后重启才生效)红线被触就查逻辑(先怀疑回调写得太重,再考虑调VM_I_COUNT)正式任务开校验和(SCR_LD_CHECKSUM防脚本被换,配SCR_RUN_CHECKSUM双保险)线程优先级别乱抬(默认Normal即可,抬高会抢主循环CPU,官方明确警告影响稳定)调试期挂DEBUG_OPTS3(看内存与耗时曲线,定位完务必清零)高频回调做轻计算(至少间隔100ms以上,内存吃紧时手动collectgarbage())上天之前先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),仅供参考
返回列表