Apa cara yang direkomendasikan untuk membatasi posisi quaternion dasar mengambang dan kecepatan sudut?
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
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] * dt
secara 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 qdot
berada di sepanjang permukaan garis singgung bola satuan ini, yaitu q[n+1] - qdot[n+1] * dt
di 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] * dt
hanya 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] * dt
ada 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 n
titik jalan ke ', q[n+1]
adalah angka empat dari dasar mengambang di n+1
titik 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
.