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

  • ROS介绍
  • 为什么要学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学习的笔记,如有哪里不对的,也可以请各位指正。

[ROS]机器人操作系统介绍相关推荐

  1. ROS机器人操作系统安装

    一.ROS简介与安装 那么在学习使用ROS之前,首先问一个问题:为什么需要机器人操作系统?机器人操作系统与现有的Linux或Windows操作系统有什么不同呢? 大家知道,操作系统的诞生,就是为了提供 ...

  2. ROS 中文教程目录(最好不要过度依赖这种,建议养成看英文原版习惯)

    About | Support | Discussion Forum | Service Status | Q&A answers.ros.org Search: cn ROS Tutoria ...

  3. 快速了解 Robot Operating System(ROS) 机器人操作系统

     http://www.ros.org/ 关于ROS About ROS http://www.ros.org/about-ros/ 机器人操作系统(ROS)是用于编写机器人软件的灵活框架.目的在简化 ...

  4. 一 ROS基础教程

    ROS教程 这是小弟的学习笔记,有错求请拍,多指教,谢谢 一 ROS基础知识 ROS文件系统介绍 1.功能包集stack ROS软件包集合,像Navigation Stack,属于导航软件包集合,包含 ...

  5. ROS基础学习之ros-tutorials(一)

    ROS文件系统介绍 1.预备工作 1.1快速了解文件系统概念 2.文件系统工具 2.1 使用 rospack 2.2使用roscd 2.3roscd log 2.4使用 rosls 2.5Tab 自动 ...

  6. ROS基础教程-官网翻译版

    ROS教程整理: 安装并配置ROS环境 本教程详细描述了ROS的安装与环境配置. ROS文件系统介绍 本教程介绍ROS文件系统概念,包括命令行工具roscd.rosls和rospack的使用. 创建R ...

  7. ROS官网初级教程学习总结(1-4)

    教程网址:http://wiki.ros.org/cn/ROS/Tutorials. 本博客为1-4小节. 安装并配置ROS环境 安装ROS 安装时记得换个好点的软件源,要不然会因为网络连接问题一直失 ...

  8. 机器人程序设计课程配套系统镜像使用说明( Ubuntu 14.04.5 + ROS indigo )

    本镜像主要针对机器人程序设计本科课程,供学生课程学习与实践操作使用,基于ROS爱好者和学生使用的反馈意见对之前发布的版本进行修正和补充,在此致谢.更新日期为:2017.03.17,ROS学习推荐网址如 ...

  9. 大学本科《机器人程序设计课程》配套系统镜像使用说明( Ubuntu 14.04.5 + ROS indigo )

    //  原文 http://blog.exbot.net/archives/3001 wiki 教程; http://wiki.ros.org/cn/ROS/Tutorials 大学本科<机器人 ...

最新文章

  1. Linux系统中创建虚拟环境详解
  2. php和python交互-PHP与Python进行数据交互
  3. word2vec 评测 sg=0 sg=1 size=100 window=3
  4. HID接口设备-简介
  5. (第2部分,共3部分):有关性能调优,Java中的JVM,GC,Mechanical Sympathy等的文章和视频的摘要...
  6. java类与继承的执行顺序
  7. FPGA异步复位设计代码
  8. Netty工作笔记0077---handler链调用机制实例4
  9. Mac使用磁盘工具创建(dmg)映像文件超详细步骤
  10. 190330每日一句
  11. 为什么AI需要的是角色扮演,而不是象棋和围棋?
  12. 中兴机顶盒刷机后服务器连接失败,刷机后rec无法进入!!!求助
  13. python ipaddr库_python访问纯真IP数据库的代码
  14. 万人拆盲盒,比特小鹿“2周年庆”云托管新团掀高潮
  15. Linux的一些基础命令
  16. Python重试机制模块:tenacity
  17. Eventide插件夏季促销
  18. Oracle CTAS
  19. 全球变暖的幕后真相.........
  20. 使用主密钥和钱包方法加密数据

热门文章

  1. 人人网之后,代替者会是谁?
  2. 用open3d将stl格式转化为ply格式,并且单位从mm转为m
  3. linux系统下修改文件命令vi的使用
  4. Linux环境下的c语言编程
  5. 【设计模式】外观模式代理模式中介者模式的区别
  6. oracle exadata x6 -m,Oracle新推Exadata X6数据库云平台
  7. UG旋钮盖模具设计与加工
  8. 安全团队不可错过的 7 个开源工具
  9. spring boot基于redis的分布式定时任务
  10. Java实训步骤第一天