Browse Source

修改第三章

鱼香ROS 3 years ago
parent
commit
6883bdacd0

+ 23 - 8
docs/chapt3/3.1ROS2节点介绍.md

@@ -1,6 +1,6 @@
 # 3.1 ROS2节点介绍
 
-本节主要给大家介绍节点,不知道有多少小伙伴看了第一章的扩展阅读,里面通过ROS镇长的小故事来和大家讲解了ROS的通信机制。
+本节主要给大家介绍节点,不知道有多少小伙伴看了第一章的扩展阅读,小鱼通过ROS镇长的小故事来和大家讲解了ROS的通信机制。
 
 
 
@@ -14,7 +14,7 @@
 
 ROS2中的节点也是如此,每一个节点也是只负责一个单独的模块化的功能(比如一个节点负责控制车轮转动,一个节点负责从激光雷达获取数据、一个节点负责处理激光雷达的数据、一个节点负责定位等等)
 
-
+![image-20210915153915430](3.1ROS2节点介绍/imgs/image-20210915153915430.png)
 
 ## 2.节点之间如何交互?
 
@@ -24,10 +24,10 @@ ROS2中的节点也是如此,每一个节点也是只负责一个单独的模
 
 - 话题-topics
 - 服务-services
-- Action
+- 动作-Action
 - 参数-parameters
 
-这四种种通信方式的用途和使用方法,小鱼放到了第四和第五章来介绍,到时候会带大家手撸代码。
+这四种种通信方式的用途和使用方法,小鱼放到了第四和第五章来介绍,到时候同时会带大家手撸代码。
 
 
 
@@ -45,7 +45,7 @@ ROS2中的节点也是如此,每一个节点也是只负责一个单独的模
 ros2 run <package_name> <executable_name>
 ```
 
-指令意义:启动 <package_name>包下的 <executable_name>节点。
+指令意义:启动 <package_name>包下的 <executable_name>中的节点。
 
 使用样例:
 
@@ -59,7 +59,20 @@ ros2 run turtlesim turtlesim_node
 
 
 
-## 4. 本节学习指令
+## 4. 通过命令行界面查看节点信息
+
+### 4.1 ROS2命令行
+
+ROS2的CLI,就是和ROS2相关的命令行操作。什么是命令行界面呢?这里小鱼再讲解一个概念,CLI(Command-Line Interface)和GUI(Graphical User Interface)
+
+- GUI(Graphical User Interface)就是平常我们说的图形用户界面,大家用的Windows是就是可视化的,我们可以通过鼠标点击按钮等图形化交互完成任务。
+- CLI(Command-Line Interface)就是命令行界面了,我们所用的终端,黑框框就是命令行界面,没有图形化。
+
+很久之前电脑还是没有图形化界面的,所有的交互都是通过命令行实现,就学习机器人而言,命令行操作相对于图形化优势更加明显。
+
+ROS2为我们提供了一系列指令,通过这些指令,可以实现对ROS2相关模块信息的获取设置等操作。
+
+### 4.2 节点相关的CLI
 
 运行节点(常用)
 
@@ -79,7 +92,7 @@ ros2 node list
 ros2 node info <node_name>
 ```
 
-重映射节点(暂时不重要)
+重映射节点名称
 
 ```
 ros2 run turtlesim turtlesim_node --ros-args --remap __node:=my_turtle
@@ -89,5 +102,7 @@ ros2 run turtlesim turtlesim_node --ros-args --remap __node:=my_turtle
 
 
 
-了解了节点的概念后,下一节一起来看一下什么是工作空间吧~
+## 5.总结
+
+通过本节课的学习,希望大家对节点的概念有所了解,下一节小鱼带你一起学习工作空间的相关概念
 

BIN
docs/chapt3/3.1ROS2节点介绍/imgs/image-20210915153915430.png


+ 122 - 15
docs/chapt3/3.2ROS2工作空间介绍.md

@@ -1,25 +1,25 @@
 # 3.2 ROS2工作空间介绍
 
-上一节给大家介绍了一下节点,运行一个节点的时候使用的是
+大家好,我是小鱼~上一节小鱼给大家介绍了一下节点,运行一个节点的时候使用的是
 
 ```
