【模块篇】mpu6050 DMP使用绝对水平面的方法

网上看了点帖子,对小白很不友好,因为是移植的别人代码,DMP库并没有研究,根本看不懂!!

BUT,逛了半天论坛发现有种方法很简单。。

 

1、在你的MPU6050初始化相关函数中找到自检函数,我的是run_self_test();

2、在mpu_get_accel_sens(&accel_sens);的下面加上

accel_sens = 0;

如下

void run_self_test(void)
{
    int result;
//    char test_packet[4] = {0};
    long gyro[3], accel[3];

	//传感器自检,并返回偏差值
    result = mpu_run_self_test(gyro, accel);
	
	//注意,这里由于只开启了陀螺仪和加速计,所以result为0x03,当开启了陀螺仪,加速计和磁力计时,result为0x07
    if (result == 0x3) {
        /* Test passed. We can trust the gyro data here, so let's push it down
         * to the DMP.
         */
        float sens;
        unsigned short accel_sens;
        mpu_get_gyro_sens(&sens);				//获得陀螺仪的灵敏度因子
        gyro[0] = (long)(gyro[0] * sens);
        gyro[1] = (long)(gyro[1] * sens);
        gyro[2] = (long)(gyro[2] * sens);
        dmp_set_gyro_bias(gyro);				//重新校准陀螺仪
		
        mpu_get_accel_sens(&accel_sens);		//获得加速计的灵敏度因子
        /*加上下面这句*/
	accel_sens = 0;				//不校准加速计
	accel[0] *= accel_sens;
        accel[1] *= accel_sens;
        accel[2] *= accel_sens;
        dmp_set_accel_bias(accel);				//重新校准加速计
    }

}

大概意思就是把获得的绝对水平面校准值清0

3、没了!!!

 

试了一下真的可以,但有什么缺点不太清楚

MPU6050中的DMP(数字运动处理器)可以用于实现姿态估计和运动跟踪等功能。为了正确地使用DMP,需要将其参考面设置为绝对水平面。下面是一种方法来实现这一目标: 1. 初始化MPU6050:在使用DMP之前,首先需要初始化MPU6050,并将其设置为适当的工作模式。可参考MPU6050的数据手册或相关的库文件来完成初始化。 2. 获取加速度计和陀螺仪数据:在DMP工作期间,需要实时地获取加速度计和陀螺仪的原始数据。这些数据将用于姿态估计和运动跟踪。 3. 校准加速度计:在开始使用DMP之前,需要对加速度计进行校准,以消除可能存在的误差。校准过程可以通过将MPU6050放置在水平表面上,并记录静止状态下的加速度计数据来完成。 4. 设置DMP参考面:将DMP的参考面设置为绝对水平面是非常重要的。可以通过以下步骤来实现: a. 将MPU6050放置在水平表面上,并保持静止。 b. 启动DMP,并开始获取姿态估计数据。 c. 记录一段时间内的姿态估计数据。 d. 根据记录的数据,计算出一个平均值,这将是绝对水平面的参考姿态。 e. 将DMP的参考面设置为计算得到的绝对水平面。 5. 使用DMP数据:一旦DMP的参考面设置为绝对水平面,你就可以使用其输出的姿态估计数据来进行相关应用,如姿态控制、运动跟踪等。 需要注意的是,以上方法只是一种常用的实现方式,具体的实现细节可能会因不同的应用而有所不同。建议参考MPU6050的数据手册和相关资源,以获取更详细的信息和指导。
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值