alyssa1024 пре 3 година
родитељ
комит
b405fd0357

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

@@ -326,7 +326,7 @@ $$
 
 1.相机坐标系{C}为参考坐标系,工具坐标系{P}的位置矢量在相机坐标系{C}的`x,y,z`各轴投影为$2,1,2$,并且工具坐标系和相机坐标系姿态相同。
 
-2.机器人基坐标系{B}为参考坐标系,相机坐标系{C}的位置矢量在{B}各轴的投影为$0,0,3$,坐标系{C}绕着坐标系{B}的x轴转了180度
+2.机器人基坐标系{B}为参考坐标系,相机坐标系{C}的位置矢量在{B}各轴的投影为$0,0,3$坐标系{C}绕着坐标系{B}的x轴转了180度
 
 可以参考下图看题目
 

+ 23 - 23
docs/chapt7/7.2.2动手学空间姿态描述.md

@@ -6,8 +6,8 @@
 - 使用numpy表示位置矢量和旋转矩阵
 - 使用numpy进行平移与旋转坐标变换
 - 了解ROS2中TF2的概念
-- 掌握tf2相关CLI工具进行坐标变换
-- 掌握python操作TF进行坐标变换
+- 使用tf2相关CLI工具进行坐标变换
+- 使用python操作TF进行坐标变换
 
 ## 1.numpy表示位姿
 
@@ -66,7 +66,7 @@ print(R_AB)
 
 ## 2.numpy坐标变换
 
-掌握了使用numpy表示位置和姿态后,接着我们使用numpy来完成上一节的小练习
+掌握了使用numpy表示位置和姿态后,接着我们使用numpy来完成上一节的小练习
 
 ### 2.1 题目
 
@@ -74,9 +74,9 @@ print(R_AB)
 
 ![手眼系统的坐标系关系](7.2.2动手学空间姿态描述/imgs/image-20211104102656102.png)
 
-1.相机坐标系{C}为参考坐标系,工具坐标系{P}的位置矢量在相机坐标系{C}`x,y,z`各轴投影为$2,1,2$,并且工具坐标系和相机坐标系姿态相同。
+1.相机坐标系{C}为参考坐标系,工具坐标系{P}的位置矢量在相机坐标系{C}`x,y,z`各轴投影为$2,1,2$,并且工具坐标系和相机坐标系姿态相同。
 
-2.机器人基坐标系{B}为参考坐标系,相机坐标系{C}在的位置矢量在{B}各轴的投影为$0,0,3$,坐标系{C}和绕着坐标系{B}的x轴转了180度
+2.机器人基坐标系{B}为参考坐标系,相机坐标系{C}的位置矢量在{B}各轴的投影为$0,0,3$,坐标系{C}绕着坐标系{B}的x轴转了180度
 
 可以参考下图看题目
 
@@ -159,7 +159,7 @@ $$\begin{bmatrix}
 
 
 
-大家好,我是小鱼,上一节我们学习了使用numpy表示位置和姿态,并使用了numpy来进行坐标变换,本节课我们直接使用ROS2中的TF工具不写一行代码进行坐标,同时我们还可以使用RVIZ2进行直观的查看坐标关系。
+以上大家跟着小鱼一起学习了使用numpy表示位置和姿态,并使用了numpy来进行坐标变换,接下来我们直接使用ROS2中的TF工具不写一行代码进行坐标发布,同时我们还可以使用RVIZ2直观的查看坐标关系。
 
 
 
@@ -178,7 +178,7 @@ TF即`变换`的英文单词`TransForm`的缩写。所以`ROS`和`ROS2`中的`TF
 
 ![手眼系统](7.2.2动手学空间姿态描述/imgs/820a681b891a4719867e0c84a492d85f.png)
 
-拿上面的手眼系统来说,我们要想获取到相机的基坐标系{B}和工具{P}之间的关系,只需要将机械臂和相机、相机和工具之间的关系即可
+拿上面的手眼系统来说,我们要想获取到相机的基坐标系{B}和工具{P}之间的关系,只需要将机械臂和相机、相机和工具之间的关系告诉TF即可
 
 #### 我们如何告诉TF?
 
@@ -193,7 +193,7 @@ TF即`变换`的英文单词`TransForm`的缩写。所以`ROS`和`ROS2`中的`TF
 ros2 run tf2_ros static_transform_publisher 
 ```
 
-可以看到
+按`enter`键,可以看到
 
 ```
 A command line utility for manually sending a transform.