-ros2的run+包名+节点名称
+ros2 run 包名字 可执行文件名字
 ```
 
-那你有没有想过,我们想找到一个节点,就必须要先知道它在哪个包,那问题就来了,想要找到某个包,该去哪里找?
+那你有没有想过,我们想找到一个节点(可执行文件),就必须要先知道它在哪个包,那问题就来了,想要找到某个包,该去哪里找?
 
 **答案就是:工作空间**
 
-
-
 > 注意:一个工作空间下可以有多个功能包,一个功能包可以有多个节点存在
 
 
 
-## 1. 工作空间是什么
+## 1. 工作空间
 
 小鱼定义:工作空间是包含若干个功能包的目录,一开始大家把工作空间理解成一个文件夹就行了。这个文件夹包含下有`src`。所以一般新建一个工作空间的操作就像下面一样:
 
+> mkdir: 创建一个目录,mkdir -p :递归创建目录,即使上级目录不存在,会按目录层级自动创建目录
+
 ```shell
 mkdir -p turtle_ws/src
 cd turtle_ws/src
@@ -27,17 +27,125 @@ cd turtle_ws/src
 
 是不是觉得就像创建一个目录(其实就是创建一个目录)
 
-创建完目录就可以下载代码到`src`文件下进行编译运行了。
 
 
+## 2.功能包是什么
+
+功能包可以理解为存放节点的地方,ROS2中功能包根据编译方式的不同分为三种类型。
+
+- ament_python,适用于python程序
+- cmake,适用于C++
+- ament_cmake,适用于C++程序,是cmake的增强版
+
+后面小鱼会带你一起手把手创建功能包~
+
+
+
+## 3.功能包获取的两种方式
+
+### 3.1 安装获取
+
+安装一般使用
+
+```
+sudo apt install ros-<version>-package_name
+```
+
+安装获取会自动放置到系统目录,不用再次手动source。
+
+
+
+### 3.2 手动编译获取
+
+手动编译相对麻烦一些,需要下载源码然后进行编译生成相关文件。
+
+> 什么时候需要手动编译呢?一般我们能安装的功能包都是作者编译好程序将可执行文件上传到仓库中,然后我们才能够通过apt进行安装,如果作者还没来得及测试上传,或者忘记了测试上传,就会找不到对应的包,这时候就需要手动编译安装了。
+>
+> 另外一种就是我们需要对包的源码进行修改,这个时候也需要自己编译修改。
+
+手动编译之后,需要手动source工作空间的install目录。
+
+下一节学习完编译器colcon小鱼会通过实例带大家一起下载编译安装功能包~
+
+
+
+## 4.与功能包相关的指令 ros2 pkg
+
+```
+create       Create a new ROS2 package
+executables  Output a list of package specific executables
+list         Output a list of available packages
+prefix       Output the prefix path of a package
+xml          Output the XML of the package manifest or a specific tag
+```
+
+**1.创建功能包**
+
+```
+ros2 pkg create <package-name>  --build-type  {cmake,ament_cmake,ament_python}  --dependencies <依赖名字>
+```
+
+
+
+**2.列出可执行文件**
+
+ 列出所有
+
+```
+ros2 pkg executables
+```
+
+列出某个功能包的
+
+```
+ros2 pkg executables turtlesim
+```
+
+![image-20210915172702101](3.2ROS2工作空间介绍/imgs/image-20210915172702101.png)
+
+**3.列出所有的包**
+
+```
+ros2 pkg list
+```
+
+
+
+**4.输出某个包所在路径的前缀**
+
+```
+ros2 pkg prefix  <package-name>
+```
+
+比如小乌龟
+
+```
+ros2 pkg prefix turtlesim
+```
+
+
+
+**5.列出包的清单描述文件**
+
+> 每一个功能包都有一个标配的manifest.xml文件,用于记录这个包的名字,构建工具,编译信息,拥有者,干啥用的等信息。
+>
+> 通过这个信息,就可以自动为该功能包安装依赖,构建时确定编译顺序等
+
+查看小乌龟模拟器功能包的信息。
+
+```
+ros2 pkg xml turtlesim 
+```
+
+<!-- 
 
 ## 2.该如何找到工作空间下的功能包
 
-第二讲中,刚安装完ros2,大家使用ros2指令会出现下面的错误:
+第二讲中,刚安装完ros2,大家直接使用ros2指令会出现下面的错误:
 
 ![image-20210720102200144](3.2ROS2工作空间介绍/imgs/image-20210720102200144.png)
 
