Akselerasi saat perangkat miring

13

Saat ini saya sedang mengerjakan perangkat yang menggunakan accelerometer 3D selalu aktif (menggunakan skala + -2g) dan giroskop 3D (menggunakan skala + -250g) -sensor.

Saya dapat membaca setiap kemungkinan vektor (X, Y, Z) dan akselerasi mereka (g) dan kecepatan sudut (dps) dan juga sudut di mana perangkat saat ini berada. Tetapi masalah saya adalah bahwa ketika perangkat dalam kemiringan (0g saat tidak ada kemiringan) akselerasi adalah antara (ke bawah) 0g -> - 1g atau antara (ke atas) 0g-> 1g tergantung pada sudut perangkat saat ini. Di bawah ini adalah gambar yang mudah-mudahan membersihkan ide.

Semoga ini bisa membantu

Perangkat akan terletak di dalam mobil dan harus mengukur akselerasi saat mobil melambat (rem). Namun jika perangkat sudah miring, akselerometer akan mengukur beberapa akselerasi yang menyebabkan kemiringan yang membuatnya sulit untuk mengetahui apakah perangkat benar-benar memiliki akselerasi atau hanya kemiringan yang menyebabkan akselerasi.

X dan Y -Axis menghasilkan 0g dan sumbu Z adalah 1g ketika perangkat tidak memiliki kemiringan dan pada permukaan datar. Kemiringan menyebabkan pembacaan sumbu X mengarah ke 1g jika miring ke atas dan -1g saat ke bawah. + -1g tercapai ketika perangkat berada pada derajat 90 * dari posisi semula

Saya telah memikirkan bagaimana menghilangkan akselerasi yang menyebabkan kemiringan dan hanya mengukur akselerasi sebenarnya dari perangkat tetapi tidak bisa memikirkan jalan keluar dari masalah ini dengan data berikut yang dapat saya hasilkan.

Pada dasarnya saya berpikir bahwa jika saya hanya bisa mengukur akselerasi sumbu X (gambar) bahkan jika sensor dalam kemiringan seperti pada gambar.

Semoga pesan ini tidak terlalu sulit dimengerti karena kemampuan bahasa Inggris saya dan cara saya mencoba menjelaskan masalah saya.

jumbojohn
sumber
2
Mengapa Anda tidak mengukur saja ketika tidak ada akselerasi menarik yang terjadi, dan menggunakannya sebagai titik perbandingan?
PlasmaHH
Saya pikir itu tidak akan berhasil. Jika perangkat masih sempurna sumbu X dan Y adalah 0g dan Z sumbu 1g. Miringkan menyebabkan pembacaan sumbu X dari -1g ke 1g tergantung pada kemiringan, seperti yang saya nyatakan. Pengereman menyebabkan nilai sumbu X diukur menurun (akselerasi negatif sehingga mobil melambat). Jika perangkat sudah misalnya dimiringkan ke bawah jadi itu sesuatu antara 0g - (-1g) bagaimana saya bisa tahu bahwa ini bukan akselerasi yang disebabkan oleh pengereman?
jumbojohn
Mengapa Anda tidak menghitung total percepatan tiga sumbu bukan hanya sumbu Y? Kupikir itu sesuatu yang mendasar untuk mempertimbangkan ketiga sumbu kan !? Sesuatu seperti ini
charansai
LSM6DSM tidak memiliki magnetometer. Dari mana Anda mendapatkan informasi ini? Saya pikir Anda sebenarnya menggunakan papan X-NUCLEO-IKS01A1 dari ST, yang memiliki baik LSM6DSM Gyro / accelerometer dan Magnetometer LIS3MDL.
MrGerber
@ Mr.Gerber Terima kasih atas perhatiannya. Itu salah saya karena salah membaca datasheet dari sensor.
jumbojohn

Jawaban:

18

Hanya sebuah sketsa solusi.

Pertimbangkan semua 3 sumbu sebagai pertimbangan.

Akselerasi karena gravitasi, terlepas dari kemiringannya, akan selalu 1G, sebagai jumlah vektor X, Y, Z, tidak peduli apa kemiringannya. Anda dapat menggambarkan akselerasi saat istirahat atau gerakan stabil sebagai titik pada bola dengan jari-jari 1G. (Jika Anda horisontal sempurna, titik itu adalah (0, 0, -1) yaitu tepat di bawah Anda).

