代码解读一 文件名“ANO_Imu.c”

本文提供了ANO_Imu.c文件的代码,并对其中的Mahony互补滤波算法进行了初步解读。尽管代码中的一些定义较为复杂,但作者尝试通过对比经典Mahony代码来理解其逻辑。代码包括变量定义、归一化处理、坐标变换、误差计算、PI补偿以及四元数解算等步骤。虽然进行了优化,具体效果需要实际测试。姿态解算的后续部分将涉及PID控制,这是一个挑战性的任务。
摘要由CSDN通过智能技术生成

我把这个文件的所有代码贴上来了,供大家参考,由于本人水平有限,且匿名代码注释比较少,所以很多也不是很懂,实在是一些莫名的定义太多了,什么w/x/y/z/h之类的,只求先能看懂大概逻辑,至于一些细节日后再啃

先来一个融合磁力计的Mahony互补滤波算法
https://blog.csdn.net/zhiyu_buliang/article/details/89056519

有心的人会发现匿名现在的代码也不过是根据原来经典Mahony代码改过来的,大致意思都在,仔细对比下看看。
本人在匿名代码的基础上增加了一些注释,只是个人的见解,免不了会有很多错误,希望大家多多指正。

 /******************** (C) COPYRIGHT 2016 ANO Tech ***************************
 * 作者		 :匿名科创
 * 文件名  :ANO_IMU.c
 * 描述    :姿态解算函数
 * 官网    :www.anotc.com
 * 淘宝    :anotc.taobao.com
 * 技术Q群 :190169595
*****************************************************************************/
#include "Ano_Imu.h"
#include "Ano_Math.h"
#include "Ano_Filter.h"
#include "Ano_DT.h"
//#include "ANO_RC.h"



/*参考坐标,定义为ANO坐标 --->	西北天



俯视,机头方向为x正方向
     +x
     |
 +y--|--
     |
		 
*/	

//涉及磁力计的XY二维变换
//原谅我没看懂到底是干嘛的
void w2h_2d_trans(float w[VEC_XYZ],float ref_ax[VEC_XYZ],float h[VEC_XYZ])
{
	h[X] =  w[X] *  ref_ax[X]  + w[Y] *ref_ax[Y];
	h[Y] =  w[X] *(-ref_ax[Y]) + w[Y] *ref_ax[X];
	
}

void h2w_2d_trans(float h[VEC_XYZ],float ref_ax[VEC_XYZ],float w[VEC_XYZ])
{
	w[X] = h[X] *ref_ax[X] + h[Y] *(-ref_ax[Y]);
	w[Y] = h[X] *ref_ax[Y] + h[Y] *  ref_ax[X];
	
}

//没看懂
float mag_yaw_calculate(float dT,float mag_val[VEC_XYZ],float g_z_vec[VEC_XYZ],float h_mag_val[VEC_XYZ])//
{
//	float mag_h_norm;
//	float mag_2d_vec[VEC_XYZ];
		vec_3dh_transition(g_z_vec, mag_val, h_mag_val);
		
//		mag_h_norm = my_sqrt(my_pow(h_mag_val[X]) + my_pow(h_mag_val[Y]));
//		
//		mag_2d_vec[X] = safe_div(h_mag_val[X],mag_h_norm,0);
//		mag_2d_vec[Y] = safe_div(h_mag_val[Y],mag_h_norm,0);
	
//	return (fast_atan2(mag_2d_vec[Y], mag_2d_vec[X]) *57.3f) ;// 	
	return (fast_atan2(h_mag_val[Y], h_mag_val[X]) *57.3f) ;// 	
}
	


#define USE_MAG
#define USE_LENGTH_LIM


//imu最长的结构体定义变量赋初值
_imu_st imu_data =  {1,0,0,0,
					{0,0,0},
				
  • 9
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值