@@ -221,7 +221,7 @@ Usage: static_transform_publisher x y z yaw pitch roll frame_id child_frame_id
 
 比如针对上面的手眼转换,广播机械臂坐标系{B}和相机坐标系{C}之间的关系。
 
-父坐标系的名字就是B,子坐标系的名字是C,父子之间的平移关系是`0 0 3`,旋转关系是绕x轴旋转180度
+父坐标系的名字就是B子坐标系的名字是C,父子之间的平移关系是`0 0 3`,旋转关系是绕x轴旋转180度
 
 在ROS2中可以使用下面的指令发布变换,打开终端,输入下面的指令:
 
@@ -255,7 +255,7 @@ ros2 run tf2_ros static_transform_publisher 2 1 2 0 0 0 C P
 ![RVIZ2初始化界面](7.2.2动手学空间姿态描述/imgs/6e43fd3ebffb4436b8486d26c6b72c3b.png)
 我们可以看到窗口左边的配置选项,全局选项默认选择的FixedFrame为map,这个map就是rviz2默认的坐标系的名字,动动脚趾头想一下我们并没有发布map这个坐标系,所以下面Global Status也是红色的错误。
 
-此时我们可以手动的修改以下固定的Frame为B,让默认的坐标系设置成机械臂的基坐标系{B}
+此时我们可以手动的修改以下固定的Frame为B,让默认的坐标系设置成机械臂的基坐标系{B}
 
 ![设置默认坐标系](7.2.2动手学空间姿态描述/imgs/f8d9586dac624df482450bb7ea57fa6f.png)
 
@@ -271,7 +271,7 @@ ros2 run tf2_ros static_transform_publisher 2 1 2 0 0 0 C P
 
 ![RVIZ2插件选择](7.2.2动手学空间姿态描述/imgs/e58d92dfda4b4819b987b7ca76785a6a.png)
 
-之后你在RVIZ2中可以看到下图的坐标关系
+之后你在RVIZ2中可以看到下图的坐标关系
 
 ![坐标关系显示](7.2.2动手学空间姿态描述/imgs/824ad47cce374f198280e8a47e444999.png)
 
