使用I2C连接AGX Xavier和MPU6050并读取IMU数据

ROS定时器原理与高精度时间调度实战指南 ROS定时器是机器人系统中实现确定性时间调度的核心机制,其本质并非简单延时,而是深度集成于ROS时间模型(Wall/Steady/ROS Time)的事件驱动调度器。它通过统一锚定ros::Time::now()实现仿真时间同步、回放与缩放支持,并依托CallbackQueue保障回调线程安全与执行顺序。相比std::chrono或裸sleep,ROS Timer提供抖动监控(last_expected/last_real)、动态补偿、资源隔离及多队列调度等关键能力,支撑IMU采样、SLAM同步、心跳上报等 阅读详情

硬件设置

NVIDIA Jetson AGX Xavier GPIO Header Pinout
在这里插入图片描述

Pin1位置:
在这里插入图片描述
MPU6050:
在这里插入图片描述

连接:

MPU6050Jetson Nano
VCC$pin 4 (5V)
GNDpin 6 (GND)
SCLpin 28 (SCL)
SDApin 27 (SDA)

通信协议

实用I2C进行通信,详情见 I2C serial communication protocol

打开Jetson Nano,打开终端页面

sudo i2cdetect -r -y 1

可以看到,MPU6050的地址是68
在这里插入图片描述

代码

使用Adafruit Circuit Python Library

安装adafruit-blinka库

sudo apt-get update
pip3 install adafruit-blinka

新建文件夹mpu6050_test

mkdir mpu6050_test
cd mpu6050_test

创建py文件blinkatest.py

gedit blinkatest.py

blinkatest.py:

import board
import busio
 
print("Hello blinka!")
 
# Try to create an I2C device
i2c = busio.I2C(board.SCL, board.SDA)
print("I2C 1 ok!")
 
print("done!")

运行代码,检测是否成功通信

python3 blinkatest.py

若无误,安装mpu6050库

pip3 install adafruit-circuitpython-mpu6050

创建py文件mpu6050_simpletest.py

gedit mpu6050_simpletest.py

mpu6050_simpletest.py:

import time
import board
import adafruit_mpu6050

i2c = board.I2C()  # uses board.SCL and board.SDA
mpu = adafruit_mpu6050.MPU6050(i2c)

while True:
    print("Acceleration: X:%.2f, Y: %.2f, Z: %.2f m/s^2" % (mpu.acceleration))
    print("Gyro X:%.2f, Y: %.2f, Z: %.2f rad/s" % (mpu.gyro))
    print("Temperature: %.2f C" % mpu.temperature)
    print("")
    time.sleep(1)

运行代码,此时应已经可以正常通信

python3 mpu6050_simpletest.py

在这里插入图片描述

使用smbus

安装smbus库

sudo apt-get install python3-smbus

创建py文件mpu6050_simpletest2.py

gedit mpu6050_simpletest2.py

mpu6050_simpletest2.py:

'''Read Gyro and Accelerometer by Interfacing Raspberry Pi with MPU6050 using Python
    http://www.electronicwings.com
'''
import smbus            #import SMBus module of I2C
from time import sleep          #import
 
#some MPU6050 Registers and their Address
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
 
 
def MPU_Init():
    #write to sample rate register
    bus.write_byte_data(Device_Address, SMPLRT_DIV, 7)
     
    #Write to power management register
    bus.write_byte_data(Device_Address, PWR_MGMT_1, 1)
     
    #Write to Configuration register
    bus.write_byte_data(Device_Address, CONFIG, 0)
      
    #Write to Gyro configuration register
    bus.write_byte_data(Device_Address, GYRO_CONFIG, 24)
     
    #Write to interrupt enable register
    bus.write_byte_data(Device_Address, INT_ENABLE, 1)
 
def read_raw_data(addr):
    #Accelero and Gyro value are 16-bit
        high = bus.read_byte_data(Device_Address, addr)
        low = bus.read_byte_data(Device_Address, addr+1)
     
        #concatenate higher and lower value
        value = ((high << 8) | low)
         
        #to get signed value from mpu6050
        if(value > 32768):
                value = value - 65536
        return value
 
 
bus = smbus.SMBus(1)    # or bus = smbus.SMBus(0) for older version boards
Device_Address = 0x68   # MPU6050 device address
 
MPU_Init()
 
print (" Reading Data of Gyroscope and Accelerometer")

