91在线免费视频观看-2021最新偷拍, 亚洲人成无码久久电影网站-婷婷导航, 西安广告衫定做-西安古都鑫源服装厂, 55444442020无码专区人妻,综合依人一区二区三区,美乳丰满人妻被强视频,天天先锋影视,2021最新偷拍,中国熟妇无码专区

頂部圖片
022-23715128

聯(lián)系方式

CONTACT
  • 公眾號
    新浪微博
  • 中國 ● 天津

    聯(lián)系地址:天津市西青區(qū)華鼎高科技發(fā)展中心

  • 公司座機:022-23715128

    24小時熱線:15522534786

    聯(lián)系QQ:2085429559

    公司郵箱:gvt@techlego.com

當前位置: 首頁 > 新聞資訊 > 行業(yè)新聞 >
新聞資訊NEWS

日期:2025-05-29 10:58 瀏覽次數(shù): 作者:來高科技
精準姿態(tài)控制:旋轉(zhuǎn)數(shù)學表示的轉(zhuǎn)換技巧 分享到:
 

導言

在計算機圖形學、機器人學以及航空航天等領域,準確描述和轉(zhuǎn)換物體的姿態(tài)是關鍵的技術(shù)挑戰(zhàn)之一。為了表達物體的旋轉(zhuǎn)姿態(tài),通常采用四種主要的數(shù)學表示方式:四元數(shù)、歐拉角、旋轉(zhuǎn)矩陣和旋轉(zhuǎn)向量。每種表示法都有其獨特的優(yōu)點和局限性,適用于不同的應用場景和技術(shù)需求。理解這些表示法之間的關系,并掌握它們之間進行轉(zhuǎn)換的方法,對于開發(fā)人員來說至關重要。本文旨在提供一個清晰且專業(yè)的指南,幫助開發(fā)人員調(diào)用來高科技SDK智能接口在不同表示形式間實現(xiàn)無縫切換,從而提升系統(tǒng)兼容性和計算效率。

轉(zhuǎn)換過程

01

 

創(chuàng)建繞z軸旋轉(zhuǎn)90度的旋轉(zhuǎn)矩陣。

 

02

 

旋轉(zhuǎn)矩陣轉(zhuǎn)換為歐拉角,其中歐拉角的順序為繞x軸角,繞y軸角,繞z軸角。

 

03

 

歐拉角轉(zhuǎn)換為旋轉(zhuǎn)矩陣。

 

04

 
旋轉(zhuǎn)矩陣轉(zhuǎn)換為四元數(shù)。
 

05

 
四元數(shù)轉(zhuǎn)換為旋轉(zhuǎn)矩陣。
 

06

 
旋轉(zhuǎn)矩陣轉(zhuǎn)換為旋轉(zhuǎn)向量。
 

07

 
旋轉(zhuǎn)向量轉(zhuǎn)換旋轉(zhuǎn)矩陣。

結(jié)果

從上圖程序運行結(jié)果可以看出各個旋轉(zhuǎn)描述方式間轉(zhuǎn)換的結(jié)果都正確無誤。注意其中帶e的負十幾次方的數(shù)值可以看為0。

結(jié)語

通過對四元數(shù)、歐拉角、旋轉(zhuǎn)矩陣和旋轉(zhuǎn)向量之間轉(zhuǎn)換的深入探討,我們不僅掌握了它們之間的轉(zhuǎn)換關系,還提高了在多種旋轉(zhuǎn)描述方式間切換的能力。在實際應用中,選擇匹配項目的旋轉(zhuǎn)表示方式能夠顯著簡化計算流程,提高數(shù)值穩(wěn)定性并減少累積誤差。因此,根據(jù)具體工程需求合理選擇和使用旋轉(zhuǎn)表示方式對項目成功具有決定性影響。希望本篇文章能為開發(fā)人員提供有價值的參考,助力于系統(tǒng)設計與實現(xiàn)過程中的姿態(tài)控制和分析任務。

源代碼

#include "Eigen/Dense"

