嵌入式人工智能(38-基于树莓派4B的角速度和加速度传感器-MPU6050)

news2024/11/15 10:52:08

1、角速度传感器

角速度传感器是一种用于测量物体在空间中绕坐标轴旋转的速度的传感器。角速度是一个物体围绕某一轴旋转的速度大小,通常以角度/秒或弧度/秒的形式表示。

角速度传感器通常使用陀螺仪原理来测量角速度。陀螺仪是基于角动量守恒定律的物理原理,当物体绕某一轴旋转时,旋转的角动量会导致一个力矩作用在物体上,通过测量这个力矩的大小可以推算出角速度。

角速度传感器广泛应用于航空航天、导航、运动控制等领域。在航空航天领域,角速度传感器常用于导航仪器中,用于确定飞行器的姿态和方向。在运动控制领域,角速度传感器常用于机器人和自动化设备中,以实时监测和控制旋转运动。

角速度传感器的精度和灵敏度对于测量结果的准确性和稳定性至关重要。

2、加速度传感器

加速度传感器是一种能够测量物体加速度的传感器。它能够感知物体在三个维度上的加速度变化,并将其转换为电信号输出。

加速度传感器通常由质量块、阻尼器、弹性元件、敏感元件和适调电路等部分组成。当传感器在加速的过程中,通过对质量块所受惯性力的测量,利用牛顿第二定律获得加速度值。相对于测角速度的陀螺仪来说,加速度传感器是用来测线性加速度的。

加速度传感器可以测量物体的加速度、速度和位移等参数。在移动设备中,加速度传感器可以实现自动旋转屏幕、晃动切换应用等功能。在汽车中,加速度传感器可以实现车辆稳定控制、碰撞检测等安全功能。在航空航天领域,加速度传感器可以用来检测火箭的振动情况和飞机的姿态稳定。在医疗设备中,加速度传感器可以用于监测人体运动和姿势,如步数统计和姿势纠正等。

3、MPU6050

角速度传感器利用惯性原理,加速度传感器利用力平衡原理。通常将两种传感器混合在一起使用,如MPU6050传感器。

MPU6050是当下最流行的一款六轴(三轴加速度+三轴角速度(陀螺仪))传感器。该传感器广泛的用于四轴、平衡车和空中鼠标等设计,具有非常广泛的应用范围。

5、无人机飞行的姿态检测

在飞行器中,飞行姿态是非常重要的参数,以飞机自身的中心建立坐标系,当飞机绕坐标轴旋转的时候,会分别影响到偏航角横滚角俯仰角。 下图 假设我们知道飞机初始时是左上角的状态,只要想办法测量出基于原始状态的三个姿态角的变化量,再进行叠加,就可以获知它的实时姿态了。

抽象的说,姿态是载体坐标系和地理坐标系之间的转换关系。

地球坐标系:以地球球心为原点,Z轴沿地球自转轴方向,X、Y轴在赤道平面内的坐标系。

地理坐标系:它的原点在地球表面,Z轴沿当地地理垂线的方向,也就是重力加速度的方向,XY轴沿当地经纬线的切线方向。跟我们说的东南西北是一样的。

载体坐标系:载体坐标系以运载体的质心为原点,一般根据运载体自身结构方向构成坐标系,如Z轴上由原点指向载体顶部,Y轴指向载体头部,X轴沿载体两侧方向。

其中,北轴、天轴、东轴对应的是地理坐标系。 

4、引脚与接线

SCL:IIC从时钟信号线SCL,模块需要外接上拉电阻,一般为4.7K
SDA:IIC从时钟信号线SDA,模块需要外接上拉电阻,一般为4.7K

INT:中断输出引脚
AUX_CL:IIC主串行数据信号线,用于外接传感器
AUX_DA:IIC主串行时钟信号线,用于外接传感器
VDD:3.3/5V电源输入   GND:接GND
VLOGIC:IO口电压,该引脚最低可以到1.8V,我们一般直接接VDD即可
AD0:从IIC接口(接MCU)的地址控制引脚,该引脚控制IIC地址的最低位。如果接GND,则MPU6050的IIC地址是:0X68;如果VDD,则是0X69,如果该引脚悬空则为0x68