@@ -291,11 +291,11 @@ ros2 run tf2_ros tf2_echo B P
 ```
 ![输出两个坐标之间关系](7.2.2动手学空间姿态描述/imgs/6c85c97787474091acda23a39a66f9d1.png)
 
-可以看到终端中不断输出B和C之间的平移和旋转,平移采用的是xyz,基本正确,y和z的微小变换是因为我们发布变换中时旋转输入的是3.14并不精确。
+可以看到终端中不断输出B和C之间的平移和旋转,平移采用的是xyz,基本正确,y和z的微小差异是因为我们发布变换时旋转输入的是3.14并不精确。
 
-至于旋转部分采用的是四元数表示,关于这部分姿态的表示,小鱼在第六节会讲,大家不必纠结。
+至于旋转部分采用的是四元数表示,关于这部分姿态的表示,小鱼在下一节会讲,大家不必纠结。
 
-除了使用TF获取关系外,ros2还提供很多工具来查看坐标之间的关系,大家可以在终端中输入下面的命令自行尝试
+除了使用TF获取关系外,ros2还提供很多工具来查看坐标之间的关系,大家可以在终端中输入下面的命令自行尝试
 
 #### rqt_tf_tree
 > 2022-04-26更新的,这个工具的二进制安装版本作者3月底才发布,之前没提的原因是需要源码装太麻烦了
@@ -309,7 +309,7 @@ sudo apt install ros-foxy-rqt-tf-tree
 
 
 
-接着你就可以看到这个强大的,几乎可以实时看到系统tf更新信息的工具,这个工具后面我们进行导航和机械臂的调试非常有帮助。
+接着你就可以看到这个强大的,几乎可以实时看到系统tf更新信息的工具,这个工具对于后面我们进行导航和机械臂的调试非常有帮助。
 
 > 长的不一样没关系,这是后面补充的图。
 
@@ -363,7 +363,7 @@ ros2 run tf2_tools view_frames.py
 
 
 
-除了使用命令行进行坐标关系广播和监听,我们还可以使用代码来广播和监听,下一节小鱼就带你一起用程序来发布TF广播和获取坐标关系。
+除了使用命令行进行坐标关系广播和监听,我们还可以使用代码来广播和监听,接下来小鱼就带你一起用程序来发布TF广播和获取坐标关系。
 
 
 
@@ -375,19 +375,19 @@ ros2 run tf2_tools view_frames.py
 
 在开始之前,我们总结下TF相关的操作有哪些?
 - 广播(TransformBroadcaster):将坐标系鱼坐标系之间的位姿态关系发布出去
-- 监听(TransformListener):获取坐标系和坐标之间的位姿关系
+- 监听(TransformListener):获取坐标系和坐标之间的位姿关系
 - TF(坐标变换TransformStamped)帧:广播出去的一组数据可以称作一个TF帧,包含父坐标系名称、子坐标系名称,父坐标系和子坐标系之间的关系
 
 接着我们就可以编写代码来实现上面对TF帧的发布和监听。
 
 ### 4.1 坐标变换广播
 
-在进行坐标变换广播前,我们根据两个坐标系之间的关系是否会随着时间变化分以下两种情况:
-1. 坐标系之间的关系不随时间推移而改变,称为静态坐标变换,需要使用静态广播发布器(StaticTransformBroadcaster)发布。比如:机器人的两个轮子之间关系,可以认为随时间的变换其相对位置不变。
-2. 坐标系之间的关系随时间的推移而改变,称为(动态)坐标变换,使用广播发布器(TransformBroadcaster)发布坐标关系。比如机器人在世界坐标系中的位置,因为机器人会动。
+在进行坐标变换广播前,我们根据两个坐标系之间的关系是否会随着时间变化分以下两种情况:
+1. 坐标系之间的关系不随时间推移而改变,称为静态坐标变换,需要使用静态广播发布器(StaticTransformBroadcaster)发布。比如:机器人的两个轮子之间关系,可以认为随时间的变换其相对位置不变。
+2. 坐标系之间的关系随时间的推移而改变,称为(动态)坐标变换,使用广播发布器(TransformBroadcaster)发布坐标关系。比如机器人在世界坐标系中的位置,因为机器人会动。
 
 我们依然使用手眼系统为例,尝试使用广播发布器来发布坐标系之间的关系。
-在手眼系统中,机械臂基座和相机坐标系之间的位置是固定不变的,我们可以通过静态广播发布器来发布,而相机坐标系下工件的位置是实时识别得到的,其值会随时间变,故我们用广播发布器来发布。
+在手眼系统中,机械臂基座和相机坐标系之间的位置是固定不变的,我们可以通过静态广播发布器来发布,而相机坐标系下工件的位置是实时识别得到的,其值会随时间变,故我们用广播发布器来发布。
 
 #### 4.1.1 静态广播发布器
 
@@ -415,7 +415,7 @@ ros2 run tf2_tools view_frames.py
 
 接着我们来使用广播发布器发布C和工具P之间的关系平移:` x:2 y:1 z:2  ` 旋转:`qx:0 qy:0 qz:0 qw:1`
 
-只需要将上面的静态广播发布器改为广播发布器,但需要注意的是,发布坐标变换时要以一定的频率实时发布,这样当我们获取坐标时才能获取到当前时刻的坐标(有点不好理解,就是坐标关系和时间有关系)。
+只需要将上面的静态广播发布器改为广播发布器,但需要注意的是发布坐标变换时要以一定的频率实时发布,这样当我们获取坐标时才能获取到当前时刻的坐标(有点不好理解,就是坐标关系和时间有关系)。
 
 ![image-20211121193141477](7.2.2动手学空间姿态描述/imgs/image-20211121193141477.png)
 
@@ -434,7 +434,7 @@ ros2 run tf2_tools view_frames.py
 
 ### 4.2 坐标变换监听
 
-所谓坐标变换监听就是通过监听整个系统的坐标变换关系.
+所谓坐标变换监听就是监听整个系统的坐标变换关系。
 
 通过`TransformListener`即可获取到整个`tf`系统中窗口大小为10s的坐标关系,并且我们创建了一个`buffer`,`TransformListener`会把收到的坐标关系放入`buffer`中,我们后面就可以通过`buffer`的`lookup_transform()`函数获取到坐标之间的关系。
 

+ 2 - 2
docs/chapt8/8.1URDF统一机器人建模语言.md

@@ -131,7 +131,7 @@ F[支撑轮子:caster_link] --caster_joint-->C[躯体:base_link]
 
 上面我们介绍完了link,那一个link该怎么写呢?
 
-我们来看一个base_link的,通过link标签即可声明一个link,属性name指定部件名字
+我们来看一个base_link的写法,通过link标签即可声明一个link,属性name指定部件名字
 
 ```xml
   <link name="base_link">
