ROS 基础

近期做的东西和ROS有关,因此想做一些关于ROS的笔记。这篇文章主要分为以下几个部分。

  1. ROS简介
  2. ROS的工程架构
  3. ROS的计算图集
  4. ROS工具包
  5. 未完结

1. ROS简介

ROS(Robot OS)是运行在Ubuntu上的次级系统,它内部由多个节点构成,每个节点即一个进程。这些节点之间各自分工,又相互合作,共同完成一些列任务。一般一个ROS工程由master节点和多个子节点构成,master负责管理各个节点,而子节点则负责各自具体的任务。

2. ROS的工程架构

对于一个ROS工程,它一般分为三部分:

  • build:编译产生的中间文件;
  • devel:编译的结果文件;
  • src:源代码目录。

项目架构概览

  • /catkin_ws
    • /build
    • /devel
    • /src
      • /folder_1
        • /package_1
        • /package_2
      • /folder_2
        • /package_3
      • /package_4
      • /metapackage

一个ROS工程的src部分,是由一个个Package组成的。每个Package一般对应一个应用或是一个节点。另外还有一类特殊的Package,叫做Metapackage,即虚包,它们没有自己的内容,但是由很多依赖,因此常用来做功能集使用。

Package架构概览

  • /package
    • /msg
      • x.msg
    • /srv
      • x.srv
    • /action
      • x.action
    • /scripts
      • x.py
      • x.sh
    • /launch
      • x.launch
    • /config
      • x.yaml
    • /include
      • x.h
    • /src
      • x.cpp
    • /other_dirs
      • other_files
    • CMakeLists.txt
    • package.xml

ROS支持C++和Python开发。在一个Package下,script下一般存放python文件,src、include文件夹下面分别存放了c++的.cpp文件和.h文件。launch文件夹下存放了ROS的启动文件,这些启动文件描述了这个包的启动过程中需要定义的参数,需要依赖的其它的包等内容。config文件夹下存放了一些配置文件,通过yaml语言定义。ROS自带了三种通信方式,其中msg描述了通过topic方式通信过程中的数据格式,srv、action则分别保存了service和action通信的数据格式。

3. ROS的计算图集

计算图集,也叫通信架构,是ROS节点之间通信的工具。ROS节点之间的通信方式共有三种。

Topic
Topic是最常见的通信方式,topic是一个独立于节点的存在。每个节点既可以发布topic,也可以订阅topic。发布者会始终无条件的发布消息,所以不论有没有其他节点在订阅消息,都会按照一定频率发布topic。并且topic的发布者可以不只是一个节点,偶尔也会有多个节点在同一个topic上发布消息。当然,订阅topic的节点也可以是多个。

一个节点如果想发布topic,必须先创建一个msg,这个msg就像是一个结构体,节点可以在这个msg中存放一些数据,然后发布到topic上。另一个节点如果想订阅这个topic,就必须按照这个msg的结构进行监听。

msg文件结构

1
2
float32 x
float32 y

Service
当进行一些复杂的,计算量大的任务时,Topic却无法胜任这种情况了,因为Topic是不论有没有订阅者,发布者都会无条件发布消息,这就会导致大量的计算资源被浪费了。而Service这种通信方式正是弥补了这一缺陷。Service会根据服务请求者的请求,按需执行,因此大大节约了计算资源。

Service由服务的提供方提供相应服务,而请求方需要按照srv文件中定义的格式向服务提供方请求服务。

srv文件结构

1
2
3
4
5
6
// 请求格式
uint32 id
---
// 响应格式
float32 x
float32 y

Action
对于一些执行时间较长的服务,服务的请求方还需要知道服务的实时进度。这时候Action就派上用场了。Action除了像服务那样按需执行外,在执行的过程中,也会按照一定的频率向请求方发送一些其他的数据,这些数据都是在action文件中定义的。

action文件结构

1
2
3
4
5
6
7
8
9
// 请求格式
uint32 id
---
// 结果格式
float32 x
float32 y
---
// 中间反馈格式
string state

数据格式文件中的数据类型

1
2
3
4
5
6
7
8
bool
string
int8, int16, int32, int64
uint8, uint16, uint32, uint64
float32, float64
time, duration
variable-length array[], fixed-length array[C]
other msg files

4. ROS工具包

Gazebo 物理仿真工具
可以对机器人进行物理仿真,可以对机器人设置重量,碰撞模型,转动惯量等设置。

Rviz 机器人可视化工具
主要用于机器人调试,数据可视化操作。

MoveIt! 机械臂路径规划工具
专门用于机械臂控制使用,里面集成了大量的关于机械臂的工具包。

Rqt ROS代码调试工具
提供了一系列代码调试工具:

rqt_graph 绘制计算图(通信架构图)
rqt_plot 绘制数据变化曲线
rqt_console 查看日志的工具
rqt_* 其他工具

5. 未完结(停止更新)