我是一名计算机科学专业的学生,从事电子项目,需要计算偏航,俯仰,滚动和X,Y,Z位移.我想用一把枪连接IMU并跟踪它的方向和位移.我能够得到偏航,俯仰和俯仰,但遗憾的是无法理解如何
我得到了g和m / s2格式的值.从我研究过的研究来看,我需要获得加速度/时间2,然后添加所有值.但是我不明白我应该使用什么时差.
参考:How to calculate distance based on phone acceleration
#include "I2Cdev.h" #include "MPU6050.h" // Arduino Wire library is required if I2Cdev I2CDEV_ARDUINO_WIRE implementation // is used in I2Cdev.h #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE #include "Wire.h" #endif // class default I2C address is 0x68 // specific I2C addresses may be passed as a parameter here // AD0 low = 0x68 (default for InvenSense evaluation board) // AD0 high = 0x69 MPU6050 accelgyro; //MPU6050 accelgyro(0x69); // <-- use for AD0 high int16_t ax, ay, az; float dx, dy, dz = 0; int16_t gx, gy, gz; #define LED_PIN 13 bool blinkState = false; void setup() { // join I2C bus (I2Cdev library doesn't do this automatically) #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin(); #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire::setup(400, true); #endif Serial.begin(38400); Serial.println("Initializing I2C devices..."); accelgyro.initialize(); Serial.println("Testing device connections..."); Serial.println(accelgyro.testConnection() ? "MPU6050 connection successful" : "MPU6050 connection failed"); Serial.println("Updating internal sensor offsets..."); accelgyro.setXGyroOffset(85); accelgyro.setYGyroOffset(1); accelgyro.setZGyroOffset(-4); accelgyro.setXAccelOffset(-4269); accelgyro.setYAccelOffset(-4836); accelgyro.setZAccelOffset(1080); pinMode(LED_PIN, OUTPUT); } void loop() { accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz); dx=dx+(float)(((float)ax/(float)16384)*9.8*0.05*0.05); dy=dy+(float)(((float)ay/(float)16384)*9.8*0.05*0.05); dz=dz+(float)(((float)az/(float)16384)*9.8*0.05*0.05); Serial.print(dx); Serial.print("\t"); Serial.print(dy); Serial.print("\t"); Serial.print(dz); Serial.print("\t\n"); delay(1000); // blink LED to indicate activity blinkState = !blinkState; digitalWrite(LED_PIN, blinkState); }
我想跟踪对象,如以下YouTube视频中所示.
http://www.youtube.com/watch?v=ZYyyaJgKsDg
如果你们中的任何人能够引起我的关心,我将不胜感激.
谢谢
P.S:对不起我的英语不好和使用非技术术语.
我担心答案不是你想听的答案.从IMU单元计算位置是非常非常困难的.这个 video from Google是一个非常好的参考原因(详见第24分钟).基本上,您需要将加速度两次集成才能定位.您还需要从IMU看到的加速度中移除重力.如果做得不好,错误加起来非常快.您引用的视频使用了球在桌面上滚动的信息来通知他们的模型.他们可以跟踪传感器的方向,以了解球的滚动方向.他们使用球的半径以及球板的角度变化来跟踪x和y球.如果你把球从桌子上拿下来就根本不起作用.
如果您需要跟踪某些内容,您应该寻找一些可以为您提供有关物体位置信息的传感器(GPS,视频分析).然后,您可以使用卡尔曼滤波器将其与IMU数据相结合,以获得良好的定位精度.
祝你的项目好运.