精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何將加速度計和陀螺儀數據融合在一起

454398 ? 來源:網絡整理 ? 作者:網絡整理 ? 2019-11-11 17:19 ? 次閱讀

步驟1:MPU-6050模塊

MPU-6050模塊具有8個引腳,

INT:中斷數字輸出引腳。

AD0: I2C從地址LSB引腳。這是設備7位從機地址中的第0位。如果連接到VCC,則將其讀為邏輯1,并且從機地址更改。

XCL:輔助串行時鐘引腳。此引腳用于將其他具有I2C接口功能的傳感器SCL引腳連接到MPU-6050。

XDA:輔助串行數據引腳。該引腳用于將其他啟用I2C接口的傳感器SDA引腳連接到MPU-6050。

SCL:串行時鐘引腳。將此引腳連接到微控制器的SCL引腳。 SDA:串行數據引腳。將此引腳連接到微控制器的SDA引腳。

GND:接地引腳。將此引腳接地。

VCC:電源引腳。將此引腳連接到+ 5V DC電源。 MPU-6050模塊的從站地址(當AD0 = 0時,即未連接到Vcc)為

從站寫地址(SLA + W): 0xD0

從站讀取地址(SLA + R): 0xD1

步驟2:計算

MPU6050模塊的陀螺儀和加速度計傳感器數據由2的補碼形式的16位原始數據組成。

MPU6050模塊的溫度傳感器數據由16位數據組成(不是2的補碼形式)。

現在假設我們選擇了

-加速度計滿量程范圍+/- 2g,靈敏度比例因子為16,384 LSB(Count)/g。

-陀螺儀的滿量程范圍為+/- 250°/s,靈敏度比例因子為131 LSB(計數)/°/s。然后,

要獲取傳感器原始數據,我們首先需要對加速度計和陀螺儀的傳感器數據進行2的補碼運算。在獲得傳感器原始數據之后,我們可以通過將傳感器原始數據除以它們的靈敏度比例因子來計算加速度和角速度,方法如下:

以g(g力)計的加速度計值

ul》

沿X軸的加速度=(加速度計X軸原始數據/16384)g。

沿Y軸的加速度=(加速度計Y軸原始數據/16384)g。

沿Z軸的加速度=(加速度計Z軸原始數據/16384)g。

陀螺儀值,以°/s(每秒度)為單位

沿X軸的角速度=(陀螺儀X軸原始數據/131)°/s。

沿Y軸的角速度=(陀螺儀Y軸原始數據/131)°/s。

沿Z軸的角速度=(陀螺儀Z軸原始數據/131)°/s。

以°/c為單位的溫度值(每度攝氏度)

以攝氏度為單位的溫度=((溫度傳感器數據)/340 + 36.53)°/c。

例如

假設在2‘補碼之后得到加速度計X軸原始值= +15454

然后Ax = +15454/16384 = 0.94 g。

更多

所以我們知道我們在+/- 2G和+/- 250deg/s的靈敏度下運行,但是我們的值如何與這些加速度/角度相對應。

這兩者都是直線圖,我們可以從中得出結果,對于1G,我們將讀取16384,對于1deg/sec,我們將讀取131.07(盡管由于二進制,0.07將被忽略),這些值只是通過繪制直線圖得出的在32767時2G在-32768時為-2G,在250/-250時為-2G。

所以現在我們知道了靈敏度值(16384和131.07),我們只需要減去這些值的偏移量即可。然后

這些對于X和Y值都適用,但是由于Z記錄為1G而不是0,因此在除以靈敏度之前,我們需要減去1G(16384)。

步驟3:MPU6050-Atmega328p連接

。..

連接如下:-

MPU6050 《======》 Arduino Nano。

VCC 《====== 》 5v輸出引腳

GND 《======》接地引腳

SDA 《======》 A4引腳//串行數據

SCL 《======》 A5引腳//串行時鐘

俯仰和橫滾計算:

滾動是圍繞旋轉x軸和螺距是沿y軸的旋轉。

結果以弧度為單位。 (乘以180并除以pi即可轉換為度)

步驟4:代碼和說明

#include

const int MPU=0x68; //I2C address of the MPU-6050

int16_t AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ; //16-bit integers

int AcXcal,AcYcal,AcZcal,GyXcal,GyYcal,GyZcal,tcal; //calibration variables

double t,tx,tf,pitch,roll;

void setup()

{

Wire.begin(); //initiate wire library and I2C

Wire.beginTransmission(MPU); //begin transmission to I2C slave device

Wire.write(0x6B); // PWR_MGMT_1 register

Wire.write(0); // set to zero (wakes up the MPU-6050)

Wire.endTransmission(true); //ends transmission to I2C slave device

Serial.begin(9600); //serial communication at 9600 bauds

}

