Transformasi 3D Antara Dua Sistem Koordinat Cartesian Menggunakan Euler Angles

4

Saya mencoba mengubah sembarang vektor dalam bingkai Cartesian menjadi bingkai Cartesian yang berbeda . Baik dan memiliki asal yang sama. Saya telah berkonsultasi dengan Dynamics Flight Dynamics and Control oleh Wayne Durham, dan memahami solusi buku itu sebagai berikut:v1F1F2F1F2

Gunakan roll yaw-pitch-roll standar { } (biasanya disebut { masing-masing }) / pesanan. Ada tiga matriks transformasi, satu untuk setiap sumbu. Pertama, putar tentang sumbu z . Panggil matriks transformasi karena ia beralih dari ke frame perantara . diberikan sebagaiz,y,x /θz,sθy,sθxψ,θ,ϕ321F1TF,1F1FTF,1

TF,1=[cos(θz)sin(θz)0sin(θz)cos(θz)0001]

Untuk beralih dari ke , Anda kemudian memutar sumbu y' menggunakan T _ {\ mathscr {F ''}, \ mathscr {F '}} = \ begin {bmatrix} cos (\ theta_ {y}) & 0 & -sin (\ theta_ {y}) \\ 0 & 1 & 0 \\ sin (\ theta_ {y}) & 0 & cos (\ theta_ {y}) \\ \ end {bmatrix}FF

TF,F=[cos(θy)0sin(θy)010sin(θy)0cos(θy)]

Akhirnya, untuk beralih dari ke , Anda kemudian memutar tentang sumbu x menggunakanFF2

TF,F=[1000cos(θx)sin(θx)0sin(θx)cos(θx)]

Matriks transformasi komposit dapat dibuat dengan mengalikan transformasi ini bersama-sama. Masing-masing langkah transformasi pada vektor generik diberikan dalam buku ini (dan saya buat ulang di bawah ini) untuk menunjukkan penentuan pesanan.Tv

v=TF,1v
v=TF,Fv
v2=TF2,Fv

v2=TF2,FTF,FTF,F1v

v2=Tv1

Jadi (ketat dalam urutan ini).T=TF2,FTF,FTF,F1

Masalah saya muncul ketika saya mengkodekan transformasi ini menjadi MATLAB dan menguji beberapa contoh yang dapat saya verifikasi secara kualitatif (dengan beberapa sumbu koordinat yang saya buat dari kayu).

Matriks transformasi yang berfungsi adalah . Jadi, agar transformasi bekerja seperti yang saya harapkan, saya perlu melipatgandakan matriks dalam urutan terbalik dan mengambil transposinya. Apa yang salah?TT=(TF,F1TF,FTF2,F)T

Worldline yang unik
sumber
1
Saya bukan ahli, jadi ini hanya komentar. Saya sarankan Anda terlebih dahulu mengonversi ke Quaternions, memutar sebagai Quaternion, lalu mengonversi kembali ke apa pun yang Anda butuhkan. Mengapa? Euler Angles bergantung pada urutan sudut diterapkan. Mereka juga tunduk pada Gimble Lock. Pertanyaan menghindari kedua masalah ini. Urutan ulang aplikasi: Dimungkinkan untuk mendapatkan hasil yang berbeda jika Anda menerapkan yaw / pitch / roll versus menerapkan salah satu kombinasi lainnya, seperti pitch / yaw / roll. Quaternions memiliki banyak dukungan perangkat lunak dan dokumentasi karena programmer game membutuhkannya.
philologon
1
Juga, jika aplikasi Anda akan berakhir dalam perangkat lunak, cari solusi yang sudah dilakukan dalam manajer paket untuk bahasa tertentu yang Anda gunakan. Berikut ini satu untuk Python: stackoverflow.com/a/4870905/1339950
philologon
Terima kasih atas komentarmu. Sayangnya, saya bukan ahli juga, dan hanya menemukan kata Quaternion hari ini. Bukan tidak mungkin saya bisa mempelajarinya, tetapi saya hanya perlu transformasi ini untuk sudut kurang dari 90 derajat. Aku akan mengingatnya untuk masa depan.
Unique Worldline
Seringkali orang merasa harus menunjukkan rincian matematika sebelum menjelaskan cara menggunakannya. Itu sering membuat orang ketakutan. Jangan biarkan itu menghalangi Anda. Menggunakannya itu mudah. Sebagian besar paket / modul / kelas memungkinkan Anda memulai yang baru dengan melewati Euler Angles. Kemudian lakukan apa yang perlu Anda lakukan, kemudian berikan poin untuk diubah dan dapatkan poin di sistem baru. Saya sendiri akan mempelajari mereka segera (saya berharap saya perlu, toh).
philologon
Ini mungkin akan mendapatkan jawaban yang lebih baik, atau lebih maju, di math.SE atau Physics.SE.
Carl Witthoft

