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

2023-05-16

我把这个文件的所有代码贴上来了,供大家参考,由于本人水平有限,且匿名代码注释比较少,所以很多也不是很懂,实在是一些莫名的定义太多了,什么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},
					{0,0,0},
					{0,0,0},
					{0,0,0},
					{0,0,0},
					{0,0,0},
					 0,0,0};

//imu状态结构体定义变量赋初值
_imu_state_st imu_state = {1,1,1,1,1,1,1,1};


static float vec_err[VEC_XYZ];
static float vec_err_i[VEC_XYZ];
static float q0q1,q0q2,q1q1,q1q3,q2q2,q2q3,q3q3,q1q2,q0q3;//q0q0,				
static float mag_yaw_err,mag_val_f[VEC_XYZ];					
static float imu_reset_val;		

static u16 reset_cnt;


//这个t变量很重要啊
float t[3][3],t_temp;

//float rpy_enr[VEC_XYZ],rpy_f1_a[VEC_XYZ],rpy_f1_b[VEC_XYZ],vec_err_f1[VEC_XYZ];
float imu_test[3];


//重中之重 理解姿态解算全靠它了
//此函数在文件 Ano_FlightDataCal.c 被调用,
//入口参数	采样周期/imu状态结构体指针(实际传入的是&imu_state)/三向陀螺仪/三向加速度计/三向磁力计/imu结构体句柄指针(实际传入的是&imu_data)
void IMU_update(float dT,_imu_state_st *state,float gyr[VEC_XYZ], s32 acc[VEC_XYZ],s16 mag_val[VEC_XYZ],_imu_st *imu)
{
//	const float kp = 0.2f,ki = 0.001f;
//	const float kmp = 0.1f;
	
	static float kp_use = 0,ki_use = 0,mkp_use = 0;

	float acc_norm_l,acc_norm_l_recip,q_norm_l;
		
	float acc_norm[VEC_XYZ];

	float d_angle[VEC_XYZ];
	


	//先行计算好,直接调用速度快
	//其实w/x/y/z是和q0/1/2/3是一样的,可能指针运算速度快也比较方便
//		q0q0 = imu->w * imu->w;							
		q0q1 = imu->w * imu->x;
		q0q2 = imu->w * imu->y;
		q1q1 = imu->x * imu->x;
		q1q3 = imu->x * imu->z;
		q2q2 = imu->y * imu->y;
		q2q3 = imu->y * imu->z;
		q3q3 = imu->z * imu->z;
		q1q2 = imu->x * imu->y;
		q0q3 = imu->w * imu->z;
	
	//根据文件 Ano_FlightDataCal.c 不难看出obs_en始终为0
		if(state->obs_en)
		{
			//计算机体坐标下的运动加速度观测量。坐标系为北西天
			for(u8 i = 0;i<3;i++)
			{
				s32 temp = 0;
				for(u8 j = 0;j<3;j++)
				{
					
					temp += imu->obs_acc_w[j] *t[j][i];//t[i][j] 转置为 t[j][i]
				}
				imu->obs_acc_a[i] = temp;
				
				imu->gra_acc[i] = acc[i] - imu->obs_acc_a[i];
			}
		}
		//只执行下面这句
		//把测量值传给指针保存,这种操作很常见
		else
		{
			for(u8 i = 0;i<3;i++)
			{			
				imu->gra_acc[i] = acc[i];
			}
		}
    //根号分之一
		acc_norm_l_recip = my_sqrt_reciprocal(my_pow(imu->gra_acc[X]) + my_pow(imu->gra_acc[Y]) + my_pow(imu->gra_acc[Z]));
		//根号
		acc_norm_l = safe_div(1,acc_norm_l_recip,0);
		
		//加速度计的读数,单位化。
		for(u8 i = 0;i<3;i++)
		{
			acc_norm[i] = imu->gra_acc[i] *acc_norm_l_recip;
		}

		

		
	// 载体坐标下的x方向向量,单位化。	RCb 与 (1 0 0)的转置相乘
    t[0][0] = imu->x_vec[X] = 1 - (2*q2q2 + 2*q3q3);
    t[0][1] = imu->x_vec[Y] = 2*q1q2 - 2*q0q3;
    t[0][2] = imu->x_vec[Z] = 2*q1q3 + 2*q0q2;
		 
	// 载体坐标下的y方向向量,单位化。	RCb 与 (0 1 0)的转置相乘
    t[1][0] = imu->y_vec[X] = 2*q1q2 + 2*q0q3;
    t[1][1] = imu->y_vec[Y] = 1 - (2*q1q1 + 2*q3q3);
    t[1][2] = imu->y_vec[Z] = 2*q2q3 - 2*q0q1;
		
    // 载体坐标下的z方向向量(等效重力向量、重力加速度向量),单位化	RCb 与 (0 0 1)的转置相乘
    t[2][0] = imu->z_vec[X] = 2*q1q3 - 2*q0q2;
    t[2][1] = imu->z_vec[Y] = 2*q2q3 + 2*q0q1;
    t[2][2] = imu->z_vec[Z] = 1 - (2*q1q1 + 2*q2q2);
		
	//水平面方向向量
	imu->hx_vec[X] = t[0][0];
	imu->hx_vec[Y] = t[1][0];
	
	
	//没懂
	//计算载体坐标下的运动加速度。(与姿态解算无关)
		for(u8 i = 0;i<3;i++)
		{
			imu->a_acc[i] = (s32)(acc[i] - 981 *imu->z_vec[i]);
		}
		
    
		//计算世界坐标下的运动加速度。坐标系为北西天
		for(u8 i = 0;i<3;i++)
		{
			s32 temp = 0;
			for(u8 j = 0;j<3;j++)
			{
				
				temp += imu->a_acc[j] *t[i][j];
			}
			imu->w_acc[i] = temp;
		}
		
		w2h_2d_trans(imu->w_acc,imu_data.hx_vec,imu->h_acc);
		
		
    //计算向量误差
    vec_err[X] =  (acc_norm[Y] * imu->z_vec[Z] - imu->z_vec[Y] * acc_norm[Z]);
    vec_err[Y] = -(acc_norm[X] * imu->z_vec[Z] - imu->z_vec[X] * acc_norm[Z]);
    vec_err[Z] = -(acc_norm[Y] * imu->z_vec[X] - imu->z_vec[Y] * acc_norm[X]);


#ifdef USE_MAG

		//计算航向yaw误差
		for(u8 i = 0;i<3;i++)
		{
			mag_val_f[i] = (float)mag_val[i];
		}	
			
		if(!(mag_val[X] ==0 && mag_val[Y] == 0 && mag_val[Z] == 0))
		{
			mag_yaw_err = mag_yaw_calculate(dT,mag_val_f,(imu->z_vec),(imu->h_mag)) - imu->yaw;
			mag_yaw_err = range_to_180deg(mag_yaw_err);	
		}
#endif
	
		for(u8 i = 0;i<3;i++)
		{

#ifdef USE_EST_DEADZONE	
			if(state->G_reset == 0 && state->obs_en == 0)
			{
				vec_err[i] = my_deadzone(vec_err[i],0,imu->gacc_deadzone[i]);
			}
#endif	

#ifdef USE_LENGTH_LIM			
			if(acc_norm_l>1060 || acc_norm_l<900)
			{
				vec_err[X] = vec_err[Y] = vec_err[Z] = 0;
			}
#endif
		//误差积分
		vec_err_i[i] +=  LIMIT(vec_err[i],-0.01f,0.01f) *dT *ki_use;

		
	// 构造增量旋转(含融合纠正)。	
	//    d_angle[X] = (gyr[X] + (vec_err[X]  + vec_err_i[X]) * kp_use - mag_yaw_err *imu->z_vec[X] *kmp_use *RAD_PER_DEG) * dT / 2 ;
	//    d_angle[Y] = (gyr[Y] + (vec_err[Y]  + vec_err_i[Y]) * kp_use - mag_yaw_err *imu->z_vec[Y] *kmp_use *RAD_PER_DEG) * dT / 2 ;
	//    d_angle[Z] = (gyr[Z] + (vec_err[Z]  + vec_err_i[Z]) * kp_use - mag_yaw_err *imu->z_vec[Z] *kmp_use *RAD_PER_DEG) * dT / 2 ;
			
	//PI补偿
#ifdef USE_MAG
			d_angle[i] = (gyr[i] + (vec_err[i]  + vec_err_i[i]) * kp_use - mag_yaw_err *imu->z_vec[i] *mkp_use *RAD_PER_DEG) * dT / 2 ;
#else
			d_angle[i] = (gyr[i] + (vec_err[i]  + vec_err_i[i]) * kp_use ) * dT / 2 ;
#endif
		}
		
    //计算四元数q0/1/2/3
    imu->w = imu->w            - imu->x*d_angle[X] - imu->y*d_angle[Y] - imu->z*d_angle[Z];
    imu->x = imu->w*d_angle[X] + imu->x            + imu->y*d_angle[Z] - imu->z*d_angle[Y];
    imu->y = imu->w*d_angle[Y] - imu->x*d_angle[Z] + imu->y            + imu->z*d_angle[X];
    imu->z = imu->w*d_angle[Z] + imu->x*d_angle[Y] - imu->y*d_angle[X] + imu->z;
		
		//四元数单位化
		q_norm_l = my_sqrt_reciprocal(imu->w*imu->w + imu->x*imu->x + imu->y*imu->y + imu->z*imu->z);
    imu->w *= q_norm_l;
    imu->x *= q_norm_l;
    imu->y *= q_norm_l;
    imu->z *= q_norm_l;
		

  //下面这些以及文件 Ano_FlightDataCal.c中的使用state结构体来通过设定gkp/gki/mkp三个系数进行
	//误差修正使误差限制在一个极小的范围内,如果超出范围则会继续修正,直至满足要求,简单就可理解为
	//PI补偿。同时还伴随有复位标记设置,可用于对IMU进行复位.
		
  /修正开关///
#ifdef USE_MAG
		if(state->M_fix_en==0)//磁力
		{
			mkp_use = 0;//不修正
			state->M_reset = 0;//罗盘修正不复位,清除复位标记
		}
		else
		{
			if(state->M_reset)//
			{
				//通过增量进行对准
				mkp_use = 5.0f;
				if(mag_yaw_err != 0 && ABS(mag_yaw_err)<2)
				{
					state->M_reset = 0;//误差小于2的时候,清除复位标记
				}
			}
			else
			{
				mkp_use = state->mkp; //正常修正
			}
		}
#endif
		
		if(state->G_fix_en==0)//重力方向修正
		{
			kp_use = 0;//不修正
		}
		else
		{
			if(state->G_reset == 0)//正常修正
			{			
				kp_use = state->gkp;
				ki_use = state->gki;
			}
			else//快速修正,通过增量进行对准
			{
				kp_use = 5.0f;
				ki_use = 0.5f;
//				imu->est_speed_w[X] = imu->est_speed_w[Y] = 0;
//				imu->est_acc_w[X] = imu->est_acc_w[Y] = 0;
//				imu->est_acc_h[X] = imu->est_acc_h[Y] =0;
				
				//计算静态误差是否缩小
				imu_reset_val += (ABS(vec_err[X]) + ABS(vec_err[Y])) *1000 *dT;
				imu_reset_val -= 0.01f;
				imu_reset_val = LIMIT(imu_reset_val,0,1.0f);
				
				if((imu_reset_val < 0.01f) && (state->M_reset == 0))
				{
					//计时
					reset_cnt += 2;
					if(reset_cnt>500)
					{
						reset_cnt = 0;
						state->G_reset = 0;//已经对准,清除复位标记
					}
				}
				else
				{
					reset_cnt = 0;
				}
			}
		}
}