void loop()

{

Wire.beginTransmission(MPU); //begin transmission to I2C slave device

Wire.write(0x3B); // starting with register 0x3B (ACCEL_XOUT_H)

Wire.endTransmission(false); //restarts transmission to I2C slave device

Wire.requestFrom(MPU,14,true); //request 14 registers in total

//Acceleration data correction

AcXcal = -950;

AcYcal = -300;

AcZcal = 0;

//Temperature correction

tcal = -1600;

//Gyro correction

GyXcal = 480;

GyYcal = 170;

GyZcal = 210;

//read accelerometer data

AcX=Wire.read()《《8|Wire.read(); // 0x3B (ACCEL_XOUT_H) 0x3C (ACCEL_XOUT_L)

AcY=Wire.read()《《8|Wire.read(); // 0x3D (ACCEL_YOUT_H) 0x3E (ACCEL_YOUT_L)

AcZ=Wire.read()《《8|Wire.read(); // 0x3F (ACCEL_ZOUT_H) 0x40 (ACCEL_ZOUT_L)

//read temperature data

Tmp=Wire.read()《《8|Wire.read(); // 0x41 (TEMP_OUT_H) 0x42 (TEMP_OUT_L)

//read gyroscope data

GyX=Wire.read()《《8|Wire.read(); // 0x43 (GYRO_XOUT_H) 0x44 (GYRO_XOUT_L)

GyY=Wire.read()《《8|Wire.read(); // 0x45 (GYRO_YOUT_H) 0x46 (GYRO_YOUT_L)

GyZ=Wire.read()《《8|Wire.read(); // 0x47 (GYRO_ZOUT_H) 0x48 (GYRO_ZOUT_L)

//temperature calculation

tx = Tmp + tcal;

t = tx/340 + 36.53; //equation for temperature in degrees C from datasheet

tf = (t * 9/5) + 32; //fahrenheit

//get pitch/roll

getAngle(AcX,AcY,AcZ);

//printing values to serial port

Serial.print(“Angle: ”);

Serial.print(“Pitch = ”); Serial.print(pitch);

Serial.print(“ Roll = ”); Serial.println(roll);

Serial.print(“Accelerometer: ”);

Serial.print(“X = ”); Serial.print(AcX + AcXcal);

Serial.print(“ Y = ”); Serial.print(AcY + AcYcal);

Serial.print(“ Z = ”); Serial.println(AcZ + AcZcal);

Serial.print(“Temperature in celsius = ”); Serial.print(t);

Serial.print(“ fahrenheit = ”); Serial.println(tf);

Serial.print(“Gyroscope: ”);

Serial.print(“X = ”); Serial.print(GyX + GyXcal);

Serial.print(“ Y = ”); Serial.print(GyY + GyYcal);

Serial.print(“ Z = ”); Serial.println(GyZ + GyZcal);

delay(1000);

}

//function to convert accelerometer values into pitch and roll

void getAngle(int Ax,int Ay,int Az)

{

double x = Ax;

double y = Ay;

double z = Az; pitch = atan(x/sqrt((y*y) + (z*z))); //pitch calculation

roll = atan(y/sqrt((x*x) + (z*z))); //roll calculation

//converting radians into degrees

pitch = pitch * (180.0/3.14);

roll = roll * (180.0/3.14) ;

}

-----------------------------------------------------------------------------------------------

Results:-

--------------------------------------------------------------------------------------

Angle: Pitch = 88.89 Roll = -0.47

Accelerometer: X = 15974 Y = -440 Z = 312

Temperature in celsius = 29.38 fahrenheit = 84.88

Gyroscope: X = -111 Y = 341 Z = 211

Angle: Pitch = 89.41 Roll = -0.27

Accelerometer: X = 16102 Y = -380 Z = 172

Temperature in celsius = 29.42 fahrenheit = 84.96

Gyroscope: X = -115 Y = 373 Z = 228

Angle: Pitch = 89.28 Roll = -0.34

Accelerometer: X = 16058 Y = -400 Z = 204

Temperature in celsius = 29.42 fahrenheit = 84.96

Gyroscope: X = -98 Y = 354 Z = 224

Angle: Pitch = 88.83 Roll = -0.54

Accelerometer: X = 15978 Y = -460 Z = 320

Temperature in celsius = 29.33 fahrenheit = 84.79

Gyroscope: X = -124 Y = 376 Z = 207

Angle: Pitch = 89.21 Roll = -0.31

Accelerometer: X = 15978 Y = -392 Z = 228

Temperature in celsius = 29.42 fahrenheit = 84.96

Gyroscope: X = -121 Y = 364 Z = 189

Angle: Pitch = 89.00 Roll = -0.56

