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. SimpleDateFormat关于时间类的一些常用处理

    项目中经常会出现对时间类的一些处理,记录一下: 实例一:/** * 获取当前时间是星期几? * * @param args */ public static void main(String[] ar ...

  2. mac如何挂载移动硬盘、存储设备、U盘

    默认情况下Mac OSX对NTFS磁盘的挂载方式是只读(read-only)的,如何实现读写: 1.借助第三方软件:比如免费版的Mounty 2.因为OSX原生就是支持NTFS的,但是后来由于微软的限 ...

  3. 5分钟教程:如何通过UART获得root权限

    写在前面的话 你知道物联网设备以及其他硬件制造商是如何调试和测试自家设备的吗?没错,绝大多数情况下,他们都会留下一个串行接口,这样就可以利用这个接口并通过shell来读取实时的调试日志或与硬件进行交互 ...

  4. tensorflow TensorArray 代码例子

    import tensorflow as tf import numpy as np B=3 D=4 T=5 tf.reset_default_graph() xs=tf.placeholder(sh ...

  5. 机器学习&深度学习资料(转载)

    转自 飞鸟各投林 <Brief History of Machine Learning> 介绍:这是一篇介绍机器学习历史的文章,介绍很全面,从感知机.神经网络.决策树.SVM.Adaboo ...

  6. 页面加载后累加,自加1&&判断数字是否为两位数

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. Android学习(二十一)OptionsMenu选项菜单

    一.OptionsMenu选项菜单 在应用程序中点击功能按钮会弹出选项菜单,点击可以实现具体功能. 二.实现思路: 1.创建选项菜单: onCreateOptionsMenu(); 2.设置菜单项可用 ...

  8. django项目搭建

    参见https://www.imooc.com/video/13931 1.安装python,从官网python.org下载msi安装2.7,安装完后,输入python可以看到版本 2.djangop ...

  9. Linux下Nagios的安装与配置(转载)

    一.Nagios简介 Nagios是一款开源的电脑系统和网络监视工具,能有效监控Windows.Linux和Unix的主机状态,交换机路由器等网络设置,打印机等.在系统或服务状态异常时发出邮件或短信报 ...

  10. 基于webmagic的种子网站爬取

    代码地址如下:http://www.demodashi.com/demo/12175.html 1. 概述 因为无聊,闲来没事做,故突发奇想,爬个种子,顺便学习爬虫.本文将介绍使用Spring/Myb ...