Python连接ky9250(mpu9250)角度姿态传感器

1、接线方式

按下图接好usb头

usb头            ky9250模块

3.3v    ------    vcc

Rx      ------   Tx

Tx      ------    Rx

Gnd   ------    Gnd

2、安装ch340-64串口驱动(文章后下载包中有)

3、python的ide中拷贝入下面代码:(文章后有完整的代码包)

import serial
import serial.tools.list_ports

ACCData = [0.0] * 52

FrameState = 0  # 通过值判断属于哪一种情况
Bytenum = 0  # 读取到这一段的第几位

a = [0.0] * 3
w = [0.0] * 3
m = [0.0] * 3
Angle = [0.0] * 3
q = [0.0] * 4


def DueData(inputdata):  # 读取的数据到数组里
    global FrameState  # 在局部修改全局变量,要进行global的定义
    global Bytenum
    global a  # 陀螺仪
    global w  # 加速度
    global m  # 地磁计
    global Angle  # 角度
    global q  # 四元数

    for data in inputdata:  # 输入的数据进行遍历

        if FrameState == 0:  # 当未确定状态的时候,进入以下判断
            if data == 0x50:  # 0x55位于第一位时候,开始读取数据,增大bytenum

                Bytenum = 0
                FrameState = 1
                continue

        elif FrameState == 1:  # acc    #已确定数据

            if Bytenum < 51:  # 读取51个数据
                ACCData[Bytenum + 1] = data  # 从0开始

                Bytenum += 1
            else:

                if (ACCData[49] * 256.0 * 256.0 + ACCData[50] * 256.0 + ACCData[51] - 1000000) * 0.001 == 128:  # 校验
                    a = get_gyro(ACCData)  # 陀螺仪
                    w = get_acc(ACCData)  # 加速度
                    m = get_mg(ACCData)  # 地磁计
                    q = get_q(ACCData)  # 四元数

                    Angle = get_angle(ACCData)  # 角度
                    # 各数据归零,进行新的循环判断
                    # Bytenum=0
                    # FrameState=0

                    d = a + w + m + Angle + q  # 合成一个大串

                    print(
                        "g(g):%10.3f %10.3f %10.3f a(m/s*s):%10.3f %10.3f %10.3f m():%10.3f %10.3f %10.3f angle():%10.3f %10.3f %10.3f q():%10.3f %10.3f %10.3f %10.3f" % d)

                    Bytenum = 0
                    FrameState = 0


def get_gyro(datahex):  # 陀螺仪

    gyro_x = (datahex[1] * 256.0 * 256.0 + datahex[2] * 256.0 + datahex[3] - 1000000) * 0.001;  # gx
    gyro_y = (datahex[4] * 256.0 * 256.0 + datahex[5] * 256.0 + datahex[6] - 1000000) * 0.001;  # gy
    gyro_z = (datahex[7] * 256.0 * 256.0 + datahex[8] * 256.0 + datahex[9] - 1000000) * 0.001;  # gz

    return gyro_x, gyro_y, gyro_z


def get_acc(datahex):
    acc_x = (datahex[10] * 256.0 * 256.0 + datahex[11] * 256.0 + datahex[12] - 1000000) * 0.001;  # ax
    acc_y = (datahex[13] * 256.0 * 256.0 + datahex[14] * 256.0 + datahex[15] - 1000000) * 0.001;  # ay
    acc_z = (datahex[16] * 256.0 * 256.0 + datahex[17] * 256.0 + datahex[18] - 1000000) * 0.001;  # az

    return acc_x, acc_y, acc_z


def get_mg(datahex):
    mg_x = (datahex[19] * 256.0 * 256.0 + datahex[20] * 256.0 + datahex[21] - 1000000) * 0.001;  # mx
    mg_y = (datahex[22] * 256.0 * 256.0 + datahex[23] * 256.0 + datahex[24] - 1000000) * 0.001;  # my
    mg_z = (datahex[25] * 256.0 * 256.0 + datahex[26] * 256.0 + datahex[27] - 1000000) * 0.001;  # mz

    return mg_x, mg_y, mg_z


def get_angle(datahex):
    angle_x = (datahex[28] * 256.0 * 256.0 + datahex[29] * 256.0 + datahex[30] - 1000000) * 0.001;  # roll angle_x
    angle_y = (datahex[31] * 256.0 * 256.0 + datahex[32] * 256.0 + datahex[33] - 1000000) * 0.001;  # pitch
    angle_z = (datahex[34] * 256.0 * 256.0 + datahex[35] * 256.0 + datahex[36] - 1000000) * 0.001;  # yaw

    return angle_x, angle_y, angle_z


def get_q(datahex):
    fan_a = (datahex[37] * 256.0 * 256.0 + datahex[38] * 256.0 + datahex[39] - 1000000) * 0.001;  # q0
    fan_b = (datahex[40] * 256.0 * 256.0 + datahex[41] * 256.0 + datahex[42] - 1000000) * 0.001;  # q1
    fan_c = (datahex[43] * 256.0 * 256.0 + datahex[44] * 256.0 + datahex[45] - 1000000) * 0.001;  # q2
    fan_d = (datahex[46] * 256.0 * 256.0 + datahex[47] * 256.0 + datahex[48] - 1000000) * 0.001;  # q3

    return fan_a, fan_b, fan_c, fan_d


if __name__ == '__main__':
    # use raw_input function for python 2.x or input function for python3.x

    # port = raw_input('please input port No. such as com3:');
    print("智创微芯,谢谢你使用该模块")
    print("请按提示步骤操作")
    port = input('please input port No. such as com3:');
    baud = int(input('please input baudrate(115200 for mpu9250):'))
    ser = serial.Serial(port, baud, timeout=0.5)  # ser = serial.Serial('com3',115200, timeout=0.5)
    print(ser.is_open)
    while (1):
        datahex = ser.read(33)
        DueData(datahex)

4、运行即可取得数据

17位ky9250软件包(内有stm32\arduino\C#\Matlab\树莓\Unity3d\python\ROS\英飞凌\Nvidia jetson linux  访问例程)

2024年3月3日驱动和上位机
链接:https://pan.baidu.com/s/16zoUz5U4WCZIcFwD02ytgA 
提取码:abcd 
--来自百度网盘超级会员V5的分享

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值