Accelerometer: X = 15890 Y = -464 Z = 260

Temperature in celsius = 29.38 fahrenheit = 84.88

Gyroscope: X = -111 Y = 361 Z = 221

Angle: Pitch = 88.67 Roll = -0.65

Accelerometer: X = 16018 Y = -492 Z = 360

Temperature in celsius = 29.38 fahrenheit = 84.88

Gyroscope: X = -130 Y = 340 Z = 216

Angle: Pitch = 88.53 Roll = -0.43

Accelerometer: X = 16110 Y = -428 Z = 432

Temperature in celsius = 29.42 fahrenheit = 84.96

Gyroscope: X = -92 Y = 380 Z = 217

Angle: Pitch = 88.85 Roll = -0.60

Accelerometer: X = 15930 Y = -476 Z = 304

Temperature in celsius = 29.47 fahrenheit = 85.05

Gyroscope: X = -102 Y = 374 Z = 219

Angle: Pitch = 88.87 Roll = -0.24

Accelerometer: X = 16222 Y = -372 Z = 344

Temperature in celsius = 29.52 fahrenheit = 85.13

Gyroscope: X = -96 Y = 351 Z = 226

Angle: Pitch = 89.05 Roll = -0.26

Accelerometer: X = 15970 Y = -376 Z = 284

Temperature in celsius = 29.38 fahrenheit = 84.88

Gyroscope: X = -105 Y = 367 Z = 201

Angle: Pitch = 89.13 Roll = -0.62

Accelerometer: X = 16034 Y = -484 Z = 200

Temperature in celsius = 29.52 fahrenheit = 85.13

Gyroscope: X = -110 Y = 391 Z = 207

Angle: Pitch = 88.98 Roll = -0.51

Accelerometer: X = 16178 Y = -452 Z = 280

Temperature in celsius = 29.47 fahrenheit = 85.05

Gyroscope: X = -117 Y = 379 Z = 221

Angle: Pitch = 89.27 Roll = -0.43

Accelerometer: X = 16066 Y = -428 Z = 192

Temperature in celsius = 29.42 fahrenheit = 84.96

Gyroscope: X = -101 Y = 359 Z = 208

Angle: Pitch = 89.31 Roll = -0.19

Accelerometer: X = 16150 Y = -356 Z = 212

Temperature in celsius = 29.52 fahrenheit = 85.13

Gyroscope: X = -115 Y = 361 Z = 189

Angle: Pitch = 88.76 Roll = -0.51

Accelerometer: X = 16026 Y = -452 Z = 348

Temperature in celsius = 29.42 fahrenheit = 84.96

Gyroscope: X = -139 Y = 368 Z = 192

Angle: Pitch = 88.57 Roll = -0.69

Accelerometer: X = 16086 Y = -504 Z = 388

Temperature in celsius = 29.33 fahrenheit = 84.79

Gyroscope: X = -118 Y = 352 Z = 214

步驟5:了解傾斜角

加速度計

地球的重力是恒定的加速度,力始終指向降到地球中心

當加速度計與重力平行時,測得的加速度將為1G,當加速度計與重力垂直時,加速度將為0G。

傾斜角可以使用以下公式從測量的加速度中計算出:

θ= sin-1(測量的加速度/重力加速度)

陀螺儀

陀螺儀(又稱速率傳感器)用于測量角速度(ω)。

為了獲得機器人的傾斜角,我們需要將陀螺儀的數據如下式所示:

ω=dθ/dt,

θ=∫ωdt

Gyro和加速度傳感器Fusio n

在研究了陀螺儀和加速度計的特性之后,我們知道它們各有優缺點。根據加速度計數據計算出的傾斜角具有較慢的響應時間,而根據陀螺儀數據計算出的積分傾斜角會在一段時間內發生漂移。換句話說,可以說加速度計數據對長期有用,而陀螺儀數據對短期有用。

責任編輯:wv

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 陀螺儀
    +關注

    關注

    44

    文章

    769

    瀏覽量

    98193
  • 加速度計
    +關注

    關注

    6

    文章

    693

    瀏覽量

    45735