至少需要接4条线,如果想把罗盘传感器接入,也可以挂接到该MPU6050上面

5、实验代码与现象

import time
import smbus

# 设置MPU6050寄存器地址
PWR_MGMT_1 = 0x6B
SMPLRT_DIV = 0x19
CONFIG = 0x1A
GYRO_CONFIG = 0x1B
INT_ENABLE = 0x38
ACCEL_XOUT_H = 0x3B
ACCEL_YOUT_H = 0x3D
ACCEL_ZOUT_H = 0x3F
GYRO_XOUT_H = 0x43
GYRO_YOUT_H = 0x45
GYRO_ZOUT_H = 0x47
Register_A = 0


# 初始化一个bus对象
bus = smbus.SMBus(1)
# MPU6050设备地址
MPU6050_Address = 0x68

def init():
    """初始化方法"""
    # 写入采样率寄存器
    bus.write_byte_data(MPU6050_Address, SMPLRT_DIV, 7)
    # 写入电源管理寄存器
    bus.write_byte_data(MPU6050_Address, PWR_MGMT_1, 1)
    # 写入配置寄存器
    bus.write_byte_data(MPU6050_Address, CONFIG, 0)
    # 写入陀螺仪配置寄存器
    bus.write_byte_data(MPU6050_Address, GYRO_CONFIG, 24)
    # 写入中断允许寄存器
    bus.write_byte_data(MPU6050_Address, INT_ENABLE, 1)


def get_value(addr):
    """从传感器读取参数"""
    # 读取加速度计和陀螺仪的16位值
    high = bus.read_byte_data(MPU6050_Address, addr)
    low = bus.read_byte_data(MPU6050_Address, addr + 1)
    # 左移位运算并按位或
    value = ((high << 8) | low)
    # 从模块获取标记值
    if value > 32768:
        value = value - 65536
    return value


def main_loop():
    """主循环,打印读取到的数据"""
    # 初始化
    init()

    # 读取加速度计原始值
    acc_x = get_value(ACCEL_XOUT_H)
    acc_y = get_value(ACCEL_YOUT_H)
    acc_z = get_value(ACCEL_ZOUT_H)

    # 读取陀螺仪原始值
    gyro_x = get_value(GYRO_XOUT_H)
    gyro_y = get_value(GYRO_YOUT_H)
    gyro_z = get_value(GYRO_ZOUT_H)

    # 转换为g
    Ax = acc_x / 16384.0
    Ay = acc_y / 16384.0
    Az = acc_z / 16384.0

    # 转换位度每秒
    Gx = gyro_x / 131.0
    Gy = gyro_y / 131.0
    Gz = gyro_z / 131.0

    # 打印读取到的数据
    print("Gx=%.2f" % Gx, u'\u00b0' + "/s", "\tGy=%.2f" % Gy, u'\u00b0' + "/s", "\tGz=%.2f" % Gz, u'\u00b0' + "/s",
          "\tAx=%.2f g" % Ax, "\tAy=%.2f g" % Ay, "\tAz=%.2f g" % Az)

    time.sleep(1)


if __name__ == '__main__':
    try:
        while True:
            main_loop()
    except KeyboardInterrupt:
        print("程序结束!")



随便用手晃动该传感器,可以发现数据的变化。 

 还有一种方法是安装mpu6050库

pip install mpu6050-raspberrypi,程序里面直接调用。

from mpu6050 import mpu6050
import time

sensor = mpu6050(0x68)