Jawaban:

4

Misalkan Frame 1 adalah frame koordinat dunia dan Frame 2 frame robot lokal.

Hal yang sedikit membingungkan di sini adalah ketika Anda mengubah dari Frame 1 ke Frame 2, Anda mengatakan bahwa Anda ingin ... mengubah frame 1 ke frame 2. Anda ingin mengambil semua poin frame 1, dan meletakkannya di frame 2. Anda ingin mengukur di mana titik-titik dalam frame 1 berada, tetapi dalam sistem koordinat frame 2.

Ini adalah masalah karena apa yang mungkin ingin Anda lakukan adalah mengukur / mengendalikan bingkai robot (posisi) dalam sistem koordinat bingkai dunia. Anda peduli apakah kendaraan Anda 10 derajat di atas cakrawala , atau koordinat global dari end effector, dll. Ini berarti (setidaknya kontra-intuitif untuk saya), jika Anda ingin melihat apa yang dibaca di koordinat frame 1, maka Anda perlu mengimpornya ke dalam bingkai 1.

Jadi, jika Anda ingin menggunakan koordinat frame 1 untuk mengukur objek dalam frame 2, Anda perlu mengambil transformasi dari frame 1 ke frame 2. Untuk memainkan sekali lagi, matematika Anda memberi:

v2=Tv1

Anda dapat melihat bahwa input Anda adalah , Anda mentransformasikan input dengan , dan kemudian output Anda diukur dalam koordinat frame 2 .v1T

Apa yang Anda malah ingin lakukan adalah untuk mengambil invers transformasi. Ini memberi Anda hal berikut:

v2=Tv1T1(v2)=T1(Tv1)T1v2=v1

Saya akan menunjukkan secara singkat bahwa Anda menggunakan untuk matriks transformasi, tetapi cara Anda mendefinisikannya itu benar-benar matriks rotasi ; semua fungsi Anda adalah matriks 3x3.TTF

Dalam peristiwa apa pun, transformasi atau rotasi, itu tidak masalah! Matriks rotasi adalah bagian 3x3 kiri atas dari matriks transformasi 4x4, dan mengambil transpose dari matriks rotasi sama dengan mengambil kebalikan dari matriks rotasi yang sama.

Jadi koordinat Anda salah karena Anda tidak mengukur poin yang Anda berikan dalam bingkai yang Anda kira. Ini "bekerja" ketika Anda mengambil transpos karena itu sebenarnya sama dengan terbalik , yang berarti Anda membalik arah arah transformasi.

Membuang
sumber
1
Terima kasih! Di samping beberapa kecerobohan lain di pihak saya berkaitan dengan tanda-tanda negatif, inilah masalahnya.
Unique Worldline
@UniqueWorldline. Ya, jadi Anda memodelkan hal-hal terbalik, yang persis sama dengan menukar arah matriks Anda ke urutan utama yang berbeda. Jika Anda benar-benar menemukan cara lain yang lebih intuitif. Pergi untuk itu .. Tidak ada yang mengatakan harus memodelkan persis seperti ini. Lihat penggandaan matriks simetris melintasi transpos dalam urutan penggandaan terbalik (yang juga mengapa invers rotasi adalah transposnya sendiri). Tidak ada yang berubah kecuali arah operasi.
joojaa
1

Anda sebenarnya tidak melakukan kesalahan apa pun. Hanya saja aljabar Matrix, yang sangat disesalkan oleh sebagian orang, sebenarnya tidak mendefinisikan bagaimana Anda perlu mengemas data Anda ke dalam matriks. Pilihanmu.

Jadi pertanyaannya adalah apakah Anda menganggap bahwa vektor di dalam matriks Anda menjadi kolom atau baris. Ini disebut kolom utama atau baris utama. Apa yang Anda dapatkan hanyalah solusi yang dialihkan, dan urutan perhitungan terbalik. Itu terjadi, beberapa literatur berada di baris utama dan beberapa di kolom notasi utama. Ini semua pertanyaan apakah Anda ingin melihat objek bentuk atau bentuk di luar, pilihan Anda. Tetapi Anda harus menyadari hal ini atau berakhir dengan masalah seperti ini, atau mereka tidak hanya masalah definisi.

Menggunakan qaternions atau metode lain tidak membuat Anda mengalami masalah yang sama.

joojaa
sumber