什么是ROS
ROS 历史
- [ ] TBA
ROS定位
中间件: 框架+工具+功能+社区
框架:分布式,进程(节点 )管理,进程间通信
工具: Gazebo, Rviz,rqt,
功能:导航,建图,规划,控制
社区:ros wiki, ros answer, github
ROS安装
- [ ] TBA
ROS文件系统
ROS文件系统指的是ROS项目的文件组织结构。ROS的文件系统确实像操作系统,其将不同部分的文件放在不同的文件夹内。
- 功能包(package) ROS系统中package是主要的功能单元也是ROS编译的最小(基本)单元,一个package中可能包含多个节点(进程程序),数据集,配置文件和依赖库等等。
- 功能包清单(即package.xml)
package.xml
提供有关软件包的元数据,包括其名称,版本,描述,许可证信息,依赖性以及其他元信息等。在开发时,因为功能的添加,有时需要在功能包中的package.xml
进行修改,比如上加依赖包的信息等。 - 元功能包(metapackage) 元功能包的功能是将一些功能包组织在一起从而实现更加复杂的功能。
- 信息类型(message type)描述信息传递时的数据结构,放在功能包中
msg
目录下,如xxx_package/msg/yyy.msg
。 - 服务类型(service type) 描述服务传递时的数据结构,放在功能包中
srv
目录下,如xxx_package/srv/zzz.srv
。
工作空间
从组织形式上看,最上层目录称为工作空间(workspace),从名称即可知道,这是编写ROS项目的地方,一切编写功能的操作都需要在工作空间中进行。ROS目前的版本使用catkin作为编译构建系统,是对CMake的扩展,功能更强大。
在开发ROS项目之前,首先要做的就是创建工作空间,然后使用catkin编译,类似如下操作:
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
caktin_make
source ~/catkin_ws/devel/setup.bash
需要注意地,
-
任何的编译操作(
caktin_make
)都需要在工作空间这个目录下进行,不妨每次编译前都使用命令cd ~/catkin_ws/
。 -
source ~/catkin_ws/devel/setup.bash
目的是将工作空间刷新到系统环境变量里面去,这样后面运行ROS可执行文件时,系统能够找到它们并执行。每次打开窗口可能都需要如此操作,为方便可如下操作echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc echo "source /home/[usrname]/catkin_ws/devel/setup.bash" >> ~/.bashrc
这样就不用每次打开窗口输入
source ~/catkin_ws/devel/setup.bash
。
执行类似上述操作后,工作空间中会产生三个目录src
, build
与devel
。其中src
放置功能包, build
放置cmake与catkin的编译的缓存文件与中间文件,而devel
则放置编译后的目标文件,比如头文件,链接库,可执行文件等等。
功能包
功能包(package)是ROS中软件的基本组织形式,是实现功能的基本单元。package可包含多个可执行文件(节点),package.xml
与CMakeList.txt
两个文件以及其它如配置文件,依赖库等。基本的如下:
-
package.xml
定义了package的属性信息, 提供有关软件包的元数据,包括其名称,版本,描述,许可证信息,依赖性以及其他元信息等。在开发时,因为功能的添加,有时需要在功能包中的package.xml
进行修改,比如上加依赖包的信息等。 -
CMakeList.txt
规定catkin的编译规则,在编写功能时, 经常会对其进行修改。 -
include
C++头文件目录, -
src
C++ 源文件目录,也可放置python 需要导入的.py
文件。 -
script
放置执行脚本(如python, shell)目录 -
msg
放置自定义信息(message)的数据结构的描述文件。 -
srv
放置自定义服务( service)的数据结构的描述文件。 -
action
放置自定义动作(action)的数据结构的描述文件。 -
cfg
放置配置信息文件。 -
launch
此处放置可同时启动多个节点的.launch
文件,主要是方便功能启动。
ROS计算图
ROS计算图(ROS Computation Graph)是ROS进程计算网络。基本的计算图包括以下几个概念:
- 节点 节点即执行计算的进程,ROS项目中一般会包含很多个节点,每个节点一般设计为只执行某一单一功能。
- Master: 节点之间的通信,连接是由Master负责协调。节点名称在master这里进行注册,接着master会查找计算图的其余部分,然后master将相关联的节点联系起来。
- 参数服务器: 参数服务器是Master的一部分,其中存储的数据或配置信息允许所有节点访问、修改。
- 信息(message): 节点间的通信是通过message进行的。信息发送的节点与接收节点是单向的,即发送节点只管发,接收节点只管接收,接收节点不会发送信息给发送节点。
- 服务(service):服务是双向的,即发送信息节点在接收到另一节点的请求时,根据需求进行计算,再将结果发送出去,发送请求的节点会接收到结果信息。
- 主题(topic): 信息的传递是以主题的形式进行的。某一节点发送信息时,可称为其发布了一个主题,而另一节点从此主题上获取信息,可称为其订阅了此主题。
- bags:记录历史数据,有助于开发,调试。
ROS常用命令
TBA
ROS支持的数据结构
TBA