ROS机器人操作系统入门(转载整理于TOP LIU)

转载整理于TOP LIU 知乎及雷锋网相关文章 知乎链接:https://zhuanlan.zhihu.com/p/24834385

雷锋网链接:https://www.leiphone.com/news/201701/qKhqf4Rq4C6Bw0Gt.html?ulu-rcmd=0_5021df_hot_1_fdd2218ea06b4e8892838ffe8e57fef0

讲解视频链接:http://www.iqiyi.com/w_19ru77rj99.html

PPT下载链接:http://download.csdn.net/download/top1944/9738861

                                                                                                                                        

why is ROS?

http://wiki.ros.org/ROS/Introduction

ROS是一个适用于机器人的开源的元操作系统它不是一个真正的操作系统,其真正底层的任务调度、编译、寻址等任务还是由Linux操作系统完成,也就是ROS充其量是一个运行在Linux上的次级操作系统但它提供了操作系统应用的服务,包括硬件抽象,底层设备控制,常用函数的实现,进程间消息传递,以及包管理。它也提供用于获取、 编译、编写、和跨计算机运行代码所需的工具和库函数。 它主要采用的是松耦合点对点进程网络,目前主要支持的还是Ubuntu系统,Mac OS X支持,Windows目前有测试版本,但支持的并不很好,不推荐。

为什么使用ROS呢?

ROS有四大优点:1、松散耦合的机制方便机器人软件框架的组织;2、最丰富的机器人功能库,方便快速搭建原型;3、非常便利的数据记录、分析、仿真工具,方便调试;4、学界和产业界的标准,方便学习和交流。 使用一句话总结,使用ROS,能够方便迅速地搭建好机器人原型。当然,它的性能不是最优的,但是这四条优点足以保障它在机器人操作系统里面的地位。

然后,ROS比较好的一点是使用了BSD许可证,这是一个非常宽松的开放许可证,允许在商业和闭源产品使用,这对于开发产品的创业公司是比较重要的一点。

ROS当前的代码统计量,总行数已经超过了1400万,超过2477名作者。代码语言以C++为主,63.98%的代码是用C++写的,排名第二的是python,占13.57% ,也就是说ROS基本上都是使用这两种语言,可以实现大部分的功能。

what to learn?

ROS由四大部分构成,第一个是基础结构,这些通讯机制是如何实现的;第二个是工具,包括仿真工具、调试工具等;第三个是体现它功能的package;第四个就是社区,如何去上面下载、发布代码,和其他开发者交流学习。

入门的话,首先要了解这四点:设计思想,核心概念,核心模块,核心工具。

设计思想

设计思想主要是分布式架构,将机器人的功能和软件,做成一个个节点,然后每个节点通过topic进行沟通,但你这些节点可以部署在同一台机器上,也可以部署在不同机器上,还可以部署在互联网上。

核心概念

ROS的核心概念主要是这几个,首先是节点,然后是节点之间的通信和话题,通信的方式有两种,一个是刚刚讲的话题,一个是服务。那么,如何管理ROS的这些节点和话题之间的沟通呢?这就需要用到Master,也就是ROS管理器,它还维持了一个参数的服务。而怎么组织代码,就是通过功能包集与功能包。

节点是各自独立的可执行文件,能够通过话题、服务或参数,与服务器或其他进程(节点)通信。ROS通过使用节点的方式将代码和功能解耦,提高了系统容错能力和可维护性,使系统简化。同时,节点允许了ROS系统能够布置在任意多个机器上并同时运行。关于节点需要注意的事项,节点在系统中必须有唯一的名称;节点可以使用不同的库进行编写,如roscpp和rospy,其中roscpp基于C++,rospy基于Python。

节点之间通过topic机制进行通信,topic机制是一个一对多的Publish/Subscribe 模式: 同一个话题也可以有很多个订阅者,它的底层传输依靠的是TCP/IP,也可以是UDP。topic具体传输的message,具有一定的类型和数据结构,包括ROS提供的标准类型,和用户自定义类型。

