ROS实战(二)|工作空间、话题和服务
最近的小车需要用到ROS,学习的过程做个记录。
ROS中的工作空间
工作空间是什么
工作空间是一个存放工程相关开发文件的文件夹,ROS默认使用的是catkin编译系统。
典型的工作空间包含以下四个目录空间:
src:代码空间,开发过程中最常用的文件夹。用来存放所有ROS功能包的源码文件。build:编译空间,用来存储工作空间编译过程中产生缓存信息和中间文件。devel:开发空间,用来放置编译生成的可执行文件。install:安装空间,编译成功后,可以使用make install命令将可执行文件安装到该空间中,运行该空间中的环境变量脚本,即可以在终端中运行这些可执行文件。注意:安装空间在工作空间中不是必须的,很多工作空间中没有该文件夹。
创建工作空间
1 | mkdir -p ~/catkin_ws/src |
编译工作空间
1 | cd ~/catkin_ws |
设置环境变量
编译完成后devel文件夹下会生成setup.bash形式的环境变量设置脚本,使用source命令运行这些脚本文件,则工作空间的环境变量可以生效。
注意:每一次编译完成后都要运行一次。
1 | source devel/setup.bash |
运行以下命令查看环境变量是否生效:
1 | echo $ROS_PACKAGE_PATH |
若生效则会显示出当前工作空间的路径。
创建功能包
1 | cd ~/catkin_ws/src |
其中subsciber是包名,剩下的是功能包所需要的依赖。
创建完成后,需要编译工作空间,并且设置环境变量。
查看功能包所在的工作空间
1 | rospack find subsciber |
话题和服务
话题
消息以一种发布/订阅的方式传递。一个节点可以订阅多个话题,一个话题也可以被多个节点订阅。两个节点通信时,启动顺序没有强制要求,且实时性较弱,不适用于双向的同步传输。
服务
服务是一种带有应答的通信机制。ROS只允许有一个节点提供指定命名的服务。实时性较强,适用于两个节点之间的同步传输。
| 话题 | 服务 | |
|---|---|---|
| 同步性 | 异步 | 同步 |
| 通信模型 | 发布/订阅 | 客户端/服务端 |
| 底层协议 | ROSTCP/ROSUDP | ROSTCP/ROSUDP |
| 反馈机制 | 无 | 有 |
| 缓冲区 | 有 | 无 |
| 实时性 | 弱 | 强 |
| 节点关系 | 多对多 | 一对多(一个server) |
| 适用场景 | 数据传输 | 逻辑处理 |