收藏 人收藏

    評論

    相關推薦

    陀螺儀LSM6DSV16X與AI集成(11)----融合磁力進行姿態解算

    MotionFX庫包含用于校準陀螺儀加速度計和磁力傳感器的例程。 磁力數據
    的頭像 發表于 09-06 16:57 ?1389次閱讀
    <b class='flag-5'>陀螺儀</b>LSM6DSV16X與AI集成(11)----<b class='flag-5'>融合</b>磁力<b class='flag-5'>計</b>進行姿態解算

    陀螺儀LSM6DSOW開發(5)----MotionFX庫解析空間坐標

    本文探討如何使用MotionFX庫解析空間坐標。MotionFX庫是種用于傳感器融合的強大工具,可以加速度計
    的頭像 發表于 08-15 18:13 ?1323次閱讀
    <b class='flag-5'>陀螺儀</b>LSM6DSOW開發(5)----MotionFX庫解析空間坐標

    驅動LSM6DS3TR-C實現高效運動檢測與數據采集(10)----融合磁力進行姿態解算

    MotionFX庫包含用于校準陀螺儀加速度計和磁力傳感器的例程。 磁力數據
    的頭像 發表于 08-02 15:50 ?1818次閱讀
    驅動LSM6DS3TR-C實現高效運動檢測與<b class='flag-5'>數據</b>采集(10)----<b class='flag-5'>融合</b>磁力<b class='flag-5'>計</b>進行姿態解算

    愛普生三軸加速度計傳感器HGPM01

    HGPM01是基于高性能陀螺儀陀傳感器和加速度計開發的模組,內置3軸陀螺儀和3軸加速度計傳感器。依賴于高精度的傳感器、高性能的處理器和高級的數字信號處理算法,該模組輸出非常穩定的角
    的頭像 發表于 03-05 14:36 ?345次閱讀
    愛普生三軸<b class='flag-5'>加速度計</b>傳感器HGPM01

    MEMS加速度計與MEMS陀螺儀的區別

    MEMS加速度計與MEMS陀螺儀是現代慣性導航系統中最常用的傳感器。
    的頭像 發表于 02-17 14:05 ?2244次閱讀
    MEMS<b class='flag-5'>加速度計</b>與MEMS<b class='flag-5'>陀螺儀</b>的區別

    慣性陀螺儀加速度計的零偏穩定性(bias stability)與零偏不穩定性(bias instability)指的是同個指標嗎?

    請問 1)慣性陀螺儀加速度計的零偏穩定性(bias stability)與零偏不穩定性(bias instability)指的是同個指標嗎? 2)零偏穩定性的測量與計算的? 謝謝!
    發表于 12-29 08:23

    兩軸加速度計和三軸加速度計的使用區別?

    有個問題請教下:在靜態測量的情況下,兩軸的加速度計在測得X、Y軸上的加速度后,是不是就可以根據這兩個值和重力加速度g算出Z軸方向的加速度
    發表于 12-29 06:06

    ADIS16405三軸加速度計的單位是m/s平方還是g?

    想問下ADIS16405 三軸加速度計的單位是m/s平方 還是g 三軸陀螺儀的單位是度/秒嗎?
    發表于 12-28 08:18

    采集到的ADIS16477-2的imu數據,測試陀螺加速度計的漂移非常大怎么解決?

    我現在采集到的ADIS16477-2的imu數據,測試陀螺加速度計的漂移非常大,IMU是放在臺面上鏡子不動的。 下圖第陀螺x、y、z的
    發表于 12-28 07:25

    陀螺儀LSM6DSV16X與AI集成(2)----姿態解算

    LSM6DSV16X包含三軸陀螺儀與三軸加速度計
    的頭像 發表于 12-18 10:51 ?1708次閱讀
    <b class='flag-5'>陀螺儀</b>LSM6DSV16X與AI集成(2)----姿態解算

    mems加速度計的量程是指什么

    Mems加速度計(Micro Electro Mechanical Systems Accelerometer)是種微型化的加速度傳感器,可以測量物體在三個軸向上的加速度,并且廣泛地
    的頭像 發表于 12-15 10:21 ?1279次閱讀

    iMEMS加速度計陀螺儀的相位及頻度響應性能

    電子發燒友網站提供《iMEMS加速度計陀螺儀的相位及頻度響應性能.pdf》資料免費下載
    發表于 11-28 11:19 ?0次下載
    iMEMS<b class='flag-5'>加速度計</b>和<b class='flag-5'>陀螺儀</b>的相位及頻度響應性能

    MEMS加速度計基本振動特性

    電子發燒友網站提供《MEMS加速度計基本振動特性.pdf》資料免費下載
    發表于 11-28 11:18 ?1次下載
    MEMS<b class='flag-5'>加速度計</b>基本振動特性

    MEMS加速度計振動校正說明

    電子發燒友網站提供《MEMS加速度計振動校正說明.pdf》資料免費下載
    發表于 11-23 16:03 ?0次下載
    MEMS<b class='flag-5'>加速度計</b>振動校正說明

    Arduino和MPU6050加速度計陀螺儀教程

    自制云臺相機不定要很笨重,試用MPU6050加速陀螺儀傳感器與Arduino就可以!同時解釋MPU6050的工作原理以及如何從中讀取
    發表于 09-26 06:14