چرخش های فضایی در سه بعدی را می توان با استفاده از زاویه های اویلر و کواترنیون های واحد پارامتری کرد. این مقاله نحوه تبدیل بین دو نمایش را توضیح می دهد. در واقع این استفاده ساده از "کواترنیون ها" اولین بار توسط اویلر حدود هفتاد سال زودتر از همیلتون برای حل مشکل مربع های جادویی ارائه شد. به همین دلیل جامعه دینامیک معمولاً به کواترنیون ها در این برنامه به عنوان "پارامترهای اویلر" اشاره می کند.
تعریف [ ویرایش ]
برای بقیه این مقاله، کنوانسیون کواترنیون JPL "غیرفعال" [1] باید استفاده شود. یک کواترنیون واحد را می توان به صورت زیر توصیف کرد:
با عبارت زیر می توانیم یک کواترنیون را با چرخش حول یک محور مرتبط کنیم
که α یک زاویه چرخش ساده است (مقدار رادیان زاویه چرخش ) و cos(β x )، cos(β y ) و cos(β z ) " کسینوس های جهت" زاویه های بین سه محور مختصات هستند. و محور چرخش (قضیه چرخش اویلر).
شهود [ ویرایش ]
برای درک بهتر نحوه کار " کسینوس جهت " با کواترنیون ها:
اگر محور چرخش محور x باشد :
اگر محور چرخش محور y باشد :
اگر محور چرخش محور z باشد :
اگر محور چرخش بردار 45 درجه باشد (π/4رادیان) بین محور x و y :
بنابراین، محورهای x و y بر محور چرخش جدید تأثیر دارند .
زوایای Tait–Bryan [ ویرایش ]
زوایای Tait–Bryan. دنباله zy'-x″ (چرخش های ذاتی؛ N منطبق با y' ). دنباله چرخش زاویه ψ ، θ ، φ است. توجه داشته باشید که در این حالت ψ > 90 درجه و θ یک زاویه منفی است.
به طور مشابه برای زوایای اویلر، از زوایای Tait Bryan (از نظر دینامیک پرواز ) استفاده می کنیم:
- سرفصل -�
: چرخش حول محور Z
- گام صدا -�
: چرخش حول محور Y جدید
- بانک –�
: چرخش حول محور X جدید
که در آن محور X به جلو، محور Y به سمت راست و محور Z به سمت پایین اشاره می کند. در مثال تبدیل بالا، چرخش در عنوان سفارش، زمین، بانک رخ می دهد.
ماتریس های چرخشی [ ویرایش ]
ماتریس متعامد (بعد از ضرب یک بردار ستون) مربوط به چرخش در جهت عقربههای ساعت/ چپ (که در امتداد محور مثبت به مبدا نگاه میکند) توسط کواترنیون واحد با عبارت ناهمگن داده می شود :
یا به طور معادل، با عبارت همگن :
اگریک کواترنیون واحد نیست، پس فرم همگن هنوز مضربی اسکالر از یک ماتریس چرخشی است، در حالی که شکل ناهمگن به طور کلی دیگر یک ماتریس متعامد نیست. به همین دلیل است که در کار عددی برای جلوگیری از اعوجاج، شکل همگن ترجیح داده می شود.
ماتریس کسینوس جهت (از مختصات Body XYZ چرخانده تا مختصات xyz اصلی آزمایشگاه برای یک چرخش در جهت عقربههای ساعت/چپ) مربوط به یک دنباله Body 3-2-1 پس از ضرب با زوایای اویلر (ψ, θ, φ) است. : [2]
زوایای اویلر برای توالی بدنه 3-1-3 - سیستم xyz (آزمایشگاه ثابت اصلی) با رنگ آبی و سیستم XYZ (بدن نهایی چرخانده) با رنگ قرمز نشان داده شده است. خط گرهها، با برچسب N و به رنگ سبز نشان داده شده است، محور X بدنه میانی است که چرخش دوم حول آن انجام میشود.
زوایای اویلر (در ترتیب 3-2-1) به تبدیل کواترنیون [ ویرایش ]
با ترکیب نمایشهای کواترنیونی چرخشهای اویلر به دنباله Body 3-2-1 میرسیم ، جایی که هواپیما ابتدا در حین تاکسی روی باند انحراف (Body-Z) میچرخد، سپس در حین برخاستن از زمین (Body-Y) میچرخد. ، و در نهایت (Body-X) در هوا غلت می زند. جهت گیری حاصل از دنباله Body 3-2-1 (حول محور بزرگ در تصویر زوایای Tait-Bryan) معادل دنباله آزمایشگاهی 1-2-3 (در حول محور حروف کوچک) است، جایی که هواپیما در آن قرار دارد. ابتدا چرخید (محور lab-x)، و سپس حول محور افقی lab-y به سمت بالا چرخید و در نهایت حول محور عمودی lab-z چرخید ( lB = lab2Body ):
سایر توالی های چرخشی از قراردادهای متفاوتی استفاده می کنند. [2]
کد منبع [ ویرایش ]
کد زیر در C++ تبدیل فوق را نشان می دهد:
ساختار کواترنیون
struct Quaternion
{
double w, x, y, z;
};
Quaternion ToQuaternion(double roll, double pitch, double yaw) // roll (x), pitch (Y), yaw (z)
{
// Abbreviations for the various angular functions
double cr = cos(roll * 0.5);
double sr = sin(roll * 0.5);
double cp = cos(pitch * 0.5);
double sp = sin(pitch * 0.5);
double cy = cos(yaw * 0.5);
double sy = sin(yaw * 0.5);
Quaternion q;
q.w = cr * cp * cy + sr * sp * sy;
q.x = sr * cp * cy - cr * sp * sy;
q.y = cr * sp * cy + sr * cp * sy;
q.z = cr * cp * sy - sr * sp * cy;
return q;
}تبدیل کواترنیون به زوایای اویلر (در ترتیب 3-2-1) [ ویرایش ]
یک فرمول مستقیم برای تبدیل یک کواترنیون به زوایای اویلر در هر یک از 12 دنباله ممکن وجود دارد. [3] برای بقیه این بخش، فرمول دنباله Body 3-2-1 نشان داده خواهد شد. اگر کواترنیون به درستی نرمال شده باشد ، زوایای اویلر را می توان از طریق روابط زیر از کواترنیون ها بدست آورد:
با این حال، توابع آرکتان پیادهسازی شده در زبانهای کامپیوتری فقط نتایجی بین -π/2 و π/2 ایجاد میکنند، برای تولید تمام جهتگیریهایی که باید جایگزین توابع arctan در کد کامپیوتر با atan2 شود :
علاوه بر این، پیادهسازیهای معمولی آرکتان ممکن است دارای معایب عددی نزدیک به صفر و یک باشند. برخی از پیاده سازی ها از عبارت معادل استفاده می کنند: [4]
کد منبع [ ویرایش ]
برنامه C++ زیر تبدیل بالا را نشان می دهد:
#define _USE_MATH_DEFINES
#include
struct Quaternion {
double w, x, y, z;
};
struct EulerAngles {
double roll, pitch, yaw;
};
// this implementation assumes normalized quaternion
// converts to Euler angles in 3-2-1 sequence
EulerAngles ToEulerAngles(Quaternion q) {
EulerAngles angles;
// roll (x-axis rotation)
double sinr_cosp = 2 * (q.w * q.x + q.y * q.z);
double cosr_cosp = 1 - 2 * (q.x * q.x + q.y * q.y);
angles.roll = std::atan2(sinr_cosp, cosr_cosp);
// pitch (y-axis rotation)
double sinp = std::sqrt(1 + 2 * (q.w * q.y - q.x * q.z));
double cosp = std::sqrt(1 - 2 * (q.w * q.y - q.x * q.z));
angles.pitch = 2 * std::atan2(sinp, cosp) - M_PI / 2;
// yaw (z-axis rotation)
double siny_cosp = 2 * (q.w * q.z + q.x * q.y);
double cosy_cosp = 1 - 2 * (q.y * q.y + q.z * q.z);
angles.yaw = std::atan2(siny_cosp, cosy_cosp);
return angles;
}
تکینگی ها [ ویرایش ]
هنگامی که گام به ±90 درجه (قطب شمال/جنوب) نزدیک می شود، باید از تکینگی ها در پارامترسازی زاویه اویلر آگاه بود. این موارد باید به طور ویژه رسیدگی شود. نام رایج برای این وضعیت قفل گیمبال است .
کد برای رسیدگی به تکینگی ها در این سایت مشتق شده است: www.euclideanspace.com
چرخش برداری [ ویرایش ]
اجازه دهید اسکالر را تعریف کنیم�0و بردار
به طوری که3
.
توجه داشته باشید که روش متعارف چرخش یک بردار سه بعدی استتوسط یک کواترنیون�
تعریف چرخش اویلر از طریق فرمول است
یک کواترنیون حاوی بردار تعبیه شده است
،
یک کواترنیون مزدوج است و
بردار چرخشی است"
. در پیاده سازی های محاسباتی این به دو ضرب کواترنیونی نیاز دارد. یک رویکرد جایگزین استفاده از جفت روابط است
جایی که×یک ضرب خارجی برداری سه بعدی را نشان می دهد. این شامل ضرب های کمتری است و بنابراین از نظر محاسباتی سریعتر است. آزمایشهای عددی نشان میدهند که این رویکرد اخیر ممکن است تا 30٪ [5] سریعتر از حالت اولیه برای چرخش برداری باشد.
اثبات [ ویرایش ]
قاعده کلی برای ضرب کواترنیونی که شامل بخشهای اسکالر و بردار میشود توسط
با استفاده از این رابطه می توان برایکه
و پس از جایگزینی برای ضرب سه گانه
که در آن ضد جابه جایی ضرب خارجی و⋅×=0اعمال شده است. با بهره برداری بعدی از اموالی که�
یک کواترنیون واحد است به طوری که
، همراه با هویت برداری استاندارد
یکی بدست می آورد
که با تعریفتیرا می توان بر حسب بخش های اسکالر و برداری به عنوان نوشت
منبع
https://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles
در این وبلاگ به ریاضیات و کاربردهای آن و تحقیقات در آنها پرداخته می شود. مطالب در این وبلاگ ترجمه سطحی و اولیه است و کامل نیست.در صورتی سوال یا نظری در زمینه ریاضیات دارید مطرح نمایید .در صورت امکان به آن می پردازم. من دوست دارم برای یافتن پاسخ به سوالات و حل پروژه های علمی با دیگران همکاری نمایم.در صورتی که شما هم بامن هم عقیده هستید با من تماس بگیرید.