上海公司网站建设服务,网站建设太金手指六六十,品牌高端网站建设公司,廊坊seo推广ROS是Linux的发行版本。ROS全称Robot Operating System#xff0c;译为机器人操作系统#xff1b;它基于Linux内核#xff0c;只能在Linux下运行。ROS提供一些标准操作系统服务#xff0c;例如硬件抽象#xff0c;底层设备控制#xff0c;常用功能实现#xff0c;进程间…ROS是Linux的发行版本。ROS全称Robot Operating System译为机器人操作系统它基于Linux内核只能在Linux下运行。ROS提供一些标准操作系统服务例如硬件抽象底层设备控制常用功能实现进程间消息以及数据包管理。ROS可以分成两层低层是上面描述的操作系统层高层则是广大用户群贡献的实现不同功能的各种软件包例如定位绘图、行动规划、感知等。
1ROS定义介绍
ROS全称Robot Operating System译为机器人操作系统。基于Linux内核目前只能在Linux下运行。ROS设计者将ROS表述为“ROS Plumbing Tools Capabilities Ecosystem”即ROS是通讯机制、工具软件包、机器人高层技能以及机器人生态系统的集合体。顾名思义ROS是一个系统。它和我们用的普通操作系统类似ROS将底层的机器人硬件封装起来也就是说不同的机器人中包含的各种底层参数在使用ROS进行开发的人员眼里都是一样的。这里还要提一下目前ROS没有一个可视化界面。我们所用的Windows、Linux能直接看到图像界面并操作是因为它们有一个可视化界面而ROS没有。我们所谓的操作系统并不一定是都要有可视化界面才算的如果有兴趣的可以去看一下最早期的操作系统只有命令行并没有绚丽多彩的界面。ROS提供一些标准操作系统服务例如硬件抽象底层设备控制常用功能实现进程间消息以及数据包管理。ROS是基于一种图状架构从而不同节点的进程能接受发布聚合各种信息例如传感控制状态规划等等。ROS可以分成两层低层是上面描述的操作系统层高层则是广大用户群贡献的实现不同功能的各种软件包例如定位绘图行动规划感知模拟等等。ROS是一个多义词它还可以是一种通讯机制。在ROS开发中用节点Node表示应用程序一个节点就是一个可执行程序。节点之间就是通过ROS进行通信。ROS通过节点管理器Master对各个节点进行管理。至于具体的原理实现等后续再说。此外ROS还代表一系列用于机器人开发的工具包、算法、技能、平台、生态等。ROS的历史。说白了ROS就是一帮大佬在开发机器人的时候觉得比较好的东西可以是一些好用的库、软件也可以是一些思想、协议、标准汇集在一起后形成的东西。在机器人的开发中各种各样的机器人没有统一的标准每次开发一个自己没见过的机器人都需要重新去学习大量的东西十分的不方便于是大佬们借鉴操作系统产生的思想觉得为什么不可以给机器人也做一套系统来对底层进行封装呢于是ROS产生了。经过岁月的打磨ROS越来越完善用的人也越来越多了。
2ROS功能作用
机器人开发的历史中标准化的工作还是没有做到位。不同的机器人所用的系统、程序等等都不一样这样导致只要跨平台开发起来就十分的困难。为了解决这样的问题ROS诞生了。ROS可以通过封装使得底层硬件对于开发者来说变得透明大大降低了跨平台开发的难度。
1ROS的性能特色
在正式学习ROS之前先介绍ROS的几个特性即元操作系统、分布式通信机制、松耦合软件框架、丰富的开源功能库等来帮大家建立一些感性的认识。ROS是一个机器人领域的元操作系统。也就是说它并不是真正意义上的操作系统其底层的任务调度、编译、设备驱动等还是由它的原生操作系统Ubuntu Linux完成。ROS实际上是运行在Ubuntu Linux上的亚操作系统或者说软件框架但提供硬件抽象、函数调用、进程管理这些类似操作系统的功能也提供用于获取、编译、跨平台的函数和工具。ROS的核心思想就是将机器人的软件功能做成一个个节点节点之间通过互相发送消息进行沟通。这些节点可以部署在同一台主机上也可以部署在不同主机上甚至还可以部署在互联网上。ROS网络通信机制中的主节点master负责对网络中各个节点之间的通信过程进行管理调度同时提供一个用于配置网络中全局参数的服务。ROS是松耦合软件框架利用分布式通信机制实现节点间的进程通信。ROS的软件代码以松耦合方式组织开发过程灵活管理维护方便。ROS具有丰富的开源功能库。ROS是基于BSDBerkeley Software Distribution伯克利软件发行协议的开源软件允许任何人修改、重用、重发布以及在商业和闭源产品中使用使用ROS能够快捷地搭建自己的机器人原型。
2ROS的发行版本
与Linux发行版类似ROS发行版内置了一系列常用功能包即将ROS系统打包安装到原生系统中。ROS最初是基于Ubuntu系统开发的ROS的发行版本名称也和Ubuntu采用了同样的规则即版本名称由两个相同首字母的英文单词组成版本首字母按字母表递增顺序选取。
3ROS系统架构
安装完ROS后很多朋友应该迫不及待想立马开始写程序。由于ROS的架构比较复杂为了后面容易理解遇到的各种概念这里先讨论一下ROS的系统架构好让大家对ROS中的各种概念有全面性把控。按照官方的说法可以分别从计算图、文件系统和开源社区视角来理解ROS架构。
1. 从计算图视角理解ROS架构
ROS中可执行程序的基本单位叫节点node节点之间通过消息机制进行通信这样就组成了一张网状图也叫计算图。节点之间通过收发消息进行通信消息收发机制分为话题topic、服务service和动作action三种计算图中的节点、话题、服务、动作都要有唯一名称作为标识。ROS利用节点将代码和功能解耦提高了系统的容错性和可维护性。所以最好让每个节点都具有特定的单一功能而不是创建一个包罗万象的庞大节点。如果用C编写节点需要用到ROS提供的roscpp库如果用Python编写节点需要用到ROS提供的rospy库。消息是构成计算图的关键包括消息机制和消息类型两部分。消息机制有话题、服务和动作三种每种消息机制中传递的数据都具有特定的数据类型即消息类型消息类型可分为话题消息类型、服务消息类型和动作消息类型。数据包rosbag是ROS中专门用来保存和回放话题中数据的文件可以将一些难以收集的传感器数据用数据包录制下来然后反复回放来进行算法性能调试。参数服务器能够为整个ROS网络中的节点提供便于修改的参数。参数可以认为是节点中可供外部修改的全局变量有静态参数和动态参数。静态参数一般用于在节点启动时设置节点工作模式动态参数可以用于在节点运行时动态配置节点或改变节点工作状态比如电机控制节点里的PID控制参数。主节点负责各个节点之间通信过程的调度管理。因此主节点必须要最先启动可以通过roscore命令启动。
2. 从文件系统视角理解ROS架构
ROS程序的不同组件要放在不同的文件夹中这些文件夹根据不同的功能对文件进行组织这就是ROS的文件系统结构。工作空间是一个包含功能包、编译包和编译后可执行文件的文件夹用户可以根据自己的需要创建多个工作空间在每个工作空间中开发不同用途的功能包。假设我们创建了一个名为catkin_ws的工作空间其中包含src、build和devel三个文件夹。
src文件夹放置各个功能包和配置功能包的CMake配置文件CMakeLists.txt。这里说明一下由于ROS中的源码采用catkin工具进行编译而catkin工具又基于CMake技术所以我们在src源文件空间和各个功能包中都会见到一个CMake配置文件CMakeLists.txt这个文件起到配置编译的作用。
build文件夹放置编译CMake和catkin功能包时产生的缓存、配置、中间文件等。
devel文件夹放置编译好的可执行程序这些可执行程序是不需要安装就能直接运行的。一旦功能包源码编译和测试通过后可以将这些编译好的可执行文件直接导出与其他开发人员分享。
功能包是ROS中软件组织的基本形式具有创建ROS程序的最小结构和最少内容它包含ROS节点源码、脚本、配置文件等
1. CMakeLists.txt是功能包配置文件用于编译Cmake功能包编译时的编译配置。
2. package.xml是功能包清单文件用xml的标签格式标记该功能包的各类相关信息比如包的名称、开发者信息、依赖关系等主要是为了使功能包的安装和分发更容易。
3. include/pkg_name是功能包头文件目录可以把功能包程序中包含的*.h头文件放在这里。include目录之所以还要加一级路径pkg_name是为了更好地区分自己定义的头文件和系统标准头文件pkg_name用实际功能包的名称替代。不过这个文件夹不是必要项比如有些程序没有头文件。
4. msg、srv和action这三个文件夹分别用于存放非标准话题消息、服务消息和动作消息的定义文件。ROS支持用户自定义消息通信过程中使用的消息类型。这些自定义消息不是必要的比如程序只使用标准消息类型。
5. scripts目录存放Bash、Python等脚本文件为非必要项。
6. launch目录存放节点的启动文件*.launch文件用于启动一个或多个节点在含有多个节点的大型项目中很有用为非必要项。
7. src目录存放功能包节点所对应的源代码一个功能包中可以有多个节点程序来完成不同的功能每个节点程序都可以单独运行。这里src目录存放的是这些节点程序的源代码你可以按需创建文件夹和文件来组织源代码源代码可以用C、Python等编写。
3. 从开源社区视角理解ROS架构
ROS是开源软件各个独立的网络社区分享和贡献软件及教程形成了强大的ROS开源社区ROS的发展依赖于开源和共享的软件这些代码由不同的机构共享和发布比如GitHub源码共享、Ubuntu软件仓库发布、第三方库等。ROS的官方wiki是重要的文档讨论社区在里面可以很方便地发布与修改相应的文档页面。ROS的answer主页里有大量ROS开发者的提问和回答对ROS开发中遇到的各种问题的讨论很活跃。