//计算欧拉角
//一般来说都是通过解四元数微分方程得出四元数然后通过反三角函数得出欧拉角
//但是这个欧拉角计算看着并不像
void calculate_RPY()
{
	///输出姿态角///
	
		t_temp = LIMIT(1 - my_pow(t[2][0]),0,1);
		
		//imu_data.pit = asin(2*q1q3 - 2*q0q2)*57.30f;
	
		if(ABS(imu_data.z_vec[Z])>0.05f)//避免奇点的运算
		{
			imu_data.pit =  fast_atan2(t[2][0],my_sqrt(t_temp))*57.30f;
			imu_data.rol =  fast_atan2(t[2][1], t[2][2])*57.30f; 
			imu_data.yaw = -fast_atan2(t [1][0], t[0][0])*57.30f; 
		}
}


/******************* (C) COPYRIGHT 2016 ANO TECH *****END OF FILE************/


对比不难发现

  1. 首先都是定义一些常用的变量,后面直接调用确实能加快速度
  2. 同样是归一化,只不过他的归一化比较骚操作而已
  3. 从n系变换到b系,为后面求误差做准备
  4. 利用理论与实际叉乘求误差,骚操作而已
  5. 进行PI补偿
  6. 解出四元数然后归一化最后不难得到欧拉角