while True:
     
    #Read Accelerometer raw value
    acc_x = read_raw_data(ACCEL_XOUT_H)
    acc_y = read_raw_data(ACCEL_YOUT_H)
    acc_z = read_raw_data(ACCEL_ZOUT_H)
     
    #Read Gyroscope raw value
    gyro_x = read_raw_data(GYRO_XOUT_H)
    gyro_y = read_raw_data(GYRO_YOUT_H)
    gyro_z = read_raw_data(GYRO_ZOUT_H)
     
    #Full scale range +/- 250 degree/C as per sensitivity scale factor
    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)     
    sleep(0.01)

运行

python3 mpu6050_simpletest2.py
视觉SLAM边缘部署实战:PyCuVSLAM在reComputer上的优化与调优 同步定位与地图构建(SLAM)是机器人、自动驾驶和增强现实等领域的核心技术,它使机器能够在未知环境中实现自主定位与环境建模。其原理是通过传感器(如相机)数据,实时估计自身运动并构建环境地图。传统CPU方案常因计算量大而难以满足实时性要求。借助GPU并行计算能力,特别是CUDA加速技术,可以显著提升视觉SLAM的处理速度与效率,这对于需要低延迟、高响应的边缘应用场景至关重要。本文聚焦于将基于Python与CUDA加速的PyCuVSLAM算法,部署到搭载NVIDIA Jetson的reComputer边缘AI计 阅读详情

相关推荐

Nvidia Agx Xavier平台imx334 I2C异常调试记录

使用LI-JXAV-MIPI-ADPT 4CAM和 AGX XAVIER 调试相机; 使用I2C工具无法检测相机I2C地址,测量电压缺少2.8V电压

jzwjzw19900922的博客 1142

PCA9685:I2C转16路PWM,助力你的系统

PCA9685:I2C转16路PWM,助力你的系统 1 基本介绍 1.1 该IC主要参数特征如下: I2C接口,支持高达16路PWM输出,每路12位分辨率(4096级) 内置25MHz晶振,可不连接外部晶振,也可以连接外部晶振,最大50MHz 支持2.3V-5.5V电压,最大耐压值5.5V,逻辑电平3.3V 具有上电复位,以及软件复位等功能注:本教程侧重PCA9685的PWM输出...

asmallwhite的博客 2万+

NVIDIA Jetson之I2C测试

Jetson 开发板具有 I2C 接口,本文对该接口的使用方法做一介绍。以 Jetson TX2 为例,其它设备的方法类似

ZONGXP的博客 5498

使用iic方式获取信号没有打开iic设置,树莓派报错:

使用iic方式获取信号没有打开iic设置,树莓派报错:

xiaokanshijie的博客 371

STM32通过模拟IIC与MPU6050传感器通信实践指南

STM32微控制器是ST公司基于ARM Cortex-M内核设计的一系列32位微控制器产品,具有丰富的外设接口和高性能的处理能力,广泛应用于嵌入式系统领域。MPU6050是一款内置MEMS传感器的运动跟踪设备,它集成了一个3轴陀螺仪和一个3轴加速度计,并且能够通过IIC通信协议与微控制器进行数据交换。这种结合使得开发者能够创建出能够跟踪和响应物理运动的应用程序,如手势识别、机器人导航等。

weixin_42181686的博客 941

pi-bno055:在Linux下通过I2C读取Bosch BNO055 IMU传感器的命令行程序

Pi-BNO055 背景 这是一个C驱动程序,用于通过Raspberry Pi上的I2C操作Bosch BNO055 IMU传感器。 我将其与GY-BNO055和Adafruit BNO055一起使用。 在GY-BNO055上,我必须桥接两个焊盘以启用I2C模式,因为默认情况下为串行模式。 后来我改用Adafruit以获得卓越的品质和板载5V级支持。 I2C总线连接 对于I2C通信功能,我正在使用i2c-tools和i2c-dev软件包。 sudo apt-get install -y i2c-tools libi2c-dev 现在,我们可以使用i2cdetect命令查询I2C总线。 将GY-BNO055传感器连接到Raspberry Pi I2C总线,该传感器将响应从站地址0x29。 Adafruit传感器默认在0x28以下响应。 root@pi-ws01:/home/pi# i

机器人开发--IMU介绍

机器人开发--IMU介绍

天道酬勤 1225

医疗影像处理实战:如何用Slicer和Mimics将.nii.gz文件转为.ply格式(附避坑指南)

本文详细介绍了利用3D Slicer和Materialise Mimics软件,将医学影像中常见的.nii.gz格式文件转换为通用三维网格.ply格式的完整实战流程。文章重点分享了从数据分割、DICOM序列导出到高质量网格生成的核心步骤与关键参数设置,并提供了针对常见问题的避坑指南,旨在帮助医学影像研究者和工程师高效完成从体数据到三维模型的关键转换。

