目录
1 简介
ROS系统全称是Robot Operating System机器人操作系统,字面理解就是用于机器人领域的操作系统。目前ROS是机器人领域的普遍标准,社区内的功能包数量、下载量、wiki访问量、相关文章数量都是大幅度上涨。
- 虽然ROS已经引入了Windows,但还是没有在Linux上完善,所以大部分的开发还是在Linux下完成的
- ROS=通信机制+开发工具+应用功能+生态系统,ROS的目的是提高机器人研发中的软件复用率,也就是方便我们在别人已经做好的东西上进行二次开发,避免重复造轮子。所以如果我们想要实现某个功能就可以上github上搜索ROS某某功能一般都能够找到对应的程序
- 虽然说ROS是一个操作系统,但并不是一个独立的系统,实际上还是要寄生于Linux进行开发
- ROS的学习比较难,不易上手,前提还需要学习C++、python、Linux
2 核心概念
2.1 节点(Node) —— 执行单元
- 执行一个具体任务的进程
- 每个节点可使用不同的编程语言,可分布式运行在不同的主机
- 节点的名称必须唯一
2.2 节点管理器(ROS Master) —— 控制中心
- 命名、注册节点
- 辅助节点相互查找、建立连接
- 提供参数服务器,节点使用此服务器存储和检索运行时的参数
2.3 话题(Topic) —— 异步通信机制
- 使用发布-订阅模式,数据由发布者传输到订阅者。同一个话题的订阅者、发布者数量不唯一
- 数据流动的这个通道叫做话题,也就是数据传输的重要总线
2.4 消息(Message) —— 话题数据
- 话题传输的数据都是有类型和数据结构的,例如图像数据就是RGB数组
- 使用编程语言无关的.msg文件定义,编译过程中生成对应的代码文件
上图就是一个简单的结构:由一个摄像头节点、一个图像处理节点、图像显示节点与一个节点管理器组成,节点管理器管理三个节点的注册和节点之间的连接。摄像头节点作为话题的发布者将摄像头的数据发送给图像处理节点和图像显示节点,这个过程按照image_data数据类型进行传输
2.5 服务(Service) —— 同步通信机制
之前说的话题是一种异步通信机制,可能发布者发送数据后因为阻塞等各种原因导致订阅者没有接受到但也无法得知是否发送成功。所以同步通信机制就能解决这个问题,数据发送出去后会得到一个应答
- 使用C/S模式,客户端发送请求,服务器完成处理后返回结果
- 使用编程语言无关的.srv文件定义请求和应答数据结构,编译过程中生成对应的代码文件
2.6 参数(Parameter) —— 全局共享字典
- 在ROS Master中以键值对的形式记录各种全局变量的值,可通过网络访问
- 适合存储静态、非二进制的配置参数,不适合存储经常改变的数据
2.7 文件系统
- 功能包(Package):ROS软件中的基本单元,完成一个具体的功能。包含节点源码、配置文件、数据定义
- 功能包清单(Package manifest):记录功能包的基本信息,包含作者信息、许可信息、依赖选项、编译标志
- 元功能包(Meta Packages):组织多个用于同一目的功能包,比如很多个功能包都是和图像处理有关的就可以把它们组合起来形成元功能包
3 ROS命令行
命令 | 功能 |
---|---|
rqt_graph | 可视化计算图 |
rosnode | list:查看所有节点; info+节点名:查看某个节点的信息 |
rostopic | list:查看所有话题;pub+话题名+数据:手动发送数据 |
rosmsg | show+话题:查看该话题的数据结构 |
rosservice | list:查看所有的服务;call+服务:手动调用 一个服务 |
rosbag | record+文件名:记录操作; play+文件名:根据文件记录重复操作 (一次记录,多次调试) |
4 工作空间
4.1 介绍
工作空间是一个存放工程开发相关文件的文件夹,类似于平时用IDEA等创建一个工程
主要包含四个文件夹:
- src:代码空间,放功能包,同一个工作空间下不允许存在同名的功能包
- build:编译空间,放编译中的中间文件
- devel:开发空间,放编译完的可执行文件、库、脚本
- install:安装空间,安装的位置,有重复部分基本用不到
4.2 使用
创建工作空间:
- 创建一个文件夹作为工作空间的目录
- 进入该文件夹后再创建一个名为src的文件夹
- 进入src文件夹后执行 catkin_init_workspace 命令
编译:
- 进入工作空间的文件夹
- 执行 catkin_make ,运行完后会自动生成build文件夹和devel文件夹,如果要生成install文件夹就要使用 catkin_make install
5 功能包
功能包里包含了源码和配置文件,都要放在src文件夹下
创建:
- 进入工作空间中的src文件夹
- 执行 catkin_create_pkg+功能包名字+依赖
编译:
- 进入工作空间的文件夹
- 执行 catkin_make
- 执行 source devel/setup.bash 配置环境变量,这样才能让系统找到这个工作空间和对应的功能包
重要文件:
- CMakeList.txt:功能包编译规则
- package.xml:描述、更改功能包信息:功能包名字、作用、依赖信息