不难看出,大体上两者是差不多的,匿名对经典代码进行了相当的优化,至于效果怎么样,就需要自己亲身试试。然后呢,姿态解算到这里就差不多先告一段落了,后面就该搞搞PID了,这个头疼的玩意,哎呀…

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

代码解读一 文件名“ANO_Imu.c” 的相关文章

  • lego-loam加入imu数据建图,使用自己的数据集建图

    配置lego loam教程 https blog csdn net qq 35102059 article details 122671432 spm 61 1001 2014 3001 5501 激光雷达与imu的外参标定教程 https
  • IMU方向位姿估计

    系列文章目录 提示 xff1a 这里可以添加系列文章的所有文章的目录 xff0c 目录需要自己手动添加 TODO 写完再整理 文章目录 系列文章目录前言一 方法一 xff1a IMU方向位姿可以直接从IMU本身提供的专有算法中获得 xff0
  • 对IMU数据进行卡尔曼滤波

    我们要使用IMU数据 xff0c 必须对数据进行预处理 xff0c 卡尔曼滤波就是很好的方式 1 卡尔曼滤波 卡尔曼滤波 xff08 Kalman filtering xff09 是一种利用线性系统状态方程 xff0c 通过系统输入输出观测
  • Mavros读取PixHawk硬件的IMU数据

    Ubuntu18 04 读取PixHawk硬件的IMU数据 实现方式 使用mavros话题读取到Pixhawk飞控的IMU数据 实现步骤 安装ros 检查是否安装cmake xff08 未安装根据提示安装 xff09 cmake span
  • 从零学习VINS-Mono/Fusion源代码(三):IMU预积分公式推导

    本节学习IMU预积分 xff0c 推导离散时间下的IMU预积分公式 xff0c 并解读相应代码 VINS Mono Fusion代码学习系列 xff1a 从零学习VINS Mono Fusion源代码 xff08 一 xff09 xff1a
  • Camera-IMU标定工具Kalibr的编译

    关于catkin make过程中下载suitesparse过久甚至失败的问题 xff1a 在安装kalibr时的suitesprse库时 xff0c 对应的cmakelists中会通过wget 下载压缩包 xff0c 若无法下载则整个kal
  • ros rviz显示rosbag中的图像和imu数据

    一 rosbag相关的指令 1 rostopic list 列举出系统中正在发布的ros 话题 2 rosbag record a 录制系统中所有正在发布的ros 话题 3 rosbag record topic1 topic2 o bag
  • ORB-SLAM3:单目+imu 详细代码解读

    输入文件 Examples Monocular Inertial mono inertial euroc Vocabulary ORBvoc txt Examples Monocular Inertial EuRoC yaml 存储相机 i
  • 关于VIO中IMU预积分的讲解

    Why VIO 转自 xff1a https zhehangt github io 2019 03 23 SLAM Basic VIOInit 首先我们先简单回顾一下为什么要做VIO xff0c 以及为什么要做VIO初始化 我们知道单目相机
  • 传统定位方法简介--------里程计、IMU惯性传感器以及光电编码器等

    移动机器人最初是通过自身携带的内部传感器基于航迹推算的方法进行定位 xff0c 后来进一步发展到通过各种外部传感器对环境特征进行观测从而计算出移动机器人相对于整个环境的位姿 目前为止 xff0c 形成了基于多传感器信息融合的定位方法 现有移
  • 飞控IMU数据进阶处理(FFT,滤波器)

    前面的文章 xff08 知乎专栏 https zhuanlan zhihu com c 60591778 xff09 曾简单讲过IMU数据 xff08 陀螺仪 加速度数据 xff09 的校准以及一阶低通滤波 本文在此基础上更进一步讲一下数据
  • 再谈IMU数据处理(滤波器)

    本文开始前 xff0c 先回答一个问题 上一篇文章最后提到了卡尔曼滤波器用来做一维数据的数字滤波处理 xff0c 最终的实验结果说 xff1a 该模型下的卡尔曼滤波处理与二阶IIR低通滤波处理效果几乎一致 有网友指出是错误的 xff0c 卡
  • IMU+GPS

    GPS 43 IMU 介绍 xff08 熟悉的略过 xff09 IMU校准姿态估算数据融合 介绍 xff08 熟悉的略过 xff09 GPS GlobalPositioningSystem xff1a 指美国国防部研制的全球定位系统 用户设
  • 最小的IMU模组——DETA10系列

    性能全面升级 飞迪航空 xff08 FDISYSTEMS xff09 DETA10系列产品目前出货已达十万量级 xff0c 广泛应用于机器人 可穿戴设备 人工智能教育套件 自动驾驶小车 智慧农业 扫地机器人 稳定平台 无人系统等相关领域 D
  • 【深蓝学院】手写VIO第2章--IMU传感器--笔记

    0 内容 1 旋转运动学 角速度的推导 xff1a 左 61 omega wedge xff0c 而
  • Kalibr进行相机-IMU联合标定踩坑记录RuntimeError: Optimization failed!

    1 具体标定步骤 xff0c 跟网上别的一模一样 xff0c 此处就不列举 2 记录踩坑过程 xff1a RuntimeError Optimization failed 当执行到开始联合标定时 xff0c 也就是如下指令 xff1a ka
  • cartographer 处理IMU(激光,里程计等)流程

    1 cartographer ros 入口文件 node main cc 入口函数main 如下图 ros init argc argv cartographer node ros start cartographer ros Scoped
  • An Introduction for IMU 2 - IMU数据融合与姿态解算

    在上一篇博客中 我们已经介绍了IMU的内部工作原理 以及如何通过Arduino读取MPU6050的数据 虽然可以从DMP直接读取姿态角 但其数据返回的频率相对较低 同时由于DMP库不是开源的 其内部的工作原理 输出姿态角的准确性都不清楚 而
  • 足部IMU在复杂场景中行走定位

    随着微机电系统 MEMS 技术的快速发展 基于MEMS的惯性导航系统 INS 在任意环境的基站定位方面发挥着至关重要的作用 惯性导航具有自主性强 定位频率高 功耗低 实时性强等特点 因此更适合单兵作战 反恐行动 应急救援 消防救援等环境未知
  • IMU用于上肢功能评估

    来自日本团队牵头研究揭示了利用九轴运动传感器评估上肢Fugl Meyer FMA 的潜力 该探索侧重于将惯性测量单元 IMU 集成到 FMA 的方法中 并探究是否可以出现标准化和更客观的测量 从而解决动态运动评估中的一个紧迫问题 九轴 IM

