001 基本概念
基本概念
节点
定义:每个节点负责一个单独的模块化的功能,本质上就是一个进程,也是可执行文件
节点之间的通信方式
- 话题、服务、动作、参数
CLI工具
运行一个节点
ros2 run <功能包名字> <可执行文件名>
查看节点列表
ros2 node list
查看节点信息
ros2 node info <node_name>
运行时重映射节点名称
ros2 run <pkd> <node_name> --ros-args --remap __node=:xxxx
功能包
定义:实现一个功能可能需要多个节点,ROS将实现某功能的多个节点看成一个功能包
功能包的手动编译有3种方式:
- ament_python(python)
- ament_cmake(ROS2定义的一系列CMake函数)
- cmake
手动编译的功能包一般需要手动
source
工作空间的install
目录
除了手动编译,也可直接下载开源功能包:
sudo apt install ros-<version>-<pkg_name>
下载的开源包会直接装到ROS的系统目录
opt/ros/humble
,不用手动source
CLI工具
创建功能包
ros2 pkg create <pkg_name> --build-type {cmake/ament_cmake/ament_python} --dependencies <依赖名字>
列出所有可执行文件(节点)
ros2 pkg excutables (<pkg_name>)
列出所有包
ros2 pkg list
输出包的前缀名字
ros2 pkg prefix <pkg_name>
5.列出包的描述文件
每一个pkg都有一个
.xml
文件,用于记录这个包的名字,构建工具,目的等信息。通过这个信息,就可以自动为包安装依赖,构件时确定编译顺序等。ros2 pkg xml <pkg_name>
工作空间
定义:存放多个功能包的目录,功能包一般放在工作空间的src
文件夹里面
ROS2的工程结构:工作空间 / 功能包x/ 节点x
Interface
由于ROS2需要跨进程进行通信,因此需要定义一种通信格式,来实现不同进程之间的数据交互
ROS2使用接口文件(.msg/.srv/.action格式)来定义通信格式(类似protobuf中的.proto文件)。编译时rosidl
会
根据这些文件生成相应的C++代码,供ROS2节点使用。通信时,DDS会根据这些文件进行序列化和反序列化
数据类型
在写接口文件时,需要定义变量,这就涉及到一个问题:有哪些能用的数据类型?
ROS2的接口文件有9种基础的数据类型,基于这些基础数据类型,又可以封装各种自定义类型
使用命令ros2 interface show <xxx>
即可查看某接口的各个字段到底是什么
开发方式
ROS2中,Interface同样要在功能包之中进行开发。具体参考7.ROS2接口介绍
源码按如下方式进行组织,不同类型的接口文件放到不同目录中:
1 | . |
编译完成后会得到一些头文件,即可使用这些自定义的Interface了
导入方式
ament_cmake
类型功能包导入消息接口分为三步:
- 在
CMakeLists.txt
中导入,具体是先find_packages
再ament_target_dependencies
- 在
packages.xml
中导入,具体是添加depend
标签并将消息接口写入 - 在代码中导入,C++中是
#include"消息功能包/xxx/xxx.hpp"