本文基于ubuntu22.04和ros2 humble版本
一、节点
1.节点的角色
ROS2中每一个节点也是只负责一个单独的模块化的功能(比如一个节点负责控制车轮转动,一个节点负责从激光雷达获取数据、一个节点负责处理激光雷达的数据、一个节点负责定位等等)
2.节点间的通信方式
ROS2准备了一共四种通信方式:
- 话题-topics
- 服务-services
- 动作-Action
- 参数-parameters
3.启动节点
终端指令,启动功能包下的节点
ros2 run <package_name> <executable_name>
ros2 run turtlesim turtlesim_node #启动系统目录下下的小乌龟模拟节点
4.查看节点信息
ROS2的命令行CLI(Command-Line Interface)
ros2 node list #查看节点列表
ros2 node info <node_name> #查看节点信息
二、工作空间与功能包
注意:一个工作空间下可以有多个功能包,一个功能包可以有多个节点存在
寻找运行节点可执行文件前,必须要先知道它在哪个功能包,功能包会存储在工作空间下。
工作空间是包含若干个功能包的目录,刚开始把工作空间理解成一个文件夹就行。这个文件夹包含下有
src
1.工作空间
新建一个工作空间的操作,就是创建一个目录
mkdir -p chapt2_ws/src
2.功能包
功能包可以理解为存放节点的地方,ROS2中功能包根据编译方式的不同分为三种类型。
- ament_python,适用于python程序
- cmake,适用于C++
- ament_cmake,适用于C++程序,是cmake的增强版
2.1安装获取
安装获取命令,功能包会自动放置到系统目录,不用再次手动source。
sudo apt install ros-<version>-package_name
2.2手动编译获取
修改编写的源码文件,需要对源码进行编译生成相关文件。手动编译之后,需要手动source工作空间的install目录。
2.3相关指令
#创建功能包
ros2 pkg create <package-name> --build-type {cmake,ament_cmake,ament_python} --dependencies <依赖名字>
#列出所有可执行文件,系统目录下的和当前工作空间下的
ros2 pkg executables
#列出
turtlesim
功能包的所有可执行文件ros2 pkg executables turtlesim
#列出所有的包
ros2 pkg list
#输出某个功能包所在路径的前缀
ros2 pkg prefix <package-name>
列出包的清单描述文件,每一个功能包都有一个标配的manifest.xml文件,用于记录这个包的名字,构建工具,编译信息,拥有者,用途等信息。通过这些信息,就可以自动为该功能包安装依赖,构建时确定编译顺序等。
ros2 pkg xml <package-name>
三、功能包构建工具colcon
colcon是用来编译代码的,相当于ros1中的catkin工具。
1.安装colcon工具
sudo apt-get install python3-colcon-common-extensions
2.在工作空间目录下,编译工程
colcon build
构建完成后,在src
同级目录应该会看到 build
、 install
和 log
目录:
build
目录存储的是中间文件。对于每个包,将创建一个子文件夹,在其中调用例如CMakeinstall
目录是每个软件包将安装到的位置。默认情况下,每个包都将安装到单独的子目录中log
目录包含有关每个colcon调用的各种日志信息
#只编译一个选定的包
colcon build --packages-select <package-name>
#允许通过更改src下的部分文件夹来改变install
#每次调整 python 脚本时都不必重新build了
colcon build --symlink-install
四、colcon使用进阶
1.构建系统与构建工具
两者的区分点在于针对的对象不同,构建系统是针对一个单独的包进行构建,而构建工具重点在于按照依赖关系依次调用构建系统完成一系列功能包的构建。
- ROS中用到的构建系统:
CMake
、ament_cmake
、catkin
、Python setuptools
。- ROS中用到的构建工具:
colcon
、catkin_make
、catkin_make_isolated
、catkin_tools
。- 很明显colcon作为构建工具,通过调用
CMake
、Python setuptools
完成构建。
2.常见构建系统
CMake是一个跨平台构建系统生成器。项目使用独立于平台的文件指定其生成过程。用户通过使用CMake为其平台上的本机工具生成构建系统来构建项目。
通常用法有:
cmake
、make
、make intsall
setuptools
是Python包的打包常用工具。Python 包使用文件来描述依赖项,以及如何构建和安装内容。在ROS2中,功能包可以是“普通”Python包,而在ROS1中,任何Python功能都是从CMake文件触发setup.py进行打包。通常的用法有:
python setup.py
catkin基于CMake,并提供了一组方便的函数,使编写CMake包更容易。它自动生成 CMake 配置文件以及 pkg 配置文件。它还提供了注册不同类型测试的函数。
3.常见构建工具
catkin_make该工具仅调用 CMake 一次,并使用 CMake 的函数在单个上下文中处理所有包。虽然这是一种有效的方法,因为所有包中的所有目标都可以并行化,但它具有明显的缺点。由于所有函数名称、目标和测试都共享一个命名空间,并且规模更大,这很容易导致冲突。
colcon是一个命令行工具,用于改进构建,测试和使用多个软件包的工作流程。它自动化了流程,处理了订购并设置了使用软件包的环境。
ament_tools
由用于构建 ROS 2 包的独立 Python 3 包提供。它是为引导ROS 2项目而开发的,因此仅针对Python 3,并且可以在Linux,MacOS和Windows上运行。
ament_tools
支持构建以下软件包:
- 带有
package.xml
文件的 ROS 2 包。- 带有
package.xml
普通的 CMake 包。- 没有清单文件的普通 CMake 包(从 CMake 文件中提取包名称和依赖项)。
- 带有
package.xml
文件的 Python 包。- 没有清单文件的 Python 包(从
setup.py
文件中提取包名称和依赖项)。
4.colcon build进阶
build参数
构建指令
--packages-select
,仅生成单个包(或选定的包)。--packages-up-to
,构建选定的包,包括其依赖项。--packages-above
,整个工作区,然后对其中一个包进行了更改。此指令将重构此包以及(递归地)依赖于此包的所有包。
指定构建后安装的目录
合并构建目录
符号链接安装
错误时继续安装
CMake参数
控制构建线程
开启构建日志