Explorar o código

添加第七章空间坐标描述部分

鱼香ROS %!s(int64=3) %!d(string=hai) anos
pai
achega
a63c567243

+ 13 - 0
docs/_sidebar.md

@@ -79,3 +79,16 @@
   -  [6.4 RVIZ2介绍](chapt6/6.4RVIZ2.md) 
   -  [6.5 Gazebo介绍](chapt6/6.5Gazebo介绍.md) 
   -  [6.6 ROS2命令行工具总结](chapt6/6.6ROS2命令行工具.md) 
+
+- 第 7 章 动手学机器人学基础
+
+  -  [章节介绍](chapt7/章节介绍.md) 
+  -  7.1 数学基础
+     -  [7.1.1数学基础](chapt7/7.1.1数学基础.md)
+     -  [7.1.2Conda,Jupyter与ROS](chapt7/7.1.2Conda,Jupyter与ROS2.md)
+     -  [7.1.3动手学数学基础](chapt7/7.1.3动手学数学基础.md)
+  -  7.2 空间坐标描述
+     -  [7.2.1空间坐标描述](chapt7/7.2.1空间坐标描述.md)
+
+  
+

+ 38 - 21
docs/chapt7/7.1.1数学基础.md

@@ -35,7 +35,8 @@ $$
 - 任何矩阵(前提符合运算法则)与零矩阵相加、减结果都是其本身
   $$
   A-O=A \\
-  A+O=A
+  \\
+  A+O=A 
   $$
 
 - 零矩阵与任何矩阵的相乘结果都是零矩阵(注意,矩阵型号可能会变)
@@ -53,7 +54,7 @@ $$
 
 任何矩阵与单位矩阵的乘积结果为其本身
 $$
-AI_n = A\\
+AI_n = A\\\\
 I_nB = B
 $$
 
@@ -65,7 +66,6 @@ $$
 
 设矩阵
 $$
-
 A=\begin{bmatrix}
 {a_{11}}&{a_{12}}&{\cdots}&{a_{1n}}\\
 {a_{21}}&{a_{22}}&{\cdots}&{a_{2n}}\\
@@ -81,7 +81,6 @@ $$
 
 $$
-
 A\pm\;B=\begin{bmatrix}
 {a_{11}\pm\;b_{11}}&{a_{12}\pm\;b_{12}}&{\cdots}&{a_{1n}\pm\;b_{1n}}\\
 {a_{21}\pm\;b_{21}}&{a_{22}\pm\;b_{22}}&{\cdots}&{a_{2n}\pm\;b_{2n}}\\
@@ -100,7 +99,9 @@ $$
 **栗子:**
 
 $$
-A=\begin{bmatrix}{1}&{0}&{1}\\{1}&{0}&{0}\\{0}&{0}&{1}\\\end{bmatrix},B=\begin{bmatrix}{0}&{0}&{1}\\{1}&{0}&{0}\\{0}&{0}&{1}\\\end{bmatrix}\\
+A=\begin{bmatrix}{1}&{0}&{1}\\{1}&{0}&{0}\\{0}&{0}&{1}\\\end{bmatrix},B=\begin{bmatrix}{0}&{0}&{1}\\{1}&{0}&{0}\\{0}&{0}&{1}\\\end{bmatrix}
+$$
+$$
 A+B= B+A =\begin{bmatrix}{1}&{0}&{2}\\{2}&{0}&{0}\\{0}&{0}&{2}\\\end{bmatrix}
 $$
 
@@ -116,6 +117,8 @@ $$
 
 $$
 A = \begin{bmatrix}{1}&{2}\\{3}&{4}\\\end{bmatrix}\\
+$$
+$$
 2\times A= 2\times \begin{bmatrix}{1}&{2}\\{3}&{4}\\\end{bmatrix} = \begin{bmatrix}{2 \times 1}&{2 \times 2}\\{2 \times 3}&{2 \times 4}\\\end{bmatrix} =\begin{bmatrix}{2}&{4}\\{6}&{8}\\\end{bmatrix}
 $$
 
@@ -133,17 +136,25 @@ A = \begin{bmatrix}{1}&{2}\\{3}&{4}\\\end{bmatrix}, B = \begin{bmatrix}{1}&{0}\\
 $$
 $$
-A \times B = C = \begin{bmatrix}{c_{11}}&{c_{12}}\\{c_{21}}&{c_{22}}\\\end{bmatrix} \\
-c_{11} =1*1+2*0 = 1 \\
-c_{12} =1*0+2*3 = 6 \\
-c_{21} = 3*1+4*0 = 3 \\
-c_{22} = 3+0 + 4*3 = 12 \\
-C = \begin{bmatrix}{1}&{6}\\{3}&{12}\\\end{bmatrix}
+A \times B = C = \begin{bmatrix}{c_{11}}&{c_{12}}\\{c_{21}}&{c_{22}}\\\end{bmatrix} 
+$$
+$$
+c_{11} =1*1+2*0 = 1 $$
+$$
+c_{12} =1*0+2*3 = 6 
 $$
 
