【机器人开发】旭日X3派读取fashionstar总线舵机控制板的mpu6050模块数据说明

上一期介绍了旭日X3派控制fashionstar总线舵机后(链接:https://developer.horizon.ai/forumDetail/109609633420807694),机器人已经具备基础的运动功能,但也仅仅是没有任何反馈功能的开环运动控制,对于足式机器人、无人机、平衡小车而言,自身动态平衡控制非常重要,例如我之前做过一款双足机器人,通过检测自身倾斜角度,调节自身的平衡。

那么我今天介绍一下基于MPU6050角度传感器模块使用的方法。使用的MPU6050模块集成在fashionstar舵机控制板上,十分方便,将板子插在X3派的40pin引脚上就能使用。MPU6050模块如下图所示:

下面我们开始使用MPU6050模块,插上fashionstar舵机控制板并开机后,需要先安装几个依赖库:

sudo apt-get install i2c-tools

sudo apt-get install python3-smbus

sudo apt-get install mpu6050-raspberrypi #这个包我是照着树莓派上MPU6050使用流程来的,在X3派上居然也能安装上,但是有没有真正用得到还有待考究。

安装好这3个依赖库后,需要验证一下I2C是否已经能够读取到MPU6050端口了,在终端输入:

sudo i2cdetect -y -a 0

0 1 2 3 4 5 6 7 8 9 a b c d e f-
00: – – – – – – – – – – – – —
10: – – – – – – – – – – – – – – – —
20: – – – – – – – – – – – – – – – —
30: – – – – – – – – – – – – – – – —
40: – – – – – – – – – – – – – – – —
50: – – – – – – – – – – – – – – – —
60: – – – – – – – – 68 – – – – – – —
70: – – – – – – – –

如果是这样显示就说明读取成功了。

读取mpu6050上的数据需要两个py程序(程序放在附件),分别是degree.py和mpu6050.py,这两个程序需要放在一个文件夹内,例如我都放在/home/路径。

终端运行degree.py:

sudo python3 degree.py

import time-
import subprocess-
#import logging-
import serial-
import struct-
from time import sleep-
from mpu6050 import mpu6050-
import numpy as np-

sensor = mpu6050(0x68)-
#logging.basicConfig(level=logging.INFO)-
while(1):-

accel_data = sensor.get_accel_data()#读取x,y,z三个轴的角度数据-
print(“Accelerometer data”)-
print("x: " + str(accel_data[‘x’]))-
print("y: " + str(accel_data[‘y’]))-
print("z: " + str(accel_data[‘z’]))-

gyro_data = sensor.get_gyro_data()#读取x,y,z三个轴的角速度数据-
print(“Gyroscope data”)-
print("x: " + str(gyro_data[‘x’]))-
print("y: " + str(gyro_data[‘y’]))-
print("z: " + str(gyro_data[‘z’]))-

temp = sensor.get_temp()#读取温度值-
print("Temp: " + str(temp) + “C”)-
time.sleep(0.01)

显示的结果是这样的

但是这样的数据缺少了可视化功能,无法知道是否精确,我们运用X3派自带的matplotlib库,对数据进行图像绘制(这里仅绘制x,y两个轴的角度):

import time-
import subprocess-
#import logging-
import serial-
import struct-
from time import sleep-
from mpu6050 import mpu6050-
import matplotlib.pyplot as plt-
import numpy as np-

sensor = mpu6050(0x68)-
#logging.basicConfig(level=logging.INFO)-

plt.axis([0,200,-120,120]) #x坐标范围为0~200;y坐标范围为-120~120-
plt.ion()-

xs = [0,0]-
ys1 = [0,0]-
ys2 = [0,0]-
i=0-

while(1):-

accel_data = sensor.get_accel_data()-
gyro_data = sensor.get_gyro_data()-
temp = sensor.get_temp()-

xs[0]=xs[1]-
ys1[0]=ys1[1]-
xs[1]=i-
ys1[1]=9*accel_data[‘x’] #9为角度值修正系数,大家可以适当调节该参数,使得数值更为精准-

xs[0]=xs[1]-
ys2[0]=ys2[1]-
ys2[1]=9*accel_data[‘y’] #9为角度值修正系数,大家可以适当调节该参数,使得数值更为精准-

plt.plot(xs,ys1)-
plt.plot(xs,ys2)-

i = i+1-
plt.pause(0.01)-

得到的效果:

可以看到,结果还是较为准确的,实时性也相对较高。以上就是MPU6050模块在X3派上使用的方法,谢谢观看!

mpu6050代码_20220822113238.rar

厉害,请问博主你机器人机身硬件部分是怎么做的呀

太厉害啦

谢谢支持~

承重的结构件用碳纤维板制作,关节连接处用铝合金板材制作,其他结构件用PLA的3D打印制成。