|
@@ -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
|
|
|
+```
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+**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指令会出现下面的错误:
|
|
|
|
|
|

|
|
|
|
|
|
-不要怕,跟着小鱼输入一句话:
|
|
|
+解决方案是在终端输入这样一句话,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,下一讲我们就开始对代码动手了~
|
|
|
|