+$$
+c_{21} = 3*1+4*0 = 3 
+$$
 
+$$
+c_{22} = 3+0 + 4*3 = 12 
+$$
 
-
+$$
+C = \begin{bmatrix}{1}&{6}\\{3}&{12}\\\end{bmatrix}
+$$
 > 乘积之和其实就是点乘运算,比如栗子:
 > $$
 > a = [1,2,3],b = [0,1,2]\\
@@ -163,15 +174,14 @@ $$
 矩阵的运算规律:
 
 - 结合律
-  $$
+$$
   (A\times B)\times C = A \times(B\times C)
-  $$
+$$
   
 - 分配律
-  $$
+$$
   A\times(B+C) = A\times B + A\times C
-  $$
-
+$$
 ### 2.4转置运算
 
 转置运算定义非常简单,将矩阵的对应行列元素互换(左上角加${T}$表示)
@@ -184,11 +194,16 @@ A = \begin{bmatrix}{1}&{2}\\{3}&{4}\\\end{bmatrix},A^T = \begin{bmatrix}{1}&{3}\
 $$
 **运算规律**
 $$
-(A^T)^T = A \\ 
-(A+B)^T = A^T + B^T \\
-(AB)^T = B^TA^T
+(A^T)^T = A 
 $$
 
+$$
+(A+B)^T = A^T + B^T 
+$$
+
+$$
+(AB)^T = B^TA^T
+$$
 ## 3.重要定义
 
 ### 3.1 矩阵的逆
@@ -201,9 +216,11 @@ $A,B$是n阶方阵,E是n阶单位矩阵,若$AB=BA=E$,则称$A$是可逆矩
 > 注意:不一定所有的矩阵都是可逆的
 
 #### 3.1.2 运算规律
+$$
+(A^{-1})^{-1} = A 
+$$
 
 $$
-(A^{-1})^{-1} = A \\
 AB可逆,(AB)^{-1}=B^{-1}A^{-1}
 $$
 

+ 110 - 14
docs/chapt7/7.2.1空间坐标描述.md

@@ -1,46 +1,138 @@
 # 7.2.1 空间坐标描述
 
-1.何为位姿
+<!-- http://127.0.0.1:5503/index.html#/chapt7/-->
 
-引言:
+## 1.何为位姿
+
+### 1.1 引言
 
 在书籍《天才在左,疯子在右》中有这样一个故事,有一位十七岁的少年,他对量子力学有着独特的见解和远超同龄人的知识储备,他说四维生物突破了时空的界限,在它的观察中,人类的一生的活动连线起来,就像一条长长的虫子,它可以看到人的过去,也可以看到人的未来。
 
 我们对四维空间不了解,但对三维立体和二维的平面每天都有接触。一张铺平的中国地图是二维平面的,拔地而起的高楼大厦是三维立体的。
 
-那我们如何用数字表示高楼在地图中的位置呢?又如何表示高楼中你的位置?
+那我们如何用数字表示高楼在地图中的位姿呢?又如何用数字表示某个高楼中你的位姿呢?
+
+### 1.2 我们先来看地图中高楼的位姿
 
-我们先来看地图中高楼的位置:
+在地图上,我们可以利用经纬度坐标系来描述位姿,在经纬度坐标系中,我们可以使用经度值和纬度值表示地图上的某一个大楼的坐标,比如天安门的经纬度`经度:116.38 ,纬度:39.90`
 
-在地球上,我们可以利用经纬度来描述位置,原理就像在二维直角坐标系中,可以用x,y来描述该坐标系中的任意一个点的位置,当然这个位置是相对于坐标系原点的(也就是以原点建立二维平面坐标系,所有的点都是参考该坐标系的)
+经纬度坐标系是以经纬度原点(几内亚湾)建立二维平面直角坐标系,我们就可以使用x,y来描述该坐标系中的任意一个点的位置。
 
-> 经****的起点就是指0度经线,位于英国格林尼治天文台旧址。 纬****的起点就是指0度纬线,就是指赤道。而经度0和纬度0的交点,大致位于非洲西部的几内亚湾,位于海上。
+> 经度的起点就是指0度经线,位于英国格林尼治天文台旧址。 纬度的起点就是指0度纬线,就是指赤道。而经度0和纬度0的交点,大致位于非洲西部的几内亚湾,位于海上。
 >
 > ![img](7.2.1空间坐标描述/imgs/format,f_auto.png)
 
