ROS思想基础浅谈(转载请注明出处)

       学习ROS已经有一些时间了,成功完成机器人的建图定位和导航,在此想写个总结,一是用来梳理学到的东西,二是可以ROS新人的入门指南。整个总结我尽量用通俗的语言来说,穿插一些比方。

零,引言

   ROS,机器人操作系统,我觉得这个名字非常好,虽然说ros不是我们以往认知的那种操作系统,但是广义上我觉得确实可以将ros看作是一个操作系统,因为它完成了硬件抽象,底层设备控制,常用函数实现,进程管理,包管理。而本质上ros是在Linux系统上根据机器人开发专门做的进一步的封装,建立了一个适用于机器人开发的框架,以及开发所需的数据处理分析工具,实现机器人基本功能的功能包,和庞大的开源社区。

   简单来说,操作系统就好比洗衣机,冰箱,在我看来,操作系统无处不在,你并不很清楚内部结构原理也不需要非常清楚就能很好的使用它,俩个字就是接口,或者封装,能理解这点就差不多了。接口的思想贯穿整个ROS。

一,背景

     相信做过嵌入式或者一些控制开发的人都知道,传统的开发软件复用性不好,就是即使你在网上找了一个很好的代码,用到你的设备上需要进行非常多的调整,有些干脆不能用,你也找不出问题在哪,等你弄清楚了,你也差不多等于自己做了一遍。如果你做过比较大的项目,你还能感觉到团队合作中比较多的问题,做纯软件的好一些,做机器人嵌入式这种就会深有体会,队友之前的程序和代码不好配合协调。没有一种规范的接口。 

   ROS,就是针对机器人开发(我觉得可以用作很多很多领域,远不止机器人开发)设计的一个框架,这个框架统一了规范,抽象了底层硬件以接口的形式进行描述,极大的提高了软件复用率和团队协作便利性。

二,思想前提

    分布式架构是ROS的核心思想,对于分布式架构最重要的当然就是各个点之间的通信喽,就是这些分布的点是如何协调运行的。就引出了ROS非常重要的四种节点间通信方式,话题,服务,动作和参数管理器,以满足节点间不同的通信需求。

    1,对分布式节点进行理解,你至少要有操作系统的一些基础知识,比如进程的概念,这是多节点同时运行的基础。

     2,ROS主要支持Ubuntu操作系统,所以以下我默认运行在Ubuntu下,Ubuntu是Linux一个比较常用的发行版,有较好的交互界面,在学ROS前,我们需要对Linux有一些了解,我认为解决三个关键就行了,一是Linux的文件管理组织形式,我们知道,Linux中万物皆为文件,包括设备图片视频音频等等,新人在学习时,我觉得要从根目录一层层往下走,要知道每个文件都大致是放什么东西的,也就是要对Linux管理硬件的基本思想有了解,二是要学习使用Linux的基本命令,windows过来的刚开始可能不太习惯,打两天就习惯,而且管理方式我觉得比Windows好。在使用命令的时候还需要理解命名空间 如 cd ~/catkin_ws 中“~”表示home目录下。 三就是Linux的软件包管理方式,这个和windows有着很大的不同,我刚开始使用的使用的时候也有些不习惯,比如其中一种常见的apt-get,以及其软件源设置。

    3,ROS有多语言支持,主要的就是c++和python了,所以要对面向对象开发有比较好的理解

三,ROS核心

   通信架构,开发工具,应用功能,生态系统这四点是ros整体的核心。

1,通信架构:已经说了,就是各节点协调的关键。话题,很好理解,你加入这个话题比如说速度,你就可以发布速度或者拿去速度,发布者会给每个接收者都发一个,但是ROS1有个缺点就是实时性不太好,为什么这么说呢,因为节点是通过查询进行回调的,不是严格的中断进行回调。 而服务就好比一种即时的请求与响应,用于一种偶尔的需要而不是常态的需求,比如异常时对地图数据的一次获取分析等等。 动作则可以理解为一个长周期的请求,比如导航中的一个点到另一个点,这个需要一个比较长的时间周期的任务。 参数管理就是方便参数调整和管理,而不需要对程序进行重新编译。

2,开发工具:我们在进行机器人开发的时候要进行大量的数据分析测试,仿真,调试等等,ROS呢为方便我们做这些工作提供了一些工具,如rviz,gazebo,qt工具箱,rosbag数据记录和回放。

   还有一个我认为很重要的就是TF,我们知道机器人在三维空间中有很多的坐标系,不同关节,底盘,或激光雷达,摄像头等等,ROS为方便坐标转换提供了TF框架,方便各节点进行发布和监听。ROS将点到点的关系练成树,其它节点可以监听树上任意两点之间的变换,而不需要自己进行运算。

3,应用功能:机器人的一些常用需求,定位,建图,导航,语音,机械臂等等这些ROS直接做成了官方功能包可以直接使用。

4,生态系统:ROS因为强大的软件复用性,诞生十年来发展出了庞大的生态系统,各领域研究工作者们提供了很多开源代码,用于各个领域。

四,学习建议及推荐资料

1,大学生mooc上有个柴长坤主讲的机器人操作系统入门这门课很适合新人了解。

2,胡春旭的 ROS机器人开发实践是我知道的国内比较好的ROS入门书籍,以及他的个人博客:https://www.guyuehome.com/

五,小结

  多节点分布运行,以功能包为编译的基本的单位,节点间通过话题,服务,动作,参数管理进行通信协调运行。

   如有错误,谢谢指正和交流。

  

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值