ros的定义:ROS是一个用于编写机器人软件的灵活框架,它集成了大量的工具、库、协议,提供了类似操作系统所提供的功能,包括硬件抽象描述、底层驱动程序管理、共用功能的执行、程序间的消息传递、程序发行包管理,可以极大简化繁杂多样的机器人平台下的复杂任务创建与稳定行为控制。
ROS的特点:
1.点对点的设计:在ROS中,每一个进程都以一个节点的形式运行,可以分布与多个不同的主机。节点间的通信通过一个带有发布和订阅功能的RPC传输系统,从发布节点传送到接受节点。
2.多语言支持;python、c++、Java、Octave和LISP等
3.架构精简、集成度高:ROS框架具有模块化特点使得每个功能节点可以进行单独编译、并且使用统一的消息接口让模块的移植、复用更加便捷。同时ROS开源社区中移植、集成了大量的已有开源项目中的代码,例如OpenCV、PCL等。
4.组件化工具包丰富
5.免费并且开源
一、ROS架构设计:os层、中间层、应用层。
1. os层
ros不能像window和Linux直接运行在计算机硬件上,需要依托在Linux系统上。
2.中间层
有基于TCPROS/UDPROS的通信系统、进程间的通信方法Nodelet以及机器人开发的相关库。
3.应用层
需要运行一个管理者Master,负责管理整个系统的正常运行。
二、在实现角度可以将ROS划分为三个层次:文件系统、计算图和开源社区。
1.计算图:从计算图的角度来看,ROS系统的功能模块以节点为单位独立运行,可以分布于多个相同或不同的主机中,在系统运行时通常通过端到端的拓扑结构进行连接。
1.1节点:节点就是一些执行运算任务的进程,一个系统一般由多个节点组成,也可以称为‘软件模块’。
1.2消息:节点之间最重要的通信机制就是基于发布/订阅模型的消息(Message)通信。每一个消息都是一个严格的数据结构,支持标准数据类型(整数、浮点型、布尔型等),也支持嵌套结构和数组(类似于C语言的结构体struct),还可以根据需求由开发者自主定义。
1.3话题:消息以一种发布/订阅的方式传递。一个节点可以针对一个给定的话题(Topic)发布消息(称为发布者/Talker),也可以关注某个话题并订阅特定类型的数据(称为订阅者/Listener)。发布者和订阅者并不了解彼此的存在,系统中可能同时有多个节点发布或者订阅同一个话题的消息。
1.4服务:虽然基于话题的发布/订阅模型时一个很灵活的通信模式,但是对于双向的同步传输模式并不适合。在ROS中,我们称这种同步传输模式为服务(Service),其基于客户端/服务器(Client/Server)模型,包含两个部分的通信模型:一个用于请求,另一个用于应答,类似于Web服务器。与话题不同的是,ROS中允许有一个节点提供指定命名的服务。
1.5节点管理器:为了统筹管理以上概念,系统当中需要有一个控制器使得所有节点有条不紊地执行,这就是ROS节点管理器(ROS Master)。ROS Master通过远程过程调用(RPC)提供登记列表和对其他计算图表的查看功能,帮助ROS节点之间相互查找、建立连接,同时还为系统提供参数服务器,管理全局参数。ROS Master就是一个管理者,没有他的话,节点将无法找到彼此,也无法交换消息或者调用服务,整个系统将会瘫痪,由此可见其在ROS系统中的重要性。
2. 文件系统:类似与操作系统,ROS将所有文件按照一定的规则进行组织,不同功能的文件被放置在不同的文件夹下,
2.1 功能包:config:放置功能包中的配置文件,由用户创建,文件名可以不同。
include:放置功能包中需要用到的头文件。
scripts:放置可以直接运行的python脚本。
src:放置需要编译的C++代码。
launch:放置功能包中的所有启动文件。
msg:放置功能包自定义的服务类型。
srv:放置功能包自定义的消息类型。
action:放置功能包自定义的动作指令。
CMakeLists.txt:编译器编译功能包的规则。
package.xml:功能包清单,
3. 开源社区
三、工作空间和功能包
1. 工作空间:工作空间是一个存放工程开发相关文件的文件夹。Ros默认使用的是Catkin编译系统。一个典型的工作空间一般包括以下四个目录空间。
1.1 src:代码空间,开发过程中最常用的文件夹,用来存储所有ROS功能包的源码文件。
1.2 build:编译空间,用来存储工作空间编译过程中产生的缓存信息和中间文件。
1.3 devel:开发空间,用来放置编译生成的可执行文件。
1.4 install:安装空间,很多工作空间中可能并没有该文件夹。
创建工作空间:
$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/src
$ catkin_init_workspace
编译整个工作空间:
$ cd ~/catkin_ws/
$ catkin_make
使得工作空间中的环境变量可以生效
$ source devel/setup.bash(这个只能在当前终端中生效,如果嫌麻烦就在配置文件中加入环境变量的设置:echo "source /WORKSPACE/devel/setup.bash" >> ~/.bashrc。其中WORKSPACE就是自己工作空间对应的路径)
确保环境变量是否生效
$ echo $ROS_PACKAGE_PATH
如果打印的路径中包含当前工作空间的路径,则说明环境变量设置成功。
创建功能包
$ cd ~/catkin_ws/src
$ catkin_create_pkg learning_communication std_msgs rospy roscpp
之后就可以在src中会生成一个learning_communication功能包,其中已经包含package.xml和CMakeLists.txt文件。它后面的三个是功能包所依赖的功能包。
编译
$ cd ~/catkin_ws
$ catkin_make
$ source ~/catkin_ws/devel/setup.bash
以上就创建了一个功能包