فهرست منبع

fix: 修正文档前三章

鱼香ROS 2 سال پیش
والد
کامیت
6a2c5de2c4

+ 1 - 5
docs/_sidebar.md

@@ -20,7 +20,6 @@
     -  [Launch](humble/codebook/pages/launch.md) 
     -  [网络通讯](humble/codebook/pages/networking.md) 
     -  [功能包](humble/codebook/pages/packages.md) 
-  
 - (一)​ROS2入门篇
   - 第 1 章 ROS2介绍与安装
     - [章节导读](humble/chapt1/章节导读.md) 
@@ -31,7 +30,7 @@
       -  [4.玩转Ubuntu之编程工具](humble/chapt1/basic/4.玩转Ubuntu之编程工具.md) 
       -  [5.玩转Ubuntu之常用软件](humble/chapt1/basic/5.玩转Ubuntu之常用软件.md) 
     - 入门篇-ROS2介绍安装
-      -  [1.ROS与ROS2对比](humble/chapt1/get_started/2.ROS与ROS2对比.md) 
+      -  [1.ROS2前世今生](humble/chapt1/get_started/1.ROS2前世今生.md) 
       -  [2.ROS与ROS2对比](humble/chapt1/get_started/2.ROS与ROS2对比.md) 
       -  [3.动手安装ROS2](humble/chapt1/get_started/3.动手安装ROS2.md) 
       -  [4.ROS2初体验](humble/chapt1/get_started/4.ROS2初体验.md) 
@@ -64,8 +63,6 @@
       -  [1.从底层理解通信](humble/chapt3/basic/1.从底层理解通信.md) 
       -  [2.通信中间件之ZMQ](humble/chapt3/basic/2.通信中间件之ZMQ.md)
       -  [3.多线程回调函数和锁](humble/chapt3/basic/3.多线程回调函数和锁.md) 
-      -  [4.现代编程利器之Lambda表达式](humble/chapt3/basic/4.现代编程利器之Lambda表达式.md) 
-      -  [5.消息的序列化与反序列化](humble/chapt3/basic/5.消息的序列化与反序列化.md) 
     - 入门篇-话题与服务
       -  [1.ROS2话题入门](humble/chapt3/get_started/1.ROS2话题入门.md) 
       -  [2.话题之RCLCPP实现](humble/chapt3/get_started/2.话题之RCLCPP实现.md) 
@@ -119,7 +116,6 @@
       - 3.兼容仿真工具WeBots
       - 4.兼容仿真工具UnityForROS2
       - 5.ROS2内存管理工具
-  
 - (二)机器人学篇
   - 第 6 章 运动学基础
     - 章节导读

+ 4 - 6
docs/humble/chapt1/get_started/2.ROS与ROS2对比.md

@@ -38,7 +38,7 @@ A[主节点]-->D[底盘驱动节点]
 
 所以在ROS2中,首当其冲的将ROS的主节点干掉了,这里放一张网上流传最广的ROS/ROS2架构图,接下来就会按照这篇架构图给大家讲解。
 
-> 该图出自论文:`Exploring the Performance of ROS2`,已放入小鱼的公众号中,后台回复`ROS2论文`可获取
+> 该图出自论文:`Exploring the Performance of ROS2`,论文在线阅读地址:https://www.researchgate.net/profile/Takuya-Azumi/publication/309128426_Exploring_the_performance_of_ROS2/links/5c908801299bf14e7e84ce61/Exploring-the-performance-of-ROS2.pdf
 
 
 
@@ -57,14 +57,12 @@ A[主节点]-->D[底盘驱动节点]
 
 #### 2.2 MiddleWare中间件层
 