weixin_28304023的博客 103

IMU调试方案

型号 QMI8658C参照连线与数据手册使用类似的惯导模块开发https://www.cnblogs.com/rockyching2009/p/15071669.html微雪 https://www.waveshare.net/wiki/RP2040-LCD-1.28。

m0_56661101的博客 1545

数字电路与逻辑设计——组合逻辑篇

在数字电路中,根据逻辑功能的不同而分为两大类,组合逻辑电路与时序逻辑电路。 1、何为组合逻辑电路 我们只需铭记一点就是,这种电路的输出Y只与当时的输入X有关,而与之前的输入X’无关。所以这是一个可以随输入X的变化而瞬变输出Y的电路,如果用我们的Verilog代码来表示,则可能会出现在如下语句中: ①针对wire型变量,assign Y = X1 && X2; ②针对reg型变量,alway

蓝湖江船客的博客 1万+

光纤布拉格光栅(FBG)笔记【1】:波导结构和布拉格波长推导

引言 本文是光纤布拉格光栅(FBG)的笔记【1】,主要介绍了光纤布拉格光栅的波导结构,并且利用动量和能量守恒推导了光纤布拉格波长的表达式 普通光纤中让折射率发生周期性变化就是结构最简单的均匀光纤布拉格光栅(FBG),其波导结构如下图所示。 其传感原理描述可以分为以下的三点: ①光纤纤芯传播的光会在每个光栅面进行反射和透射; ②如果不满足布拉格条件,依次排列的光栅平面反射的光会逐渐变得不同直到最后相互抵消;同时由于系数不匹配,与布拉格波长不相符的光在每个光栅平面的反射也很微弱,这些光大部分在光纤中发生透.

subtitle_的博客 2万+

通信协议 | 一文搞懂I2C通信协议

STM32的I2C可以工作在主从两种模式下,具体由发送起始信号还是接收到匹配地址来决定。虽然人们一直在说STM32的I2C实现有些问题, 但经过我的测试发现,意法半导体好像现在已经给解决了,硬件实现也没什么毛病。I2C通信。

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 8225

行列式详解:从定义到应用

本文系统介绍了行列式的核心概念和应用。首先从二阶、三阶行列式入手,逐步扩展到n阶行列式的定义,讲解了余子式和代数余子式的概念。其次,详细阐述了行列式的重要性质,包括转置不变性、行列交换变号等基本性质以及乘积性质等推论。在计算方法方面,介绍了按行展开法、化上三角矩阵法等实用技巧,并列举了特殊行列式的计算案例。最后重点讨论了行列式在克拉默法则、矩阵可逆性判断、几何体积计算及线性相关性判断等领域的应用。文章强调理解行列式的几何意义和灵活运用性质的重要性,并给出了学习建议和常见误区提示。行列式作为连接代数与几何的桥

aichitang2024的博客 3034

Jetson Xavier i2c 操作

Background I2C is a straightforward serial protocol. There are usually two wires, one is for transferring data (SDA), the other is a clock which is used to mark the begin and end of data packed (SCL). Most devices will also require power (VCC) and ground

乐于分享 1314

Qt/C++音视频开发1-vlc解码播放

一、前言 最开始接触视频监控这块的时候,用的就是vlc作为解码的内核,主要是因为vlc使用简单方便,直接传入一个句柄即可,简单几行代码就可以实现一个视频流播放,很适合初学者使用,也推荐初学者用qt+vlc来做播放器,提供的接口还是非常友好的,而且门类特别多,想要获取媒体文件的各种信息比如宽高,设置宽高比等,直接调用接口函数传入参数就能设置。 所有用vlc做视频监控解码的人都会遇到一个问题,那就是鼠标事件被接管拦截了,不能识别鼠标事件,比如双击最大化等,这就很憋屈了,明明很好用的一个东西,怎么突然之间鼠标事件

Qt/C++视频监控/推流/物联网/大屏系统/自定义控件/UI定制/输入法 4938

AutoSAR配置视频讲解:简介

AutoSAR实验视频讲解:闪烁一颗LED实验【简介】 大家好,欢迎来到雪云飞星的《AutoSAR实验课的视频讲解》专栏。看过《AutoSAR入门到精通系列讲解》的朋友们应该对博主不陌生,有很多朋友加了博主的微信成为了好友,还有朋友约过线下见面,博主很高兴大家能从我的博客中获得一些收获。在专栏里博主挖了很多坑,当时也说过想要录制一个AutoSAR的配置视频教程,素材在20年初就已经录好,中间各种原因足足鸽了一年。当时因为一些技术原因只能通过博客的图文形式展示出来,现在我们剪辑了视频,请了专业的配音,希望以视

