没有合适的资源?快使用搜索试试~ 我知道了~
首页德国开源电调代码解析:姿态检测与长期融合策略
德国开源电调代码解析:姿态检测与长期融合策略
5星 · 超过95%的资源 需积分: 49 66 下载量 85 浏览量
更新于2024-07-10
3
收藏 527KB PDF 举报
在深入研究德国MK开源电调的代码过程中,作者经历了从传统四元数姿态检测到卡尔曼滤波的转变,最终被德国代码的独特之处所吸引。德国人的代码在四轴飞行器的姿态检测算法上有显著的优势,尤其是在稳定性方面达到了商品级水平。核心部分是其姿态检测算法: 1. 实时融合:该过程频繁执行,通过对陀螺仪和加速度计的测量值进行误差校正、积分处理,然后将滤波后的数据做差,根据需要进行衰减和限幅,最后将衰减值加入到实际角度计算中。这种方法旨在快速响应变化。 2. 长期融合:每256个检测周期执行一次,包括对角速度漂移的估计和陀螺仪中立点的实时修正。通过使用加速度计积分与陀螺仪积分的差值,消除有害加速度的影响,提高漂移估计的准确性。当考虑了漂移修正后的角度与未修正的差异较大时,表明陀螺仪角速率存在较大误差,需要对中立点进行调整。 长期融合的重要性不言而喻,它确保了系统在长时间运行下的稳定性,避免了由于陀螺仪漂移导致的控制精度下降。与卡尔曼滤波相比,虽然卡尔曼滤波是线性系统的最优估计方法,但德国电调的非卡尔曼融合策略可能在某些特定飞行条件下提供了更好的实时性能和鲁棒性。 德国MK开源电调的代码通过创新的姿态检测算法,优化了四轴飞行器的动态性能和控制精度,对于初学者和开发者来说,这是一个值得学习和借鉴的案例,对于提升四轴无人机的飞行品质具有重要意义。通过移植和调试,作者成功地将这些技术应用到自己的项目中,实现了商品级的飞行稳定性。
资源详情
资源推荐
Mess_IntegralRoll = -(Umschlag180Roll - 10000L);
Mess_IntegralRoll2 = Mess_IntegralRoll;
}
if(Mess_IntegralRoll <-Umschlag180Roll)//一样
{
Mess_IntegralRoll = (Umschlag180Roll - 10000L);
Mess_IntegralRoll2 = Mess_IntegralRoll;
}
if(AdWertRoll < 15) MesswertRoll = -1000;
if(AdWertRoll < 7) MesswertRoll = -2000;
if(PlatinenVersion == 10)
{
if(AdWertRoll > 1010)
MesswertRoll = +1000;
if(AdWertRoll > 1017) MesswertRoll = +2000;
}
else
{
if(AdWertRoll > 2020) MesswertRoll = +1000;
if(AdWertRoll > 2034) MesswertRoll = +2000;
}
// Nick ++++++++++++++++++++++++++++++++++++++++++++++++
MesswertNick -= tmpl2;
MesswertNick -= (tmpl*Parameter_AchsGegenKopplung1)/512L;
Mess_IntegralNick2 += MesswertNick;
/*LageKorrekturNick 是通过加速度计积分和角速率积分的积分进行做差比较得到
的,*/
Mess_IntegralNick += MesswertNick - LageKorrekturNick;
if(Mess_IntegralNick > Umschlag180Nick)
{
Mess_IntegralNick = -(Umschlag180Nick - 10000L);
Mess_IntegralNick2 = Mess_IntegralNick;
}
if(Mess_IntegralNick <-Umschlag180Nick)
{
Mess_IntegralNick = (Umschlag180Nick - 10000L);
Mess_IntegralNick2 = Mess_IntegralNick;
}
if(AdWertNick < 15)
MesswertNick = -1000;
if(AdWertNick < 7) MesswertNick = -2000;
if(PlatinenVersion == 10)
{
if(AdWertNick > 1010) MesswertNick = +1000;
if(AdWertNick > 1017) MesswertNick = +2000;
}
else
{
if(AdWertNick > 2020)
MesswertNick = +1000;
if(AdWertNick > 2034) MesswertNick = +2000;
}
//++++++++++++++++++++++++++++++++++++++++++++++++
// ADC einschalten
ANALOG_ON; //重新开始模拟量的采集
//++++++++++++++++++++++++++++++++++++++++++++++++
/*上一步计算完了积分之后,现在将积分赋值,因此后面使用的就将是
IntegralNick,IntegralNick2 等数据了
*/
Integral_Gier = Mess_Integral_Gier;
IntegralNick = Mess_IntegralNick;
IntegralRoll = Mess_IntegralRoll;
IntegralNick2 = Mess_IntegralNick2;
IntegralRoll2 = Mess_IntegralRoll2;
/*这部分代码不执行,因为在 EEPROM 中 CFG_DREHRATEN_BEGRENZER 这一位
为 0*/
if(EE_Parameter.GlobalConfig & CFG_DREHRATEN_BEGRENZER && !Looping_Nick
&& !Looping_Roll)
{
if(MesswertNick > 200)
MesswertNick += 4 * (MesswertNick - 200);
else if(MesswertNick < -200)
MesswertNick += 4 * (MesswertNick + 200);
if(MesswertRoll > 200)
MesswertRoll += 4 * (MesswertRoll - 200);
else if(MesswertRoll < -200)
MesswertRoll += 4 * (MesswertRoll + 200);
}
if(Poti1 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110)
Poti1++;
else if(Poti1 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110 && Poti1)
Poti1--;
if(Poti2 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110) Poti2++; else if(Poti2 >
PPM_in
剩余35页未读,继续阅读
qq404922531
- 粉丝: 5
- 资源: 49
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 批量文件重命名神器:HaoZipRename使用技巧
- 简洁注册登录界面设计与代码实现
- 掌握Python字符串处理与正则表达式技巧
- YOLOv5模块改进 - C3与RFAConv融合增强空间特征
- 基于EasyX的C语言打字小游戏开发教程
- 前端项目作业资源包:完整可复现的开发经验分享
- 三菱PLC与组态王实现加热炉温度智能控制
- 使用Go语言通过Consul实现Prometheus监控服务自动注册
- 深入解析Python进程与线程的并发机制
- 小波神经网络均衡算法:MATLAB仿真及信道模型对比
- PHP 8.3 中文版官方手册(CHM格式)
- SSM框架+Layuimini的酒店管理系统开发教程
- 基于SpringBoot和Vue的招聘平台完整设计与实现教程
- 移动商品推荐系统:APP设计与实现
- JAVA代码生成器:一站式后台系统快速搭建解决方案
- JSP驾校预约管理系统设计与SSM框架结合案例解析
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功