-通过经纬度可以定位到地图中任意一个点,但只有一个点我们无法得知这个建筑物的朝向(东南西北),所以除了描述位置的x,y外,我们还需要增加一个theta($\theta$),表示朝向。这样我们就得到了一个物体在二维平面中用数学描述的三个值,x、y 和 theta。
+通过经纬度可以定位到地图中的建筑物的位置,但我们依然无法得知这个建筑物的朝向(东南西北),所以除了描述位置的经纬度外,我们还需要增加一个theta($\theta$),表示朝向。这样我们就得到了一个物体在二维平面中用数学描述的三个值,经度(x)、维度(y) 和 朝向(theta)。
+
+### 1.3 高楼中你的位姿
+
+现实世界是三维的,除了经纬度还有海拔高度。所以采用经度(x)、维度(y)并不能完整的描述出空间中物体的位置,只有经纬度无法表示你所处的楼层的海拔高度,这样就没办法确定你的位置。
+
+我们同样可以在经纬度原点建立一个三维空间直角坐标系,采用经度(x)、维度(y)和海拔高度(z)三个值来描述三维空间中任意一点的位置。
+
+和二维空间中类似,知道了你在某一个大楼中的位置还不够,并不能判断出你的姿态(躺平的、站着的还是侧卧的),那我们该如何描述三维空间中的姿态呢? 
 
-在来看建筑物中你的位置:
+答案是旋转矩阵,旋转矩阵是什么?我们接着往下看。
 
-一栋楼是有很多层,如果采用x,y无法表示你所处的楼层高度,这样就没办法确定你的位置。
+### 1.4 参考坐标系
 
-所以描述三维空间的一个点的位置,我们采用x,y,z,三个值来描述。同样的,光有位置还不够,并不能判断出你的姿态(躺平的、站着的还是侧卧的),那我们该如何描述三维空间中的姿态呢? 小鱼卖个官子,客官且往下看。
+无论是在二维空间还是在三维空间,我们想要描述一个物体的位置和姿态第一步就是确定一个参考坐标系,物体的位置和姿态描述我们都是以这个坐标系作为参考的
 
-2.位置的表示
+> 参考坐标系,这一点很重要,因为没有绝对的坐标,只有相对的坐标。
 
-从第一节背景中可以得知,二维空间中的位置可以用x,y表示,三维空间中的位置的表示可以用x,y,z来表示。
 
-统一一下,无论是在三维空间还是在二维空间,我们都可以使用x,y,z来表示位姿,只不过对于二维空间来说,z的值是一个常量,比如0。
+## 2.位置的表示
 
-如果将位姿写成矩阵形式,我们可以写成一个三行一列的矩阵
+从第一节背景中可以得知,二维平面中的位置可以用$x,y$表示,三维空间中的位置的表示可以用$x,y,z$来表示。
+
+无论是在三维空间还是在二维平面,我们都可以使用$x,y,z$来表示位置,只不过对于二维空间来说,z的值是默认的一个固定不变的值,比如$0$
+
+假如我们确定了一个空间直角坐标系A,我们就可以使用$x,y,z$来确定A坐标系中空间中任意一点P的位置,可以记作${^A}P$
+
+$$
+{^A}P=
+\begin{bmatrix}
+x \\
+y \\ 
+z  \\
+\end{bmatrix}
+$$
+
+### 位置矢量
+
+直角坐标系{A}其实可以看作由一个三个互相正交(两两垂直)的单位矢量组成的。 那么在坐标系{A}中的一点P也可以写作矢量形式,其矢量形式由其在三个单位矢量上的分量组成。
+
+![image-20211102151409351](7.2.1空间坐标描述/imgs/image-20211102151409351.png)
+
+所以参考坐标系{A}中一点P也可以写作
+
+$$
+{^A}P=
+\begin{bmatrix}
+{^x}p \\
+{^y}p \\ 
+{^z}p  \\
+\end{bmatrix}
+$$
+
+
+如果说位置矢量不太好理解,可以简单的认为就是坐标轴的$x,y,z$
 
 $$
 \begin{bmatrix}{x}\\{y}\\{z}\\\end{bmatrix}
 $$
 
 3.姿态的表示
