วิธีใดที่แนะนำในการ จำกัด ตำแหน่งควอเทอร์เนียนฐานลอยและความเร็วเชิงมุม
สำหรับวัตถุที่มีฐานลอยการหมุนในตำแหน่งทั่วไปจะแสดงเป็นควอเทอร์เนียน 4 มิติ อย่างไรก็ตามการหมุนในความเร็วทั่วไปยังคงแสดงเป็นเวกเตอร์การหมุนเชิงพื้นที่ 3 มิติ
มีวิธีที่แนะนำในการ จำกัด พวกเขาเช่น backward euler หรือไม่?
prog.AddConstraint(eq(q[t+1], q[t] + h[t] * qd[t+1]))
มันเป็นความเหมาะสมในการแปลงความเร็วเชิงมุมลงในแบบฟอร์ม quaternion เช่นที่นี่ ?
หรืออย่างที่ John T. Betts วางไว้ในวิธีปฏิบัติเพื่อการควบคุมและการประมาณค่าที่เหมาะสมที่สุดโดยใช้การเขียนโปรแกรมแบบไม่เชิงเส้น

คำตอบ
ฉันคิดว่าสำหรับกรณีการใช้งานของคุณคุณต้องการกำหนดข้อ จำกัด การรวมระหว่างจุดอ้างอิงที่อยู่ติดกันในการวางแผน ในกรณีนี้ฉันไม่แนะนำให้ใช้การรวมออยเลอร์q[n] = q[n+1] - qdot[n+1] * dt
โดยตรง เหตุผลก็คือควอเทอร์เนียนควรเป็นไปตามข้อจำกัดความยาวของหน่วยเสมอ (กล่าวคือq[n]
และq[n+1]
ทั้งสองอย่างอยู่บนพื้นผิวของทรงกลมหน่วยใน 4D) ดังนั้นอนุพันธ์ของเวลาqdot
จึงอยู่ตามพื้นผิวสัมผัสของทรงกลมหน่วยนี้กล่าวคือq[n+1] - qdot[n+1] * dt
อยู่บนพื้นผิวสัมผัสนั้น ไม่มีจุดใด (นอกจากq[n+1]
) บนพื้นผิวสัมผัสบนพื้นผิวของวงกลมหน่วย ดังนั้นข้อ จำกัดq[n+1] = q[n] + qdot[n+1] * dt
สามารถทำได้ก็ต่อเมื่อdt=0
คุณจับคู่กับข้อ จำกัด | q [n] | = | q [n + 1] | = 1. ในภาพคุณสามารถใช้รูปในส่วน "แทนเจนต์เป็นวงกลม" ของhttps://www.toppr.com/guides/maths/circles/tangents-to-the-circle/. ขอให้สังเกตว่าq[n+1] - qdot[n+1] * dt
อยู่บนเส้นสัมผัสของทรงกลมและอยู่ในวงกลมเพื่อให้คุณไม่สามารถมีq[n]
q[n] = q[n+1] - qdot[n+1] * dt
แต่ฉันขอแนะนำให้พิจารณาเงื่อนไขต่อไปนี้
q[n+1] = q[n] ⊗ Δq
คq[n]
วอเทอร์เนียนของฐานลอยอยู่ที่n
จุดเวย์พอยท์ 'th q[n+1]
คือควอเทอร์เนียนของฐานลอยที่n+1
จุดเวย์พอยต์ ⊗
เป็นผลิตภัณฑ์แฮมิลตันที่อยู่ระหว่างสองควอเทอร์เนียนq[n]
และΔq
. ตรงนี้คุณต้องคำนวณΔqจากความเร็วเชิงมุม
สมมติว่าความเร็วเชิงมุมเฉลี่ยระหว่างจุดเวย์พอยท์ที่ n และ n + 1 คือω∈ℝ³ ซึ่งหมายความว่าฐานลอยหมุนรอบแกนa = ω/|ω|
ในอัตรา|ω|
ดังนั้น
Δq = [cos(|ω|Δt/2), a*sin(|ω|Δt/2)]
ดู https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation#Using_quaternion_as_rotations สำหรับคำอธิบายเกี่ยวกับสมการด้านบน
หากคุณใช้ω[n+1]
เป็นความเร็วเชิงมุมเฉลี่ยจากจุดอ้างอิงที่ n ถึงจุดอ้างอิง n + 1 (คล้ายกับการใช้ v [n + 1] ในออยเลอร์ถอยหลัง) ข้อ จำกัด ในการรวมของคุณคือ
q[n+1] = q[n] ⊗ [cos(|ω[n+1]|Δt/2), a*sin(|ω[n+1]|Δt/2)]
คุณสามารถใช้ปริมาณอื่นเป็นความเร็วเชิงมุมเฉลี่ยได้เช่น(ω[n] + ω[n+1])/2
กัน