精选国产av精选一区二区-精品人妻中文字幕区二区三区视频-亚洲国产精品av在线播放-国产精品亚洲综合专区片高清

頂部圖片
022-23715128

聯(lián)系方式

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

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

  • 公司座機(jī):022-23715128

    24小時(shí)熱線:15522534786

    聯(lián)系QQ:2085429559

    公司郵箱:gvt@techlego.com

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

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

導(dǎo)言

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

轉(zhuǎn)換過程

01

 

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

 

02

 

旋轉(zhuǎn)矩陣轉(zhuǎn)換為歐拉角,其中歐拉角的順序?yà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é)果

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

結(jié)語

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

源代碼

#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;    // 計(jì)算旋轉(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;    // 計(jì)算旋轉(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;    // 計(jì)算旋轉(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)為歐拉角,順序?yà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)視頻號·更多視頻案例·關(guān)注我們

 


往期回顧

 

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

 

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

 

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

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

 


  • 上一篇:探索Techlego:Python SDK下的三維空間最鄰近搜索指南
  • 下一篇:基于Techlego SDK智能接口的2D圓擬合算法分析及其應(yīng)用
  • 相關(guān)推薦 NEWS More>