+在背景中小鱼提到了除了位置,坐标描述还有另外一个非常重要的组成部分——姿态。
+
+接着上面的说,我们已经直到坐标系A中的一个点P的位置,我们如何描述P点在{A}坐标系下的姿态呢?
+
+我们可以以P点为原点再建立一个坐标系(也可以认为该坐标系固定在物体P点上),这样我们就可以通过描述**新坐标系{P}**和**参考坐标系{A}**之间的姿态关系来表示${^A}P$点的姿态。
+
 
 
+![rviz的位姿显示](7.2.1空间坐标描述/imgs/image-20211102153515882.png)
+
+
+
+> 上图使用RVIZ2绘制出的,红色代表x轴,绿色代表y轴,蓝色代表z轴。
+
+从图中可以看出,坐标系{P}的每一个轴和参考坐标系的每一个轴之间都有一个角度,比如Px轴和Ax,Ay,Az三个轴之间存在三个角度,通过这三个角度我们就可以确定Px轴和参考坐标系{A}之间的关系,以此类推,我们也可以确定,Py轴和Pz轴和{A}之间的关系。
+
+每个轴的相对姿态关系确定了,坐标系之间的姿态也就确定了,${^A}P$点的姿态也就确定了。
+
+### 旋转矩阵
+
+我们将上述坐标系{P}的三个轴相对与参考坐标系{A}三个轴的共九个角度的余弦值,组成3*3的矩阵,该矩阵就是旋转矩阵,因该矩阵是{P}相对于{A}之间的姿态关系的表示,故记作${^A_P}R$
+$$
+{^A_P}R=[{^A}x_{P} \ {^A}y_{P} \ {^A}z_{P}] = \begin{bmatrix}{r_{11}}&{r_{12}}&{r_{13}}\\{r_{21}}&{r_{22}}&{r_{23}}\\{r_{31}}&{r_{32}}&{r_{33}}\\\end{bmatrix}
+$$
+
+两个向量的点乘为两个向量的长度与它们夹角余弦的积,所以$r11$可以表示为向量$P_{x}$与$A_{x}$的点积,所以旋转矩阵可以写为下面的形式
+
+$$
+{^A_P}R = \begin{bmatrix} 
+{P_{x}\cdot A_x} & {P_{y}\cdot A_x} & {P_{z}\cdot A_x}\\
+{P_{x}\cdot A_y} & {P_{y}\cdot A_y} & {P_{z}\cdot A_y}\\
+{P_{x}\cdot A_z} & {P_{y}\cdot A_z} & {P_{z}\cdot A_z}\\
+\end{bmatrix}
+$$
+
+将${^A_P}R$进行转置可得${^P_A}R$
+
+$$
+{^P_A}R = \begin{bmatrix} 
+{P_{x}\cdot A_x} & {P_{x}\cdot A_y} & {P_{x}\cdot A_z}\\
+{P_{y}\cdot A_x} & {P_{y}\cdot A_y} & {P_{y}\cdot A_z}\\
+{P_{z}\cdot A_x} & {P_{z}\cdot A_y} & {P_{z}\cdot A_z}\\
+\end{bmatrix}
+$$
+
+可以看出${^P_A}R$其实表示坐标系{P}作为参考坐标系下坐标系{A}的姿态,即
+$$
+{^P_A}R = {^A_P}R^{T} = {^A_P}R^{-1}
+$$
+
 
 4.平移坐标变换
 
@@ -48,3 +140,7 @@ $$
 
 6.左手还是右手
 
+
+
+参考文档:
+- 机器人学导论

BIN=BIN
docs/chapt7/7.2.1空间坐标描述/imgs/image-20211102151409351.png


BIN=BIN
docs/chapt7/7.2.1空间坐标描述/imgs/image-20211102152506927.png


BIN=BIN
docs/chapt7/7.2.1空间坐标描述/imgs/image-20211102153510422.png


BIN=BIN
docs/chapt7/7.2.1空间坐标描述/imgs/image-20211102153515882.png


+ 10 - 1
docs/index.html

@@ -45,7 +45,11 @@
               return (
                 '<div class="mermaid">' + mermaid.render('mermaid-svg-' + num++, code) + "</div>"
               );
-            }
+            }else if(lang === "tex") {
+            return (
+                  '<span class="tex">'+ katex.renderToString(code, {throwOnError: false})+'</span>'
+              );
+              }
             return this.origin.code.apply(this, arguments);
           }
         }
@@ -103,6 +107,11 @@
 
   <link rel="stylesheet" href="//cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.css">
   <script src="//cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>
+  <!-- 公式 -->
+  <!-- CDN files for docsify-katex -->
+  <script src="//cdn.jsdelivr.net/npm/docsify-katex@latest/dist/docsify-katex.js"></script>
+  <!-- or <script src="//cdn.jsdelivr.net/gh/upupming/docsify-katex@latest/dist/docsify-katex.js"></script> -->
+  <link rel="stylesheet" href="//cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.css"/>
   <!-- 字数统计 -->
   <!-- <script src="//unpkg.com/docsify-count/dist/countable.js"></script> -->
   <!-- Latest -->