浏览代码

[feat]:基本迁移完成第六章

鱼香ROS 3 年之前
父节点
当前提交
af97e03f7b
共有 25 个文件被更改,包括 532 次插入131 次删除
  1. 79 127
      docs/humble/chapt5/get_started/1.启动管理工具-Launch.md
  2. 二进制
      docs/humble/chapt5/get_started/1.启动管理工具-Launch/imgs/image-20220616135356671.png
  3. 二进制
      docs/humble/chapt5/get_started/1.启动管理工具-Launch/imgs/image-20220616140109862.png
  4. 44 1
      docs/humble/chapt5/get_started/2.命令行工具-ROS2CLI.md
  5. 69 1
      docs/humble/chapt5/get_started/3.数据可视化工具-RVIZ.md
  6. 二进制
      docs/humble/chapt5/get_started/3.数据可视化工具-RVIZ/imgs/6a8c3220a2c643e184269bddcc2eae2b.png
  7. 二进制
      docs/humble/chapt5/get_started/3.数据可视化工具-RVIZ/imgs/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6bG86aaZUk9T,size_16,color_FFFFFF,t_70,g_se,x_16.png
  8. 二进制
      docs/humble/chapt5/get_started/3.数据可视化工具-RVIZ/imgs/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6bG86aaZUk9T,size_20,color_FFFFFF,t_70,g_se,x_16.png
  9. 81 1
      docs/humble/chapt5/get_started/4.常用调试小工具-RQT.md
  10. 二进制
      docs/humble/chapt5/get_started/4.常用调试小工具-RQT/imgs/image-20211015151901951.png
  11. 二进制
      docs/humble/chapt5/get_started/4.常用调试小工具-RQT/imgs/image-20211015151919724.png
  12. 二进制
      docs/humble/chapt5/get_started/4.常用调试小工具-RQT/imgs/image-20211015151937543.png
  13. 二进制
      docs/humble/chapt5/get_started/4.常用调试小工具-RQT/imgs/image-20211015151949881.png
  14. 二进制
      docs/humble/chapt5/get_started/4.常用调试小工具-RQT/imgs/image-20211015152002622.png
  15. 二进制
      docs/humble/chapt5/get_started/4.常用调试小工具-RQT/imgs/image-20211015152014897.png
  16. 二进制
      docs/humble/chapt5/get_started/4.常用调试小工具-RQT/imgs/image-20211015152026855.png
  17. 二进制
      docs/humble/chapt5/get_started/4.常用调试小工具-RQT/imgs/image-20211015152039078.png
  18. 二进制
      docs/humble/chapt5/get_started/4.常用调试小工具-RQT/imgs/image-20211015152050157.png
  19. 145 1
      docs/humble/chapt5/get_started/5.数据录播工具-rosbag.md
  20. 二进制
      docs/humble/chapt5/get_started/5.数据录播工具-rosbag/imgs/55cc1e8605554ae79490ba345b33fccb.png
  21. 二进制
      docs/humble/chapt5/get_started/5.数据录播工具-rosbag/imgs/7d32470a2c12477f8c90a397a9af339a.png
  22. 二进制
      docs/humble/chapt5/get_started/5.数据录播工具-rosbag/imgs/a78e638365ac4868bed8ff16cef1eb7e.png
  23. 二进制
      docs/humble/chapt5/get_started/5.数据录播工具-rosbag/imgs/bf524fb3605a4ce4bf7c308aba7efc70.png
  24. 二进制
      docs/humble/chapt5/get_started/5.数据录播工具-rosbag/imgs/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6bG86aaZUk9T,size_20,color_FFFFFF,t_70,g_se,x_16.png
  25. 114 0
      docs/humble/chapt5/get_started/6.兼容仿真工具-Gazebo - .md

+ 79 - 127
docs/humble/chapt5/get_started/1.启动管理工具-Launch.md

@@ -1,8 +1,10 @@
+# 1.启动管理工具-Launch
+
 大家好,我是小鱼。今天我们来讲一讲机器人启动系统之Launch。
 
 ## 1.Launch启动工具介绍
 
-### 问题描述
+### 1.1 问题描述
 
 对于一个机器人系统来说,往往由很多个不同功能的节点组成,启动一个机器人系统时往往需要启动多个节点,同时根据应用场景和机器人的不同,每个节点还会有不同的配置项。
 
@@ -35,53 +37,65 @@ ROS2的launch文件有三种格式,python、xml、yaml。其中ROS2官方推
 
 我们的目标是编写一个launch文件,最后使用launch指令,同时启动服务端和客户端节点。
 
