[ROS]机器人操作系统介绍

[ROS]机器人操作系统介绍

ROS介绍

ROS是Robot Operating Syetem(机器人操作系统)的简称.ROS开始于2007年,在斯坦福大学人工智能实验室斯坦福AI机器人项目的支持下开发了ROS。从2010年3月2日发布的第一版ROS Box Turtle至今(截止到2018年8月)已有12个版本。其中三个长期支持版本,并对应着的Ubuntu的的三个LTS版本具体如下:

  1. 一个以Linux内核的开源次级OS,类似Android系统。
  2. 是一个机器人开发框架。 基于通信基础的松耦合点对点进程网络,多节点分布
  3. ROS不是一个实时的框架,但可以嵌入实时程序。
  4. 提供RPC服务,Topic话题,ParaSrv参数服务器,驱动管理,进程间消息传输,程序包管理,提供各种软件功能包。
  5. 传感器,执行器件,与算法分离,可以记录各种话题并重放,可以在模拟器总测试执行器件。

可以说,ROS=通信机制+开发工具+应用功能+生态系统。目前很多机器人的研发都已经嵌入ROS系统。像国内知名大佬胡春旭带队研发的功夫茶机器人就是搭载的ros系统,国内很多知名企业也在这方面投入研发。
在这里插入图片描述

为什么要学ROS

ROS的首要设计目标是在机器人研发领域提高代码复用率。ROS是一种分布式处理框架(又名Nodes)。这使可执行文件能被单独设计,并且在运行时松散耦合。这些过程可以封装到数据包(Packages)和堆栈(Stacks)中,以便于共享和分发。ROS还支持代码库的联合系统。使得协作亦能被分发。这种从文件系统级别到社区一级的设计让独立地决定发展和实施工作成为可能。上述所有功能都能由ROS的基础工具实现。
在研发过程中,我们希望稍微提高一下机器人复杂度的时候,就会发现另一个需要考虑的问题,进程间通信。在我们用Windows + RTX的时候,进程间通信使用RTX提供的shared memory,不过都是比较慢的图像处理进程向shared memory中写数据,决策和运动控制进程读数据。shared memory显然并不是很好的通信方式,这里不再多加讨论。ROS则使用了一个很好的通信架构,并且是ROS整个框架的一个基础(不论是对于ROS中的topic,service,plugin,actionlib等基础概念还是rviz,navigation package等功能包。)
并且,ROS为开发者提供了一系列高效的开发工具,可以极大提高研究人员的开发效率。

  1. rqt工具箱可以绘制Topic的数值曲线,各节点之间的连接状态,和正在使用的Topic等,还可以进行指定参数调节等功能;
  2. TF:TF是Transform的简写,利用它,我们可以实时知道各连杆坐标系的位姿,也可以求出两个坐标系的相对位置;
  3. Rviz:超强大的3D可视化工具,可以显示机器人模型、3D电影、各种文字图标、也可以很方便二次开发;

除了ROS本身之外,世界上已经有很多非常优秀的机器人开源项目,但是ROS正逐渐将它们一一囊括在自己的范畴里,所以你可以在ROS里面很容易的使用这些开源项目:

  1. OROCOS:这个开源项目主要侧重于机器人底层控制器的设计,包括用于计算串联机械臂运动学数值解的KDL、贝叶斯滤波、实时控制等功能。
  2. OpenRave:这是在ROS之前最多人用来做运动规划的平台,ROS已经将其中的ikfast(计算串联机械臂运动学解析解)等功能吸收。
  3. Player:一款优秀的二维仿真平台,可以用于平面移动机器人的仿真,现在在ROS里可以直接使用。
  4. OpenCV:大名鼎鼎的机器视觉开源项目,ROS提供了cv_bridge,可以将OpenCV的图片与ROS的图片格式相互转换。
  5. OMPL:现在最著名的运动规划开源项目,已经成了MoveIt的一部分。
  6. Visp:一个开源视觉伺服项目,已经跟ROS完美整合。
  7. Gazebo:一款优秀的开源仿真平台,可以实现动力学仿真、传感器仿真等,也已被ROS吸收。

当然,除了吸收别的优秀开源项目,ROS自己也发展出许多非常优秀的项目和库。

  1. ORK:一个物体识别与位姿估计开源库,包含LineMod等算法,但实际使用效果还不是太理想。下图是LineMod识别效果;
  2. PCL:一个开源点云处理库,原本是从ROS中发展起来的,后来由于太受欢迎,为了让非ROS用户也能用,就单独立了一个PCL的项目;
  3. Gmapping:这其实是在OpenSlam项目继承过来的(后来发展和改动较大),利用gmapping可以实现laser-based SLAM,快速建立室内二维地图,下图就是gmapping建立二维地图;
  4. Localization:基于扩展卡尔曼滤波(EKF)和无迹卡尔曼滤波(UKF)的机器人定位算法,可以融合各种传感器的定位信息,获得较为准确的定位效果;
  5. Navigation:基于Dijkstra、A*算法(全局规划器)和动态窗口法DWA(局部规划器)的移动机器人路径规划模块,可以在二维地图上实现机器人导航;
  6. MoveIt:这个是专注于移动机械臂运动规划的模块,运动规划.

怎样学ROS

想要深入掌握ROS,是相当有难度的,特别是当你是嵌入式领域的新手,更是难上加难,在ROS的学习道路上不单单只是ROS的知识,还涉及到C++,python语言,甚至深入的会遇到机器人学,深度学习,Linux操作系统等问题,总之,学习ROS并不像学习单片机一样单纯,在学习ROS之前需要有一定的心理准备面对其他方面的知识。
一般入门之前需要一定的Linux系统知识,C++或者python知识,再之后的道路是从接触ROS的核心概念开始入手,像几种核心通信机制,关键工具包等,想要更好的掌握使用ROS还需要学习上述的项目与库。
ROS学习并非一朝一夕可以完成,接下来我也会坚持发表关于ROS学习的笔记,如有哪里不对的,也可以请各位指正。

猜你喜欢

转载自blog.csdn.net/qq_39502099/article/details/113326412