机器人操作系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
机器人操作系统ROS
1.何谓ROS
ROS是一个机器人软件操作平台,前身由斯坦福大学(Stanford Artificail Intelligence Laboratory)所研发。它提供一些标准操作系统服务,目前主要支持Ubuntu操作系统。ROS 可分为两层,低层是操作系统层,高层是实现不同功能的软件包。
2.ROS的版本
ROS1.0版本叫做Box Turtle,2010年3月2日发布;ROS 1.1-1.2 C Turtle,2010年8月2日发布;ROS 1.3-1.4 Diamondback,2011年3月2日发布。
3.ROS文件系统的概念和操作
(1)ROS文件系统的概念
Packages: 它位于ROS软件的最底层,可以包含任意的东西: libraries,tools,executables,etc.
Manifest: 是package的描述。其最重要的角色是定义packages之间的依赖关系(manifest.xml)。
Stacks: 它是package的集合,是一个更高层的library。
Stack Manifest: stack的描述(stack.xml)。
setup.sh文件设置ROS工作区的环境变量。
source ~/setup.sh:将设置永久化。
此时键入echo $ROS_PACKAGE_PATH 指令,会看到类似于
home/user/ros_workspace:/opt/ros/electric/stacks
的路径。
(2)ROS文件系统的操作
a.rospack find [package name] 返回指定package的路径(rospack提供与package相关的信息)。
b.rosstack find [stack name] 返回指定stack的路径;
c.roscd 更改文件夹;
d.rosls 允许根据名字而不是package路径直接列出package、stack等的内容。
e.TAB键可以在前边有提示的情况下,代替后面的字符。
4.在工作区中创建一个新的package的方法
$ cd ~/ros_workspace //挺像dos的
$ roscreate-pkg beginner_tutorials std_msgs rospy roscpp
5.建立一个ROS package
rosdep = ros+dep(endencies) : a tool to install package dependencies
rosmake = ros+make : makes (compiles) a ROS package
ROS(机器人操作系统,Robot Operating System),是专为机器人软件开发所设计出来的一套电脑操作系统架构。它是一个开源的元级操作系统(后操作系统),提供类似于操作系统的服务,包括硬件抽象描述、底层驱动程序管理、共用功能的执行、程序间消息传递、程序发行包管理,它也提供一些工具和库用于获取、建立、编写和执行多机融合的程序。
ROS的运行架构是一种使用ROS通信模块实现模块间P2P的松耦合的网络连接的处理架构,它执行若干种类型的通讯,包括基于服务的同步RPC(远程过程调用)通讯、基于Topic的异步数据流通讯,还有参数服务器上的数据存储。
发展目标
ROS的首要设计目标是在机器人研发领域提高代码复用率。ROS是一种分布式处理框架(又名Nodes)。这使可执行文件能被单独设计,并且在运行时松散耦合。这些过程可以封装到数据包(Packages)和堆栈(Stacks)中,以便于共享和分发。ROS还支持代码库的联合系统。使得协作亦能被分发。这种从文件系统级别到社区一级的设计让独立地决定发展和实施工作成为可能。上述所有功能都能由ROS的基础工具实现。
为了实现“共享与协作”这一首要目标,人们制订了ROS架构中的其他支援性目标:
“轻便”:ROS是设计得尽可能方便简易。您不必替换主框架与系统,因为ROS编写的代码可以用于其他机器人软件框架中。毫无疑问的,ROS更易于集成与其他机器人软件框架。事实上ROS已完成与OpenRAVE、Orocos和Player的整合。
ROS-agnostic库:【agnostic:不可知论】建议的开发模型是使用clear的函数接口书写ROS-agnostic库。
语言独立性:ROS框架很容易在任何编程语言中执行。我们已经能在Python和C++中顺利运行,同时添加有Lisp、Octave和Java语言库。
测试简单:ROS有一个内建的单元/组合集测试框架,称为“rostest”。这使得集成调试和分解调试很容易。
扩展性:ROS适合于大型实时系统与大型的系统开发项目。
ROS的概念
ROS有三个层次的概念:分别为Filesystem level,Computation graph level,以及Communication level。以下内容具体的总结了这些层次及概念。除了这三个层次的概念,ROS也定义了两种名称-- Package资源名称和Graph资源名称。同样会在以下内容中提及。
ROS 的Filesystem Level
文件系统层概念就是你在碟片里面遇到的资源,例如:
Packages:ROS的基本组织,可以包含任意格式文件。一个Package 可以包含ROS执行时处理的文件(nodes),一个ROS的依赖库,一个数据集合,配置文件或一些有用的文件在一起。
Manifests:Manifests (manifest.xml) 提供关于Package元数据,包括它的许可信息和Package 之间依赖关系,以及语言特性信息像编译旗帜(编译优化参数)。
Stacks: Stacks 是Packages的集合,它提供一个完整的功能,像“navigation stack”Stack与版本号关联,同时也是如何发行ROS软件方式的关键。
Manifest Stack Manifests: Stack manifests (stack.xml) 提供关于Stack元数据,包括它的许可信息和Stack之间依赖关系。
Message (msg) types: 信息描述, 位置在路径:my_package/msg/MyMessageType.msg, 定义数据类型在ROS的messages ROS里面。
Service (srv) types: 服务描述,位置在路径:my_package/srv/MyServiceType.srv, 定义这个请求和相应的数据结构在ROS services 里面。
ROS 的Computation Graph Level
Computation Graph Level(计算图)就是用ROS的P2P(peer-to-peer网络传输协议)网络集中处理所有的数据。基本的Computation Graph的概念包括Node,Master,Parameter Sever,messages, services, topics,和bags,以上所有的这些都以不同的方式给Graph传输数据。