Quaternion và ứng dụng trong Động lực học

Quaternion là sự mở rộng của số phức, với một lịch sử lâu dài và… hấp dẫn. Bài này không có ý định trình bày đầy đủ và chi tiết về quaternion (có lẽ nằm ngoài khả năng của người viết), mà chỉ nói về quaternion dưới góc độ ứng dụng trong việc biểu diễn các phép quay 3D, cụ thể là các phép quay trong động lực học. Người đọc quan tâm có thể đọc một bài khá thú vị về quaternion ở đây.

Một cách ngắn gọn, có thể xem quaternion là kết hợp của một giá trị vô hướng w \in \mathbb{R} và một vector \mathbf{u} \in \mathbb{R}^3, kí hiệu là \mathbf{q} = (w, \mathbf{u}^\mathrm{T})^\mathrm{T}.

1. Đại số quaternion

Phép cộng, trừ và nhân quaternion với một số được tính đơn giản như với vector 4D bình thường:

\displaystyle \mathbf{q_0} + \mathbf{q_1} = \left( \begin{array}{c} w_0 + w_1 \\ \mathbf{u_0} + \mathbf{u_1} \end{array} \right)

\displaystyle \mathbf{q_0} - \mathbf{q_1} = \left( \begin{array}{c} w_0 - w_1 \\ \mathbf{u_0} - \mathbf{u_1} \end{array} \right)

\displaystyle a\mathbf{q_0} = \left( \begin{array}{c} aw_0 \\ a\mathbf{u_0} \end{array} \right)

với \mathbf{q_0} = (w_0, \mathbf{u_0}^\mathrm{T})^\mathrm{T}, \mathbf{q_1} = (w_1, \mathbf{u_1}^\mathrm{T})^\mathrm{T} là các quaternion và a là một giá trị vô hướng.

Phép nhân quaternion được thực hiện rắc rối hơn:

\displaystyle \mathbf{q_{0}}\circ\mathbf{q_{1}}=\left(\begin{array}{c} w_{0}w_{1}-\mathbf{u_{0}}\mathbf{u_{1}}\\w_{0}\mathbf{u_{1}}+w_{1}\mathbf{u_{0}}+\mathbf{u_{0}}\times\mathbf{u_{1}}\end{array}\right)

Phép nhân quaternion có tính kết hợp: \mathbf{q_{0}}\circ\left(\mathbf{q_{1}}\circ\mathbf{q_{2}}\right) = \left(\mathbf{q_{0}}\circ\mathbf{q_{1}}\right)\circ\mathbf{q_{2}}, nhưng không giao hoán: \mathbf{q_0}\circ\mathbf{q_1} \neq\mathbf{q_1}\circ\mathbf{q_0}. Phần tử liên hợp (conjugate) của quaternion được định nghĩa là \mathbf{q^*} = \left( w, -\mathbf{u}^{\mathrm{T}}\right)^{\mathrm{T}}. Từ đó ta có phần tử nghịch đảo của một quaternion là:

\displaystyle \mathbf{q^{-1}} = \frac{\mathbf{q^{*}}}{{\left|\left| q \right|\right|}^2}

với {\left|\left| q \right|\right|} = \sqrt{w^{2}+\left|\left|u\right|\right|^{2}} là chuẩn Euclide. Phần tử nghịch đảo của một quaternion thỏa mãn phương trình sau:

\displaystyle \mathbf{q}\circ\mathbf{q^{-1}}=\mathbf{q^{-1}}\circ\mathbf{q} = \mathbf{1}

với \mathbf{1} = \left(1, \mathbf{0}^\mathrm{T}\right)^\mathrm{T} là phần tử trung hòa đối với phép nhân các quaternion. Cuối cùng, nếu \left|\left|q\right|\right|=1 thì \mathbf{q^{-1}}=\mathbf{q^*}.

Trong tính toán đại số, có thể biểu diễn phép nhân quaternion dưới dạng phép nhân ma trận bằng cách xem quaternion là vector trong \mathbb{R}^4 với \mathbf{q} = \left(w, x, y, z\right)^\mathrm{T}. Khi đó phép nhân quaternion có thể viết lại thành:

\mathbf{q_0}\circ\mathbf{q_1} = \mathbf{Q(q_0)}\mathbf{q_1} = \overline{\mathbf{Q}}\left(\mathbf{q_1}\right)\mathbf{q_0}

Trong đó:

\displaystyle \mathbf{Q}(\mathbf{q}) = \left( \begin{array}{cc} w & -(x,y,z) \\ (x,y,z)^{\mathrm{T}} & w\mathbf{E_3} + \mathbf{X}(x,y,z)\end{array}\right)

\displaystyle \overline{\mathbf{Q}}(\mathbf{q}) = \left( \begin{array}{cc} w & -(x,y,z) \\ (x,y,z)^{\mathrm{T}} & w\mathbf{E_3} - \mathbf{X}(x,y,z)\end{array}\right)

được gọi là các ma trận quaternion, và