-不要怕,跟着小鱼输入一句话:
+解决方案是在终端输入这样一句话,source
 
 ```
 source /opt/ros/foxy/setup.bash
@@ -54,10 +162,9 @@ source /opt/ros/foxy/setup.bash
 
 
 > 小鱼:刚刚你可只创建了一个src文件夹,没看到setup.bash文件呀?别着急,下一讲就会告诉大家如何生成这个文件。
-> 
-
-
+>  -->
 
+<!-- 
 
 
 ## 3.功能包也分优先级
@@ -66,9 +173,9 @@ source /opt/ros/foxy/setup.bash
 
 **答案是自己的,这个叫做后来者的工作空间居上原则**
 
+ -->
 
+## 4.总结
 
-
-
-介绍完工作空间,接下来就可以讲讲ROS2的编译工具了~
+介绍完工作空间和功能包,接下来就可以讲讲ROS2的编译工具colcon,下一讲我们就开始对代码动手了~
 

BIN
docs/chapt3/3.2ROS2工作空间介绍/imgs/image-20210915172702101.png


+ 24 - 18
docs/chapt3/3.3ROS2的编译器Colcon.md

@@ -1,18 +1,26 @@
-# 3.2 ROS2工具—Colcon
+# 3.2 ROS2构建工具—Colcon
 
-## 1.Colcon是个啥
+大家好,我是编译代码特别慢的小鱼。本节课我们来讲一下ROS2编译工具`colcon`
 
-colcon其实是一个包构建工具,这个工具用来做什么的呢?
+本节小鱼会从下面几个方面来介绍:
 
-简单点说就是用来编译代码的,上几节跟大家讲了如何进行ROS2工作空间的创建,但没有说如何进行编译,其实就是用colcon。
+1. Colcon是个啥
+2. 安装colcon
+3.  编个东西测试一下
+4. 运行一个自己编的节点
+5. colcon学习总结指令
 
-ROS2默认是没有安装colcon的,所以小鱼就从如何安装colcon开始跟大家讲解colcon的使用方法。
 
 
+## 1.Colcon是个啥
 
-> colcon想当于ros1中的catkin工具,学过ros1的同学可以辅助理解。没学过也没关系,用多了自然也就懂了。
+colcon其实是一个功能包构建工具,这个工具用来做什么的呢?
 
+简单点说就是用来编译代码的,上几节跟大家讲了如何进行ROS2工作空间的创建,但没有说如何进行编译,其实就是用colcon。
+
+ROS2默认是没有安装colcon的,所以小鱼就从如何安装colcon开始跟大家讲解colcon的使用方法。
 
+> colcon想当于ros1中的catkin工具,学过ros1的同学可以辅助理解。没学过也没关系,用多了自然也就懂了。
 
 ## 2.安装colcon
 
@@ -24,8 +32,6 @@ sudo apt-get install python3-colcon-common-extensions
 
 ![image-20210720210108894](3.3ROS2的编译器Colcon/imgs/image-20210720210108894.png)
 
-
-
 ## 3. 编个东西测试一下
 
 1. 创建一个工作区文件夹`colcon_test`
@@ -42,8 +48,6 @@ sudo apt-get install python3-colcon-common-extensions
    git clone https://github.com/ros2/examples src/examples -b foxy
    ```
 
-   
-
 3. 编译工程
 
    ```
@@ -60,8 +64,6 @@ sudo apt-get install python3-colcon-common-extensions
 
 
 
-
-
 ## 4.运行一个自己编的节点
 
 1. 打开一个终端使用 cd colcon_test 进入我们刚刚创建的工作空间,先source 一下资源
@@ -70,7 +72,7 @@ sudo apt-get install python3-colcon-common-extensions
    source install/setup.bash
    ```
 
-2. 运行一个订杂志节点
+2. 运行一个订杂志节点,你将看不到任何打印,因为没有发布者
 
     ```
     ros2 run examples_rclcpp_minimal_subscriber subscriber_member_function
@@ -89,25 +91,27 @@ sudo apt-get install python3-colcon-common-extensions
 
 ## 5.本节学习指令
 
-### 只编译一个包
+> 这个小鱼要特别说一下,因为ros2的build没有ros中的devel概念了,如果想达到devel目录那样的效果,就需要加这个参数。没有学过ros的请主动忽略这句话。
+
+### 5.1 只编译一个包
 
 ```
 colcon test --packages-select YOUR_PKG_NAME 
 ```
 
-### 不编译测试单元
+### 5.2 不编译测试单元
 
 ```
 colcon test --packages-select YOUR_PKG_NAME  --cmake-args -DBUILD_TESTING=0
 ```
 
-### 运行编译的包的测试
+### 5.3 运行编译的包的测试
 
 ```
 colcon test
 ```
 
-### 允许通过更改src下的部分文件来改变install(重要)
+### 5.4 允许通过更改src下的部分文件来改变install(重要)
 
 每次调整 python 脚本时都不必重新build了
 
@@ -117,11 +121,13 @@ colcon build --symlink-install
 
 
 
-> 这个小鱼要特别说一下,因为ros2的build没有ros中的devel概念了,如果想达到devel目录那样的效果,就需要加这个参数。没有学过ros的请主动忽略这句话。
+## 6.总结
 
+通过本节课的学习,相信你已经掌握如何编译ROS2的工程了,先别着急结束,还有一个小作业~
 
 
 
+-----
 
 参考资料:
 

+ 2 - 4
docs/chapt3/3.4小游戏_小乌龟求偶大作战.md

@@ -2,9 +2,7 @@
 
 呱呱呱~恭喜你进入了本章节的实战环节,小乌龟求偶大作战。你将要使用命令行来完成新建工作空间以及编译、运行节点这三项任务。
 
-- 项目开源地址:https://github.com/aiotrobot/turtle_battle
-
-
+- 项目开源地址:[fishros/turtle_battle: 追逐你喜欢的那个小乌龟,满100分奖励教学视频哦 (github.com)](https://github.com/fishros/turtle_battle)
 
 ## 1.游戏介绍
 
@@ -24,7 +22,7 @@ cd turtle_ws/src
 #### 2.2下载源码功能包到工作空间的src文件夹下
 
 ```
