ROS机器人操作系统 ( Robot Operating System 或简称 ROS),可以帮助提高机器人软件的开发效率。ROS能够提供类似传统操作系统的诸多功能,如硬件抽象、底层设备控制、常用功能实现、进程间消息传递和程序包管理等。此外,它还提供相关工具和库,用于获取、编译、编辑代码以及在多个计算机之间运行程序完成分布式计算。结合笔者对ROS的理解,想与大家一起讨论,共同把ROS理解的更准确,一起进步。
 

对ROS的误解:

1.ROS不是一种编程语言。实际上,ROS的主要代码由C++语言编写,客户端库的编写还可以使用Python、Java和Lisp等其他多种语言编写。据笔者开发经验而谈,ROS只不过用c++基本语法进行了封装,制定了统一的标准,比如导航所用的速度和角度,ROS封装成了自己的结构体叫msg,如果你装了ROS,你可以用命令rosmsg show geometry_msg/Twist 查看到格式:

geometry_msgs/Vector3 linear
  float64 x
  float64 y
  float64 z
geometry_msgs/Vector3 angular
  float64 x
  float64 y
  float64 z
可以看到都是c++基本语法,只是提供一个通用的数据类型以便促进整个系统的互操作性。geometry_msgs是存放结构体(或组合成的新类型比较准确)的文件夹的名字(ROS叫包package),结构体(新类型)的名字Twist(ROS叫消息msg),这个包下还有很多类型http://wiki.ros.org/geometry_msgs
 
2.ROS不仅是一个函数库(比如在ROS的导航中全局路径规划(global planner)首先会通过全局路径规划,计算出机器人到目标位置的全局路线。这一功能是navfn这个包实现的。navfn通过Dijkstra最优路径的算法,计costmap上的最小花费路径,作为机器人的全局路线。如果你想做global planner,直接调用这个包就行了),除包含客户(Client Libraries)外还包含一个中心服务器(Central Server)、一系列命令行工具、图形化界面工具以及编译环境。
 
3.ROS不是集成开发环境。虽然ROS没有规定软件开发环境,但几乎所有的主流IDE8都可用于基于ROS的软件开发。此外,我们还可以根据个人喜好,使用普通的文本编辑器和命令行来完成相应的开发,而无需任何IDE。
 
4.ROS也不是一个完全意义上的操作系统,是一个软件平台能够提供类似传统操作系统的诸多功能而已,Linux ubuntu操作系统对它支持良好,我认为最初是基于Linux ubuntu操作系开发的,选择ubuntu其中一个重要的原因我认为ubuntu有绚丽的图形化界面。虽然编译ROS程序时用rosbuild或catkin_make,本质上还是基于cmake的,只是写了个shell脚本把cmake的命令集合一下,运行程序虽然用rosrun命令,本质和运行./bin(编译生成的二进制文件)一样,它也只不过是一个shell脚本,能够理解ROS的文件组织结构,知道到哪里能找到与给定包名称对应的可执行文件。一旦它找到你要的程序,rosrun就会正常启动节点。举个例子就好理解了:你要启动turtlesim_node节点(负责创建turtlesim窗口和模拟海龟的运动)可以运行 rosrun turtlesim turtlesim_node ,但是你完全可以这么启动:/opt/ros/indigo/lib/turtlesim/turtlesim_node  
 

发行版本(Distributions)

ROS的主要版本称为发行版,其版本号以顺序字母作为版本名的首字母来命名(这种方式与其他大型工程的版本命名方式类似,如Ubuntu、Android)。ROS的版本包括hydro、groovy、feurte、electric、diamondback、C Turtle、box turtle、indigo、jade、kinetic。
 