Akselerasi karena pengereman akan merusak bola itu sendiri; jumlah vektor X, Y, Z tidak akan lagi menjadi 1G.

Begitu

A=X2+Y2+Z2

SEBUAH

ASEBUAH

Kecuali Anda juga berputar atau tergelincir, jadi Anda perlu input dari roda kemudi dan ABS untuk memastikan; itu menjadi masalah fusi data. Pendekatan ini akan memberikan perkiraan percepatan. Untuk memeriksa dan menyempurnakan estimasi tersebut, gabungkan dengan sumber data lain (juga tidak dapat diandalkan), seperti dalam jawaban Phil Frost, menggunakan filter Kalman.

Brian Drummond
sumber
Sebenarnya saya belum pernah bekerja dengan accelerometer / gyroscope sebelumnya sehingga gambaran besarnya tidak sepenuhnya jelas bagaimana hal-hal ini bekerja dan matematika bukan salah satu dari keterampilan saya yang paling kuat sehingga saya akan menghargai tips / klarifikasi, terima kasih.
jumbojohn
Meskipun benar saya memiliki kecurigaan yang kuat bahwa margin kesalahan akan menjadi penting. Juga jangan lupa akselerasi vertikal akan merusak bola (mis. Speed ​​bumps, potholes) sehingga Anda mungkin perlu menyelesaikannya tergantung pada aplikasinya.
Chris H
Tetapi gravitasi tidak konstan jika Anda terlihat cukup keras . Sementara jalan tertinggi di AS hanya mengurangi $ g $ sekitar 0,1%, pergi dari kutub ke khatulistiwa membuat perbedaan 0,5%. Geologi juga dapat membuat perbedaan urutan besarnya ini . Mungkin bukan game-changer tetapi jangan abaikan kalibrasi
Chris H
Anda hanya perlu memodifikasi jari-jari bola G sesuai dengan lokasi Anda, atau mengukurnya sebelum menghidupkan mesin; itu bukan masalah. Saya setuju bahwa gundukan mungkin perlu ditangani bersamaan dengan jalan sarad dan kemudi.
Brian Drummond
Mengkalibrasi sebelum menghidupkan mesin adalah hal yang saya pikirkan. Kalibrasi harus cepat meskipun jika pembangun tidak maka pengguna akhir.
Chris H
9

Kesalahan utama Anda adalah tidak memperlakukan akselerasi sebagai vektor tunggal. Ketika mobil dalam keadaan diam, vektor itu akan selalu 1 g ke atas. Jangan hanya melihat komponen X dari data accelerometer mentah. Lakukan matematika vektor nyata.

Tetapi masalah saya adalah bahwa ketika perangkat dalam kemiringan (0g saat tidak ada kemiringan) akselerasi adalah antara (ke bawah) 0g -> - 1g atau antara (ke atas) 0g-> 1g.

Tidak, ini intinya. Apa yang Anda katakan mungkin benar untuk komponen X dari output accelerometer, tetapi tidak benar untuk akselerasi ketika mobil dalam keadaan diam.

Akselerasi terukur yang ideal akan selalu menjadi akselerasi aktual mobil (relatif terhadap bumi), ditambah akselerasi 1 g karena gravitasi. Yang terakhir selalu ke arah atas. Jika Anda mengetahui orientasi mobil, maka Anda dapat mengurangi 1 g ini karena gravitasi untuk menemukan akselerasi yang sebenarnya Anda cari.

Perhatikan bahwa ada kesalahan yang cukup besar dalam pembacaan tersebut, terutama dari sensor MEMS murah. Meskipun Anda harus bisa mendapatkan ide bagus tentang peristiwa jangka pendek seperti akselerasi keras atau pengereman keras, data ini tidak cukup baik untuk melakukan navigasi inersia selama lebih dari beberapa detik.

Olin Lathrop
sumber
Bukankah akselerasi (terukur) karena gravitasi berada pada arah "naik"? Seperti pada, bacaan yang akan Anda dapatkan dari perangkat saat diam dalam gravitasi Bumi akan sama dengan yang Anda dapatkan di luar medan gravitasi apa pun, tetapi mempercepat arah (relatif-perangkat) relatif?
psmears
@psmears: Ya, Anda benar. Gaya ke bawah, tetapi akselerasi jelas ke atas. Tetap.
Olin Lathrop
5