-git clone https://github.com/aiotrobot/turtle_battle.git
+git clone https://github.com/fishros/turtle_battle.git
 ```
 
 #### 2.3 进入工作空间上一级编译

+ 3 - 5
docs/chapt3/3.5手撸一个节点Python版本.md

@@ -1,8 +1,8 @@
 # 3.5 带你手撸一个Python节点
 
-上一节的小游戏,相信你已经运行起来了。这一节小鱼就从上一节的小游戏说起,带你一起手撸一个python版本的节点。
-
+各位小伙伴大家好,我是小鱼,本节课我们开始动手来撸一个ROS2的Python节点~
 
+上一节的小游戏,相信你已经运行起来了。这一节小鱼就从上一节的小游戏说起,带你一起手撸一个python版本的节点。
 
 在上一节小游戏中,小鱼一共启动了多少个节点呢?节点名字分别叫什么?
 
@@ -44,8 +44,6 @@ cd town_ws/src
 
 ### 1.2 创建一个功能包
 
-这个小鱼不打算单独讲,遇到一个命令说一个。
-
 我们先讲一下如何创建一个名字叫做`village_li `(李家村)python版本的功能包。
 
 ```
@@ -56,7 +54,7 @@ ros2 pkg create village_li --build-type ament_python --dependencies rclpy
 
 - pkg create 是创建包的意思
 - --build-type 用来指定该包的编译类型,一共有三个可选项`ament_python`、`ament_cmake`、`cmake`
-- --dependencies 指的是这个功能包的依赖,这里小鱼给了一个和通信相关的`rclpy`
+- --dependencies 指的是这个功能包的依赖,这里小鱼给了一个ros2的python客户端接口`rclpy`
 
 
 

+ 9 - 13
docs/chapt3/章节介绍.md

@@ -1,28 +1,24 @@
 # 第3章-ROS2的基本使用
 
-叮叮叮,恭喜你完成了第2章的学习,是不是觉得第2章是`一看就会,一操作就废`。没关系,相信你现在已经拥有了一个装有ros2的ubuntu系统(不论是虚拟机还是双系统等)。
-
-本章节小鱼将会带大家进一步的了解ROS2,大家只需要动手和小鱼一起操作就行,保证`有手就会`。中途可以多思考一下Why?后面的章节中,小鱼将会更加详细的给大家回答Why。
-
-快点动起来的手,让我们开始吧~
-
+叮叮叮,恭喜你完成了第2章的学习,是不是觉得第2章是`一看就会,一操作就废`。相信你现在已经拥有了一个装有ros2的ubuntu系统(不论是虚拟机还是双系统等)。
 
+本章节小鱼将会带大家进一步的了解ROS2,并且手把手带你一起编写ROS2的节点。
 
 
 通过本章节的学习,你可以收获:
 
-- 掌握ROS2中工作空间相关概念及操作
-- 掌握ROS2中节点建立                                                                                                                                            
-- 学会构建ROS2的包并运行节点
+- 掌握ROS2中节点概念即相关指令
+- 掌握ROS2中工作空间的相关概念
+- 掌握colcon编译指令来构建一个包                                                                                                                                   
 - 学会通过命令行安装软件和ROS2相关的包
-- 消失的龟龟游戏拿到100分
-
+- 了解面向对象编程OOP的基本概念
+- 学会使用Python编写一个ROS2的节点
+- 学会使用C++编写一个ROS2的节点
 
 
 有不明白的地方欢迎加小鱼微信和小鱼一起沟通,快点开始你的升级打怪之路吧~
 
 
-
 ------
 
 
@@ -30,7 +26,7 @@
 
 - 课程合作:[睿慕课](https://www.aiimooc.com/)
 
-- 微信公众号:鱼香ROS
+- 微信公众号:[鱼香ROS](https://fishros.com)
 
 - 小鱼微信:AiIotRobot