while True:
    accel_data = sensor.get_accel_data()
    gyro_data = sensor.get_gyro_data()
    temp = sensor.get_temp()

    print("Accelerometer data")
    print("x: " + str(accel_data['x']))
    print("y: " + str(accel_data['y']))
    print("z: " + str(accel_data['z']))

    print("Gyroscope data")
    print("x: " + str(gyro_data['x']))
    print("y: " + str(gyro_data['y']))
    print("z: " + str(gyro_data['z']))

    print("Temp: " + str(temp) + " C")
    time.sleep(0.5)

 MPU6050还可以测量温度。具体这两个程序运行的结果之间的关系,等有时间慢慢分析。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1971712.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

力扣高频SQL 50题(基础版)第三十八题

文章目录 力扣高频SQL 50题&#xff08;基础版&#xff09;第三十八题1484.按日期分组销售产品题目说明实现过程准备数据实现方式结果截图总结 力扣高频SQL 50题&#xff08;基础版&#xff09;第三十八题 1484.按日期分组销售产品 题目说明 表 Activities&#xff1a; ---…

类型推断技术及仓颉语言实践

史磊 仓颉语言类型推断技术专家 一、一种看待类型系统的方式 一门编程语言一定得包含类型系统吗&#xff1f; 这个问题今天看来可能显而易见&#xff0c;一个程序没有类型的话还能算是个完整、正确的程序吗&#xff1f;但是其实关于类型系统的作用&#xff0c;一直是存在两种…

PCB打板——usb扩展坞

采用一个typec模块&#xff0c;四个typea模块&#xff0c;以及保险丝&#xff0c;电源滤波部分&#xff0c;原理图如下 这里usb信号线为差分信号&#xff0c;要用差分导线&#xff08;长度相同&#xff0c;对称&#xff09;

RK3568笔记五十:SPI通信-回环测试

若该文为原创文章&#xff0c;转载请注明原文出处。 一、SPI引脚关系 其中SPI1的引脚关系如下表所示 SPI 引脚 功能 MOSI GPIO3_C1 主设备输出/从设备输入 MISO GPIO3_C2 主设备输入/从设备输出 CLOCK CPIO3_C3 时钟信号线 CS0 GPIO3_A1 片选信号线0 CS1 NC …

kettle从入门到精通 第八十二课 ETL之kettle kettle中的【阻塞数据直到步骤都完成】使用教程

1、在使用步骤【阻塞数据直到步骤都完成】&#xff08;英文为Block this step until steps finish&#xff09;之前&#xff0c;我们先来了解下什么是 Copy Nr&#xff1f; Copy Nr是指 “副本编号” 或 “拷贝编号”&#xff0c;也就是下图中的复制的记录行数&#xff0c;图中…

全网最强Nginx教程 | 万字长文爆肝Nginx(五)

Nginx实现服务器端集群搭建 Nginx与Tomcat部署 前面课程已经将Nginx的大部分内容进行了讲解&#xff0c;我们都知道了Nginx在高并发场景和处理静态资源是非常高性能的&#xff0c;但是在实际项目中除了静态资源还有就是后台业务代码模块&#xff0c;一般后台业务都会被部署在…

基于Spring boot + Vue的灾难救援系统

作者的B站地址&#xff1a;程序员云翼的个人空间-程序员云翼个人主页-哔哩哔哩视频 csdn地址&#xff1a;程序员云翼-CSDN博客 1.项目技术栈&#xff1a; 前后端分离的项目 后端&#xff1a;Springboot MybatisPlus 前端&#xff1a;Vue ElementUI 数据库&#xff1a; …

Java 关键字之 native 详解

本篇博客我们将介绍Java中的一个关键字——native。 native 关键字在 JDK 源码中很多类中都有&#xff0c;在 Object.java类中&#xff0c;其 getClass() 方法、hashCode()方法、clone() 方法等等都是用 native 关键字修饰的。 那么为什么要用 native 来修饰方法&#xff0c;…

离线安装MeterSphere遇到的问题

1.安装步骤&#xff0c;参考官方文档 在线安装 - MeterSphere 文档 2.安装完成以后&#xff0c;docker ps查看有很多服务一直处于重启状态&#xff0c;查看容器日志docker logs ID,发现所有一直处于重启状态的容器都是因为服务无法创建日志目录和文件。一直处于重启的服务如…