\displaystyle \mathbf{X}(x,y,z)=\left(\begin{array}{ccc} 0 & -z & y \\ z & 0 & -x \\ -y & x & 0\end{array}\right)

là ma trận biểu diễn tích có hướng \mathbf{u}\times\mathbf{x}=\mathbf{X}(\mathbf{u})\mathbf{x}.

Do tính kết hợp của phép nhân quaternion, các ma trận quaternion thỏa mãn đẳng thức \mathbf{Q}(\mathbf{q_0})\overline{\mathbf{Q}}(\mathbf{q_1})=\overline{\mathbf{Q}}(\mathbf{q_1})\mathbf{Q}(\mathbf{q_0}) với mọi quaternion \mathbf{q_0}, \mathbf{q_1}.

Ma trận của quaternion liên hợp là \mathbf{Q}(\mathbf{q^*})=\mathbf{Q}(\mathbf{q})^\mathrm{T}\overline{\mathbf{Q}}(\mathbf{q^*})=\overline{\mathbf{Q}}(\mathbf{q})^\mathrm{T}.

2. Quaternion đơn vị và phép quay trong không gian

Mọi phép quay \theta radian quanh một trục biểu diễn bởi vector đơn vị \mathbf{v} \in \mathbb{R}^3 đều có thể biểu diễn bằng quaternion đơn vị tương ứng là \mathbf{q}=\left(cos(\frac{\theta}{2}), sin(\frac{\theta}{2})\mathbf{v}^\mathrm{T}\right)^\mathrm{T}. Ngược lại, một quaternion đơn vị \mathbf{q}=\left(w, \mathbf{u}^\mathrm{T}\right)^\mathrm{T} có thể xem là biểu diễn của phép quay \theta =2\arctan(\frac{\left|\left|\mathbf{u}\right|\right|}{w}) quanh trục \mathbf{v}=\frac{\mathbf{u}}{\left|\left|\mathbf{u}\right|\right|}.

