Apa cara yang direkomendasikan untuk membatasi posisi quaternion dasar mengambang dan kecepatan sudut?

Aug 20 2020

Untuk objek dengan alas mengambang, rotasi pada posisi umum dinyatakan sebagai angka empat 4D. Namun, rotasi pada kecepatan umum masih dinyatakan sebagai vektor rotasi spasial 3D.

Apakah ada cara yang direkomendasikan untuk membatasi mereka, misalnya euler mundur?

prog.AddConstraint(eq(q[t+1], q[t] + h[t] * qd[t+1]))

Apakah tepat untuk mengubah kecepatan sudut menjadi bentuk kuatnion, misalnya di sini ?

Atau seperti yang dikatakan John T. Betts dalam Metode Praktis untuk Kontrol dan Estimasi Optimal Menggunakan Pemrograman Nonlinier

Jawaban

1 HongkaiDai Aug 21 2020 at 00:16

Saya pikir untuk kasus penggunaan Anda, Anda ingin memaksakan batasan integrasi antara titik arah yang berdekatan dalam perencanaan. Dalam hal ini, saya tidak akan menyarankan untuk menggunakan integrasi Euler q[n] = q[n+1] - qdot[n+1] * dtsecara langsung. Alasannya adalah bahwa angka empat harus selalu memenuhi batasan panjang satuan (yaitu, q[n]dan q[n+1]keduanya berada di permukaan bola satuan dalam 4D). Oleh karena itu turunan waktu qdotberada di sepanjang permukaan garis singgung bola satuan ini, yaitu q[n+1] - qdot[n+1] * dtdi permukaan garis singgung tersebut. Tidak ada titik (selain q[n+1]) di permukaan singgung juga di permukaan lingkaran satuan. Karenanya batasan q[n+1] = q[n] + qdot[n+1] * dthanya dapat dipenuhi jika dt=0, ketika Anda memasangkannya dengan batasan | q [n] | = | q [n + 1] | = 1. Secara bergambar, Anda dapat menggunakan gambar di bagian "bersinggungan dengan lingkaran" darihttps://www.toppr.com/guides/maths/circles/tangents-to-the-circle/. Perhatikan bahwa q[n+1] - qdot[n+1] * dtada di garis singgung bola, dan q[n]ada di lingkaran, jadi Anda tidak bisa memilikinya q[n] = q[n+1] - qdot[n+1] * dt.

Sebaliknya, saya menyarankan untuk mempertimbangkan kondisi berikut

q[n+1] = q[n] ⊗ Δq

di mana q[n]angka empat dari dasar mengambang di ntitik jalan ke ', q[n+1]adalah angka empat dari dasar mengambang di n+1titik jalan ke'. adalah hasil kali Hamiltonian antara dua angka empat q[n]dan Δq. Jadi di sini Anda perlu menghitung Δq dari kecepatan sudut.

Misalkan kecepatan sudut rata-rata antara titik lewat ke-n dan ke-1 adalah ω ∈ ℝ³. Ini berarti bahwa mengambang berputar dasar tentang sumbu a = ω/|ω|pada tingkat |ω|, maka

Δq = [cos(|ω|Δt/2), a*sin(|ω|Δt/2)]

Lihat https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation#Using_quaternion_as_rotations untuk penjelasan tentang persamaan diatas.

Jika Anda menggunakan ω[n+1]kecepatan sudut rata-rata dari titik lewat ke-n ke titik jalan ke-n + (analog dengan menggunakan v [n + 1] dalam Euler mundur), maka batasan integrasi Anda adalah

q[n+1] = q[n] ⊗ [cos(|ω[n+1]|Δt/2), a*sin(|ω[n+1]|Δt/2)]

Anda juga bisa menggunakan besaran lain sebagai kecepatan sudut rata-rata, misalnya (ω[n] + ω[n+1])/2.