-#### 2.2.1 创建文件
+#### 2.2.1 创建功能包和launch文件
 
-在功能包`village_li`和`village_wang`目录下创建`launch`文件夹
+创建文件夹和功能包,接着touch一个launch文件,后缀为`.py`
 
-![创建完成后的目录](1.启动管理工具-Launch/imgs/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6bG86aaZUk9T,size_11,color_FFFFFF,t_70,g_se,x_16.png)
+```
+mkdir -p chapt4/chapt4_ws/src
+cd chapt4/chapt4_ws/src
+ros2 pkg create robot_startup --build-type ament_cmake --destination-directory src
+mkdir -p src/robot_startup/launch
+touch src/robot_startup/launch/example_action.launch.py
+```
 
-#### 2.2.2 编写launch文件
+#### 2.2.2 启动多个节点的示例
 
-接着我们开始编写`launch`文件,在`village_li`目录下创建`village.launch.py`文件。
 我们需要导入两个库,一个叫做LaunchDescription,用于对launch文件内容进行描述,一个是Node,用于声明节点所在的位置。
 
-接着我们就可以编写代码了,注意这里要定一个名字叫做`generate_launch_description`的函数,ROS2会对该函数名字做识别。
+> 注意这里要定一个名字叫做`generate_launch_description`的函数,ROS2会对该函数名字做识别。
 
 ```python
 # 导入库
 from launch import LaunchDescription
 from launch_ros.actions import Node
 
-# 定义函数名称为:generate_launch_description
 def generate_launch_description():
-    # 创建Actions.Node对象li_node,标明李四所在位置
-    li4_node = Node(
-        package="village_li",
-        executable="li4_node"
-        )
-    # 创建Actions.Node对象wang2_node,标明王二所在位置
-    wang2_node = Node(
-        package="village_wang",
-        executable="wang2_node"
-        )
+    """launch内容描述函数,由ros2 launch 扫描调用"""
+    action_robot_01 = Node(
+        package="example_action_rclcpp",
+        executable="action_robot_01"
+    )
+    action_control_01 = Node(
+        package="example_action_rclcpp",
+        executable="action_control_01"
+    )
     # 创建LaunchDescription对象launch_description,用于描述launch文件
-    launch_description = LaunchDescription([li4_node,wang2_node])
+    launch_description = LaunchDescription(
+        [action_robot_01, action_control_01])
     # 返回让ROS2根据launch描述执行节点
     return launch_description
+
 ```
 
-#### 2.2.3 修改setup.py将launch文件拷贝到安装目录
+#### 2.2.3 将launch文件拷贝到安装目录
 
 如果你编写完成后直接编译你会发现install目录下根本没有你编写的launch文件,后续launch自然也找不到这个launch文件。
 
+因为我们用的是`ament_cmake`类型功能包,所以这里要使用cmake命令进行文件的拷贝
+
+```cmake
+install(DIRECTORY launch
+  DESTINATION share/${PROJECT_NAME})
+```
+
+如果是`ament_python`功能包版
+
 ```python
 from setuptools import setup
 from glob import glob
 import os
 
-package_name = 'village_li'
-
 setup(
     name=package_name,
     version='0.0.0',
@@ -92,24 +106,12 @@ setup(
         ('share/' + package_name, ['package.xml']),
         (os.path.join('share', package_name, 'launch'), glob('launch/*.launch.py')),
     ],
-    install_requires=['setuptools'],
-    zip_safe=True,
-    maintainer='ros2',
-    maintainer_email='sangxin2014@sina.com',
-    description='TODO: Package description',
-    license='TODO: License declaration',
-    tests_require=['pytest'],
-    entry_points={
-        'console_scripts': [
-            "li4_node = village_li.li4:main",
-            "li3_node = village_li.li3:main"
-        ],
     },
 )
 
 ```
 
-#### 2.2.4编译测试
+#### 2.2.4 编译测试
 
 使用colcon指令编译我们的程序
 