Gọi \mathbf{x} là kết quả của phép quay điểm \mathbf{x'} bằng một phép quay biểu diễn bởi quaternion \mathbf{q}. Khi đó tọa độ của \mathbf{x} được tính bằng phép nhân quaternion như sau:

\displaystyle \left(\begin{array}{c} 0 \\ \mathbf{x} \end{array}\right)=\mathbf{q}\circ\left(\begin{array}{c} 0 \\ \mathbf{x'} \end{array}\right)\circ\mathbf{q}^{-1}

Từ đây suy ra nếu \mathbf{q_0}, \mathbf{q_1} là 2 quaternion biểu diễn các phép quay, thì tích của chúng \mathbf{q_0}\circ\mathbf{q_1} biểu diễn 2 phép quay liên tiếp: quay theo \mathbf{q_0} rồi theo \mathbf{q_1}.

Thay vì nhân quaternion trực tiếp, ta có thể tính trước ma trận quay \mathbf{R}(\mathbf{q}) theo 2 cách. Cách thứ nhất sử dụng các ma trận quaternion:

\left(\begin{array}{cc}1 & 0 \\ 0 & \mathbf{R}(\mathbf{q})\end{array}\right)=\mathbf{Q}(\mathbf{q})\overline{\mathbf{Q}}(\mathbf{q}^{-1})=\mathbf{Q}(\mathbf{q})\overline{\mathbf{Q}}(\mathbf{q})^\mathrm{T}

lưu ý là đẳng thức cuối chỉ đúng khi \left|\left|\mathbf{q}\right|\right|=1.

Cách thứ 2 là sử dụng các thành phần của quaterninon \mathbf{q}=(w,x,y,z)^\mathrm{T} để được dạng khai triển của ma trận quay:

\displaystyle \mathbf{R}(\mathbf{q})=\left(\begin{array}{ccc} w^2+x^2-y^2-z^2 & 2(xy-wz) & 2(xz+wy) \\2(yx+wz) & w^2-x^2+y^2-z^2 & 2(yz-wx) \\ 2(zx-wy) & 2(zy+wx) & w^2-x^2-y^2+z^2\end{array}\right)

Dạng ma trận khai triển này có lợi thế là nếu \mathbf{q} không phải là quaternion đơn vị thì \mathbf{R}(\mathbf{q}) tương ứng với một phép quay và một phép tỉ lệ, lần lượt theo thứ tự đó.

Quaternion cũng có thể dùng cho các phép quay có số bậc tự do nhỏ hơn 3. Ví dụ với một khớp nối có 2 bậc tự do, trong đó ràng buộc không được phép quay theo trục \mathbf{v} nào đó. Một quaternion \mathbf{q}=(w, \mathbf{u}^\mathrm{T})^\mathrm{T} biểu diễn phép quay đó phải thỏa \mathbf{u}.\mathbf{v}=0. Có thể dễ dàng đạt điều này bằng cách chiếu \mathbf{u} lên mặt phẳng vuông góc với \mathbf{v}. Trong trường hợp \mathbf{v} là một trong các trục tọa độ, thì thao tác này đơn giản là gán cho thành phần tương ứng trong \mathbf{u} bằng 0. Phép quay có một bậc tự do cũng có thể dễ dàng tính theo cách tương tự.

Bằng cách biểu diễn phép quay trong \mathbb{R}^4, quaternion tránh được các hạn chế của những phương pháp biều diễn khác, đồng thời tương đối đơn giản các công thức và phương trình liên quan. Tuy nhiên nó cũng có một số hạn chế:

Thứ nhất, 2 quaternion biểu diễn các phép quay \theta quanh trục \mathbf{u} và quay -\theta quanh trục -\mathbf{u} là giống hết nhau. Tuy nhiên trong thực tế 2 phép quay này là tương đương nên hạn chế này thường không quan trọng. Thứ hai, \mathbf{q}-\mathbf{q} cùng biểu diễn một phép quay. Thứ ba, quaternion không thể biểu diễn các phép quay lớn hơn 2\pi.

Cuối cùng và quan trọng nhất, quaternion chỉ biểu diễn phép quay nếu nó có dạng đơn vị. Đảm bảo một quaternion luôn ở dạng chuẩn sẽ dẫn đến các thay đổi trong phương trình chuyển động hoặc phương pháp mô phỏng.

3. Quaternion trong động lực học

Để sử dụng quaternion trong động lực học, điều đầu tiên cần làm là liên hệ vận tốc góc với đạo hàm của quaternion. Việc này đã được thực hiện  trong [1]. Gọi \mathbf{q} là quaternion biểu diễn phép quay từ hệ tọa độ của vật (body frame) sang hệ tọa độ thế giới thực (world frame), \dot{\mathbf{q}} là đạo hàm của \mathbf{q} theo thời gian, thì vận tốc góc trong hệ tọa độ của vật và hệ tọa độ thế giới thực lần lượt là:

\displaystyle \left(\begin{array}{c} 0 \\ \mathbf{{\omega}'}\end{array}\right)=2\mathbf{q^*}\circ\dot{\mathbf{q}}, hay \displaystyle \mathbf{\dot{q}}=\frac{1}{2}\mathbf{q}\circ\left(\begin{array}{c} 0 \\ \mathbf{{\omega}'}\end{array}\right)

\displaystyle \left(\begin{array}{c} 0 \\ \mathbf{\omega}\end{array}\right)=2\dot{\mathbf{q}}\circ\mathbf{q^*}, hay \displaystyle \mathbf{\dot{q}}=\frac{1}{2}\left(\begin{array}{c} 0 \\ \mathbf{\omega}\end{array}\right)\circ\mathbf{q}

Đạo hàm 2 vế ta được phương trình thể hiện mối liên quan giữa \ddot{\mathbf{q}} với \mathbf{{\dot{\omega}}}\mathbf{{\dot{\omega}}'}:

\left(\begin{array}{c} 0 \\ \mathbf{{\dot{\omega}'}}\end{array}\right)=2\left( \mathbf{q^*}\circ\ddot{\mathbf{q}}+\mathbf{\dot{q}^*}\circ\mathbf{\dot{q}}\right), hay \mathbf{\ddot{q}}=\frac{1}{2}\left(\mathbf{\dot{q}}\circ\left(\begin{array}{c} 0 \\ \mathbf{{\omega}'}\end{array}\right)+\mathbf{q}\circ\left(\begin{array}{c} 0 \\ \mathbf{{\dot{w}}'}\end{array}\right)\right)

\left(\begin{array}{c} 0 \\ \dot{\mathbf{\omega}}\end{array}\right)=2\left( \ddot{\mathbf{q}}\circ\mathbf{q^*}+\mathbf{\dot{q}}\circ\mathbf{\dot{q}^*}\right), hay \mathbf{\ddot{q}}=\frac{1}{2}\left(\left(\begin{array}{c} 0 \\ \mathbf{{\omega}'}\end{array}\right)\circ\mathbf{\dot{q}}+\left(\begin{array}{c} 0 \\ \mathbf{{\dot{w}}'}\end{array}\right)\circ\mathbf{q}\right)

4. Tài liệu tham khảo

[1] A. L. Schwab and J. P. Meijaard, How to draw Euler angles and utilize Euler parameters, in Proc. of IDETC/CIE, 2006.

Advertisements

4 comments

  1. Seems like we have so many common things.
    I am also confusing about quaternion, in which case it could be applied (in a mechanism for example). Also, what is the pros and cons when using this method comparing to using normal way in Euler coordinates?

    1. A well-known shortcoming of Euler angles is the so-called Gimbal lock, which might cause the 3D rotation loses some degrees of fredom. Quaternion is an alternative representation to avoid Gimbal lock. The idea is that in Euler angles, the rotation is expressed by a sequence of 3 elementary rotations about fixed axes, while (unit) quaternion can represent the 3D rotation about any arbitrary axis.
      The cons of quaternion is that a quaternion is required to be unit (a quaternion of absolute value 1) in order to properly represent a rotation.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s