由浅到深理解ROS(1)的更多相关文章

  1. 由浅到深理解ROS(5)- launch启动文件的理解与编写

    ROS提供了一个同时启动节点管理器(master)和多个节点的途径,即使用启动文件(launch file).事实上,在ROS功能包中,启动文件的使用是非常普遍的.任何包含两个或两个以上节点的系统都可 ...

  2. 由浅到深理解ROS(4)

    消息和消息类型 节点能相互传递消息,节点之间通信也是基于消息.消息类型也就是数据类型数据类型,理解消息的类型很重要,因为它决定了消息的内容.也就是说,一个话题的消息类型能告诉你该话题中每个消息携带了哪 ...

  3. 由浅到深理解ROS(3)-命名空间

    全局命名空间: /rosout前面的反斜杠“/”表明该节点名称属于全局命名空间.之所以叫做全局名称因为它们在任何地方(包括代码.命令行工具.图形界面工具等的任何地方)都可以使用.无论这些名称用作众多命 ...

  4. 由浅到深理解ROS(2)

    ROS文件系统 用户可以直接参看官网:http://wiki.ros.org/ROS/Tutorials/NavigatingTheFilesystem ROS文件系统中的两个最基本的概念:Packa ...

  5. 由浅到深理解java反射

    1.基础概念 class类: 1.1java是面向对象的,但是在java中存在两种东西不是面向对象的 一种是普通的数据类型,这也是封装数据类存在的原因. 二种是静态静态成员. 1.2所以我们首先要理解 ...

  6. JavaScript基础知识从浅入深理解(一)

    JavaScript的简介 javascript是一门动态弱类型的解释型编程语言,增强页面动态效果,实现页面与用户之间的实时动态的交互. javascript是由三部分组成:ECMAScript.DO ...

  7. Stage3d 由浅到深理解AGAL的管线vertex shader和fragment shader || 简易教程 学习心得 AGAL 非常非常好的入门文章

    Everyday Stage3D (一) Everyday Stage3D (二) Triangle Everyday Stage3D (三) AGAL的基本概念 Everyday Stage3D ( ...

  8. 从浅入深——理解JSONP的实现原理

    由于浏览器的安全性限制,不允许AJAX访问 协议不同.域名不同.端口号不同的 数据接口,浏览器认为这种访问不安全: 可以通过动态创建script标签的形式,把script标签的src属性,指向数据接口 ...

  9. 浅入深出之Java集合框架(下)

    Java中的集合框架(下) 由于Java中的集合框架的内容比较多,在这里分为三个部分介绍Java的集合框架,内容是从浅到深,哈哈这篇其实也还是基础,惊不惊喜意不意外 ̄▽ ̄ 写文真的好累,懒得写了.. ...

随机推荐

  1. mOOC 编绎原理

    http://mooc.study.163.com/course/YOOKCS0009-1000002001#/info http://study.163.com/series/1001245004. ...

  2. 64位系统下powerdesigner15连接oracle odbc

    操作系统:win2008 64 Oracle版本:64位11g PowerDesigner版本:15.1 问题描述:因为PowerDesigner是32的程序,连接数据库会默认开启32位的ODBC,因 ...

  3. ES6里关于作用域的拓展:块级作用域

    过去,javascript缺乏块级作用域,var声明时的声明提升.属性变量等行为让人困惑.ES6的新语法可以帮助我们更好地控制作用域. 一.var声明 1.变量提升:var声明会发生“变量提升”现象, ...

  4. Spring管理的bean初始化方法的三种方式,以及@PostConstruct不起作用的原因

    1:Spring 容器中的 Bean 是有生命周期的,spring 允许 Bean 在初始化完成后以及销毁前执行特定的操作.下面是常用的三种指定特定操作的方法: 通过实现InitializingBea ...

  5. Linux 命令 indent 用法

    此命令用于调整C源码的格式. 在LKD中的例子: indent -kr -i8 -ts8 -sob -l80 -ss -bs -psl filename   参数解释如下: -i :设置缩进的格数 - ...

  6. 有效的web安全信息源

    杂志:hackcto ,书安 乌云知识库,91ri.org,安全脉搏(http://www.secpulse.com/) 乌云公开漏洞,乌云热点漏洞,90sec 内网渗透找90.web注入找习科, 已 ...

  7. MFC对话框贴图基础上控件Stasic变成透明的

    对应WM_CTLCOLOR函数 加入下面代码: HBRUSH CMFCApplication2Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) ...

  8. js中数组的合并和对象的合并

    1 数组合并 1.1 concat 方法 var a = [1,2,3], b = [4,5,6]; var c = a.concat(b); console.log(c);// 1,2,3,4,5, ...

  9. C中的C文件与h文件辨析

    简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程:       1.预处理阶段 2.词法与语法分析阶段 .编译阶段,首先编译成纯 ...

  10. Codeforces Round #307 (Div. 2) E. GukiZ and GukiZiana (分块)

    题目地址:http://codeforces.com/contest/551/problem/E 将n平均分成sqrt(n)块,对每一块从小到大排序,并设置一个总体偏移量. 改动操作:l~r区间内,对 ...