-> 如果大家觉得中间件太玄乎可以点击小鱼的文章链接:[ROS2和ROS最大的区别中间件到底有什么不一样?](https://zhuanlan.zhihu.com/p/390607053)
+> 如果大家觉得中间件太玄乎可以点击小鱼的文章链接:[扩展阅读1-ROS2和ROS最大的区别中间件到底有什么不一样?](https://zhuanlan.zhihu.com/p/390607053)
 >
-> 下一节的扩展阅读讲了ROS的中心化特性: [1.3课外阅读_ROS镇长与艳娘传奇](1.3课外阅读_ROS镇长与艳娘传奇.md) 
+> 下一节的扩展阅读讲了ROS的中心化特性: [扩展阅读2-ROS镇长与艳娘传奇](https://zhuanlan.zhihu.com/p/423581390) 
 
 那么中间层ROS2到底相对于ROS做了哪些优化呢?
 
-
-
 1. **去中心化master**,ROS和ROS2中间件不同之处在于,ROS2取消了master节点。
 
    去中心化后,各个节点之间可以通过DDS的节点相互发现,各个节点都是平等的,且可以1对1、1对n、n对n进行互相通信。
@@ -104,7 +102,7 @@ ROS2进行改进有:
 
 ## 4.更详细的对比
 
-请看扩展阅读3章节:[扩展阅读3-ROS2VSROS详细对比](chapt1/扩展阅读3-ROS2VSROS详细对比.md) 
+请看扩展阅读3:[扩展阅读3-ROS2VSROS详细对比](https://zhuanlan.zhihu.com/p/423581728) 
 
 
 

+ 1 - 1
docs/humble/chapt2/advanced/1.面向对象编程思想.md

@@ -105,7 +105,7 @@
 
 继承,继承可以帮我们减少很多的工作量(比如王撕聪从他爹那里继承了很多钱,这样他就少奋斗了很多年),比如ROS2中的执行器类,通过继承执行器类实现了单线程执行器和多线程执行器,更多具体的例子我们在后续的学习中遇到再说。
 
-多态,其实很简单,我们可以说鲤鱼是鱼类,草鱼是鱼类,鱼是鱼类。同一个鱼类可以有多种不同的类型,即多态。更多的用法,等到写代码的时候再和小鱼一起解锁
+多态,其实很简单,我们可以说鲤鱼是鱼类,草鱼是鱼类,鱼是鱼类。同一个鱼类可以有多种不同的类型,即多态。更多的用法,等到写代码的时候再和小鱼一起解锁
 
 ## 4.如何选择code思想
 

+ 1 - 1
docs/humble/chapt2/advanced/3.Colcon使用进阶.md

@@ -98,7 +98,7 @@ ROS中用到的构建工具:`colcon`、`catkin_make`、`catkin_make_isolated`
 
 #### 2.1.6 控制构建线程
 
-- `--executor EXECUTOR`,用于处理所有作业的执行程序。默认值是根据所有可用执行程序扩展的优先级选择的。要查看完整列表,请调用 colcon extensions colcon_core.executor --verbose`。
+- `--executor EXECUTOR`,用于处理所有作业的执行程序。默认值是根据所有可用执行程序扩展的优先级选择的。要查看完整列表,请调用 `colcon extensions colcon_core.executor --verbose`。
 
   - `sequential` [`colcon-core`]
 

+ 1 - 1
docs/humble/chapt2/advanced/4.ROS2节点发现与多机通信.md

@@ -14,7 +14,7 @@
 
 ## 3.选择域ID (长版本)
 
-DDS使用域ID计算将用于发现和通讯的UDP端口。有关如何计算端口的详细信息,请参见 这篇文章 。我们知道在网络中,UDP端口是 无符号16位整型 。因此可以分配的最大端口号是65535。用上面文章中的公式计算一下,这意味着可以分配的最高域账号是232,而可以分配的最低域账号是0。
+DDS使用域ID计算将用于发现和通讯的UDP端口。有关如何计算端口的详细信息,请参见 这篇文章 。我们知道在网络中,UDP端口是 无符号16位整型 。因此可以分配的最大端口号是65535。用链接(http://dev.ros2.fishros.com/doc/Concepts/About-Domain-ID.html#domain-id-to-udp-port-calculator)中的公式计算一下,这意味着可以分配的最高域账号是232,而可以分配的最低域账号是0。
 
 ### 特定平台的约束
 

+ 1 - 1
docs/humble/chapt2/basic/1.使用g++编译ROS2节点.md

@@ -48,7 +48,7 @@ int main(int argc, char **argv)
 
 ### 2.2 编译
 
-接着我们使用g++来编译`first_node`节点。正常的话一定会报错。
+接着我们使用g++来编译`first_ros2_node`节点。正常的话一定会报错。
 
 ```
 g++ first_ros2_node.cpp 

+ 1 - 1
docs/humble/chapt2/basic/2.使用make编译ROS2节点.md

@@ -32,7 +32,7 @@ build:
 	-L /opt/ros/humble/lib/ \
 	-lrclcpp -lrcutils \
 	-o first_node
-	
+    
 # 顺便小鱼加个clean指令,用来删掉first_node
 clean:
 	rm first_node

+ 5 - 4
docs/humble/chapt2/basic/5.Python依赖查找流程.md

@@ -77,12 +77,13 @@ drwxr-xr-x 1 root root 4096 Jun  3 04:45 rclpy
 drwxr-xr-x 2 root root 4096 May 23 22:23 rclpy-3.3.4-py3.10.egg-info
 ```
 
-## 4.unset实验
+## 4.删除路径实验
 
-使用`unset`指令可以将环境变量删除掉,尝试删除掉`PYTHONPATH`之后再运行代码,看看是否还可以导入`rclpy`。
+使用`export`指令可以重新修改环境变量的值,尝试修改掉`PYTHONPATH`中ROS 2 相关内容后之后再运行代码,看看是否还可以导入`rclpy`。
 
-```
-unset
+```shell
+export PYTHONPATH=/opt/ros/humble/lib/python3.10/site-packages
+echo $PYTHONPATH #重新echo查看
 python3 second_ros2_node.py
 ```
 

+ 6 - 2
docs/humble/chapt2/get_started/3.ROS2构建工具之Colcon.md

@@ -57,6 +57,10 @@ sudo apt-get install python3-colcon-common-extensions
 
    ![image-20210720211422653](3.ROS2构建工具之Colcon/imgs/image-20210720211422653.png)
 
+   > 如果在编译中遇到`Setuptools DeprecationWarning: setup.py install is deprecated.`这个警告,可以通过更新setuptools解决。
+   >
+   > 详细操作见社区帖子:https://fishros.org.cn/forum/topic/254/
+
 4. 编完之后的目录结构
 
    构建完成后,在`src`同级目录我们应该会看到 `build` 、 `install` 和 `log` 目录:
@@ -83,13 +87,13 @@ sudo apt-get install python3-colcon-common-extensions
    source install/setup.bash
    ```
 
-2. 运行一个订杂志节点,你将看不到任何打印,因为没有发布者
+2. 运行一个订节点,你将看不到任何打印,因为没有发布者
 
    ```
    ros2 run examples_rclcpp_minimal_subscriber subscriber_member_function
    ```
 
-3. 打开一个新的终端,先source,再运行一个发行杂志节点
+3. 打开一个新的终端,先source,再运行一个发行节点
 
    ```
    source install/setup.bash

+ 2 - 2
docs/humble/chapt2/get_started/5.使用RCLPY编写节点.md

@@ -41,7 +41,7 @@ ros2 pkg create example_py  --build-type ament_python --dependencies rclpy
 ```
 
 
-在`example_py`下创建`node_02.py`接着我们开始编写代码。跟着小鱼一起边理解输入下面的代码,注释不用输。
+在`example_py/example_py`下创建`node_02.py`接着我们开始编写代码。跟着小鱼一起边理解输入下面的代码,注释不用输。
 
 ```
 import rclpy
@@ -81,7 +81,7 @@ def main(args=None):
 
 ## 3.编译运行节点
 
-打开vscode终端,进入`town_ws`
+打开vscode终端,进入`chapt2/chapt2_ws/`
 
 ### 3.1 编译节点
 

+ 6 - 6
docs/humble/chapt3/get_started/2.话题之RCLCPP实现.md

@@ -54,7 +54,7 @@ public:
     // 构造函数,有一个参数为节点名称
     TopicPublisher01(std::string name) : Node(name)
     {
-        RCLCPP_INFO(this->get_logger(), "大家好,我是%s.", name.c_str());
+        RCLCPP_INFO(this->get_logger(), "%s节点已经启动.", name.c_str());
     }
 
 private:
@@ -64,7 +64,7 @@ private:
 int main(int argc, char **argv)
 {
     rclcpp::init(argc, argv);
-    /*产生一个的节点*/
+    /*创建对应节点的共享指针对象*/
     auto node = std::make_shared<TopicPublisher01>("topic_publisher_01");
     /* 运行节点,并检测退出信号*/
     rclcpp::spin(node);
@@ -161,7 +161,7 @@ class TopicPublisher01 : public rclcpp::Node
 
 - 消息接口上面我们已经导入了,是`std_msgs/msg/string.h`。
 - 话题名称(topic_name),我们就用`control_command`。
-- Qos,Qos支持直接指定一个数字,这个数字对应的是`KeepLast`队列长度。一般设置成10,即如果一次性有100条消息,默认保留最新的10个(90-100)其余的都扔掉。
+- Qos,Qos支持直接指定一个数字,这个数字对应的是`KeepLast`队列长度。一般设置成10,即如果一次性有100条消息,默认保留最新的10个其余的都扔掉。
 
 接着我们可以编写发布者的代码了。
 
@@ -290,7 +290,7 @@ ros2 run example_topic_rclcpp topic_publisher_01
 # 查看列表
 ros2 topic list
 # 输出内容
-ros2 
+ros2 topic echo /command
 ```
 
 ![image-20220605155135956](2.话题之RCLCPP实现/imgs/image-20220605155135956.png)
@@ -327,7 +327,7 @@ private:
 int main(int argc, char **argv)
 {
     rclcpp::init(argc, argv);
-    /*产生一个的节点*/
+    /*创建对应节点的共享指针对象*/
     auto node = std::make_shared<TopicSubscribe01>("topic_subscribe_01");
     /* 运行节点,并检测退出信号*/
     rclcpp::spin(node);
@@ -395,7 +395,7 @@ private:
             speed = 0.2f;
         }
         RCLCPP_INFO(this->get_logger(), "收到[%s]指令,发送速度 %f", msg->data.c_str(),speed);
-    };
+    }
 };
 ```
 

+ 2 - 2
docs/humble/chapt3/get_started/4.ROS2服务入门.md

@@ -25,9 +25,9 @@ B[客户端]  --发送请求--> A[服务端]
 
 放两张官方形象的动图:
 
-<img src="4.ROS2服务入门/imgs/Service-SingleServiceClient.gif" alt="../../_images/Service-SingleServiceClient.gif" style="zoom: 67%;" />
+![](4.ROS2服务入门/imgs/Service-SingleServiceClient.gif)
 
-<img src="4.ROS2服务入门/imgs/Service-MultipleServiceClient.gif" alt="../../_images/Service-MultipleServiceClient.gif" style="zoom:67%;" />
+![](4.ROS2服务入门/imgs/Service-MultipleServiceClient.gif)
 
 ## 2.体验服务
 

+ 2 - 3
docs/humble/chapt3/get_started/5.服务之RCLCPP实现.md

@@ -47,13 +47,12 @@ public:
   ServiceClient01(std::string name) : Node(name) {
     RCLCPP_INFO(this->get_logger(), "节点已启动:%s.", name.c_str());
   }
-
 private:
 };
 
 int main(int argc, char** argv) {
   rclcpp::init(argc, argv);
-  /*产生一个的节点*/
+  /*创建对应节点的共享指针对象*/
   auto node = std::make_shared<ServiceClient01>("service_client_01");
   /* 运行节点,并检测退出信号*/
   rclcpp::spin(node);
@@ -338,7 +337,7 @@ private:
 ```c++
 int main(int argc, char** argv) {
   rclcpp::init(argc, argv);
-  /*产生一个的节点*/
+  /*创建对应节点的共享指针对象*/
   auto node = std::make_shared<ServiceClient01>("service_client_01");
   /* 运行节点,并检测退出信号*/
   //增加这一行,node->send_request(5, 6);,计算5+6结果

+ 3 - 3
docs/humble/chapt3/章节导读.md

@@ -4,12 +4,12 @@
 
 上一节我们对ROS2的基本概念、构建工具以及采用Python和C++调用ROS2的客户端库完成了节点的编写。 
 
-本节我们将重心放回节点和节点之间的数据传递上来,因为ROS2给我们带来的最大遍历除了调试工具就是通信机制上了。
+本节我们将重心放回节点和节点之间的数据传递上来,因为ROS2给我们带来的最大便利除了调试工具就是通信机制上了。
 
 同样的,本章的内容也分为三部分。
 
-- 入门篇,主要介绍通信的原理以及编程语言的一些特性,这些其实属于计算机的基础部分知识,但在学校里可能又很难学到的部分。
-- 基础篇,该篇主要分为话题通信、服务通信和自定义通信接口上来。
+- 基础篇,主要介绍通信的原理以及编程语言的一些特性,这些其实属于计算机的基础部分知识,但在学校里可能又很难学到的部分。
+- 入门篇,该篇主要分为话题通信、服务通信和自定义通信接口上来。
 - 进阶篇,通过对DDS原生API的学习,带你深入了解ROS2的通信原理,为你深入使用ROS2打牢基础。
 
 ## 2.食用方法

+ 2 - 2
docs/humble/chapt4/get_started/2.参数之RCLCPP实现.md

@@ -43,7 +43,7 @@ class ParametersBasicNode : public rclcpp::Node {
 
 int main(int argc, char** argv) {
   rclcpp::init(argc, argv);
-  /*产生一个的节点*/
+  /*创建对应节点的共享指针对象*/
   auto node = std::make_shared<ParametersBasicNode>("parameters_basic");
   /* 运行节点,并检测退出信号*/
   rclcpp::spin(node);
@@ -110,7 +110,7 @@ class ParametersBasicNode : public rclcpp::Node {
 
 int main(int argc, char** argv) {
   rclcpp::init(argc, argv);
-  /*产生一个的节点*/
+  /*创建对应节点的共享指针对象*/
   auto node = std::make_shared<ParametersBasicNode>("parameters_basic");
   /* 运行节点,并检测退出信号*/
   rclcpp::spin(node);