【Java基础题型】矩阵的对角线之和

二维数组真是存矩阵的好东西啊&#xff0c;现在问题来了&#xff0c;输入一个5*5一共25个数字&#xff0c;要求你求出它们两个对角线上的数字之和&#xff01; 输入格式 25个数字&#xff0c;5行5列 输出格式 它们两个对角线上的和 左上->右下第一条 右上->左下第二…

【秋招笔试】24-07-27-OPPO-秋招笔试题(后端卷)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 编程一对一辅导 ✨ 本系列打算持续跟新 秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 💡 01.二进制反转游戏 问题描述 K小姐…

Nvidia黄仁勋对话Meta扎克伯格:AI和下一代计算平台的未来 | SIGGRAPH 2024对谈回顾

在今年的SIGGRAPH图形大会上&#xff0c;Nvidia创始人兼CEO黄仁勋与Meta创始人马克扎克伯格进行了一场长达60分钟的对谈。这场对话不仅讨论了AI的未来发展和Meta的开源哲学&#xff0c;还发布了不少新产品&#xff0c;并深入探讨了下一代计算平台的可能性。 引言 人工智能的发…

InternLM-L0 Git作业

0. 任务背景 GitInternStudio 任务说明 GitInternStudio 关卡说明 任务1: 破冰活动&#xff1a;自我介绍 任务2: 实践项目&#xff1a;构建个人项目 1. 破冰活动并构建个人branch Fork 目标项目 git clone https://github.com/sd258sos/Tutorial.git # 修改为自己frok的仓…

模拟实现strcmp,判断二个字符串是否相等

1.判断二个字符串是否相等&#xff0c;可以模仿strcmp.当二个字符串相等的时候ruturn 0.,当二个字符串小于时返回为小于0&#xff0c;当二个字符串大于时返回为大于0。const为不可以更改。 //方法一 int my_strcmp(const char* arr1, const char* arr2) {assert(arr1 &&…

Java后端每日面试题(day6)

目录 创建线程的方式锁的分类公平锁与非公平锁共享式与独占式锁悲观锁与乐观锁 rbac相关的表spring security原理DelegatingFilterProxyFilterChainProxySecurityFilterChain<font colorred>Spring Security 作用机制大致如下&#xff1a; mybatis一对一&#xff0c;一对…

AttributeError: module ‘jwt‘ has no attribute ‘decode‘解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

【大数据】什么是数据集市?如何创建数据集市?

目录 一、数据集市的定义 二、数据集市的存在方式 三、数据集市的特点 四、数据集市和数仓的关系 五、数据集市建设步骤 一、数据集市的定义 数据仓库中集成后的数据&#xff0c;又按照了主题进行了划分&#xff0c;而面向主题划分出来的部分就是数据集市&#xff0c;也就是说数…

织物图像的配准和拼接算法的MATLAB仿真,对比SIFT,SURF以及KAZE

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 SIFT (Scale-Invariant Feature Transform) 4.2 SURF (Speeded Up Robust Features) 4.3 KAZE (Key-point Affine-Zernike descriptors) 5.算法完整程序工程 1.算法运行效果图预览 (…

python家教预约管理系统 python+django+vue开发的家教信息管理系统 - 毕业设计 - 课程设计

python家教预约管理系统 pythondjangovue开发的家教信息管理系统 - 毕业设计 - 课程设计 文章目录 python家教预约管理系统 pythondjangovue开发的家教信息管理系统 - 毕业设计 - 课程设计一、功能介绍二、代码结构三、运行步骤1、后端运行步骤3、前端运行步骤 四、源程序下载 …

69.搭建分析工具界面

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a;易道云信息技术研究院 上一个内容&#xff1a;68.游戏分析工具设计以及更改辅助中存在的界面问题 以 68.游戏分析工具设计以及更改辅助…