【SLAM十四讲】 第三讲

本文深入讲解SLAM中的旋转表示,包括旋转矩阵的性质、旋转向量与欧拉角的转换,以及四元数的定义、运算和旋转表示。通过实例介绍了旋转向量到旋转矩阵的变换,并提供了相关习题以巩固理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.旋转矩阵

2.旋转向量和欧拉角

3.四元数


1.旋转矩阵

1.1点 向量 坐标系

向量 是空间中存在的有方向有长度的一样东西,向量不等于坐标,不同坐标系下向量的坐标表示也不尽相同。只有确定了一个坐标系,我们才能说这个向量的坐标是多少。

{\pmb a} =\left [ {\pmb e_{1}}, {\pmb e_{2}}, {\pmb e_{3}} \right ] \begin{bmatrix} a_{1}\\ a_{2}\\a_{3} \end{bmatrix} =a_{1}{\pmb e_{1}}+a_{2} {\pmb e_{2}}+a_{3}{\pmb e_{3}} \ \eqno(3.1)   

向量的外积运算 

{\pmb a}\times {\pmb b}=\begin{bmatrix}{\pmb i}&{\pmb j}&{\pmb k}\\ a_{1}&a_{2}&a_{3}\\ b_{1}&b_{2}&b_{3}\end{bmatrix}=\begin{bmatrix}a_{2}b_{3}-a_{3}b_{2}\\ a_{3}b_{1}-a_{1}b_{3}\\a_{1}b_{2}-a_{2}b_{1}\end{bmatrix}=\begin{bmatrix}0&-a_{3}&a_{2}\\ a_{3}&0&-a_{1}\\ -a_{2}&a_{1}&0 \end{bmatrix} {\pmb b}\triangleq {\pmb a}^{\Lambda }{\pmb b} \ \eqno(3.2) 

其中,^{\Lambda }代表反对称矩阵,即{\pmb a}=\begin{bmatrix}a_{1}\\ a_{2} \\ a_{3} \end{bmatrix} and \ \ {\pmb a}^{\Lambda }=\begin{bmatrix}0&-a_{3}&a_{2}\\ a_{3}&0&-a_{1}\\ -a_{2}&a_{1}&0 \end{bmatrix} \ \eqno(3.3) 

外积可以表示旋转,利用右手法则,大拇指朝向就是旋转向量的方向,事实也是{\pmb a}\times {\pmb b}的方向。所以{\pmb a}{\pmb b}的旋转就可以由大拇指朝向的向量{\pmb \omega }来表示,也就是说,在这个坐标系下,旋转可以用三个实数来描述(这三个实数就是{\pmb \omega }的坐标)

1.2坐标系间的欧式变换

{\pmb a} =\left [ {\pmb e_{1}}, {\pmb e_{2}}, {\pmb e_{3}} \right ] \begin{bmatrix} a_{1}\\ a_{2}\\a_{3} \end{bmatrix} =\left [ {​{\pmb e_{1}}}', {​{\pmb e_{2}}}',{​{\pmb e_{3}}}' \right ] \begin{bmatrix} {a_{1}}' \\ {a_{2}}' \\{a_{3}}'\end{bmatrix} \ \eqno(3.4) 

同一个向量在不同坐标系下有不同的坐标表示,但这都表示的是一个向量,这个向量是固有存在的。

现在将上式(3.4)左乘\begin{bmatrix} e_{1}^{T}\\ e_{2}^{T}\\ e_{3}^{T} \end{bmatrix},得到

式 (3.5) 中的{\pmb R}为旋转矩阵,旋转矩阵 {\pmb R} 的特殊性质: 

旋转矩阵是行列式为 1 的正交矩阵(旋转矩阵的逆为自身转置,逆矩阵\pmb R^{-1}代表一个相反的旋转)

旋转矩阵的集合称之为特殊正交群

{\bf SO}(n)=\left \{\pmb R\in \mathbb{R}^{n\times n} }\Big| \pmb R \pmb R^{T}={ \emph I} &, det( {\pmb R})=1|\right \} \ \eqno(3.6)

1.3 变换矩阵和齐次变换

之前的变换表达式{​{\pmb a}}'={\pmb R\pmb a+\pmb t} \ \eqno(3.7),如果发生多次变换,{​{\pmb a}}''={\pmb R_{2}} \left ( {\pmb R_{1} \pmb a+\pmb t_{1}} \right ) +{\pmb t_{2}} \ \eqno(3.8)(2次),这样使得计算过于麻烦,所以引入一个自由度,利用齐次坐标和变换矩阵重写(3.7)

$(function(){ $.fn.extend({ SimpleTree:function(options){ //初始化参数 var option = $.extend({ click:function(a){ } },options); option.tree=this; /* 在参数对象中添加对当前菜单树的引用,以便在对象中使用该菜单树 */ option._init=function(){ /* * 初始化菜单展开状态,以及分叉节点的样式 */ this.tree.find("ul ul").hide(); /* 隐藏所有子级菜单 */ this.tree.find("ul ul").prev("li").removeClass("open"); /* 移除所有子级菜单父节点的 open 样式 */ this.tree.find("ul ul[show='true']").show(); /* 显示 show 属性为 true 的子级菜单 */ this.tree.find("ul ul[show='true']").prev("li").addClass("open"); /* 添加 show 属性为 true 的子级菜单父节点的 open 样式 */ }/* option._init() End */ /* 设置所有超链接不响应单击事件 */ this.find("a").click(function(){ $(this).parent("li").click(); return false; }); /* 菜单项 接受单击 */ this.find("li").click(function(){ /* * 当单击菜单项 * 1.触发用户自定义的单击事件,将该 标签中的第一个超链接做为参数传递过去 * 2.修改当前菜单项所属的子菜单的显示状态(如果等于 true 将其设置为 false,否则将其设置为 true) * 3.重新初始化菜单 */ option.click($(this).find("a")[0]); /* 触发单击 */ /* * 如果当前节点下面包含子菜单,并且其 show 属性的值为 true,则修改其 show 属性为 false * 否则修改其 show 属性为 true */ /* if($(this).next("ul").attr("show")=="true"){ $(this).next("ul").attr("show","false"); }else{ $(this).next("ul").attr("show","true"); }*/ /* 初始化菜单 */ option._init(); }); /* 设置所有父节点样式 */ this.find("ul").prev("li").addClass("folder"); /* 设置节点“是否包含子节点”属性 */ this.find("li").find("a").attr("hasChild",false); this.find("ul").prev("li").find("a").attr("hasChild",true); /* 初始化菜单 */ option._init(); }/* SimpleTree Function End */ }); });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值