雪云飞星的博客 9653

用python在香橙派orangepi zero2连接的oled ssd1306上显示 cpu温度 硬盘内存占比 IP地址与时间日期

如果你是纯新手,建议按照官方手册的3.24《3.24. I2C 接口的 0.96 寸 OLED 模块使用方法》先点亮屏幕测试。注意,官方的oled屏幕是7个针脚的,但是大家一般买到的都是4个针脚的oled1306,所以只用接上文书上面说的四个针脚就行。根据官方手册,走一遍流程,先点亮 oled_demo确保屏幕、连接没有问题。模块:Python 标准库中的文件和目录操作模块,无需额外安装。模块:Python 标准库中的子进程模块,无需额外安装。模块:Python 标准库中的时间模块,无需额外安装。

weixin_43288375的博客 2775

基于SAHI算法优化YOLOv8的小目标检测性能研究

SAHI(SliceAwareHyperInference)是一种推理优化算法,通过将大图切片为小块并分别推理的方式,实现更精细的小目标检测。提升小目标检测精度:切片后的小目标在每个小块中占比更大,模型能够更好地聚焦。兼容性强:可直接集成到现有目标检测框架中(如YOLO系列、Detectron2等)。支持大分辨率图片和视频推理:减少硬件对大图推理的限制。本文详细探讨了如何通过SAHI(切片辅助超推理算法)结合YOLOv8模型,有效提升小目标检测性能,尤其是在高分辨率图片和视频场景中表现优异。

博客 2371

Jetson AGX Xavier 设置 CAN,打开pllaon时钟,jetpack5.1

jetson agx Xavier 修改pllaon时钟,修改pinmux,

weixin_43008635的博客 1499

BMP390L数字大气压传感器原理图设计,已量产(压力传感器)

在工业设备的室内定位、地下设施监测这类 GPS 信号盲区场景里,气压高度检测的 “靠谱程度” 直接决定了系统的可用性 —— 毕竟谁也不想在地下停车场导航时,设备把 1 楼误判成 3 楼。最近在项目里基于博世 BMP390L 做了硬件电路设计,正好聊聊这款工业级数字气压传感器的硬实力,以及原理图里的那些关键设计细节。

不脱发的程序猿 350

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

TI CC265x的IIC通讯读取IMU BMI08x数据

welin的博客 1868

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

i2c 驱动一:简介

介绍 jz2440 的 i2c 驱动

老鹏 2221

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

解决了board has no attribute scl和modulenotfounderror: no module named ‘board‘的问题(树莓派)

一开始看了这个网站上的指引。然后尝试连接adafruit-ssd1306(128*64)。(帖的内容改过了,和我看的时候不一样)但是发现了一个问题,运行时出错。今天解决了一个问题,记录一下。总之,我就是先删除了board。然后我把原来的代码改了,

weixin_51650644的博客 545

【ADXL345】【树莓派】【python】树莓派测加速度I2C

如果什么都没有出现,请确保已经将ADXL345加速度计正确连接到Raspberry Pi,并且传感器引脚上的所有焊接点都是干净的。ADXL345是一个数字传感器,所以不需要额外的电路,如模拟到数字转换器。为了与ADXL345交互,需要利用Adafruit的ADXL34x Python库,运行以下pip命令。python,如果之前的设置没有出现问题,以下代码即可运行。引脚连接到树莓派的物理引脚地线(引脚连接到树莓派的物理引脚1(引脚连接到树莓派的物理引脚3(引脚连接到树莓派的物理引脚5(

RickyWasYoung的博客 2135

STM32通过I2C控制LCD1602显示

STM32通过I2C控制LCD1602HAL函数介绍PCF8574+LCD1602介绍IO扩展:PCF8574LCD1602具体实现CubeMX设置代码 硬件平台: NUCLEO-STM32F411RE+PCF8574+LCD1602 HAL函数介绍 Function name HAL_StatusTypeDef HAL_I2C_Master_Transmit (I2C_HandleTypeDef * hi2c, uint16_t DevAddress, uint8_t * pData, uint16_

CCCDeric的博客 1万+
上一篇: MacOS下搭建基于Eclipse的STM32的开发环境
下一篇: ROS读取MPU6050数据
Ceder1c
博客等级 码龄7年 268粉丝 44原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值