模板: Pico-10DOF-IMU Use
来自Waveshare Wiki
环境搭建
- 本教程使用Arduino IDE 和 Thonny进行代码测试,点击下载相关IDE并安装后打开Arduino IDE,Thonny.
1. Arduino IDE安装Pico SDK , 点击菜单栏的Tools->Board->Boards Manager后搜索Raspberry Pi Pico ,找到对应库并点击Install进行安装 ,如下图所示
2.请参考Micropython官方文档搭建python环境,在Thonny的Tools->Options->Interprete选择Raspberry Pi Pico设备,如下图所示
程序下载
1. 点击下载示例程序
2. 解压示例程序,Arduino示例程序直接点击.ino打开, Micorpython示例程序请上传到Pico文件系统,如图所示
例程使用
Arduino
1. 按住Pico上BOOT按键再接入USB线缆, 打开.ino示例程序,点击菜单栏选择Tools->Board->Raspberry Pi Pico.如下图所示
2. 点击Edit下方upload下载代码到Pico , 下载完毕后打开设备管理器查看Pico的虚拟COM号,然后在Tools->Ports选择对应COM号
3. 点击打开Arduino IDE右上方的Monitor Serial , 按照串口提示初始化Pico-10DOF-IMU, 详细过程请查阅Pico-10DOF-IMU初始化章节
Micropython
安装Thonny Python IDE (Windows版本 V3.3.3)
- 打开thonny,点击File,再点击open打开需要运行的mpu9250.py,lps22hb.py脚本,并点击Run运行,其中mpu9250.py会输出相关信息对Pico-10DOF-IMU进行初始化配置,如下图所示,详细过程请查阅Pico-10DOF-IMU初始化章节
初始化
- MPU9250上的磁力计会受硬磁干扰导致磁力计读出来的数据进行椭球拟合的时候,球偏离中心,并且不圆.这样就会给磁力计带来一个初始磁场偏移,使得磁力计数据偏心,如下图所示
- 上电后, 根据串口发出的提示信息进行初始化.计算出磁力计偏心offset值,如下图所示
例程简析
本小节简析mpu9250.py示例程序.
- mpu9250 = MPU9250()实例化MPU9250类,实例化过程会有陀螺仪初始化, 地磁校准环节
- mpu9250.readAccel() , mpu9250.readGyro() , mpu9250.readMagnet()分别读取加速度计,陀螺仪,地磁计等原始数据.
- mpu9250.imuAHRSupdate()是mahony算法用于将加速度计,陀螺仪,地磁计的值转变成欧拉角(pitch ,roll , yaw).请点击链接查阅mahony算法详细过程
- 欧拉角如下图所示
mpu9250 = MPU9250() try: while True: mpu9250.readAccel() mpu9250.readGyro() mpu9250.readMagnet() mpu9250.imuAHRSupdate(Gyro[0]/32.8*0.0175, Gyro[1]/32.8*0.0175,Gyro[2]/32.8*0.0175, Accel[0],Accel[1],Accel[2], Mag[0], Mag[0], Mag[2]) pitch = math.asin(-2 * q1 * q3 + 2 * q0* q2)* 57.3 roll = math.atan2(2 * q2 * q3 + 2 * q0 * q1, -2 * q1 * q1 - 2 * q2* q2 + 1)* 57.3 yaw = math.atan2(-2 * q1 * q2 - 2 * q0 * q3, 2 * q2 * q2 + 2 * q3 * q3 - 1) * 57.3 print("\r\n /-------------------------------------------------------------/ \r\n") print('\r\n Roll = %.2f , Pitch = %.2f , Yaw = %.2f\r\n'%(roll,pitch,yaw)) print('\r\nAcceleration: X = %d , Y = %d , Z = %d\r\n'%(Accel[0],Accel[1],Accel[2])) print('\r\nGyroscope: X = %d , Y = %d , Z = %d\r\n'%(Gyro[0],Gyro[1],Gyro[2])) print('\r\nMagnetic: X = %d , Y = %d , Z = %d'%((Mag[0]),Mag[1],Mag[2])) time.sleep(0.1) except KeyboardInterrupt: sys.exit()