除了topic,ROS还提供另一种一对一的机制,也就是Service/Client,当你需要直接与节点通信并获得应答时,将无法通过话题实现,这时需要使用该服务。

Master向ROS系统中其他节点提供命名和注册服务,跟踪和记录话题的发布者和订阅者,使ROS 节点之间能够相互查找。一旦节点找到了彼此,就能建立一种点对点的通信方式。

那么如何组织代码呢?这主要依靠功能包(Package) ,ROS中软件组织的基本形式,用于创建ROS程序。功能包包含源代码和功能包清单(Manifest) 。功能包清单提供关于功能包、许可信息、依赖关系、编译标志等的信息。功能包清单是一个manifests.xml文件,通过这个文件能够实现对功能包的管理。

核心模块

ROS核心模块包括通信结构基础、机器人特性功能以及工具集,通信结构基础包括消息传递、记录和回放消息、远程过程调用、分布式参数系统;机器人特性功能包括标准机器人消息,机器人几何库,机器人描述语言,抢占式远程过程调用,诊断,位资估计、定位与导航;工具集包括命令式工具、可视化工具以及图形化接口。

核心工具

ROS拥有很多第三方的核心工具的支持,或者说Package。我们比较常见的是右边这五个工具,Gazebo是一个三维仿真环境,OpenCV是大家非常熟悉的计算机视觉库,PCL是点云库,MoveIt!是机械臂的规划控制库,Industrial是工业上会用的库。左边有三维仿真环境,另外两个其中值得一提的是MRPT,是一个非常好的机器人编程工具箱。然后,如果对实时控制要求比较高的话,可以考虑最下边的The Orocos Project。

ROS常用命令工具包括rostopic (Topics)、rosservice (ServiCES)、rosnode (Nodes)、rosparam (Parameters)、rosmsg (Messages)、rossrv (Services)和roswtf (General debugging) ,在这里就不详细展开了。

ROS用的最多的可视化工具是rqt(集成图像交互界面)和 rviz(3D 可视化工具)。

ROS具有非常强的数据存储/回放功能,也就是使用bag存储topic(例如现实中的传感器数据),以后调用bag的topic数据则不必每次都在现实中运行机器人,速度非常快。

ROS log系统记录软件运行相关信息,便于以后的调试。

How to learn?

安装ROS:http://wiki.ros.org/ROS/Installation

官方教程:http://wiki.ros.org/ROS/Tutorials

首先按照官网的步骤安装ROS,这个过程不要轻易问问题,因为教程里讲得已经很明白了。另外,建议初学者一定要认真学完整20个初级教程!然后就此打住!那些中级教程就不要再看了,浏览下都有啥即可,以后遇到类似问题再回来看即可,这个时候你的重点就应该回到机器人学及其实践上了,那20个初级教程都是可以在电脑上编程学习的,但不涉及机器人学。

接下来就应该运行真实的机器人、解决真实的问题。有的小伙伴就会问,没有真实的机器人怎么办?当然也有办法,你可以在仿真环境里边运行。

仿真环境由易到难主要有这三个:Turtlesim、ArbotiX、Gazebo。Turtlesim是一个QT开发的2D轨迹显示界面,只能显示运动轨迹;ArbotiX是含有一个差速驱动机器人的rviz模拟器,机器人运动及topic数据的3D显示,但不包含物理学引擎;Gazebo是功能齐全的3D物理模拟器,不过缺点是非常重,对内存和显卡要求高,慎入!

目前,ROS是一年推出一个版本。通过下载统计,我们发现现在使用最多的还是Indigo,所以对于初学者,建议还是使用这个版本,因为这是目前使用人数最多、坑最少的版本。而如果Linux编程能力比较强的,可以使用Kinetic,它可以一直支持到2021年。然后,你在选择Ubuntu版本时,要与ROS版本需匹配。

社区图书:http://books.exbot.net/

机器人入门图书:https://zhuanlan.zhihu.com/p/23540238?refer=learnrobotics

公开课推荐:https://zhuanlan.zhihu.com/p/22763273?refer=learnrobotics

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值