随机推荐

  • 直线型一阶倒立摆3---控制器设计

    四 控制器设计 如前文所述 xff0c 倒立摆状态空间方程表明系统能够被控制 被观测 倒立摆或者其它受控系统达到受控稳定状态 xff0c 其实质上是指系统的各状态量收敛至一目标稳定值 对于状态空间描述而言 xff0c 系统矩阵A的特征值为负
  • Centos7 关闭防火墙

    Centos7 关闭防火墙 CentOS 7 0默认使用的是firewall作为防火墙 xff0c 使用iptables必须重新设置一下 1 直接关闭防火墙 systemctl stop firewalld service 停止firewa
  • 485无线通信/数传模块_zigbee模块_RS485转ZigBee_顺舟智能

    一 概述 顺舟智能 SZ02系列 ZigBee无线串口通信设备 xff08 485无线通信 数传设备 xff09 xff0c 采用了加强型的ZigBee无线技术 xff0c 集成了符合 ZIGBEE协议的射频收发器和微处理器 xff0c 符
  • 华清远见嵌入式学院学员实践项目案例介绍一

    基于GPRS的远程安防监控系统 1 项目背景 随着现代电力电子技术和微电子技术的迅猛发展 xff0c 自动化 xff0c 智能化程度的不断的提高 xff0c 家居安防技术正在不断发展 传统的家居安防系统已经越来越不能满足现代人的需求 消费者
  • Ubuntu 20.04.05安装ceres-1.14.0

    1 安装Ceres1 14 0 链接 Ubuntu20 04安装Ceres1 14 0 3 cmake编译ceres遇到的问题 xff08 1 xff09 TBB 问题描述 xff1a Did not find Intel TBB libr
  • ubuntu18.04 安装编译ceres-solver-1.14.0 编译错误

    在Ubuntu18 04 安装Ceres solver 1 14 0 xff0c make时出现了98 Built target bundle adjuster xff0c ecipe for target examples CMakeFi
  • ls-remote -h -t git://github.com/adobe-webplatform/eve.git

    npm WARN deprecated bfj node4 64 5 3 1 Switch to the bfj package for fixes and new features npm WARN deprecated nomnom 6
  • 数据可视化图表插件调研:Echarts、Highcharts、G2、D3

    目前常用于前端网页数据可视化实现的图表插件主要有四款 xff1a Echarts Highcharts G2 D3 xff0c 开发一些产品工具的时候可能会集成这些开源的可视化插件 xff08 这里Highcharts不开源 xff09 1
  • 31岁转行的我

    2011年从一所普通二本师范大学毕业后先后从事了两年的教育工作 xff0c 但都没有挣到钱 xff0c 12年从深圳回到西安 xff0c 参加了几次公务员和事业单位的招考 xff0c 几次因0 1分的微小差距与国家饭碗擦肩而过 后来决定不再
  • git submodule 如何同步更新

    摘要 xff1a git submodule 更新之后 xff0c 如果在父仓库里直接调用 git submodule update init recursive 会发现 子模块的代码不会更新 初学者会很迷惑 xff0c 怎么能把子模块更新
  • egret 入门 初试

    整理的文章 白鹭引擎入门 趁着今天周六 xff0c 把苹果放下一边先 今天早上一醒来就装上了js编辑神器Webstorm xff0c 最近也开始关注了一些移动方面的 js 前端框架 如 谷歌的Angularjs 和 fackbook 的Re
  • Ubuntu 18之vnc连接不上问题(已解决)

    在配置vnc时所以的准备动作已经准备好了 xff0c 该配的文件也配好了 xff0c 但就是一直连接不上 在主机端报time out的错误 xff0c 后来查百度得知vncserver xff1a 1对应5901端口 xff0c 2就是59
  • Matlab R2019a Win64位 迅雷下载链接

    鉴于百度云和PanDownload各种限速 xff0c 所以我特意寻了迅雷磁力链接供大家下载 实在是因为百度云下载只有50 k s xff0c 而迅雷下载5 m s啊 Matlab R2019a Win64位 链接内容包括Matlab和Ca
  • 力扣K神图解算法数据结构解析08

    力扣K神图解算法数据结构点这里 八 位运算 剑指15 xff0c 二进制中1的个数 class Solution public int hammingWeight uint32 t n int cnt 61 0 for int i 61 0
  • 吴军老师《给中学生/大学生的书单》----Yohao整理

    2018 7 27记录 span class hljs code 给中学生的书单 span 一 文学类 18本 span class hljs code 1 金庸和琼瑶各一本 长篇的比短篇的好 span span class hljs co
  • 北航2系921 2021考研历年真题及参考答案(2020-2004)

    需要自取 百度网盘 提取码 xff1a iwbg 关于2020北航921试题 相信大家都听说了 xff0c 2020年的921试题整体难度较2019年小 2019考完后 xff0c 群里面怨声载道 xff0c 信号10年没考电路题了怎么就今
  • 姿态解算

    姿态解算全过程 关于这方面 xff0c 姿态计算的理解大致需要经过以下几个步骤 1 秦永元的 惯性导航 xff0c 不但十分基础而且写的也十分好 xff0c 适合入门 但是并不是所有章节都是需要看的 xff0c 其中1 2节 9 2节和9
  • 匿名飞控代码解读汇总

    由于本人临近毕业 xff0c 所做的毕设是有关无人机方面的 xff0c 所使用的也是匿名的飞控 lt 资料包 20171217 gt xff0c 所以首先需要读懂匿名代码然后才能增加自己的功能 xff0c 临近毕业还有两个月左右 xff0c
  • 融合磁力计的Mahony互补滤波算法

    https blog csdn net qq 21842557 article details 50993809 上面博客有关于磁力计的详细解释 xff0c 不过由于本人资质愚钝 xff0c 至今还不是完全理解 不过思想大致和加速度计差不多
  • 代码解读一 文件名“ANO_Imu.c”

    我把这个文件的所有代码贴上来了 xff0c 供大家参考 xff0c 由于本人水平有限 xff0c 且匿名代码注释比较少 xff0c 所以很多也不是很懂 xff0c 实在是一些莫名的定义太多了 xff0c 什么w x y z h之类的 xff