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. linux mysql安装(亲测)

    参考文章:http://blog.csdn.net/superchanon/article/details/8546254/ 1.       运行平台:CentOS 6.7 x86_64 2.    ...

  2. jq和js中click 事件的几种方式总结和click事件的累加问题解决办法

     1:常见的三种绑定click事件: 第一种:$("#click").click(function(){ alert("Hello World  click") ...

  3. 使用Hibernate框架来更新对象的注意事项

    Hibernate在更新对象的时候,如果对象的有些属性没有设置,那么在更新的时候,会被默认为空. 特别在更新表单对象的时候. 例子: 如: Department部门类 该部门类有以下属性:  id : ...

  4. python 实现创建文件夹和创建日志文件

    一.实现创建文件夹和日志 #!/usr/bin/env python # -*- coding:utf-8 -*- # Author: nulige import os import datetime ...

  5. yolo.v2 darknet19结构

    Darknet19( (conv1s): Sequential( (0): Sequential( (0): Conv2d_BatchNorm( (conv): Conv2d(3, 32, kerne ...

  6. 【Hadoop】Hadoop HA 部署 详细过程(架构、机器规划、配置文件、部署步骤)

    1.概念.架构 2.配置文件示例.部署步骤 hadoop2.0已经发布了稳定版本了,增加了很多特性,比如HDFS HA.YARN等.最新的hadoop-2.4.1又增加了YARN HA 注意:apac ...

  7. Elasticsearch教程(九) elasticsearch 查询数据 | 分页查询

    Elasticsearch  的查询很灵活,并且有Filter,有分组功能,还有ScriptFilter等等,所以很强大.下面上代码: 一个简单的查询,返回一个List<对象> ..    ...

  8. MySQL 5.6.26几种安装包的差别

    http://downloads.mysql.com/archives/community/ 一.MySQL Installer 5.6.26 mysql-installer-community-5. ...

  9. Linux上安装tomcat、jdk

    一.tomcat [上传 yum -y install lrzsz] 1.tar zxvf apache-tomcat-7.0.57.tar.gz 2. mv apache-tomcat-7.0.57 ...

  10. 关于解决 http 状态码200,php 文件有输出,但是不显示模板文件的问题

    一 问题 给公司搭建一个在线测试站点之后,在浏览器地址栏输入 "http://xxx.xxx.xxx/index.php",页面什么都没显示.调出浏览器的开发者工具查看,http ...