project
•
2026年4月16日
•
35 次阅读
正在进行中-基于自训练大模型的实时PID调参系统
tech
<div align="center">
<div style="background: linear-gradient(135deg, #0d1117 0%, #161b22 100%); border-radius: 16px; padding: 24px; max-width: 600px; margin: 25px auto; box-shadow: 0 12px 40px rgba(0,0,0,0.3); border: 1px solid #30363d; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; position: relative; overflow: hidden;">
<!-- 装饰性背景元素 -->
<div style="position: absolute; top: -50px; right: -50px; width: 150px; height: 150px; background: linear-gradient(45deg, #23863622, #1f6feb22); border-radius: 50%; z-index: 0;"></div>
<div style="position: relative; z-index: 1;">
<!-- 头部:GitHub图标和标题 -->
<div style="display: flex; align-items: center; margin-bottom: 20px;">
<div style="background: linear-gradient(135deg, #238636, #1f6feb); border-radius: 12px; padding: 12px; margin-right: 16px; box-shadow: 0 4px 12px rgba(31, 111, 235, 0.3);">
<svg height="32" viewBox="0 0 16 16" width="32" style="fill: white;">
<path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"></path>
</svg>
</div>
<div>
<h2 style="margin: 0; color: #f0f6fc; font-size: 1.5em; font-weight: 600; background: linear-gradient(90deg, #58a6ff, #238636); -webkit-background-clip: text; -webkit-text-fill-color: transparent;">microLLM_trainer-dronePID</h2>
<p style="margin: 5px 0 0 0; color: #8b949e; font-size: 0.95em;"><span style="color: #58a6ff;">YCwithoutbrain</span> / <span style="color: #f0f6fc;">microLLM_trainer-dronePID</span></p>
</div>
</div>
<!-- 项目描述 -->
<div style="background: rgba(22, 27, 34, 0.7); border-radius: 10px; padding: 16px; margin-bottom: 20px; border-left: 4px solid #238636;">
<p style="margin: 0; color: #c9d1d9; line-height: 1.5;">🚁 <strong>无人机PID调参专用的小型语言模型训练工具</strong><br>结合微调技术与无人机控制领域知识,实现智能PID参数优化</p>
</div>
<!-- 技术标签 -->
<div style="margin-bottom: 24px;">
<div style="display: flex; flex-wrap: wrap; gap: 8px;">
<span style="background: rgba(35, 134, 54, 0.15); color: #3fb950; padding: 6px 12px; border-radius: 20px; font-size: 0.85em; font-weight: 500; border: 1px solid rgba(35, 134, 54, 0.3);">🤖 LLM微调</span>
<span style="background: rgba(31, 111, 235, 0.15); color: #58a6ff; padding: 6px 12px; border-radius: 20px; font-size: 0.85em; font-weight: 500; border: 1px solid rgba(31, 111, 235, 0.3);">🛸 无人机控制</span>
<span style="background: rgba(163, 113, 247, 0.15); color: #bc8cff; padding: 6px 12px; border-radius: 20px; font-size: 0.85em; font-weight: 500; border: 1px solid rgba(163, 113, 247, 0.3);">📊 PID优化</span>
<span style="background: rgba(248, 81, 73, 0.15); color: #ff7b72; padding: 6px 12px; border-radius: 20px; font-size: 0.85em; font-weight: 500; border: 1px solid rgba(248, 81, 73, 0.3);">🧠 强化学习</span>
</div>
</div>
<!-- 访问按钮 -->
<div style="display: flex; gap: 12px; justify-content: center;">
<a href="https://github.com/YCwithoutbrain/microLLM_trainer-dronePID" target="_blank" style="flex: 1; background: linear-gradient(135deg, #238636, #1f6feb); color: white; padding: 14px 24px; border-radius: 10px; text-decoration: none; font-weight: 600; font-size: 1em; text-align: center; transition: all 0.3s ease; box-shadow: 0 4px 15px rgba(31, 111, 235, 0.3); display: flex; align-items: center; justify-content: center; gap: 8px;" onmouseover="this.style.transform='translateY(-3px)'; this.style.boxShadow='0 8px 25px rgba(31, 111, 235, 0.4)';" onmouseout="this.style.transform='translateY(0)'; this.style.boxShadow='0 4px 15px rgba(31, 111, 235, 0.3)';">
<svg height="20" viewBox="0 0 16 16" width="20" style="fill: white;"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"></path></svg> 访问仓库
</a>
<a href="https://github.com/YCwithoutbrain/microLLM_trainer-dronePID/fork" target="_blank" style="flex: 1; background: rgba(35, 134, 54, 0.1); color: #3fb950; padding: 14px 24px; border-radius: 10px; text-decoration: none; font-weight: 600; font-size: 1em; text-align: center; transition: all 0.3s ease; border: 2px solid rgba(35, 134, 54, 0.3); display: flex; align-items: center; justify-content: center; gap: 8px;" onmouseover="this.style.background='rgba(35, 134, 54, 0.2)'; this.style.transform='translateY(-3px)';" onmouseout="this.style.background='rgba(35, 134, 54, 0.1)'; this.style.transform='translateY(0)';">
<svg height="20" viewBox="0 0 16 16" width="20" style="fill: #3fb950;"><path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 00.75-.75v-.878a2.25 2.25 0 111.5 0v.878a2.25 2.25 0 01-2.25 2.25h-1.5v2.128a2.251 2.251 0 11-1.5 0V8.5h-1.5A2.25 2.25 0 013 6.25v-.878a2.25 2.25 0 111.5 0zM5 3.25a.75.75 0 100-1.5.75.75 0 000 1.5zm6 0a.75.75 0 100-1.5.75.75 0 000 1.5z"></path></svg> Fork 项目
</a>
</div>
<!-- 底部信息 -->
<div style="margin-top: 20px; padding-top: 16px; border-top: 1px solid #30363d; display: flex; justify-content: space-between; color: #8b949e; font-size: 0.85em;">
<div><span style="color: #58a6ff;">🔗</span><span style="margin-left: 6px;">github.com/YCwithoutbrain/microLLM_trainer-dronePID</span></div>
<div><span style="color: #3fb950;">●</span><span style="margin-left: 6px;">项目活跃</span></div>
</div>
</div>
</div>
</div>
2026_3_18
突发尤里卡,冒出idea,开始新项目:“自训练微型大模型-小型任务特化型模型项目”。
其实最开始只是想弄一个生成式预测模型来自动调多旋翼无人机的PID,但是然后了解到huggingface出了开源大模型微调工具Transformers + PEFT可以低成本训练模型。
于是其实可以做成集成式训练工具的样子,用来方便地训练特定小任务模型。
目标是做出可以方便地训练出可以在低算力设备上部署的微型小任务模型的工具。(当然第一步是训练出一个能自动调PID的在机载电脑上部署的模型。)
豆老师提示了训练此种任务特化型的模型根本无需使用通用大模型,使用peft的轻量级基座即可,而且完全有能力部署在算力有限的机载电脑上。
针对PX4飞机的PID数据收集和生成方法,可以使用仿真环境模拟不实飞收集,感觉不够帅气,不如实飞。
发现可以实现“实时采集实飞数据生成推荐PID并实时返回飞控”,其实就是一套核心处理器为微型模型的闭环PID调参系统。关键要求:采集+推理+写入耗时<5ms(因为PX4固件的控制周期是200Hz)、生成的PID写入前做安全校验、自动重连、异常时恢复默认PID。
初步硬件选择:树莓派4/5,PX4飞控(未定)
2026_3_19
已明确方向,使用我的Y9000p电脑训练PID调参模型,使用豆老师给我写的数据收集代码(在PX4 SITL(Software In the Loop)仿真里收集Gazebo仿真数据1万条),并补充1000条实飞数据,在模拟训练中加入风速,但是训练时不使用风速,因为我无人机没有风速计。
使用轻量级 Transformer 基座 + PEFT 配置训练模型,LoRA方式训练,onnx模型。
将训练好的模型拷贝到树莓派5上接入闭环系统并运行。
此项目成果的应用潜力:机载PID调参模型、小型任务特化模型训练器、广适配性PID调参地面站(与远程mavlink协议空地链接配合)
确定了硬件选型,使用杨老师直接拿给我的树莓派4b4g(!?强强?!),PX5x飞控。
2026_3_20
今晚不断电,开始训练模型,因为猜测需要跑很长时间。
豆老师给了我windows和树莓派上的直接应用代码,应该都是py脚本形式的,我作为py脚本小子是很熟悉了。
不过在训练这期间我还要把树莓派怎么用先学一下,因为有了解到这玩意是跑linux系统的,希望不会太难。
树莓派必须用Raspberry Pi OS Bookworm 64 位,32 位系统 onnxruntime 速度慢 5 倍。
仅在 ALT_HOLD/POSHOLD/LOITER/GUIDED 模式下自动调参,手动模式禁用。
使用3.9版本的python虚拟环境跑仿真数据收集。
难绷,使用wsl运行ubuntu跑仿真一堆看不懂的报错,豆老师也无力回天,于是打算依照豆老师说的使用“带物理逻辑的增强版预制数据集”…………先试试吧。
使用预制数据并放弃了peft优化成功训练出来了一版模型……
预估性能是完全体的70%……
有点弱……
意识到可能是之前的ubuntu安装配置有误,打算重新跑一遍仿真。
本以为费时间最长的会是收集仿真数据本身,结果是安装仿真环境……
2026_3_21
再战仿真,可能是老版本系统和旧版本仿真程序停止维护的问题,这回换成推荐版本ubuntu24.04,和专门支持的gz-jetty。
豆老师给的仿真方案可能是老版本的不支持了。
使用ubuntu24.04+gz_jetty。
已解决仿真数据生成问题,成功生成了1万条仿真数据。
重新尝试使用轻量级 Transformer 基座 + PEFT 配置训练模型。
配置新python虚拟环境并安装环境和依赖。
第一版仿真数据训练的模型性能不佳,现从数据收集开始优化,重新训练。
改进了算法和逻辑,现在可以生成更优质的仿真数据。
但是出现了生成缓慢的问题,改为使用多cpu核心并行生成。
尝试了多次,只好放弃peft+LoRA,只使用transformer+int8。
2026_3_22
模型训练基本完成,后续只需进行实飞数据的增量训练。
现在开始树莓派<->飞控通信和树莓派部署。
初步接口定义确定,
树莓派:PIN6\PIN8\PIN10:GND\TXD\RXD
飞控:Tel2PIN2\Tel2PIN3\Tel2PIN6:TX\RX\GND
2026_3_25
终于实现了飞控和树莓派的通讯,刚刚成功收集了从飞控来的飞行数据,接下来是部署模型看看PID有没有反应。
树莓派有权限问题,每次开机必须执行:
sudo chmod 666 /dev/serial10
获取串口权限然后py运行脚本。
2026_3_26
模型部署成功,但是效果太差,现改变思路:
从预生成的1万条数据集开始,改进生成的数据集匹配能从飞控接受的数据,为每条生成的数据生成匹配的最优PID(由豆老师直接给出),再以此数据集训练模型(依旧使用transformer+peft+LoRA产出.pth模型)。
树莓派安装torch困难,改为使用.onnx模型,以脱离使用torch。
2026_3_27
昨晚成功了,二阶段的部署比较顺利,可能是因为采用了onnx模型,但是其实际效果依旧值得怀疑,不过用来演示来骗项目支持是够了(
2026_3_29
最担心的问题还是出现了,生成的PID参数并没有真实写入飞控。
正在尝试解决……
解决了,竟然是参数名写错了,改正就行了(
新添了一个带有接收真实参数功能的脚本(部署时不使用:功能多有等待延迟高)
现在实现了运行部署脚本QGC可以看到PID参数实时跳动。
2026_4_1
已汇报杨老师,项目进入新阶段,待办目标:
1.组装7寸实机收集数据
2.学习git,将成果发布github
3.使用实机数据增量训练以及单独训练两版新模型并测试效果
4.运行gazebo仿真收集仿真数据
2026_4_12
刚刚进行了实验飞机的纯净试飞,完成。
纯净飞行证明飞机本身没问题,以及感受了纯净飞行的手感后,直接开启了预生成数据集的模型进行测试。
结果是在模型写入PID的情况下飞行手感和姿态状况有了明显不同,而且出现了随机化的遥感空置漂移和电机震颤,证明PID写入起效。
而且此次测试使用手机开启qgc和termux同时检测飞控和树莓派,通信除了手机热点在5米左右出现卡顿之外试飞顺畅,QGC和termux都成功接收到了数据未发生断联。
接下来写一个py脚本用来在局域网里快速找到并连接我的树莓派。已完成。