STM32之MPU6050第一部分

2023-05-16

在这里插入图片描述
在这里插入图片描述
一、MPU6050基础介绍

  1. MPU6050 是 InvenSense 公司推出的全球首款整合性 6 轴运动处理组件,相较于多组件方案,免除了组合陀螺仪与加速器时之轴间差的问题,减少了安装空间。
  2. MPU6050 内部整合了 3 轴陀螺仪和 3 轴加速度传感器,并且含有一个第二 IIC 接口,可用于连接外部磁力传感器,并利用自带的数字运动处理器(DMP: Digital Motion Processor)硬件加速引擎,通过主 IIC 接口,向应用端输出完整的 9 轴融合演算数据。有了 DMP,我们可以使用 InvenSense 公司提供的运动处理资料库,非常方便的实现姿态解算,降低了运动处理运算对操作系统的负荷,同时大大降低了开发难度。

二、 MPU6050 的特点包括:
① 以数字形式输出 6 轴或 9 轴(需外接磁传感器)的旋转矩阵、四元数(quaternion)、欧拉角格式(Euler Angle forma)的融合演算数据(需 DMP 支持)
② 具有 131 LSBs/°/sec 敏感度与全格感测范围为±250、±500、±1000 与±2000°/sec的 3 轴角速度感测器(陀螺仪)
③ 集成可程序控制,范围为±2g、±4g、±8g 和±16g 的 3 轴加速度传感器
④ 移除加速器与陀螺仪轴间敏感度,降低设定给予的影响与感测器的飘移
⑤ 自带数字运动处理(DMP: Digital Motion Processing)引擎可减少 MCU 复杂的融合演算数据、感测器同步化、姿势感应等的负荷
⑥ 内建运作时间偏差与磁力感测器校正演算技术,免除了客户须另外进行校正的需求
⑦ 自带一个数字温度传感器
⑧ 带数字输入同步引脚(Sync pin)支持视频电子影相稳定技术与 GPS
⑨ 可程序控制的中断(interrupt),支持姿势识别、摇摄、画面放大缩小、滚动、快速下降中断、high-G 中断、零动作感应、触击感应、摇动感应功能
⑩ VDD 供电电压为 2.5V±5%、3.0V±5%、3.3V±5%;VLOGIC 可低至 1.8V± 5%
⑪ 陀螺仪工作电流:5mA,陀螺仪待机电流:5uA;加速器工作电流:500uA,加速器省电模式电流:40uA@10Hz
⑫ 自带 1024 字节 FIFO,有助于降低系统功耗
⑬ 高达 400Khz 的 IIC 通信接口
⑭ 超小封装尺寸:4x4x0.9mm(QFN)

  1. SCL和SDA是连接MCU的IIC接口MCU 通过这个 IIC 接口来控MPU6050,另外还有一个 IIC 接口:AUX_CLAUX_DA(用来连接外部设备,比如磁传感器,这样就可以组成一个九轴传感器。
  2. VLOGIC 是 IO 口电压,该引脚最低可以到 1.8V,我们一般直接接 VDD 即可。
  3. AD0 是从 IIC 接口(接 MCU)的地址控制引脚,该引脚控制 IIC 地址的最低位。如果接 GND,则 MPU6050 的 IIC 地址是:0X68,如果接 VDD,则是 0X69,注意:这里的地址是不包含数据传输的最低位的(最低位用来表示读写)!!

在精英 STM32F1 开发板上,我们通过 PA15 控制 ATK-MPU6050 模块 AD0 接 GND,因而选择 MPU6050 的 IIC 地址是 0X68(不含最低位)

三、接下来,我们介绍一下利用 STM32F1 读取 MPU6050 的加速度和角度传感器数据(非中断方式),需要哪些初始化步骤:

  1. 初始化 IIC
    接口MPU6050 采用 IIC 与 STM32F1 通信,所以我们需要先初始化与 MPU6050 连接的 SDA 和SCL 数据线。接口MPU6050 采用 IIC 与 STM32F1 通信,所以我们需要先初始化与 MPU6050 连接的 SDA 和SCL 数据线。
  2. 复位 MPU6050
    这一步让 MPU6050 内部所有寄存器恢复默认值,通过对电源管理寄存1(0X6B)的 bit7写 1 实现。 复位后,电源管理寄存器 1 恢复默认值(0X40),然后必须设置该寄存器为 0X00,以唤醒 MPU6050,进入正常工作状态。
  3. 设置角速度传感器(陀螺仪)和加速度传感器的满量程范围:
    设置两个传感器的满量程范围(FSR),分别通过陀螺仪配置寄存器(0X1B)
    和加速度传感器配置寄存器(0X1C)设置。我们一般设置陀螺仪的满量程范围为±2000dps,加速度传感器的满量程范围为±2g。
  4. 设置其他参数
    这里,我们还需要配置的参数有:关闭中断、关闭 AUX IIC 接口、禁止 FIFO、设置陀螺仪采样率和设置数字低通滤波器(DLPF)等。本章我们不用中断方式读取数据,所以关闭中断,然后也没用到 AUX IIC 接口外接其他传感器,所以也关闭这个接口。分别通过中断使能寄存器
    (0X38)和用户控制寄存器(0X6A)控制。MPU6050 可以使用 FIFO 存储传感器数据,不过本章我们没有用到,所以关闭所有 FIFO 通道,这个通过 FIFO 使能寄存器(0X23)控制,默认都是 0(即禁止 FIFO),所以用默认值就可以了。陀螺仪采样率通过采样率分频寄存(0X19)
    控制,这个采样率我们一般设置为 50 即可。数字低通滤波器(DLPF)则通过配置寄存器(0X1A)设置,一般设置 DLPF 为带宽的 1/2 即可。
  5. 配置系统时钟源并使能角速度传感器和加速度传感器
    系统时钟源同样是通过电源管理寄存器 1(0X6B)来设置,该寄存器的最低三位用于设置系统时钟源选择,默认值0(内部 8M RC 震荡),不过我们一般设置为 1,选择 x 轴陀螺 PLL作为时钟源,以获得更高精度的时钟。同时,使能角速度传感器和加速度传感器,这两个操作通过电源管理寄存器2(0X6C)来设置,设置对应位为 0 即可开启。至MPU6050 的初始化就完成了,可以正常工作了(其他未设置的寄存器全部采用默认值即可)

四、接下来我们就可以通过读取相关寄存器,得到加速度传感器,角速度传感器的数据了。下面我们先简单介绍下几种相关寄存器

  1. 电源管理寄存器 1,该寄存器地址为 0X6B

在这里插入图片描述
其中,DEVICE_RESET 位用来控制复位,设置为 1,复位 MPU6050,复位结束后,MPU硬件自动清零该位。SLEEEP 位用于控制 MPU6050 的工作模式,复位后,该位为 1,即进入了睡眠模式(低功耗),所以我们要清零该位,以进入正常工作模式。TEMP_DIS 用于设置是否使能温度传感器,设置为 0,则使能。最后 CLKSEL[2:0]用于选择系统时钟源。
在这里插入图片描述
默认是使用内部 8M RC 晶振的,精度不高,所以我们一般选择 X/Y/Z 轴陀螺作为参考的PLL 作为时钟源,一般设CLKSEL=001 即可。

  1. 陀螺仪配置寄存器,该寄存器地址为:0X1B
    在这里插入图片描述
    该寄存器我们只关心 FS_SEL[1:0]这两个位,用于设置陀螺仪的满量程范围:0,±250°/S;1,±500°/S;2,±1000°/S;3,±2000°/S;我们一般设置为 3,即±2000°/S,因为陀螺仪的 ADC 为 16 位分辨率,所以得到灵敏度为:65536/4000=16.4LSB/(°/S)。
  2. 加速度传感器配置寄存器,寄存器地址为:0X1C
    在这里插入图片描述
    该寄存器我们只关心 AFS_SEL[1:0]这两个位,用于设置加速度传感器的满量程范围:0,±2g;1,±4g;2,±8g;3,±16g;我们一般设置为 0,即±2g,因为加速度传感器的 ADC也是 16 位,所以得到灵敏度为:65536/4=16384LSB/g。
  3. FIFO 使能寄存器,寄存器地址为:0X23
    在这里插入图片描述
    该寄存器用于控制 FIFO 使能,在简单读取传感器数据的时候,可以不用 FIFO,设置对应位为 0 即可禁止 FIFO,设置为 1,则使能 FIFO。注意加速度传感器的 3 个轴,全由 1 个位(ACCEL_FIFO_EN)控制,只要该位置 1,则加速度传感器的三个通道都开启 FIFO 了
  4. 陀螺仪采样率分频寄存器,寄存器地址为:0X19
    在这里插入图片描述
    该寄存器用于设置 MPU6050 的陀螺仪采样频率,计算公式为:
    采样频率 = 陀螺仪输出频率 / (1+SMPLRT_DIV)这里陀螺仪的输出频率,是 1Khz 或者 8Khz,与数字低通滤波器(DLPF)的设置有关,当 DLPF_CFG=0/7 的时候,频率为 8Khz,其他情况是 1Khz。而且 DLPF 滤波频率一般设置为采样率的一半。采样率,我们假定设置为 50Hz,那么 SMPLRT_DIV=1000/50-1=19。
  5. 配置寄存器,寄存器地址为:0X1A
    在这里插入图片描述
    这里,我们主要关心数字低通滤波器(DLPF)的设置位,DLPF_CFG[2:0],加速度计和陀螺仪,都是根据这三个位的配置进行过滤的。DLPF_CFG不同配置对应的过滤情况如下表所示
    在这里插入图片描述
    这里的加速度传感器,输出速率(Fs)固定是 1Khz,而角速度传感器的输出速率(Fs),则根据 DLPF_CFG 的配置有所不同。一般我们设置角速度传感器的带宽为其采样率的一半,如前面所说的,如果设置采样率为 50Hz,那么带宽就应该设置为 25Hz,取近似值 20Hz,就应该设置 DLPF_CFG=100。
  6. 电源管理寄存器 2,寄存器地址为:0X6C
    在这里插入图片描述
    该寄存器的 LP_WAKE_CTRL 用于控制低功耗时的唤醒频率,本章用不到。剩下的 6 位,分别控制加速度和陀螺仪的 x/y/z 轴是否进入待机模式,这里我们全部都不进入待机模式,所以全部设置为 0 即可。接下来,我们看看陀螺仪数据输出寄存器,总共有 6 个寄存器组成,地址为:0X43~0X48,通过读取这 6 个寄存器,就可以读到陀螺仪 x/y/z 轴的值,比如 x 轴的数据,可以通过读取 0X43(高 8 位)和 0X44(低 8 位)寄存器得到,其他轴以此类推。同样,加速度传感器数据输出寄存器,也有 6 个,地址为:0X3B~0X40,通过读取这 6 个寄存器,就可以读到加速度传感器 x/y/z 轴的值,比如读 x 轴的数据,可以通过读取 0X3B(高8 位)和 0X3C(低 8 位)寄存器得到,其他轴以此类推。最后,温度传感器的值,可以通过读取 0X41(高 8 位)和 0X42(低 8 位)寄存器得到,温度换算公式为:
    Temperature = 36.53 + regval/340
    其中,Temperature 为计算得到的温度值,单位为℃,regval 为从 0X41 和 0X42 读到的温度传感器值。

五、DMP 使用简介
我们可以读出 MPU6050 的加速度传感器和角速度传感器的原始数据。不过这些原始数据,对想搞四轴之类的初学者来说,用处不大,我们期望得到的是姿态数据,也就是欧拉角:航向角(yaw)、横滚角(roll)和俯仰角(pitch)。有了这三个角,我们就可以得到当前四轴的姿态,这才是我们想要的结果。要得到欧拉角数据,就得利用我们的原始数据,进行姿态融合解算,这个比较复杂,知识点比较多,初学者 不易掌握。MPU6050 自带了数字运动处理器,即 DMP,并且,InvenSense提供了一个 MPU6050 的嵌入式运动驱动库,结合 MPU6050 的 DMP,可以将我们的原始数据,直接转换成四元数输出,而得到四元数之后,就可以很方便的计算出欧拉角,从而得到 yaw、roll 和 pitch。使用内置的 DMP,大大简化了四轴的代码设计,且 MCU 不用进行姿态解算过程,大大降
低了 MCU 的负担,从而有更多的时间去处理其他事件,提高系统实时性。使用 MPU6050 的 DMP 输出的四元数是 q30 格式的,也就是浮点数放大了 2 的 30 次方倍。在换算成欧拉角之前,必须先将其转换为浮点数,也就是除以 2 的 30 次方,然后再进行计算,计算公式为:

q0=quat[0] / q30; //q30 格式转换为浮点数
q1=quat[1] / q30;
q2=quat[2] / q30;
q3=quat[3] / q30;
//计算得到俯仰角/横滚角/航向角
pitch=asin(-2 * q1 * q3 + 2 * q0* q2)* 57.3; //俯仰角
roll=atan2(2 * q2 * q3 + 2 * q0 * q1, -2 * q1 * q1 - 2 * q2* q2 + 1)* 57.3; //横滚角
yaw=atan2(2*(q1*q2 + q0*q3),q0*q0+q1*q1-q2*q2-q3*q3) * 57.3; //航向角

其中 quat[0]~ quat[3]是 MPU6050 的 DMP 解算后的四元数,q30 格式,所以要除以一个 2的 30 次方,其中 q30 是一个常量:1073741824,即 2 的 30 次方,然后带入公式,计算出欧拉角。上述计算公式的 57.3 是弧度转换为角度,即 180/π,这样得到的结果就是以度(°)为单位的。关于四元数与欧拉角的公式推导,这里我们不进行讲解,感兴趣的朋友,可以自行查阅相关资料学习。

该驱动库,重点就是两个 c 文件:inv_mpu.c 和 inv_mpu_dmp_motion_driver.c。其中我们在inv_mpu.c添加了几个函数,方便我们使用,重点是两个函数mpu_dmp_initmpu_dmp_get_data
这两个函数,这里我们简单介绍下这两个函数。mpu_dmp_init,是 MPU6050 DMP 初始化函数,该函数代码如下:

//mpu6050,dmp 初始化
//返回值:0,正常
// 其他,失败
u8 mpu_dmp_init(void)
{
u8 res=0;
IIC_Init(); //初始化 IIC 总线
if(mpu_init()==0) //初始化 MPU6050
{ 
res=mpu_set_sensors(INV_XYZ_GYRO|INV_XYZ_ACCEL);//设置需要的传感器
if(res)return 1;
res=mpu_configure_fifo(INV_XYZ_GYRO|INV_XYZ_ACCEL);//设置 FIFO
if(res)return 2;
res=mpu_set_sample_rate(DEFAULT_MPU_HZ);  //设置采样率
if(res)return 3;
res=dmp_load_motion_driver_firmware(); //加载 dmp 固件
if(res)return 4;
res=dmp_set_orientation(inv_orientation_matrix_to_scalar(gyro_orientation));
//设置陀螺仪方向
if(res)return 5;
res=dmp_enable_feature(DMP_FEATURE_6X_LP_QUAT|DMP_FEATURE_TAP|
DMP_FEATURE_ANDROID_ORIENT|DMP_FEATURE_SEND_RAW_ACCEL|
DMP_FEATURE_SEND_CAL_GYRO|DMP_FEATURE_GYRO_CAL);
//设置 dmp 功能
if(res)return 6;
res=dmp_set_fifo_rate(DEFAULT_MPU_HZ);//设置 DMP 输出速率(最大 200Hz)
if(res)return 7;
res=run_self_test(); //自检
if(res)return 8;
res=mpu_set_dmp_state(1); //使能 DMP
if(res)return 9;
}
return 0;
}

此函数首先通过 IIC_Init(需外部提供)初始化与 MPU6050 连接的 IIC 接口,然后调用mpu_init 函数,初始化 MPU6050,之后就是设置 DMP 所用传感器、FIFO、采样率和加载固件等一系列操作,在所有操作都正常之后,最后通过 mpu_set_dmp_state(1)使能 DMP 功能,在使能成功以后,我们便可以通过 mpu_dmp_get_data 来读取姿态解算后的数据了。
mpu_dmp_get_data 函数代码如下:

//得到 dmp 处理后的数据(注意,本函数需要比较多堆栈,局部变量有点多)
//pitch:俯仰角 精度:0.1° 范围:-90.0° <---> +90.0°
//roll:横滚角 精度:0.1° 范围:-180.0°<---> +180.0°
//yaw:航向角 精度:0.1° 范围:-180.0°<---> +180.0°
//返回值:0,正常
// 其他,失败
u8 mpu_dmp_get_data(float *pitch,float *roll,float *yaw)
{
float q0=1.0f,q1=0.0f,q2=0.0f,q3=0.0f;
unsigned long sensor_timestamp;
short gyro[3], accel[3], sensors;
unsigned char more;
long quat[4];
if(dmp_read_fifo(gyro, accel, quat, &sensor_timestamp, &sensors,&more))return 1;
if(sensors&INV_WXYZ_QUAT)
{
q0 = quat[0] / q30; //q30 格式转换为浮点数
q1 = quat[1] / q30;
q2 = quat[2] / q30;
q3 = quat[3] / q30;
//计算得到俯仰角/横滚角/航向角
*pitch = asin(-2 * q1 * q3 + 2 * q0* q2)* 57.3;  // pitch
*roll = atan2(2 * q2 * q3 + 2 * q0 * q1, -2 * q1 * q1 - 2 * q2* q2 + 1)* 57.3;  // roll
*yaw= atan2(2*(q1*q2 + q0*q3),q0*q0+q1*q1-q2*q2-q3*q3) * 57.3;  //yaw
}else return 2;
return 0;
}

此函数用于得到 DMP 姿态解算后的俯仰角、横滚角和航向角。不过本函数局部变量有点多,大家在使用的时候,如果死机,那么请设置堆栈大一点(在 startup_stm32f10x_hd.s 里面设置,默认是 400)。这里就用到了我们前面介绍的四元数转欧拉角公式,将 dmp_read_fifo 函数读到的 q30 格式四元数转换成欧拉角。利用这两个函数,我们就可以读取到姿态解算后的欧拉角,使用非常方便。DMP 部分,我们就介绍到这。

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

STM32之MPU6050第一部分 的相关文章

  • Catkin创建工程

    介绍 catin make编译过程 xff0c cmake指令依据你的CMakeLists txt 文件 生成cmakefiles和makefile文件 make再依据此cmakefiles和makefile文件编译链接生成可执行文件 ca
  • ros中使用serial包实现串口通信

    一 Ubuntu下的串口助手cutecom 1 安装cutecom并打开 xff1a sudo apt get install cutecom sudo cutecom 2 查看电脑链接的串口信息 xff08 名称 xff09 xff1a
  • 构造函数后冒号的作用

    构造函数后面的冒号起分割作用 xff0c 是类给成员变量赋值的方法 xff0c 初始化列表 xff0c 更适用于成员变量的常量const型 struct XXX XXX y 0xc0
  • 字节序(byte order)和位序(bit order)

    字节序 byte order 和位序 bit order 在网络编程中经常会提到网络字节序和主机序 xff0c 也就是说当一个对象由多个字节组成的时候需要注意对象的多个字节在内存中的顺序 以前我也基本只了解过字节序 xff0c 但是有一天当
  • __thread关键字

    thread是GCC内置的线程局部存储设施 xff0c 存取效率可以和全局变量相比 thread变量每一个线程有一份独立实体 xff0c 各个线程的值互不干扰 可以用来修饰那些带有全局性且值可能变 xff0c 但是又不值得用全局变量保护的变
  • SCRUM框架包括3个角色、3个工件、5个活动、5个价值

    转自http www scrumcn com agile scrum knowledge library scrum html SCRUM 是一个用于开发和维持复杂产品的框架 Scrum 是一个用于开发和维持复杂产品的框架 xff0c 是一
  • Hadoop伪分布式安装步骤

    Hadoop伪分布式安装步骤 目录 Hadoop伪分布式安装步骤 一 永久关闭防火墙 二 配置主机名 1 编辑network文件 xff1a vim etc sysconfig network 2 将HOSTNAME属性改为指定的主机名 x
  • MPU6050的一些问题及解决办法

    最近做的项目要用到MPU6050 xff0c 出现了以下这些问题 xff1a 当然 xff0c 也有一些奇怪的事 xff0c 我是在淘宝上买的现成的模块 xff0c 那个ADO无论接地还是高电平 xff0c MPU的地址都是用0xD0 xf
  • 程序员的期望与现实

    来自 xff1a 程序员最幽默 xff08 ID xff1a humor1024 xff09 0 我期望的代码 VS 实际代码的工作方式 1 我认为我的代码 VS 项目经理看到的代码 2 我心里想做的架构 VS 我真正写出来的架构 3 开发
  • PixHawk Bootloader

    在https github com PX4这里下载的Bootloader代码 xff0c 编译TARGET HW PX4 FMU V2这个版本的 xff0c 然后将代码烧录到STM32F4探索者这块开发板上 xff0c 代码能够正常运行 x
  • 解决Ubuntu 显卡驱动升级导致的 显卡驱动和内核版本不匹配的问题

    解决Ubuntu 显卡驱动升级导致的 显卡驱动和内核版本 xff08 同时内核存在问题 xff09 不匹配的问题 不要轻易升级显卡驱动版本 xff01 xff01 xff01 xff01 xff01 xff01 xff01 xff01 xf
  • NVIDIA Jetson Xavier NX入门(1)——镜像烧写

    NVIDIA Jetson Xavier NX入门 xff08 1 xff09 镜像烧录 1 准备SD卡并且格式化 推荐使用SD Card Formater软件进行SD卡格式化 xff0c SD Card Formater软件下载地址 界面
  • NVIDIA Jetson Xavier NX入门(2)——系统设置;环境搭建

    NVIDIA Jetson Xavier NX入门 xff08 2 xff09 系统设置 环境搭建 1 NVIDIA Jetson Xavier NX连接显示器 键盘 鼠标 xff1b 2 Jetson Xavier NX连接电源后 xff
  • NVIDIA Jetson Xavier NX使用UART进行串口通信

    NVIDIA Jetson Xavier NX使用UART进行串口通信 一 NVIDIA Jetson Xavier NX的40pin接口 NVIDIA Jetson Xavier NX开发板俯视图 xff1a 2 开发板上打印出的UART
  • 远程服务器时Ubuntu报错:qt.qpa.xcb: could not connect to display

    远程服务器时Ubuntu报错 xff1a qt qpa xcb could not connect to display 远程服务器时Ubuntu报错 xff1a qt span class token punctuation span q
  • linux下USB设备编号固定

    linux下USB设备插入时系统自动分配编号 xff0c 多个相同设备时 xff0c 按插入顺序分配编号 以串口为例 xff0c 插入的USBtoSerial顺序不一样时 xff0c 系统分配的设备号是不一样的 但是每个USB接口对设备来说
  • Java进阶书籍推荐

    学习Java xff0c 书籍是必不可少的学习工具之一 xff0c 尤其是对于自学者而言 废话不多说 xff0c 下边就给大家推荐一些Java进阶的好书 第一部分 xff1a Java语言篇 1 Java编程规范 适合对象 xff1a 初级
  • GitHub+Docker Hub自动构建镜像

    一 什么是Dockerfile xff1f Dockerfile是一个包含用于构建镜像的命令的文本文档 可以使用在命令行中调用任何命令 Docker通过读取Dockerfile中的指令自动生成镜像 它们简化了从头到尾的流程并极大的简化了部署
  • 前端工程化 - 剖析npm的包管理机制(完整版)

    导读 现如今 xff0c 前端开发的同学已经离不开 npm 这个包管理工具 xff0c 其优秀的包版本管理机制承载了整个繁荣发展的NodeJS社区 xff0c 理解其内部机制非常有利于加深我们对模块开发的理解 各项前端工程化的配置以加快我们
  • GPRS模块开发初步(软件)

    文章来源 xff1a http blogold chinaunix net u1 56388 showart 1121149 html 1 AT 指令简介 AT 指令集一般指专门用来控制调制解调器的指令集 该指令集最初由美国 Hayes 公

随机推荐

  • 【安装库】matlab2020b安装及百度网盘提速

    安装库 matlab2020b安装及百度网盘提速 matlab2020b安装 一 xff0c 下载 百度网盘 链接 xff1a https pan baidu com s 18iLFaAbWt8IntUefX3eWfA 提取码 xff1a
  • FreeRTOS系统中CPU使用率统计方法分析

    FreeRTOS系统中CPU使用率统计方法分析 基本概念 操作系统中CPU使用率是在软件架构设计中必须要考虑的一个重要性能指标 它直接影响到程序的执行时间以及优先级更高的任务能否实时响应的问题 而CPU使用率也不能过高 xff0c 避免资源
  • NVIDIA GeForce 940M 设备是不可移动的,无法弹出或拔出问题解决办法

    上个月在新入手的笔记本上安装了一个CUDA的开发环境 xff0c 并选择安装了GeForce Experience工具 xff0c 前两天打开GeForce Experience工具浏览时 xff0c 工具提醒可以更新NVIDIA显卡驱动
  • 大学生职业规划要穿“营销三点式”

    我们现在就是这样的环境 xff0c 这样的 教育 xff0c 这样的模式 xff0c 这一切是无法改变的 xff0c 那你适应它吗 xff1f 不是 xff0c 你若适应它 xff0c 你只能茫然 xff01 为什么 xff1f 因为你适应
  • 网络与串口调试工具TCPCOM

    TCPCOM xff0c 网络与串口二合一调试助手 xff0c 将网络调试助手与串口调试助手合二为一 xff0c 绿色软件 xff0c 简单高效 软件特色 1 支持中英文双语言 xff0c 自动根据操作系统环境选择系统语言类型 xff1b
  • Cmake以及CmakeLists

    CMake使用 CMake1 gcc make和CMake的关系2 CMake一般使用流程2 1 生成构建系统2 2 执行构建 xff08 比如make xff09 xff0c 生成目标文件 xff1b 2 3 执行测试 安装或打包 3 C
  • 卡尔曼滤波公式及其详细推导(不涉及矩阵求导)

    卡尔曼滤波公式及推导 1 前言 卡尔曼滤波 Kalman Filter 是一种关于线性离散系统滤波问题的递推算法 其使用递推的形式对系统的状态进行估计 xff0c 以测量中产生的误差为依据对估计值进行校正 xff0c 使被估计的状态不断接近
  • Nmap常用命令及扫描原理

    Nmap常用参数 sS TCP SYN扫描 sU UDP扫描 sA ACK扫描 sW 窗口扫描 scanflags RSTSYNFIN 自定义扫描 O 检测目标操作系统类型 sV 检测目标上运行服务的版本 v 增加输出信息的详细程度 vv
  • pixhawk无人机结合openmv之精准降落

    pixhawk飞控与openmv之精准降落 一 精准降落概述二 精准降落流程三 代码逻辑流程四 总结反思改进 一 精准降落概述 1 概述 无人机在生产生活中逐渐获得更大的用途 xff0c 京东的物流无人机有望解决用户快递最后一分钟的问题 x
  • ROS Catkin 教程之 catkin_package(...) 到底在做什么?

    While looking at a CMakeLists txt file I was wondering the exact meaning of the CATKIN DEPENDS option of the catkin pack
  • c++中的sstream

    include lt sstream gt 头文件中主要包含了stringstream xff0c 可以用来进行数据格式转换 std stringstream ss 1 注意每当调用一次 lt lt 和 gt gt 后 xff0c stri
  • boost库之geometry

    Boost Geometry介绍 love code love life CSDN博客 boost geometry include lt boost assign hpp gt include lt boost geometry geom
  • Ali OSS

    常用工具 对象存储 OSS 阿里云
  • c++ 使用 matplotlibcpp

    xff08 1 xff09 拷贝matplotlibcpp h头文件到自己工程 GitHub lava matplotlib cpp Extremely simple yet powerful header only C 43 43 plo
  • Ubuntu16.04操作系统的安装

    由于今年才开始接触Linux操作系统 xff0c 并且一直在使用Ubuntu16 04 xff0c 已经在计算机上安装过很多次 xff0c 今天就在此总结一下Ubuntu16 04的安装 xff08 今天开到一位同事博客点击打开链接写的非常
  • 在Linux(Ubuntu)中使用终端编译并运行.c和.cpp文件

    首先要保证系统中安装了C语言和C 43 43 对应的编译器 xff1a gcc gt C g 43 43 gt C 43 43 1 c文件的编译与运行 xff08 1 xff09 c文件hello c代码如下 xff1a include l
  • ubuntu软件的编译安装方式

    在Linux操作系统上安装了好几天的VTK PCL OpenCV后来总结出了一条规律 xff0c 就是Linux下软件编译安装的方法 xff0c 困扰了自己好几天 xff0c 终于解决了 xff0c 所以乘热打铁现总结一下 xff0c 希望
  • C/C++字符串长度的计算

    char ch1 10 61 39 s 39 39 h 39 39 0 39 39 h 39 char ch2 61 34 sh 0h 34 char ch3 61 34 shh 34 xff08 1 xff09 strlen 统计字符串存
  • ROS-TF的使用(常用功能)

    tf 使用 人非人1991的博客 CSDN博客 一 TF中的数据格式 xff1a 这些数据格式全都是class 头文件 xff1a include lt tf transform datatypes h gt 基本上可以包含所有的tf数据类
  • STM32之MPU6050第一部分

    一 MPU6050基础介绍 MPU6050 是 InvenSense 公司推出的全球首款整合性 6 轴运动处理组件 xff0c 相较于多组件方案 xff0c 免除了组合陀螺仪与加速器时之轴间差的问题 xff0c 减少了安装空间 MPU605