@@ -117,125 +119,75 @@ setup(
 colcon build
 ```
 
-编译完成后,我们source以下工作空间,就可以运行我们的village.launch.py文件了
+编译完成后,在`chapt5/chapt5_ws/install/robot_startup/share/robot_startup/launch`目录下你应该就可以看到被cmake拷贝过去的launch文件了。
+
+接着运行`
 
 ```sheel
+# source 第四章的工作目录,这样才能找到对应的节点,不信你可以不source试试
+source ../../chapt4/chapt4_ws/install/setup.bash
 source install/setup.bash
-ros2 launch village_li village.launch.py
+ros2 launch robot_startup example_action.launch.py
+# 新终端
+ros2 node list #即可看到两个节点
 ```
 
-运行结果如下,可以看到李四和王二在统一终端和大家打了招呼,我们也可以使用,ros2 node list 看一看两个节点是否都存在。
-
-![运行结果](1.启动管理工具-Launch/imgs/8e2f813fa4a44ccabe7a4c1ca2e00849-163336469393520.png)
+![image-20220616135356671](1.启动管理工具-Launch/imgs/image-20220616135356671.png)
 
-### 2.3 cmake编译类型功能包的launch文件安装
-
-如果是ament_cmake或者是cmake类型的功能包,我们需要在CmakeLists.txt中添加安装指令,将launch文件夹安装到install目录。
-
-```cmake
-install(DIRECTORY launch
-  DESTINATION share/${PROJECT_NAME})
-```
+## 3 添加参数&修改命名空间
 
-将village_li/launch目录下的village.launch.py复制到village_wang/launch下,接着我们编译运行试一试
+接着我们尝试使用launch运行参数节点,并通过launch传递参数,和给节点以不同的命名空间。
 
-```
-colcon build
-ros2 launch village_wang village.launch.py 
-```
-
-![c++功能包测试](1.启动管理工具-Launch/imgs/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6bG86aaZUk9T,size_20,color_FFFFFF,t_70,g_se,x_16.png)
-
-
-## 3.将参数加入launch文件
-
-当我们启动节点时,可以对该节点的参数进行赋值,比如我们可以尝试在启动节点时修改李四写书的速度,改变王二卖书的价格。
-
-在node中给param赋值即可。
+新建`chapt5/chapt5_ws/src/robot_startup/launch/example_param_rclcpp.launch.py`。
 
+编写内容如下
 
 ```python
 # 导入库
 from launch import LaunchDescription
 from launch_ros.actions import Node
 
-# 定义函数名称为:generate_launch_description
 def generate_launch_description():
-    # 创建Actions.Node对象li_node,标明李四所在位置
-    li4_node = Node(
-        package="village_li",
-        executable="li4_node",
-        output='screen',  #四个可选项 
-        parameters=[{'write_timer_period': 1}]
-        )
-    # 创建Actions.Node对象wang2_node,标明王二所在位置
-    wang2_node = Node(
-        package="village_wang",
-        executable="wang2_node",
-        output='screen',  #四个可选项 
-        parameters=[{'novel_price': 2}]
-        )
+    """launch内容描述函数,由ros2 launch 扫描调用"""
+    parameters_basic1 = Node(
+        package="example_parameters_rclcpp",
+        namespace="rclcpp",
+        executable="parameters_basic",
+        parameters=[{'rcl_log_level': 40}]
+    )
+    parameters_basic2 = Node(
+        package="example_parameters_rclpy",
+        namespace="rclpy",
+        executable="parameters_basic",
+        parameters=[{'rcl_log_level': 50}]
+    )
     # 创建LaunchDescription对象launch_description,用于描述launch文件
-    launch_description = LaunchDescription([li4_node,wang2_node])
+    launch_description = LaunchDescription(
+        [parameters_basic1, parameters_basic2])
     # 返回让ROS2根据launch描述执行节点
     return launch_description
 ```
 
-大家自行运行尝试。
-
-## 4.命名空间修改
-
-我们可以修改命名空间,这样就可以区分两个同名节点。
-
-```python
-# 导入库
-from launch import LaunchDescription
-from launch_ros.actions import Node
-
-# 定义函数名称为:generate_launch_description
-def generate_launch_description():
+编译运行测试
 
+```shell
+# source 第四章的工作目录,这样才能找到对应的节点,不信你可以不source试试
+source ../../chapt4/chapt4_ws/install/setup.bash
+source install/setup.bash
+ros2 launch robot_startup example_param_rclcpp.launch.py
+# 新终端
+ros2 node list #即可看到两个节点
+```
 
-    # 创建Actions.Node对象li_node,标明李四所在位置
-    li4_node = Node(
-        package="village_li",
-        executable="li4_node",
-        output='screen',  #四个可选项 
-        parameters=[{'write_timer_period': 1}]
-        )
-    # 创建Actions.Node对象wang2_node,标明王二所在位置
-    wang2_node = Node(
-        package="village_wang",
-        executable="wang2_node",
-        parameters=[{'novel_price': 2}]
-        )
-
-    # 创建另外一个命名空间下的,创建Actions.Node对象li_node,标明李四所在位置
-    li4_node2 = Node(
-        package="village_li",
-        namespace="mirror_town",
-        executable="li4_node",
-        parameters=[{'write_timer_period': 2}]
-    )
-    # 创建另外一个命名空间下的,Actions.Node对象wang2_node,标明王二所在位置
-    wang2_node2 = Node(
-        package="village_wang",
-        namespace="mirror_town",
-        executable="wang2_node",
-        parameters=[{'novel_price': 1}]
-    )
+![image-20220616140109862](1.启动管理工具-Launch/imgs/image-20220616140109862.png)
 
-    # 创建LaunchDescription对象launch_description,用于描述launch文件
-    launch_description = LaunchDescription([li4_node,wang2_node,wang2_node2,li4_node2])
-    # 返回让ROS2根据launch描述执行节点
-    return launch_description
-```
+## 4. 总结
 
-## 四、小总结
+今天只是简单讲了下,使用launch文件来同时启动多个节点,对节点的一些参数也可以在launch中配置。
 
-今天只是简单讲了下,使用launch文件来同时启动多个接待年,但对节点的一些参数也可以在launch中配置
+launch还有很多更深入的用法,范子琦同学总结的很不错,这里放个链接:
 
-最近在紧张的录制课程,比较忙,大家的一些问题回答没那么及时,今天就到这里,欢迎大家点赞分享~
+- http://www.robotsfan.com/posts/7a5950c4.html
 
 
 

二进制
docs/humble/chapt5/get_started/1.启动管理工具-Launch/imgs/image-20220616135356671.png


二进制
docs/humble/chapt5/get_started/1.启动管理工具-Launch/imgs/image-20220616140109862.png


+ 44 - 1
docs/humble/chapt5/get_started/2.命令行工具-ROS2CLI.md

@@ -1,4 +1,47 @@
-内容还在更新中,请关注公众号鱼香ROS,第一时间获取更新
+# 2.ROS2命令行工具
+
+本节我们来对ROS2的命令行工具进行一个小结。
+
+## 1.命令小结
+
+打开终端,输入ros2,你将看到下面的内容:
+
+```
+usage: ros2 [-h] Call `ros2 <command> -h` for more detailed usage. ...
+
+ros2 is an extensible command-line tool for ROS 2.
+
+optional arguments:
+  -h, --help            show this help message and exit
+
+Commands:
+  action     Various action related sub-commands
+  bag        Various rosbag related sub-commands
+  component  Various component related sub-commands
+  daemon     Various daemon related sub-commands
+  doctor     Check ROS setup and other potential issues
+  interface  Show information about ROS interfaces
+  launch     Run a launch file
+  lifecycle  Various lifecycle related sub-commands
+  multicast  Various multicast related sub-commands
+  node       Various node related sub-commands
+  param      Various param related sub-commands
+  pkg        Various package related sub-commands
+  run        Run a package specific executable
+  security   Various security related sub-commands
+  service    Various service related sub-commands
+  topic      Various topic related sub-commands
+  wtf        Use `wtf` as alias to `doctor`
+
+  Call `ros2 <command> -h` for more detailed usage.
+```
+
+
+每一个Command都是对应着ROS2目前所拥有的工具,其实每一个我们在前面的章节中几乎都使用过,而那些没有使用的到的,几乎都是不常用的,所以大家只需要将前面章节中的CLI掌握即可
+
+这里小鱼只是提示下,当我们忘记了某个命令行工具的时候该怎么办,可以使用对应的指令加上-h,即可获取其使用方法。
+
+
 
 --------------
 

+ 69 - 1
docs/humble/chapt5/get_started/3.数据可视化工具-RVIZ.md

@@ -1,4 +1,72 @@
-内容还在更新中,请关注公众号鱼香ROS,第一时间获取更新
+# 4. RVIZ2
+
+本节我们来说一说,机器人开发中常用的数据可视化工具RVIZ2。
+
+## 1.RVIZ2是什么
+
+RVIZ2是ROS2中的一个非常重要且常用的数据可视化工具。
+
+那数据指的是什么数据?可视化又是怎么可视化的?RVIZ2又是如何实现不同数据的可视化的呢?
+
+答案如下:
+
+- 数据:各种调试机器人时常用的数据,比如:图像数据、三维点云数据、地图数据、TF数据,机器人模型数据等等
+- 可视化:可视化就是让你直观的看到数据,比如说一个三维的点(100,100,100),通过RVIZ可以将其显示在空间中
+- 如何做到不同数据的可视化:强大的插件,如果没有你的数据,你可以自己再写一个插件,即插即用,方便快捷
+
+
+> 注意:RVIZ强调将数据可视化出来,是已有数据的情况下,把数据显示出来而以,而我们后面要讲的gazebo仿真软件是通过模拟真实环境产生数据,两者用途并不一样。
+
+## 2.RVIZ2 基础配置
+
+### 2.1 全局配置
+
+![全局配置](3.数据可视化工具-RVIZ/imgs/6a8c3220a2c643e184269bddcc2eae2b.png)
+
+- Fixed Frame:所有帧参考的帧的名称,坐标都是相对的,这个就是告诉RVIZ你是相对谁的,一般是设置成map或者odom
+- Frame Rate:用于设置更新 3D 视图的最大频率。
+
+### 2.2 网格
+
+用于可视化通常与地板平面相关联的网格
+
+![网格](3.数据可视化工具-RVIZ/imgs/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6bG86aaZUk9T,size_16,color_FFFFFF,t_70,g_se,x_16.png)
+
+- Reference frame:帧用作网格坐标参考(通常:<fixed_frame>)
+- Plane cell count: 单元格中网格的大小
+- Normal cell count:在沿垂直于叶栅平面的网格数(正常:0)
+- Cell size:每个网格单元的尺寸(以米为单位)
+- Plane:标识网格平面的两个轴
+
+
+
+### 2.3 机器人模型
+
+根据 URDF 模型的描述来可视化机器人的模型。
+
+![机器人模型](3.数据可视化工具-RVIZ/imgs/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6bG86aaZUk9T,size_20,color_FFFFFF,t_70,g_se,x_16.png)
+
+- Visual enabled: 启用/禁用模型的 3D 可视化
+- Description Source:机器人模型文件的来源,可以在File和Topic之间进行选择
+- Description Topic: 机器人模型文件所在的话题
+
+### 2.4 TF
+
+可视化构成 TF 广播的所有帧的位置和方向
+![TF](3.数据可视化工具-RVIZ/imgs/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6bG86aaZUk9T,size_20,color_FFFFFF,t_70,g_se,x_16.png)
+
+- Marker Scale: 将字和坐标系标识调整的小一些,使其更加可见且不那么混乱
+- Update interval:以秒为单位的TF广播更新时间
+
+最佳实践,勾选你想看的Frames,直观的看到两个坐标之间的关系
+
+
+
+## 3.总结
+
+看完之后是不是还挺不明所以的,因为大多插件都是和坐标相关的,这个要大家学习了下一章节机器人学和URDF建模之后就非常的清晰了
+
+
 
 --------------
 

二进制
docs/humble/chapt5/get_started/3.数据可视化工具-RVIZ/imgs/6a8c3220a2c643e184269bddcc2eae2b.png


二进制
docs/humble/chapt5/get_started/3.数据可视化工具-RVIZ/imgs/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6bG86aaZUk9T,size_16,color_FFFFFF,t_70,g_se,x_16.png


二进制
docs/humble/chapt5/get_started/3.数据可视化工具-RVIZ/imgs/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6bG86aaZUk9T,size_20,color_FFFFFF,t_70,g_se,x_16.png


+ 81 - 1
docs/humble/chapt5/get_started/4.常用调试小工具-RQT.md

@@ -1,4 +1,84 @@
-内容还在更新中,请关注公众号鱼香ROS,第一时间获取更新
+# 3. RQT工具
+
+大家好,我是小鱼,今天来说说ROS2的RQT工具。
+
+前面小鱼介绍过rqt_graph这个工具,我们在平时编写ROS2程序中经常使用,除了rqt_graph,ROS2中还有很多非常易用的RQT工具,一起来体验下
+
+## 1. RQT是什么
+
+RQT是一个GUI框架,通过插件的方式实现了各种各样的界面工具。
+
+强行解读下:RQT就像插座,任何电器只要符合插座的型号就可以插上去工作。
+
+> 说到这里你应该对ROS2的插件化设计感到无比震撼,上节的bag话题录制的存储格式也是插件式的。
+
+## 2. 体验RQT
+
+没有复杂的指令,一句命令行就可以调出rqt界面。
+
+```bash
+rqt
+```
+
+打开之后的窗口如下图,空空如也,不要担心,因为我们没有选插件的原因。
+
+![image-20211015151901951](4.常用调试小工具-RQT/imgs/image-20211015151901951.png)
+
+### 2.1 选择插件
+
+这里我们可以选择现有的几个RQT插件来试一试,可以看到和话题、参数、服务、动作四大通信组件相关的工具都有,还有一些可视化、日志和系统计算图等相关的。
+
+![image-20211015151919724](4.常用调试小工具-RQT/imgs/image-20211015151919724.png)
+我们按照比较常用的几个来看一下,其他的大家有个印象,后续用到再用。
+
+### 2.2 插件大观
+
+#### Introspection / Node Graph
+
+第一个是肯定是rqt_graph,插件名字叫做Node Graph,这个名字小鱼觉得更加的贴切,用rqt_graph更多的是为了延续ROS1中的用法,这个**插件用于查看节点和节点之间的关系的**。
+
+![image-20211015151937543](4.常用调试小工具-RQT/imgs/image-20211015151937543.png)
+
+#### Introspection / Process Monitor
+
+这个插件可以看到所有与ROS2相关的进程
+
+![image-20211015151949881](4.常用调试小工具-RQT/imgs/image-20211015151949881.png)
+
+#### Topic/ Message Publisher
+
+可以图形化发布话题数据
+
+![image-20211015152002622](4.常用调试小工具-RQT/imgs/image-20211015152002622.png)
+
+#### Service /Service Caller
+
+图形化调用服务工具
+
+![image-20211015152014897](4.常用调试小工具-RQT/imgs/image-20211015152014897.png)
+
+#### Visualization / Image View
+
+看图像话题数据的Image View
+
+![image-20211015152026855](4.常用调试小工具-RQT/imgs/image-20211015152026855.png)
+
+#### Visualization / MatPlot
+
+话题数据图形化工具MqtPlot,小鱼就是用这个工具来调PID的
+
+![image-20211015152039078](4.常用调试小工具-RQT/imgs/image-20211015152039078.png)
+
+
+#### Configuration / Parameter Reconfigure
+
+![image-20211015152050157](4.常用调试小工具-RQT/imgs/image-20211015152050157.png)
+
+## 3. 总结
+
+小鱼准备有时间开发一些RQT工具来满足平时的一些特殊场景的使用,到时写一个教程出来,下一节我们一起学习ROS2中的RVIZ2工具。
+
+
 
 --------------
 

二进制
docs/humble/chapt5/get_started/4.常用调试小工具-RQT/imgs/image-20211015151901951.png


二进制
docs/humble/chapt5/get_started/4.常用调试小工具-RQT/imgs/image-20211015151919724.png


二进制
docs/humble/chapt5/get_started/4.常用调试小工具-RQT/imgs/image-20211015151937543.png


二进制
docs/humble/chapt5/get_started/4.常用调试小工具-RQT/imgs/image-20211015151949881.png


二进制
docs/humble/chapt5/get_started/4.常用调试小工具-RQT/imgs/image-20211015152002622.png


二进制
docs/humble/chapt5/get_started/4.常用调试小工具-RQT/imgs/image-20211015152014897.png


二进制
docs/humble/chapt5/get_started/4.常用调试小工具-RQT/imgs/image-20211015152026855.png


二进制
docs/humble/chapt5/get_started/4.常用调试小工具-RQT/imgs/image-20211015152039078.png


二进制
docs/humble/chapt5/get_started/4.常用调试小工具-RQT/imgs/image-20211015152050157.png


+ 145 - 1
docs/humble/chapt5/get_started/5.数据录播工具-rosbag.md

@@ -1,4 +1,148 @@
-内容还在更新中,请关注公众号鱼香ROS,第一时间获取更新
+# 2时光记录仪之rosbag2
+
+本节我们来介绍ROS2中常用的一个CLI工具——rosbag2,这个工具用于记录话题的数据(就像小鱼录视频一样)。
+
+我们就可以使用这个指令将话题数据存储为文件 ,后续我们无需启动节点,直接可以将bag文件里的话题数据发布出来。
+
+> 这个工具在我们做一个真实机器人的时候非常有用,比如我们可以录制一段机器人发生问题的话题数据,录制完成后可以多次发布出来进行测试和实验,也可以将话题数据分享给别人用于验证算法等。
+
+我们尝试使用bag工具来记录话题数据,并二次重放。
+
+## 一、安装
+
+当我们安装ROS2的时候,这个命令行工具已经为我们自动安装了,这里我们就不需要再次安装。
+
+## 二、记录
+
+### 2.1 常用指令
+
+启动talker
+
+```
+ros2 run demo_nodes_cpp talker
+```
+
+#### 2.1.1 记录
+
+`/topic-name` 为话题名字
+
+```bash
+ros2 bag record /topic-name
+```
+
+#### 2.1.2 记录多个话题的数据
+
+```bash
+ros2 bag record topic-name1  topic-name2
+```
+
+#### 2.1.3 记录所有话题
+
+```bash
+ros2 bag record -a
+```
+
+#### 2.1.4其他选项
+
+##### -o name 自定义输出文件的名字
+
+```bash
+ros2 bag record -o file-name topic-name
+```
+
+##### -s 存储格式
+
+目前仅支持sqllite3,其他还带拓展,后续更新小鱼再更新。
+
+
+### 2.2 录制chatter
+
+#### 2.2.1 启动talker
+
+运行talker节点
+
+```bash
+ros2 run demo_nodes_cpp talker
+```
+
+![李四正在发布小说](5.数据录播工具-rosbag/imgs/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6bG86aaZUk9T,size_20,color_FFFFFF,t_70,g_se,x_16.png)
+
+
+#### 2.2.2 录制
+
+接着使用像下面的指令就可以进行话题数据的录制了
+
+```bash
+ros2 bag record /chatter
+```
+
+如何停止录制呢?我们直接在终端中使用`Ctrl+C`指令打断录制即可
+
+接着你会在终端中发现多处一个文件夹,名字叫做`rosbag2_xxxxxx.db3 `
+
+打开文件夹,可以看到内容
+
+![文件内容](5.数据录播工具-rosbag/imgs/7d32470a2c12477f8c90a397a9af339a.png)
+
+这样我们就完成了录制。
+
+
+
+## 三、查看录制出话题的信息
+
+我们在播放一个视频前,可以通过文件信息查看视频的相关信息,比如话题记录的时间,大小,类型,数量
+
+```bash
+ros2 bag info bag-file
+```
+
+## 四、播放
+
+### 4.1 播放话题数据
+
+接着我们就可以重新的播放数据,使用下面的指令可以播放数据
+
+```bash
+ros2 bag play xxx.db3
+```
+
+使用ros2的topic的指令来查看数据
+
+```bash
+ros2 topic echo /chatter
+```
+
+### 4.2 播放选项
+
+### 4.2.1 倍速播放 -r 
+
+-r选项可以修改播放速率,比如 -r 值,比如 -r 10,就是10倍速,十倍速播放话题
+
+```bash
+ros2 bag play rosbag2_2021_10_03-15_31_41_0.db3 -r 10
+```
+
+### 4.2.2 -l  循环播放
+
+单曲循环就是它了
+
+```bash
+ros2 bag play rosbag2_2021_10_03-15_31_41_0.db3  -l
+```
+
+### 4.2.3 播放单个话题
+
+```bash
+ros2 bag play rosbag2_2021_10_03-15_31_41_0.db3 --topics /chatter
+```
+
+
+
+## 五、总结
+
+相信你已经掌握了ROS2的bag工具~
+
+
 
 --------------
 

二进制
docs/humble/chapt5/get_started/5.数据录播工具-rosbag/imgs/55cc1e8605554ae79490ba345b33fccb.png


二进制
docs/humble/chapt5/get_started/5.数据录播工具-rosbag/imgs/7d32470a2c12477f8c90a397a9af339a.png


二进制
docs/humble/chapt5/get_started/5.数据录播工具-rosbag/imgs/a78e638365ac4868bed8ff16cef1eb7e.png


二进制
docs/humble/chapt5/get_started/5.数据录播工具-rosbag/imgs/bf524fb3605a4ce4bf7c308aba7efc70.png


二进制
docs/humble/chapt5/get_started/5.数据录播工具-rosbag/imgs/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6bG86aaZUk9T,size_20,color_FFFFFF,t_70,g_se,x_16.png


+ 114 - 0
docs/humble/chapt5/get_started/6.兼容仿真工具-Gazebo - .md

@@ -0,0 +1,114 @@
+# 6.兼容仿真工具-Gazebo
+
+今天说说Gazebo,有些同学没有学习RVIZ和Gazebo之前,分不清Gazebo和Rviz之间的区别,只道是Gazebo和RVIZ都能显示机器人模型。
+
+## 1.Gazebo VS Rviz2
+
+昨天小鱼有说RVIZ2是什么:
+
+文章中讲道**RVIZ2是用来可视化数据的软件,核心要义是将数据展示出来(我们不生产数据只做数据的搬运工)。
+而Gazebo是用于模拟真实环境生产数据的(我们不搬运数据只做数据的生产者)**
+
+所以Gazebo可以根据我们所提供的机器人模型文件,传感器配置参数,给机器人创造一个虚拟的环境,虚拟的电机和虚拟的传感器,并通过ROS/ROS2的相关功能包把传感器数据电机数据等发送出来(生产数据)。
+
+这样我们就不用花一分钱,就拥有了各式各样的机器人和传感器(一万八的雷达,也只不过是用鼠标拖拽一下)。
+
+## 2.Gazebo集成ROS2
+
+**Gazebo 是一个独立的应用程序,可以独立于 ROS 或 ROS 2 使用。** 
+
+Gazebo与ROS 版本的集成是通过一组叫做`gazebo_ros_pkgs`的包 完成的,`gazebo_ros_pkgs`将Gazebo和ROS2连接起来。
+
+```mermaid
+graph LR
+A[Gazebo] -- API --> B(gazebo_ros-pkgs)
+B --ROS2通信机制--> C[ROS2]
+```
+
+### 2.1 gazebo_ros_pkgs
+
+gazebo_ros_pkgs不是一个包,是一堆包如下:
+
+- gazebo_dev:开发Gazebo插件可以用的API
+- gazebo_msgs:定义的ROS2和Gazebo之间的接口(Topic/Service/Action)
+- gazebo_ros:提供方便的 C++ 类和函数,可供其他插件使用,例如转换和测试实用程序。它还提供了一些通常有用的插件。gazebo_ros::Node
+- gazebo_plugins:一系列 Gazebo 插件,将传感器和其他功能暴露给 ROS2
+  例如:
+  1. `gazebo_ros_camera` 发布ROS2图像
+  2. `gazebo_ros_diff_drive` 通过ROS2控制和获取两轮驱动机器人的接口
+
+> ROS1的插件迁移到ROS2进度:https://github.com/ros-simulation/gazebo_ros_pkgs/wiki
+> ![已经从ROS1迁移的plugin](6.兼容仿真工具-Gazebo - /imgs/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6bG86aaZUk9T,size_20,color_FFFFFF,t_70,g_se,x_16.png)
+
+## 3. 两轮差速小demo
+
+### 3.1安装gazebo
+
+因为安装ROS2不会默认安装gazebo,所以我们要手动安装,一行命令很简单,如果提示找不到先去更新下ROS2的源。
+
+
+```shell
+sudo apt install gazebo11
+```
+
+### 3.2 安装ROS2的两轮差速功能包
+
+一行代码全给装了,不差这点空间
+
+```shell
+sudo apt install ros-foxy-gazebo-*
+```
+
+### 3.3 运行两轮差速demo
+
+一行代码搞定
+
+```shell
+gazebo /opt/ros/foxy/share/gazebo_plugins/worlds/gazebo_ros_diff_drive_demo.world 
+```
+
+然后你就可以看到一个死丑死丑的小车
+![car](6.兼容仿真工具-Gazebo - /imgs/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6bG86aaZUk9T,size_20,color_FFFFFF,t_70,g_se,x_16.png)
+
+### 3.4 查看话题
+
+通过下面的指令可看到话题和话题的类型,把目光放到这个话题`/demo/cmd_demo`,下面我们就通过这个话题来控制小车动起来。
+
+```shell
+ros2@ros2-TM1613R:~$ ros2 topic list -t
+/clock [rosgraph_msgs/msg/Clock]
+/demo/cmd_demo [geometry_msgs/msg/Twist]
+/demo/odom_demo [nav_msgs/msg/Odometry]
+/parameter_events [rcl_interfaces/msg/ParameterEvent]
+/rosout [rcl_interfaces/msg/Log]
+/tf [tf2_msgs/msg/TFMessage]
+```
+
+### 3.5 让小车前进
+
+```shell
+ros2 topic pub /demo/cmd_demo geometry_msgs/msg/Twist "{linear: {x: 0.2,y: 0,z: 0},angular: {x: 0,y: 0,z: 0}}"
+```
+
+然后就可以看到小车动了起来。
+
+![动起来](6.兼容仿真工具-Gazebo - /imgs/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6bG86aaZUk9T,size_20,color_FFFFFF,t_70,g_se,x_16.png)
+
+## 4.总结
+
+- RVIZ2是用来可视化数据的软件,核心要义是将数据展示出来(我们不生产数据只做数据的搬运工)
+- Gazebo是用于模拟真实环境生产数据的(我们不搬运数据只做数据的生产者)
+- Gazebo是独立于ROS/ROS2的软件(还有很多仿真软件可以用ROS/ROS2)
+- ROS2和Gazebo之间的桥梁是:gazebo_ros_pkgs
+
+
+
+--------------
+
+技术交流&&问题求助:
+
+- **微信公众号及交流群:鱼香ROS**
+- **小鱼微信:AiIotRobot**
+- **QQ交流群:139707339**
+
+- 版权保护:已加入“维权骑士”(rightknights.com)的版权保护计划