#define PI std::acos(-1)
void copy(const Eigen::Matrix3d& from, techlego::array_2d<double, 3, 3>& to)
{
for (int i = 0; i < 3; ++i)
{
for (int j = 0; j < 3; ++j)
{
to[i][j] = from(i, j);
}
}
}
Eigen::Matrix3d euler_angles_to_rotation_matrix(const Eigen::Vector3d& theta)
{
Eigen::Matrix3d R_x;    // 計算旋轉(zhuǎn)矩陣的X分量
R_x <<
1, 0, 0,
0, cos(theta[0]), -sin(theta[0]),
0, sin(theta[0]), cos(theta[0]);
Eigen::Matrix3d R_y;    // 計算旋轉(zhuǎn)矩陣的Y分量
R_y <<
cos(theta[1]), 0, sin(theta[1]),
0, 1, 0,
-sin(theta[1]), 0, cos(theta[1]);
Eigen::Matrix3d R_z;    // 計算旋轉(zhuǎn)矩陣的Z分量
R_z <<
cos(theta[2]), -sin(theta[2]), 0,
sin(theta[2]), cos(theta[2]), 0,
0, 0, 1;
Eigen::Matrix3d R = R_z * R_y * R_x;
return R;
}
std::string to_string(const techlego::array_2d<double, 3, 3>& v)
{
std::stringstream ss;
for (int i = 0; i < 3; ++i)
{
for (int j = 0; j < 3; ++j)
{
ss << v[i][j] << " ";
}
ss << "\n";
}
return ss.str();
}
template<typename T>
std::string to_string(const T& v)
{
std::stringstream ss;
for (int i = 0; i < v.size(); ++i)
{
ss << v[i] << " ";
}
return ss.str();
}
int main()
{
//使用繞z軸旋轉(zhuǎn)90度的旋轉(zhuǎn)矩陣作為例子
Eigen::AngleAxisd ax(PI / 2, Eigen::Vector3d::UnitZ());
Eigen::Matrix3d r = ax.toRotationMatrix();
techlego::rotate_3d r3d{};
//給rotate_3d賦值
copy(r, r3d.m_r);
std::cout << "origin rotation mat:\n" << to_string(r3d.m_r) << "\n";
//旋轉(zhuǎn)矩陣轉(zhuǎn)為歐拉角,順序為繞x軸,繞y軸,繞z軸
std::array<double, 3> rpy{};
r3d.to_rpy(rpy);
std::cout << "rpy:\n" << to_string(rpy) << "\n";
//歐拉角轉(zhuǎn)為旋轉(zhuǎn)矩陣
techlego::rotate_3d e2r{};
e2r.from_rpy(rpy);
std::cout << "euler angles to rotation matrix res:\n" << to_string(e2r.m_r) << "\n";
//旋轉(zhuǎn)矩陣轉(zhuǎn)四元數(shù)
std::array<double, 4> quaternion{};
r3d.to_quaternion(quaternion);
std::cout << "quaternion:\n" << to_string(quaternion) << "\n";
//四元數(shù)轉(zhuǎn)旋轉(zhuǎn)矩陣
techlego::rotate_3d q2r{};
q2r.from_quaternion(quaternion);
std::cout << "quaternion to rotation matrix res:\n" << to_string(q2r.m_r) << "\n";
//旋轉(zhuǎn)矩陣轉(zhuǎn)旋轉(zhuǎn)向量 
std::array<double, 3> vec{};
r3d.to_vector(vec);
std::cout << "vector:\n" << to_string(vec) << "\n";
//旋轉(zhuǎn)向量轉(zhuǎn)旋轉(zhuǎn)矩陣
techlego::rotate_3d v2r{};
v2r.from_vector(vec);
std::cout << "vector to rotation matrix res:\n" << to_string(v2r.m_r) << "\n";
return 0;
}
 
 

官網(wǎng)視頻號·更多視頻案例·關注我們

 


往期回顧

 

多機聯(lián)動掃描系統(tǒng)助力嫦娥五號構(gòu)建月表地形

 

噴漆自動化三維視覺全流程

 

混凝土立方試塊尺寸三維檢測全流程?

↙點擊“閱讀原文”查看更多精彩內(nèi)容

 


  • 上一篇:探索Techlego:Python SDK下的三維空間最鄰近搜索指南
  • 下一篇:沒有了
  • 相關推薦 NEWS More>