@@ -188,7 +188,7 @@ link的子标签列表
 
 joint为机器人关节,机器人关节用于连接两个机器人部件,主要写明父子关系
 
-- 父子之间的连接类型,是否固定的,可以旋转的等
+- 父子之间的连接类型,包括是否固定的,可以旋转的等
 
 - 父部件名字
 - 子部件名字

+ 6 - 6
docs/chapt8/8.2RVIZ2可视化移动机器人模型.md

@@ -30,7 +30,7 @@ cd fishbot_description && mkdir urdf
 touch fishbot_base.urdf
 ```
 
-完成后的目录结构:
+完成后src下的目录结构:
 ```
 ├── fishbot_description
 │   ├── __init__.py
@@ -84,7 +84,7 @@ touch fishbot_base.urdf
 
 ## 3.建立launch文件
 
-在目录`src/fishbot_description`下创建launch文件夹并新建`display_rviz2.launch.py`文件。
+在目录`src/fishbot_description`下创建launch文件夹并在其下新建`display_rviz2.launch.py`文件。
 
 ```
 mkdir launch
@@ -162,17 +162,17 @@ C[rviz2]
 
 ```
 
-这里我们用到了`joint_state_publisher_gui`和`robot_state_publisher`两个包,如果你的系统没有安装这两个包,可以手动安装:
+这里我们用到了`joint_state_publisher_gui`和`robot_state_publisher`两个包,如果你的系统没有安装这两个包,可以手动安装:
 
 ```
 sudo apt install ros-$ROS_DISTRO-joint-state-publisher-gui ros-$ROS_DISTRO-robot-state-publisher
 ```
 
-> `joint_state_publisher_gui`,还有一个兄弟叫做`joint_state_publisher`两者区别在`joint_state_publisher_gui`运行起来会跳出一个界面,通过界面可以操作URDF中能动的关节
+> `joint_state_publisher_gui`,还有一个兄弟叫做`joint_state_publisher`两者区别在`joint_state_publisher_gui`运行起来会跳出一个界面,通过界面可以操作URDF中能动的关节
 
 ## 4.修改setup.py
 
-导入头
+导入头文件
 
 ```python
 from glob import glob
@@ -262,7 +262,7 @@ ros2 launch fishbot_description display_rviz2.launch.py
 
 练习1:尝试将修改机器人身体颜色为蓝色,透明度为50%`(0.1 0.1 1.0 0.5)`
 
-练习2:尝试在URDF中添加imu_link并使用imu_joint将其固定在车体的中心上方2cm,imu采用的几何形状为box。长宽高各是2cm
+练习2:尝试在URDF中添加imu_link并使用imu_joint将其固定在车体的中心上方2cm,imu采用的几何形状为box。长宽高均为2cm
 
 
 

+ 1 - 1
docs/chapt8/章节介绍.md

@@ -8,7 +8,7 @@
 
 ### 机器人建模内容
 
-机器人建模主要分为运动学建模和动力学建模两个方面,在本章节中,我们主要对两轮差速移动机器人进行建模,然后在RVIZ2中对模型进行可视化控制模型的关节运动。
+机器人建模主要分为运动学建模和动力学建模两个方面,在本章节中,我们主要对两轮差速移动机器人进行建模,然后在RVIZ2中对模型进行可视化控制模型的关节运动。
 
 通过本章节的学习,你将学到: