機械人學中旋轉矩陣與尤拉角之間互換公式及程式

2021-08-10 16:12:59 字數 1407 閱讀 9719

/*弧度 角度 */

#define pai  3.141592653589793

#define radian

(pai / 180.0 )  //弧度 = 角度 * π  / 180

#define angle   (180.0 / pai )  //角度 = 弧度 * 180 / π

2、旋轉矩陣轉換為尤拉角 

/**

* @brief  已知旋轉矩陣求尤拉角

* @param  arr : 旋轉矩陣陣列 n  o  a 

* @retval 尤拉角(弧度值)  偏航角,俯仰角,滾動角 */

float *matrix_eulerian_angle(float *arr)

e[0] = atan2(t[1],t[0]);//ny/nx

e[1] = atan2(-1*t[2],(t[0]*cos(e[0])+t[1]*sin(e[0])));//nz/(nx+ny)

e[2] = atan2((t[6]*sin(e[0])-t[7]*cos(e[0])),(-1*t[3]*sin(e[0])+t[4]*cos(e[0])));//ax-ay/-ox+oy

return e; }

3、尤拉角轉換為旋轉矩陣

/**

* @brief  已知尤拉角(角度值)求旋轉矩陣

* @param  arr : 尤拉角(弧度值)  偏航角,俯仰角,滾動角

* @retval  */

eulerian_angle_matrix(float *arr)

/*n*/

t[0] = 1*(cos(e[0])*cos(e[1]));

t[1] = 1*(sin(e[0])*cos(e[1]));

t[2] = -1*(sin(e[1]));

/*o*/

t[3] = 1*(cos(e[0])*sin(e[1])*sin(e[2])-sin(e[0])*cos(e[2]));

t[4] = 1*(sin(e[0])*sin(e[1])*sin(e[2])+cos(e[0])*cos(e[2]));

t[5] = 1*(cos(e[1])*sin(e[2]));

/*a*/

t[6] = 1*(cos(e[0])*sin(e[1])*cos(e[2])+sin(e[0])*sin(e[2]));

t[7] = 1*(sin(e[0])*sin(e[1])*cos(e[2])-cos(e[0])*sin(e[2]));

t[8] = 1*(cos(e[1])*cos(e[2]));

return t; }

注意:繞的軸不一樣,t和e的對應關係也不一樣。

機械人學中旋轉矩陣與尤拉角之間互換公式及程式

弧度 角度 define pai 3.141592653589793 define radian pai 180.0 弧度 角度 180 define angle 180.0 pai 角度 弧度 180 2 旋轉矩陣轉換為尤拉角 brief 已知旋轉矩陣求尤拉角 param arr 旋轉矩陣陣列 n...

旋轉矩陣與尤拉角之間互換公式

pai 180.0 弧度 角度 180 define angle 180.0 pai 角度 弧度 180 2 旋轉矩陣轉換為尤拉角 brief 已知旋轉矩陣求尤拉角 param arr 旋轉矩陣陣列 n o a retval 尤拉角 弧度值 偏航角,俯仰角,滾動角 float matrix eule...

Dlib姿態估計 旋轉矩陣與尤拉角互轉

在這篇文章中,我將分享將乙個3 3旋轉矩陣轉換成尤拉角的 反之亦然。3d旋轉矩陣可以讓你的頭旋轉。我知道這是乙個壞的雙關語,但真相有時可能是非常小的!乙個旋轉矩陣有三個自由度,數學家已經行使了他們的創造自由,以每個想象的方式來表示3d旋轉 或使用三個數字 或使用四個數字 或使用乙個3 3矩陣。還有很...