Seperti jawaban lain telah menyatakan, accelerometer menyediakan vektor tiga dimensi yang merupakan jumlah gravitasi dan akselerasi lain pada mobil karena mesin, rem, atau gaya lain yang bekerja pada mobil. Tujuan Anda kemudian adalah untuk mengurangi percepatan gravitasi dari output accelerometer untuk menemukan kekuatan lain yang tersisa.

Untuk akurasi terbaik, Anda tidak dapat menganggap gravitasi selalu "turun" relatif terhadap accelerometer. Misalnya, mobil mungkin berada di atas bukit. Semua perhitungan Anda harus dilakukan dengan matematika vektor tiga dimensi, dan Anda harus memiliki beberapa perkiraan orientasi mobil sehingga Anda tahu arah vektor gravitasi untuk dikurangi.

Sebuah Kalman Filter adalah pendekatan umum di sini. Idenya adalah untuk mengambil semua data yang Anda miliki yang dapat mengubah orientasi mobil, kemudian melakukan pengukuran rata-rata tertimbang, menggabungkannya dengan apa yang Anda ketahui tentang fisika yang bekerja pada mobil, untuk sampai pada perkiraan probabilistik dari orientasi baru mobil dan ke arah mana "turun".

Semakin banyak data yang Anda miliki, dan semakin akurat Anda dapat memodelkan fisika mobil, semakin akurat estimasi ini.

Misalnya, jika Anda memiliki gyro dan mengukur mobil yang melayang, Anda dapat memperkirakan vektor gravitasi akan berputar ke arah belakang mobil. Dalam jangka pendek, katakanlah ketika mobil baru saja mulai naik bukit, ini dapat membantu vektor gravitasi dengan cepat mengambil orientasi yang benar.

Anda mungkin juga menganggap mobil rata-rata tidak akan mengerem atau berakselerasi. Dengan demikian, output low-pass dari accelerometer dapat dimasukkan ke dalam estimasi arah "turun" itu. Ini memberikan pengukuran jangka panjang yang tidak mengalami penyimpangan inersia.

Menggabungkan data dari accelerometer dan giroskop untuk memperkirakan arah gravitasi sehingga memberikan estimasi yang lebih akurat daripada pengukuran lainnya.

Anda selanjutnya dapat memasukkan apa yang Anda ketahui tentang kemungkinan amplop operasional kendaraan. Misalnya mobil tidak dapat mengendarai naik atau turun bukit yang terlalu curam, jadi ketika accelerometer menunjukkan sudut ekstrem seperti itu Anda mungkin kurang berat, dengan asumsi sebagian besar outputnya disebabkan oleh rem atau mesin, bukan gravitasi.

Anda tahu jika pengemudi menginjak rem, ini akan memindahkan vektor akselerasi, dan Anda dapat mengurangi ini dari perkiraan komponen "turun".

Atau jika Anda memiliki GPS dan data peta, Anda dapat memasukkan perkiraan kemiringan mobil berdasarkan lokasi. Jika Anda memiliki data akurasi tinggi, Anda mungkin tahu persis bukit apa yang dihidupkan. Jika Anda hanya memiliki data akurasi rendah ini masih bisa berguna. Misalnya jika mobil di Kansas, bukit tidak mungkin. Jika mobil di San Francisco, perbukitan lebih mungkin dan Anda mungkin memberikan akselerometer lebih sedikit.

Jika Anda memiliki data tentang konsumsi dan kecepatan bahan bakar, mengetahui bahwa lebih banyak bahan bakar dikonsumsi saat naik, Anda mungkin menggunakan ini untuk memperkirakan mobil dinaikkan atau turun berdasarkan efisiensi bahan bakar.

Dan seterusnya. Semakin banyak Anda tahu, semakin baik perkiraan Anda.

Phil Frost
sumber
3

Anda membutuhkan algoritma fusi dan menggunakan sensor 3D-accelerometer, 3D-Gyro, dan 3D-Magnetic. Dengan algoritma fusi ini Anda mendapatkan sikap, gravitasi bumi membantu sebagai referensi untuk mendeteksi sudut horizon-pitch / yaw / roll. Dua sensor mag / gyro lainnya membantu menyaring gerakan dinamis. Saat mobil Anda juga akan belok kiri / kanan, .. gaya sentrifugal akan ditambahkan. Setelah Anda memiliki sikap, maka Anda dapat mengurangi vektor gravitasi dan membongkar percepatan yang dihasilkan di ketiga sumbu.

