ROS是什么
ROS系统是起源于2007年斯坦福大学人工智能实验室的项目与机器人技术公司Willow Garage的个人机器人项目(Personal Robots Program)之间的合作,2008年之后就由Willow Garage来进行推动。
ROS 是一个适用于机器人的开源的元操作系统。它提供了操作系统应有的服务,包括硬件抽象,底层设备控制,常用函数的实现,进程间消息传递,以及包管理。它也提供用于获取、编译、编写、和跨计算机运行代码所需的工具和库函数。在某些方面ROS相当于一种“机器人框架(robot frameworks)”类似的“机器人框架”有:Player,YARP,Orocos,CARMEN,Orca,MOOS和 Microsoft Robotics Studio。
ROS 运行时的“蓝图”是一种基于ROS通信基础结构的松耦合点对点进程网络。ROS实现了几种不同的通信方式,包括基于同步RPC样式通信的服务(services)机制,基于异步流媒体数据的话题(topics)机制以及用于数据存储的参数服务器(Parameter Server)。想更加深入的解释这些概念,请参见概念综述。
ROS并不是一个实时的框架,但ROS可以嵌入实时程序。Willow Garage的PR2机器人使用了一种叫做pr2_etherCAT的系统来实时发送或接收ROS消息。ROS也可以与Orocos实时工具包无缝集成。
简单的说,ros就是一个分布式操作系统,通过节点node,主题topic,服务service等进行通信和控制。
ROS真正的吸引力不在于它自己发布或订阅的中间件,而在于ROS为世界各地的开发者提供了一种标准机制来分享他们的代码。ROS最大的特色在于庞大的社区。
ROS的目的
ROS 是建立在Linux特别是Ubuntu系统上的一套软件系统,它具有操作系统的特征,负责管理各个模块的协同运行。设计初衷主要是面向机器人软硬件开发的特点:多点运行,随时增删模块,各模块独立开发,便于机器人多样功能的自由组合。通过拆解成不同节点和建立节点间的通信的方式,使得本来是非标准的机器人功能开发变得标准化和可维护。
ROS不是一个集成了大多数功能或特征的框架。事实上,ROS 的主要目标是为机器人研究和开发提供代码复用的支持。ROS是一个分布式的进程(也就是节点)框架,这些进程被封装在易于被分享和发布的程序包和功能包集中。ROS也支持一种类似于代码储存库的联合系统,这个系统也可以实现工程的协作及发布。这个设计可以使一个工程的开发和实现从文件系统到用户接口完全独立决策(不受ROS限制)。同时,所有的工程都可以被ROS的基础工具整合在一起。
为了支持分享和协作的主要目的,ROS框架也有其它几个目标:
- 小型化:ROS尽可能设计的很小 – 我们不封装您的 main() 函数 – 所以为ROS编写的代码可以轻松的在其它机器人软件平台上使用。 由此得出的必然结论是ROS可以轻松集成在其它机器人软件平台:ROS已经可以与OpenRAVE,Orocos和Player集成。
- ROS不敏感库:ROS的首选开发模型都是用不依赖ROS的干净的库函数编写而成。
- 语言独立:ROS框架可以简单地使用任何的现代编程语言实现。我们已经实现了Python版本,C++版本和 Lisp版本。同时,我们也拥有Java 和 Lua版本的实验库。
- 方便测试:ROS内建一个了叫做rostest的单元/集成测试框架,可以轻松安装或卸载测试模块。
- 可扩展:ROS可以适用于大型运行时系统和大型开发进程。
ROS的工作机制
-
这个机制就好比 两个人聊天微信,每个人都是一个节点node,微信这个软件的聊天功能就是Topic,两个人只有都通过微信才能聊天,如果一个人用whatsup,另一个人用微信,是收不到对方信息的。
-
对于ros topic,更像是我们在qq群中不同人说话一样 说话的人(talker)不知道是否都有谁接收(subscribe)了自己刚刚说的话(message)。
service相比则更像是新闻访谈中一问一答的形式,两个特点,一对一,有反馈。
所以学好ROS就是不断的了解这种通信和交流的机制,然后应用在自己的项目上就好了。
就好比你通过opencv采集到了一个物体的坐标,然后用这个坐标去驱动一个马达。以往的方式是要把他们都放在同一个ide中如visual studio,但是通过ros,opencv可以放到一个ide里执行,马达控制可以在arduino里执行,彼此通过ros的topic通信就好了。(打个比方,以前生产和销售要在同一个办公室,但是现在可以分隔两地。彼此用电话交流)
ROS的概念
ROS的概念分为三个级别:文件系统级(the Filesystem level)、计算图级(the Computation Graph level)、社区级(the Community level)。
Note: since ROS Groovy these wiki pages describe concepts as they relate to the new catkin buildsystem. For older versions of ROS or when using the rosbuild buildsystem, see: rosbuild/ROS/Concepts
1.文件系统级:
- 包(Packages):ROS的软件以包的方式组织起来。包包含节点、ROS依赖库、数据集、配置文件、第三方软件、或者任何其他逻辑构成。包的目标是提供一种易于使用的结构以便于软件的重复使用。总得来说,ROS的包短小精干,是您在ROS中能建立及分享的最小单元。。
- Metapackages:Metapackages 是一组具体的服务相关的功能包。大部分的metpackages 只作为转换rosbuild Stacks的向后兼容的备选。
- Package Manifests
- Repositories
- Message (msg) types
- Service (srv) types:
2.计算图级:
- Nodes、Master(控制器)、Parameter Server、Messages、Topics、Services、 Bags
3.社区级:
- Distributions:Repositories、The ROS Wiki、Bug Ticket System、 Mailing Lists、ROS Answers、Blog
4.Names:
- Graph Resource Names
Graph Resource Names provide a hierarchical naming structure that is used for all resources in a ROS Computation Graph, such as Nodes, Parameters, Topics, and Services.
Node | Relative(default) | Global | Private |
---|---|---|---|
/node1 | bar -> /bar | /bar -> /bar | ~bar -> /node1/bar |
/wg/node2 | bar -> /wg/bar | /bar -> /bar | ~bar -> /wg/node2/bar |
- Package Resource Names
Some of the ROS-related files that may be referred to using Package Resource Names include:
Message (msg) 、typesService (srv) 、typesNode types