ROS实战(二)|工作空间、话题和服务

最近的小车需要用到ROS,学习的过程做个记录。

ROS中的工作空间

工作空间是什么

工作空间是一个存放工程相关开发文件的文件夹,ROS默认使用的是catkin编译系统。

典型的工作空间包含以下四个目录空间:

  1. src:代码空间,开发过程中最常用的文件夹。用来存放所有ROS功能包的源码文件。
  2. build:编译空间,用来存储工作空间编译过程中产生缓存信息和中间文件。
  3. devel:开发空间,用来放置编译生成的可执行文件。
  4. install:安装空间,编译成功后,可以使用make install命令将可执行文件安装到该空间中,运行该空间中的环境变量脚本,即可以在终端中运行这些可执行文件。注意:安装空间在工作空间中不是必须的,很多工作空间中没有该文件夹。

创建工作空间

1
2
3
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace

编译工作空间

1
2
cd ~/catkin_ws
catkin_make

设置环境变量

编译完成后devel文件夹下会生成setup.bash形式的环境变量设置脚本,使用source命令运行这些脚本文件,则工作空间的环境变量可以生效。

注意:每一次编译完成后都要运行一次。

1
source devel/setup.bash

运行以下命令查看环境变量是否生效:

1
echo $ROS_PACKAGE_PATH

若生效则会显示出当前工作空间的路径。

创建功能包

1
2
cd ~/catkin_ws/src
catkin_create_pkg subsciber rospy std_msgs geometry_msgs

其中subsciber是包名,剩下的是功能包所需要的依赖。

创建完成后,需要编译工作空间,并且设置环境变量

查看功能包所在的工作空间

1
rospack find subsciber

话题和服务

话题

消息以一种发布/订阅的方式传递。一个节点可以订阅多个话题,一个话题也可以被多个节点订阅。两个节点通信时,启动顺序没有强制要求,且实时性较弱,不适用于双向的同步传输。

服务

服务是一种带有应答的通信机制。ROS只允许有一个节点提供指定命名的服务。实时性较强,适用于两个节点之间的同步传输。

话题 服务
同步性 异步 同步
通信模型 发布/订阅 客户端/服务端
底层协议 ROSTCP/ROSUDP ROSTCP/ROSUDP
反馈机制
缓冲区
实时性
节点关系 多对多 一对多(一个server)
适用场景 数据传输 逻辑处理