ROS2的节点讲究分工合作,每个节点负责一个单独的模块化功能。
举一个激光雷达的例子,一个节点负责获取激光雷达的扫描数据,一个节点负责处理激光雷达数据,还有一个节点负责控制车轮转动,一个节点负责定位等等。如何实现这么多节点的通信呢?
实际上,ROS2早已为你准备好四种通信方式:
1、话题-topics
2、服务-servicces
3、动作-Action
4、参数-parameters
启动节点的指令 ros2 run
其意义为启动包下的中的节点,据个例子 ros2 run turtlesim turtlesim_node
,这就是启动乌龟模拟器的那条指令。
查看节点列表
ros2 node list
查看节点信息
ros2 node info
重新映射节点名称(给节点换一个名字,因为不能同时运行两个同名的节点,所以需要用到换名,例如下面这行代码就是把turtlesim换名字为my_turtle)
ros2 run turtlesim turtlesim_node --ros-args --remap __node:=my_turtle
一个工作空间下可以有多个功能包,一个功能包可以有多个节点存在。
可以浅显的理解为一个文件夹,该文件夹下有src以及若干个功能包,所以一般新建一个工作空间的操作如下:
mkdir -p turtle_ws/src
再切换到工作空间
cd turtle_ws/src
而功能包可以理解为存放节点的地方,ROS2的功能包根据编译方式不同可以分为三种类型
1、ament_python,适用于python程序
2、cmake,适用于C++
3、ament_cmake,适用于C++程序,是cmake的增强版
安装获取功能包指令
sudo apt install ros--package_name
例如 sudo apt install ros-galactic-turtlesim
创建功能包
ros2 pkg create --build-type {cmake,ament_cmake,ament_python} --dependencies<依赖名字>
列出可执行文件
ros2 pkg executables
列出某个功能包的可执行文件
ros2 pkg executables turtlesim
列出所有包
ros2 pkg list
输出某个包所在路径的前缀
ros2 pkg prefix
例如找出乌龟模拟器的前缀 ros2 pkg prefix turtlesim
列出功能包的清单描述文件
ros2 pkg xml turtlesim
colcon是一个功能包构建工具,就是用来编译代码的。
ROS2默认没有安装colcon,需要手动安装,安装指令如下:
sudo apt-get install python3-colcon-common-extensions
输入colcon指令,如果弹出usage提示则证明安装成功
下面开始实际动手编一个东西测试一下
1、创建一个工作区colcon_test
mkdir colcon_test && cd colcon_test
2、下载一个ROS2示例源码测试一下
需注意的是,-b后面对应的是你使用的ROS2版本,这里我使用的是galactic
git clone https://github.com/ros2/examples src/examples -b galactic
3、编译工程
colcon build
以上三步完成后,可以运行一个自己编的节点了,方法如下:
1、打开终端进入到我们刚才创建的工作空间里面,先source一下资源
source install/setup.bash
2、运行一个订阅节点,用以接受其他发布者的消息
ros2 run examples_rclcpp_minimal_subscriber subscriber_member_function
3、ctrl+alt+T再打开一个新的终端,先source,再运行一个发布者节点,就可以在刚才运行的订阅节点收到消息啦
source install/setup.bash
ros2 run examples_rclcpp_minimal_publisher publisher_member_function