机器人学与OROCOS-KDL(三)姿态描述与旋转矩阵
机器人学与OROCOS-KDL(三)姿态描述与旋转矩阵
- 一、姿态的数学表示
- 二、OROCOS-KDL应用
- 1.主要成员变量
- 2.创建旋转矩阵
- 3.设置和获取旋转矩阵
一、姿态的数学表示
为表示空间中的一点,不仅需要点的位置,而且需要点的姿态。为规定空间刚体的姿态,用一直角坐标系{B}\{B\}{B}与此刚体固接。设{B}\{B\}{B}中单位主矢量为xB,yB,zBx_B,y_B,z_BxB,yB,zB相对于参考坐标系{A}\{A\}{A}的方向余弦组成3×33\times33×3矩阵BAR_B^ARBAR来表示刚体B相对于坐标系{A}\{A\}{A}的方位。BAR_B^ARBAR称为旋转矩阵。
BAR=[AxBAyBAzB]=[r11r12r13r21r22r23r31r32r33]_B^AR= \begin{bmatrix} ^Ax_B & ^Ay_B & ^Az_B\end{bmatrix}= \begin{bmatrix} r_{11} & r_{12} & r_{13}\\ r_{21} & r_{22} & r_{23}\\ r_{31} & r_{32} & r_{33}\\ \end{bmatrix} BAR=[AxBAyBAzB]=⎣⎡r11r21r31r12r22r32r13r23r33⎦⎤
二、OROCOS-KDL应用
1.主要成员变量
Rotation类的主要成员变量为一个double型的数组,数组储存旋转矩阵的九个数值。
/*源码 orocos_kdl/src/frames.hpp*/
public:double data[9];
2.创建旋转矩阵
/*实例 orocos_kdl/examples/geometry.cpp*/
//默认构造函数
KDL::Rotation r1;
//从三个单位向量(Vx, Vy, Vz)中创建一个旋转矩阵
KDL::Rotation r2(KDL::Vector(0,0,1),KDL::Vector(0,-1,0),KDL::Vector(-1,0,0));
//从九个值中创建一个旋转矩阵
KDL::Rotation r3(0,0,-1,1,0,0,0,-1,0);
//创建一个单位旋转矩阵
KDL::Rotation r4=KDL::Rotation::Identity();
//创建一个绕X轴旋转的旋转矩阵
KDL::Rotation r5=KDL::Rotation::RotX(M_PI/3);
//创建一个绕Y轴旋转的旋转矩阵
KDL::Rotation r6=KDL::Rotation::RotY(M_PI/3);
//创建一个绕Z轴旋转的旋转矩阵
KDL::Rotation r7=KDL::Rotation::RotZ(M_PI/3);
//创建一个绕任意(非单位)向量旋转的旋转矩阵
KDL::Rotation r8=KDL::Rotation::Rot(KDL::Vector(1.,2.,3.),M_PI/4);
//创建一个绕任意(单位)向量旋转的旋转矩阵
KDL::Rotation r9=KDL::Rotation::Rot2(KDL::Vector(0.4472,0.5477,0.7071),M_PI/4);
//从ZYZ欧拉角创建旋转矩阵
KDL::Rotation r10=KDL::Rotation::EulerZYZ(1.,2.,3.);
//从ZYX欧拉角创建旋转矩阵
KDL::Rotation r11=KDL::Rotation::EulerZYX(1.,2.,3.);
//从RPY(Roll-Pitch-Yaw)创建旋转矩阵
KDL::Rotation r12=KDL::Rotation::RPY(1.,2.,3.);//打印旋转矩阵:
std::cout<<"r1: "<<r1<<std::endl;
std::cout<<"r2: "<<r2<<std::endl;
std::cout<<"r3: "<<r3<<std::endl;
std::cout<<"r4: "<<r4<<std::endl;
std::cout<<"r5: "<<r5<<std::endl;
std::cout<<"r6: "<<r6<<std::endl;
std::cout<<"r7: "<<r7<<std::endl;
std::cout<<"r8: "<<r8<<std::endl;
std::cout<<"r9: "<<r9<<std::endl;
std::cout<<"r10: "<<r10<<std::endl;
std::cout<<"r11: "<<r11<<std::endl;
std::cout<<"r12: "<<r12<<std::endl;
打印结果:
3.设置和获取旋转矩阵
/*实例 orocos_kdl/examples/geometry.cpp*/
//获取单个元素
std::cout<<"r8(1,2): "<<r8(1,2)<<std::endl;
//获取等效旋转向量
std::cout<<"equiv rot vector of r11: "<<r11.GetRot()<<std::endl;
//获取等效旋转向量和角度
double angle=r10.GetRotAngle(v1);
std::cout<<"equiv rot vector of r10:"<<v1<<"and angle: "<<angle<<std::endl;
//获取ZYZ欧拉角
double alfa,beta,gamma;
r9.GetEulerZYZ(alfa,beta,gamma);
std::cout<<"EulerZYZ: "<<alfa<<", "<<beta<<", "<<gamma<<std::endl;
//获取ZYZ欧拉角
r9.GetEulerZYX(alfa,beta,gamma);
std::cout<<"EulerZYX: "<<alfa<<", "<<beta<<", "<<gamma<<std::endl;
//获取RPY(Roll-Pitch-Yaw)角
r9.GetRPY(alfa,beta,gamma);
std::cout<<"Roll-Pitch-Yaw: "<<alfa<<", "<<beta<<", "<<gamma<<std::endl;
打印结果:
机器人学与OROCOS-KDL(三)姿态描述与旋转矩阵相关推荐
- 【机器人学与计算机视觉基础】(一)位置与姿态描述 3 三维空间位姿描述
文章目录 位置与姿态描述 3 三维空间位姿描述 3.1 三维空间姿态描述 3.1.1 正交旋转矩阵 3.1.2 三角度表示法 3.1.3 双向量表示法 3.1.4 绕任意向量旋转 3.1.5 单位四元 ...
- 【机器人学与计算机视觉基础】(一)位置与姿态描述 1 位姿的抽象符号表示
位置与姿态描述 1 位姿的抽象符号表示 提示:在本文中,我们会用到这几个抽象的符号:"ξ \xiξ"."·"和"⊕ \oplus⊕".读者只 ...
- 机器人学导论(一)——空间描述和变换
本着看书一定要写出来才能理解的心态,我开设了这个专栏,目的有两个:一是督促自己看书学习:二是与大家一起分享自己的读书感悟,在大家的批评中成长. 这篇博文我们主要介绍空间描述和变换,相信大家对于其重要性 ...
- 《机器人学导论》学习-01空间描述与变换
<机器人学导论>学习-01空间描述与变换 一.描述:位置.姿态与坐标系 1.位置描述 2.姿态描述 3.坐标系的描述 二.映射:坐标系到坐标系的变换 1.关于平移坐标系的映射 2.关于旋转 ...
- 11. 机器人正运动学---姿态描述之四元数
目录 1. 引言 2. 四元数转旋转矩阵 3. 已知旋转矩阵求四元数 3.1 先求w 3.2 先求x 3.3 先求y 3.4 先求z 4. 四元数与旋转矩阵转换的C++实现 4. 总结 1. 引言 上 ...
- FPGA之道(41)HDL的三种描述方式
文章目录 前言 三种描述方式 结构化描述方式 数据流描述方式 行为级描述方式 前言 常编写Verilog代码的就会知道,我们对于某一功能的描述,可以通过门电路来描述,也可以直接描述其功能等,这就牵扯到 ...
- 【 Verilog HDL 】HDL的三种描述方式
当我们使用HDL代码描述硬件功能的时候,主要有三种基本描述方式,即结构化描述方式.数据流描述方式和行为级描述方式.通过本次总结,我们将明白到底我们描述的电路是什么方式描述的. 结构化描述方式 结构化描 ...
- HDL语言三种描述方式--结构化描述方式、数据流描述方式、行为级描述方式
当我们使用HDL代码在描述硬件功能时,主要有三种描述方式,即结构化描述方式.数据流描述方式.行为级描述方式.在平时编程时,可根据实际情况及个人喜好选择其中一种或者几种混合在一起进行自己的HDL代码编写 ...
- 机器人学——1.2-三维空间位姿描述
三维情况实际上是之前讨论的二维情况的延伸.我们在二维坐标系上增加一个额外的坐标轴,通常用 zzz 表示,它同时与 xxx 轴和 yyy 轴正交.zzz 轴的方向服从右手规则,并构成右手坐标系.与各坐标 ...
- 以爱情规律为例,浅谈三段式描述状态机
目录 基础概念介绍 状态机的要素 FSM的分类 Verilog描述状态机的方法 一段式描述 两段式描述 三段式描述 结语 基础概念介绍 今夜闲来无事,忽然想到最近准备复习一下Verilog语法,所以就 ...
最新文章
- Android初学:联系创建Activity
- android 文件读取错误,Android源文件从SD卡读取错误问题,怎么处理
- 使用Charles为Android设备抓取https请求的包
- 21行代码AC_HDU 5935 Car【贪心, 精度】
- spring boot 报错:Your ApplicationContext is unlikely to start due to a @ComponentScan of the default p
- ICPC2019南昌区域赛
- python创建socket对象_python---一个简单的socket
- Opencv--CalcOpticalFlowPyrLK实现的光流法理解
- 关于VS.NET RSACryptoServiceProvider的疑惑
- 服务器文件绝对路径,服务器文件绝对路径
- 我的Android进阶之旅------gt;Android中编解码学习笔记
- 微软推补丁服务器,微软再推稳定性补丁 为即将到来功能更新做准备
- oracle删sequ_Oracle序列(Sequence)创建、使用、修改、删除
- linux服务器安装centos7,Linux服务器Centos7安装搭建FTP服务器的方法步骤
- 浅谈算法和数据结构: 八 平衡查找树之2-3树
- (专升本)Internet(计算机网络系统)
- 人大金仓助力广东融合创新智慧校园建设与网络安全交流会成功举办
- 如何看待IT培训这件事情?IT培训出来的人都一无是处吗?
- ewebeditor编辑器解析漏洞
- 【天翼云服务器】新服务器centos环境搭建,按照docker环境,解决相关配置问题。
热门文章
- 第6次课程作业—张欣
- [Code+#1]大吉大利,晚上吃鸡!
- A fastandrobust convolutionalneuralnetwork-based defect detection model inproductqualitycontrol-阅读笔记
- 软件需求包括3个不同的层次――业务需求、用户需求和功能需求
- AIO-rk3399j Linux-开机自动连接wifi
- 论文阅读报告:Taxonomy-aware feature engineering for microbiome classification,Mai Oudah and Andreas Hen
- 怎样批量给pdf文件添加水印?
- GPU视频压缩1—Flexible CTU-level parallel motion estimation by CPU and GPU pipeline for HEVC
- VBA按座次排位(交错排座,向一侧或两侧排座,混合排座)
- Linux网络服务之常规vsFTP服务配置(超级详细图解一步骤一图)