覆盆子Pi Zero W上的IMU 9250和RTIMULib

时间:2017-09-21 00:23:44

标签: python raspberry-pi

我正在使用覆盆子pi零的IMU 9250。它正在运行最新版本的wheezy,我正在使用RTIMULib2从IMU读取数据。我安装了所有必要的程序,并且我已经校准了IMU,它使用卡尔曼算法来获得准确的数据。这是我正在尝试运行的代码:

`#!/usr/bin/python3
from math import degrees
from time import sleep
import RTIMU
SETTINGS_FILE = "/home/pi/displacedRealityDrone/IMU/RTEllipsoidFit/RTIMULib.ini"
s = RTIMU.Settings(SETTINGS_FILE)
imu = RTIMU.RTIMU(s)
if (not imu.IMUInit()):
  print("IMU init failed")
  exit(1)
else:
  print("IMU init succeeded")
imu.setSlerpPower(0.02)
imu.setGyroEnable(True)
imu.setAccelEnable(True)
imu.setCompassEnable(True)
poll_interval = imu.IMUGetPollInterval()
while True:
  data = imu.getIMUData()
  fusionPose = data["fusionPose"]
  global roll, pitch, yaw
  roll = degrees(fusionPose[0])
  pitch = degrees(fusionPose[1])
  yaw = degrees(fusionPose[2])
  print(str(roll) + "   " + str(pitch) + "   " + str(yaw))
  sleep(0.2)` 

这是它输出的内容:

IMU init succeeded
0.0   0.0   0.0
0.0   0.0   0.0
0.0   0.0   0.0
0.0   0.0   0.0
0.0   0.0   0.0
0.0   0.0   0.0
0.0   0.0   0.0
0.0   0.0   0.0
0.0   0.0   0.0
0.0   0.0   0.0

它永远不会改变,也不会改变IMU的移动量。这是什么问题?这是一根坏电缆吗?我已经关闭了IMU并且它给出了相同的结果,所以它对实际芯片来说不是问题。我的代码错了吗?我之前使用过类似的代码所以我不这么认为,但也许我在某个地方犯了一个愚蠢的错误。任何有关这方面的帮助将不胜感激,我愿意在这一点上尝试任何事情。

1 个答案:

答案 0 :(得分:0)

对于遇到类似问题的任何人来说,这段代码效果很好,但是缺少一条导致它只输出零的单行。通过将代码更改为:

来修复代码的结尾
 while True:
  if imu.IMURead():
    data = imu.getIMUData()
    fusionPose = data["fusionPose"]
    global roll, pitch, yaw
    roll = degrees(fusionPose[0])
    pitch = degrees(fusionPose[1])
    yaw = degrees(fusionPose[2])
    print(str(roll) + "   " + str(pitch) + "   " + str(yaw))
    sleep(0.2)`