Belajat Aero
Belajat Aero
Untuk memahami unit ini kita akan mulai dengan accelerometer . Ketika berpikir tentang accelerometers sering berguna untuk
gambar kotak dalam bentuk kubus dengan bola di dalamnya . Anda mungkin membayangkan sesuatu yang lain seperti kue atau
donat , tapi aku akan membayangkan bola :
Jika kita mengambil kotak ini di tempat tanpa gravitasi bidang atau dalam hal ini dengan
tidak ada bidang lain yang mungkin mempengaruhi posisi bola - bola hanya akan
mengambang di tengah kotak. Anda bisa membayangkan kotak adalah di luar angkasa
jauh-jauh dari setiap badan kosmik, atau jika tempat seperti itu sulit untuk menemukan
membayangkan setidaknya pesawat ruang angkasa yang mengorbit di sekitar planet di
mana segala sesuatu dalam keadaan tanpa bobot. Dari gambar di atas Anda dapat
melihat bahwa kita tetapkan untuk setiap sumbu sepasang dinding (kami dihapus Y dinding + sehingga kita dapat melihat ke dalam
kotak). Bayangkan bahwa setiap dinding sensitif tekanan. Jika tiba-tiba kita bergerak kotak di sebelah kiri (kita mempercepatnya
dengan akselerasi 1g = 9.8m / s ^ 2), bola akan memukul dinding X-. Kami kemudian mengukur kekuatan tekanan bahwa bola
berlaku untuk dinding dan output nilai-1g pada sumbu X.
Dalam hal ini kotak tidak bergerak tapi kami masih mendapatkan pembacaan-1g pada sumbu Z. Tekanan bahwa bola telah
diterapkan di dinding itu disebabkan oleh gaya gravitasi. Secara teori itu bisa menjadi berbagai jenis kekuatan - misalnya, jika Anda
membayangkan bahwa bola kita adalah logam, menempatkan magnet sebelah kotak bisa bergerak bola sehingga hits dinding lain.
Hal ini dikatakan hanya untuk membuktikan bahwa dalam langkah-langkah accelerometer dasarnya memaksa tidak percepatan. Itu
hanya terjadi percepatan yang menyebabkan gaya inersia yang ditangkap oleh mekanisme deteksi kekuatan accelerometer.
Meskipun model ini tidak persis bagaimana sensor MEMS dibangun seringkali berguna dalam memecahkan masalah terkait
accelerometer. Ada sensor sebenarnya mirip yang memiliki bola logam di dalam, mereka disebut switch tilt, namun mereka lebih
primitif dan biasanya mereka hanya bisa mengatakan jika perangkat cenderung dalam beberapa jangkauan atau tidak, bukan
tingkat kemiringan.
Sejauh ini kami telah menganalisis output accelerometer pada sumbu tunggal dan ini adalah semua yang Anda akan mendapatkan
dengan accelerometers sumbu tunggal. Nilai riil accelerometers triaksial berasal dari fakta bahwa mereka dapat mendeteksi gaya
inersia pada semua tiga sumbu. Mari kita kembali ke model kotak kami, dan mari kita memutar kotak 45 derajat ke kanan. Bola
akan menyentuh dinding 2 sekarang: Z-dan X-seperti yang ditunjukkan pada gambar di bawah
:
Nilai-nilai 0,71 yang tidak sembarangan, mereka adalah benar-benar sebuah pendekatan untuk sqrt (1/2). Ini akan menjadi lebih
jelas saat kita memperkenalkan model berikutnya kami untuk accelerometer.
Dalam model sebelumnya kita telah tetap gaya gravitasi dan diputar kotak imajiner kita. Dalam 2 contoh terakhir kami telah
menganalisis output dalam 2 posisi kotak yang berbeda, sedangkan vektor gaya tetap konstan. Sementara ini berguna dalam
memahami bagaimana accelerometer berinteraksi dengan kekuatan luar, itu lebih praktis untuk melakukan perhitungan jika kita
memperbaiki sistem koordinat dengan sumbu accelerometer dan membayangkan bahwa vektor gaya berputar di sekitar kita.
Silakan lihat pada model di atas, saya diawetkan warna sumbu sehingga Anda dapat membuat transisi mental dari model
sebelumnya ke yang baru. Bayangkan bahwa setiap sumbu dalam model baru tegak lurus ke wajah masing-masing kotak pada
model sebelumnya. Vektor R adalah vektor gaya yang accelerometer adalah mengukur (bisa berupa kekuatan gravitasi atau gaya
inersia dari contoh di atas atau kombinasi keduanya). Rx, Ry, Rz adalah proyeksi dari vektor R pada X, Y, Z sumbu. Mohon
perhatikan hubungan berikut:
Sudut yang kita tertarik adalah sudut antara X, Y, Z sumbu dan kekuatan vektor R. Kita akan mendefinisikan sudut ini sebagai AXR,
Ayr, AZR. Anda dapat melihat dari segitiga sudut kanan dibentuk oleh R dan Rx bahwa:
cos (AXR) = Rx / R, dan juga:
cos (Ayr) = Ry / R
cos (AZR) = Rz / R
Kita bisa memotong dari Eq.1 bahwa R = sqrt (Rx ^ 2 + Ry ^ 2 + Rz ^ 2).
Kita dapat menemukan sudut sekarang kami dengan menggunakan arccos () function (cos terbalik () function):
AXR = arccos (Rx / R)
Ayr = arccos (Ry / R)
AZR = arccos (Rz / R)
Kami telah pergi jauh untuk menjelaskan model accelerometer, hanya untuk datang ke formula ini. Tergantung pada aplikasi Anda,
Anda mungkin ingin menggunakan formula menengah yang kami telah diturunkan. Kami juga akan memperkenalkan model
giroskop segera, dan kita akan melihat bagaimana accelerometer dan giroskop data dapat dikombinasikan untuk memberikan
perkiraan kemiringan lebih akurat.
Tapi sebelum kita melakukan itu mari kita melakukan beberapa notasi yang lebih berguna:cosX = cos(Axr) = Rx / R
cosY = cos(Ayr) = Ry / R
cosZ = cos(Azr) = Rz / R
Triplet ini sering disebut Direction Cosine, dan itu pada dasarnya merupakan unit vektor (vektor dengan panjang 1) yang memiliki
arah yang sama dengan vektor R kami. Anda dapat dengan mudah memverifikasi bahwa:
Sqrt (cos ^ 2 + Cosy ^ 2 + cosZ ^ 2) = 1
Ini adalah properti yang bagus karena membebaskan kita dari pemantauan modulus (panjang) dari R vektor. Sering kali jika kita
hanya tertarik pada arah vektor inersia kami, masuk akal untuk menormalkan modulus itu untuk menyederhanakan perhitungan
lainnya.
Bagian 2. giroskop
Kami tidak akan memperkenalkan apapun model kotak setara untuk giroskop seperti yang kami lakukan untuk accelerometer,
sebaliknya kita akan melompat langsung ke model accelerometer kedua dan kami akan menunjukkan apa ukuran giroskop menurut
model ini.
Setiap saluran giroskop mengukur rotasi di sekitar salah satu sumbu . Misalnya giroskop 2 - sumbu akan mengukur rotasi di sekitar
( atau beberapa orang mungkin mengatakan "tentang " ) X dan Y sumbu . Untuk mengungkapkan rotasi ini dalam jumlah mari kita
melakukan beberapa notasi . Pertama mari kita mendefinisikan :
Rxz - adalah proyeksi dari vektor gaya inersia R pada bidang XZ
Ryz - adalah proyeksi dari vektor gaya inersia R di pesawat YZ
Dari segitiga sudut kanan dibentuk oleh rxz dan Rz , menggunakan teorema Pythagoras kita mendapatkan :
Rxz ^ 2 = Rx ^ 2 + Rz ^ 2 , dan juga :
Ryz ^ 2 = Ry ^ 2 + Rz ^ 2
juga mencatat bahwa :
R ^ 2 = rxz ^ 2 + Ry ^ 2 , ini bisa berasal dari Eq.1 dan persamaan di atas , atau dapat berasal dari segitiga sudut kanan dibentuk
oleh R dan Ryz
R ^ 2 = Ryz ^ 2 + Rx ^ 2
Kami tidak akan menggunakan formula ini dalam artikel ini tetapi berguna untuk mencatat hubungan antara semua nilai dalam
model kami .
Sebaliknya kita akan menentukan sudut antara sumbu Z dan rxz , vektor Ryz sebagai berikut :
Axz - adalah sudut antara rxz ( proyeksi R pada XZ pesawat) dan Z sumbu
AYZ - adalah sudut antara Ryz ( proyeksi R pada YZ pesawat) dan Z sumbu
Sekarang kita semakin dekat dengan apa langkah-langkah giroskop . Giroskop mengukur tingkat perubahan sudut didefinisikan di
atas . Dengan kata lain itu akan menampilkan nilai yang berhubungan linier terhadap laju perubahan sudut-sudut ini . Untuk
menjelaskan ini mari kita asumsikan bahwa kita telah mengukur sudut rotasi sekitar sumbu Y ( yang akan sudut Axz ) pada waktu t0
, dan kita mendefinisikannya sebagai Axz0 , selanjutnya kita mengukur sudut ini pada waktu t1 kemudian dan itu Axz1 . Laju
perubahan akan dihitung sebagai berikut :
Giroskop ini tidak bebas dari kebisingan namun karena mengukur rotasi itu kurang sensitif terhadap gerakan mekanis linier , jenis
suara yang accelerometer menderita , namun giroskop memiliki jenis lain dari masalah seperti misalnya melayang ( tidak kembali ke
nilai nol - tingkat ketika rotasi berhenti ) . Namun oleh rata-rata data yang berasal dari accelerometer dan giroskop kita bisa
mendapatkan perkiraan yang relatif lebih baik dari kecenderungan perangkat saat ini daripada kami akan memperoleh dengan
menggunakan data accelerometer saja .
Pada langkah selanjutnya saya akan memperkenalkan suatu algoritma yang terinspirasi oleh beberapa ide yang digunakan dalam
filter Kalman , namun adalah jauh lebih sederhana dan lebih mudah untuk menerapkan pada perangkat embedded . Sebelum itu
mari kita lihat dulu apa kita ingin algoritma untuk menghitung . Yah, itu adalah arah vektor gaya gravitasi R = [ Rx , Ry , Rz ] dari
mana kita bisa memperoleh nilai-nilai lain seperti AXR , Ayr , AZR atau cos , Nyaman, cosZ yang akan memberikan kita gambaran
tentang kecenderungan perangkat kami relatif terhadap bidang tanah , kita membahas hubungan antara nilai-nilai dalam Bagian 1 .
Orang mungkin mengatakan - jangan kita sudah memiliki nilai-nilai Rx , Ry , Rz dari Eq.2 dalam Bagian 1 ? Well ya , tapi ingat
bahwa ini nilai-nilai yang berasal dari data hanya accelerometer , jadi jika Anda akan menggunakan mereka secara langsung dalam
aplikasi Anda, Anda mungkin mendapatkan lebih banyak suara daripada aplikasi Anda bisa tolerir. Untuk menghindari kebingungan
mari kita mendefinisikan kembali ukuran accelerometer sebagai berikut :
RACC - vektor adalah gaya inersia yang diukur dengan accelerometer , yang terdiri dari komponen berikut ( proyeksi pada X , Y , Z
kapak ) :
RxAcc = ( AdcRx * Vref / 1023 - VzeroG ) / Sensitivitas
RyAcc = ( AdcRy * Vref / 1023 - VzeroG ) / Sensitivitas
RzAcc = ( AdcRz * Vref / 1023 - VzeroG ) / Sensitivitas
Sejauh ini kita memiliki seperangkat nilai-nilai diukur bahwa kita bisa memperoleh murni dari nilai ADC accelerometer . Kita akan
menyebutnya ini set data yang " vektor " dan kami akan menggunakan notasi berikut .
RACC = [ RxAcc , RyAcc , RzAcc ]
Karena komponen RACC dapat diperoleh dari data accelerometer , kita bisa menganggapnya sebagai masukan untuk algoritma
kami .
Harap dicatat bahwa karena RACC mengukur gaya gravitasi Anda akan benar jika Anda menganggap bahwa panjang vektor ini
didefinisikan sebagai berikut adalah sama atau mendekati 1 g.
| RACC | = sqrt ( RxAcc ^ 2 + RyAcc ^ 2 + RzAcc ^ 2 ) ,
Namun untuk memastikan itu masuk akal untuk memperbarui vektor ini sebagai berikut :
RACC ( normalized ) = [ RxAcc / | RACC | , RyAcc / | RACC | , RzAcc / | RACC | ] .
Ini akan memastikan panjang vektor RACC normalisasi Anda selalu 1 .
Selanjutnya kami akan memperkenalkan sebuah vektor baru dan kita akan menyebutnya
Istirahat = [ RxEst , RyEst , RzEst ]
Ini akan menjadi output dari algoritma kami , ini dikoreksi nilai berdasarkan data giroskop dan berdasarkan data estimasi masa lalu .
Di sini adalah apa algoritma kami akan melakukan :
- Accelerometer memberitahu kita : " Kamu sekarang pada posisi RACC "
- Kita mengatakan " Terima kasih tapi biarkan aku memeriksa " ,
- Kemudian perbaiki informasi ini dengan data giroskop serta dengan data sisa masa lalu dan kami output vektor diperkirakan
Istirahat baru.
- Kita menganggap Istirahat menjadi kami " harga" untuk posisi saat perangkat.
Mari kita lihat bagaimana kita dapat membuatnya bekerja .
Kita akan memulai urutan kita dengan mempercayai accelerometer kami dan menugaskan :
Istirahat ( 0 ) = RACC ( 0 )
By the way ingat Istirahat dan RACC adalah vektor , sehingga persamaan di atas adalah cara sederhana untuk menulis 3 set
persamaan , dan menghindari pengulangan :
RxEst ( 0 ) = RxAcc ( 0 )
RyEst ( 0 ) = RyAcc ( 0 )
RzEst ( 0 ) = RzAcc ( 0 )
Selanjutnya kami akan melakukan pengukuran teratur pada interval waktu yang sama detik T , dan kami akan memperoleh
pengukuran baru yang kami akan mendefinisikan sebagai RACC ( 1 ) , RACC ( 2 ) , RACC ( 3 ) dan seterusnya. Kami juga akan
menerbitkan perkiraan baru pada setiap interval waktu Istirahat ( 1 ) , Istirahat ( 2 ) , Istirahat ( 3 ) dan seterusnya.Misalkan kita
berada di langkah n . Kami memiliki dua set diketahui nilai-nilai yang kita ingin gunakan :Istirahat ( n - 1 ) - perkiraan kami
sebelumnya , dengan Istirahat ( 0 ) = RACC ( 0 )RACC ( n ) - pengukuran accelerometer kami saat iniSebelum kita bisa menghitung
Istirahat ( n ) , mari kita memperkenalkan nilai yang terukur baru , yang bisa kita peroleh dari giroskop dan estimasi sebelumnya .
Kita akan menyebutnya Rgyro , dan juga merupakan vektor yang terdiri dari 3 komponen :
Rgyro = [ RxGyro , RyGyro , RzGyro ]
Kami akan menghitung vektor ini satu komponen pada suatu waktu . Kita akan mulai dengan RxGyro .
Mari kita mulai dengan mengamati hubungan berikut dalam model giroskop kami , dari sudut kanan segitiga yang dibentuk oleh Rz
dan rxz kita dapat memperoleh bahwa:
tan ( Axz ) = Rx / RZ = > Axz = atan2 ( Rx , Rz )
Atan2 mungkin menjadi fungsi Anda tidak pernah digunakan sebelumnya, itu mirip dengan atan , kecuali mengembalikan nilai
dalam kisaran ( - PI , PI ) sebagai lawan ( PI - / 2 , PI / 2) sebagai dikembalikan oleh atan , dan dibutuhkan 2 argumen , bukan satu.
Hal ini memungkinkan kita untuk mengkonversi dua nilai Rx , Rz ke sudut dalam berbagai 360 derajat ( - PI PI ) . Anda dapat
membaca banyak aboutatan2 sini.
Jadi tahu RxEst ( n - 1 ) , dan RzEst ( n - 1 ) kita bisa menemukan :
Axz ( n - 1 ) = atan2 ( RxEst ( n - 1 ) , RzEst ( n - 1 ) ) .
Ingat bahwa giroskop mengukur tingkat perubahan dari sudut Axz . Jadi kita bisa memperkirakan sudut Axz baru ( n ) sebagai
berikut :
Axz ( n ) = Axz ( n - 1 ) + RateAxz ( n ) T *
Ingat bahwa RateAxz bisa didapat dari giroskop kami ADC pembacaan . Sebuah formula yang lebih tepat dapat menggunakan ratarata tingkat rotasi dihitung sebagai berikut :
RateAxzAvg = ( RateAxz ( n ) + RateAxz ( n - 1 ) ) / 2
Axz ( n ) = Axz ( n - 1 ) + RateAxzAvg * T
Dengan cara yang sama kita dapat menemukan :