Marko Buršič
sumber
3

Sebagai pendekatan yang sangat mendasar, Anda dapat menggunakan filter high-pass untuk menghilangkan bagian konstan dari akselerasi (yang sesuai dengan gravitasi) dan menjaga bagian variabel yang disebabkan oleh dinamika mobil. Misalkan rawadalah vektor yang berisi pengukuran X, Y dan Z Anda, dan accmerupakan akselerasi mobil tanpa gravitasi. Kemudian

void correct_for_gravity(float *raw, float *acc)
{
   const float k = 0.9;
   static float gravity[3];

   gravity[0] = k * gravity[0] + (1 - k) * raw[0];
   gravity[1] = k * gravity[1] + (1 - k) * raw[1];
   gravity[2] = k * gravity[2] + (1 - k) * raw[2];

   acc[0] = raw[0] - gravity[0];
   acc[1] = raw[1] - gravity[1];
   acc[2] = raw[2] - gravity[2];
}

Komponen individual accmasih dipengaruhi oleh kemiringan, tetapi norma vektor tidak:

norm_acc = sqrt(acc[0]*acc[0] + acc[1]*acc[1] + acc[2]*acc[2]);

Tentu saja, metode ini tidak terlalu tepat, terutama jika kemiringan berubah pada tingkat tinggi. Ini tentang sejauh matematika naif membuat Anda. Jika Anda membutuhkan ketelitian yang lebih baik, pelajari cara menggunakan filter Kalman.

Dmitry Grigoryev
sumber
1

Jawabannya terletak pada definisi tepat "melambat" .

Dari pertanyaan Anda:

Perangkat akan terletak di dalam mobil dan harus mengukur akselerasi saat mobil melambat (rem).

Namun, melambat tidak sama dengan pengereman . Ada dua definisi yang mungkin:

  1. Kecepatan mobil relatif terhadap tanah menurun.
  2. Rem mobil sedang diterapkan.

Perbedaan ini signifikan dalam uphills dan downhills. Pada saat downhills, kecepatan mobil akan meningkat jika rem tidak diterapkan. Dan di uphills, kecepatannya bisa melambat bahkan saat tidak mengerem.

Ternyata mendeteksi 1. secara signifikan lebih sulit daripada 2. Mari mendefinisikan sumbu relatif terhadap orientasi mobil: X: arah depan-belakang, Y: arah kiri-kanan, Z: arah atas-bawah. Semua sumbu selaras dengan mobil.

Solusi:

  1. Untuk definisi 1., pendekatan terbaik adalah dengan mengasumsikan bahwa kecepatan mobil hanya dapat berubah dalam arah X. Kemudian akselerasi terukur a = g + v di mana g adalah akselerasi karena gaya melawan gravitasi, dan v adalah akselerasi karena perubahan kecepatan. Anda dapat mengasumsikan panjang g selalu sama dengan 9,8 m / s², dan v selalu dalam arah X. Jadi (g_x + v_x, g_y, g_z) = (a_x, a_y, a_z) , yang memberikan v_x = a_x - sqrt ((9,8m / s²) ² - g_y² - g_z²) . Ini hanya akan berfungsi selama | v | kurang dari | g |, atau dengan kata lain, akselerasi karena motor atau rem kurang dari 1G. Asumsi itu seharusnya cukup aman kecuali mobil Anda memiliki roket pendorong.

  2. Untuk definisi 2., Anda bisa langsung mengambil pembacaan sumbu x. Jika mobil tidak berakselerasi atau mengerem, satu-satunya gaya pencegah gravitasi yang bekerja di atasnya adalah gaya normal permukaan jalan. Gaya ini selalu berada pada arah z relatif terhadap mobil, sehingga tidak mengubah pembacaan sumbu-x. Rem dan motorik bertindak hanya dalam arah x, dan akan langsung terlihat dalam bacaan ini.

jpa
sumber
0

Tampaknya Anda menggunakan perangkat "berlebihan" untuk aplikasi Anda. Anda harus menggunakan perangkat yang hanya mengukur akselerasi x & y, dengan cara ini, kemiringan tidak akan memiliki efek yang dapat diukur. Meskipun total akselerasi mungkin lebih kecil atau lebih besar, karena kemiringannya, perangkat hanya akan mengukur komponen x & y dari akselerasi pada pesawat yang digunakan kendaraan.

Guill
sumber