ROS是Robot Operating Syetem(机器人操作系统)的简称.ROS开始于2007年,在斯坦福大学人工智能实验室斯坦福AI机器人项目的支持下开发了ROS。从2010年3月2日发布的第一版ROS Box Turtle至今(截止到2018年8月)已有12个版本。其中三个长期支持版本,并对应着的Ubuntu的的三个LTS版本具体如下:
可以说,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为开发者提供了一系列高效的开发工具,可以极大提高研究人员的开发效率。
除了ROS本身之外,世界上已经有很多非常优秀的机器人开源项目,但是ROS正逐渐将它们一一囊括在自己的范畴里,所以你可以在ROS里面很容易的使用这些开源项目:
当然,除了吸收别的优秀开源项目,ROS自己也发展出许多非常优秀的项目和库。
想要深入掌握ROS,是相当有难度的,特别是当你是嵌入式领域的新手,更是难上加难,在ROS的学习道路上不单单只是ROS的知识,还涉及到C++,python语言,甚至深入的会遇到机器人学,深度学习,Linux操作系统等问题,总之,学习ROS并不像学习单片机一样单纯,在学习ROS之前需要有一定的心理准备面对其他方面的知识。
一般入门之前需要一定的Linux系统知识,C++或者python知识,再之后的道路是从接触ROS的核心概念开始入手,像几种核心通信机制,关键工具包等,想要更好的掌握使用ROS还需要学习上述的项目与库。
ROS学习并非一朝一夕可以完成,接下来我也会坚持发表关于ROS学习的笔记,如有哪里不对的,也可以请各位指正。