先放一个ROSIndustrial一周年剪辑视频。
ROS已经发布八周年了,在国外科研机构中非常受欢迎。目前,以美国西南研究院为首的几位大佬开始尝试将ROS应用在工业机器人中,上面这个视频就是ROS-I项目一周年的进展情况。
为了说明讲清楚ROS,我就从ROS是什么,为什么使用ROS,如何使用ROS三个方面展开。
△出自今年《机器人视觉与应用》课程本人制作的课件
是什么
ROS是Robot Operating System的缩写,原本是斯坦福大学的一个机器人项目,后来由WillowGarage公司发展,目前由OSRF(Open Source Robotics Foundation,Inc)公司维护的开源项目。
1、首先是一个操作系统
根据wikipedia定义,操作系统是用来管理计算机硬件与软件资源,并提供一些公用的服务的系统软件。而ROS也自称是一个OS。
△计算机OS与机器人OS对比示意图
如上图所示,计算机的操作系统将计算机硬件封装起来,而应用软件运行在操作系统之上,不用管计算机具体应用的是什么类型的硬件产品。这能大大提高软件开发效率(否则大家只能都写汇编了)。
同理,ROS则是对机器人的硬件进行了封装,不同的机器人、不同的传感器,在ROS里可以用相同的方式表示(topic等),供上层应用程序(运动规划等)调用。
2、是一种跨平台模块化软件通讯机制
ROS用节点(Node)的概念表示一个应用程序,不同node之间通过事先定义好格式的消息(Topic),服务(Service),动作(Action)来实现连接。
△ROS分布特点
△三种通讯方式的特点
三种通讯方式的优缺点可看上表,由于很多模块化编程工具都有类似功能,这里就不具体展开了。
基于这种模块化的通讯机制,开发者可以很方便地替换、更新系统内的某些模块;也可以用自己编写的节点替换ROS的个别模块,十分适合算法开发。
此外,ROS可以跨平台,在不同计算机、不同操作系统、不用编程语言、不同机器人上使用。
3、是一系列开源工具
△几种ROS工具示意图:左上rqt_plot,右上rqt_graph,左下Rviz,右下TF
如上图所示,ROS为开发者提供了一系列非常有用的工具,可以大大提高我们开发的效率。
rqt_plot:可以实时绘制当前任意Topic的数值曲线;
rqt_graph:可以绘制出各节点之间的连接状态,和正在使用的Topic等;
TF:TF是Transform的简写,利用它,我们可以实时知道各连杆坐标系的位姿,也可以求出两个坐标系的相对位置。
Rviz:超强大的3D可视化工具,可以显示机器人模型、3D电影、各种文字图标、也可以很方便二次开发;
△在Rviz里显示机器人模型、3D点云、物体模型等
△在Rviz里也可以实现方便交互功能
除此之外,ROS还有很多其他有用的开源工具等待大家探索。
4、是一系列最先进的算法
△ROS包含许多先进的机器人开源项目
除了ROS之外,世界上已经有很多非常优秀的机器人开源项目,但是ROS正逐渐将它们一一囊括在自己的范畴里。例如:
PS:我跟ROS的其他几个开发者也正在努力将LinuxCNC整合进ROS
OROCOS:这个开源项目主要侧重于机器人底层控制器的设计,包括用于计算串联机械臂运动学数值解的KDL、贝叶斯滤波、实时控制等功能。
OpenRave:这是在ROS之前最多人用来做运动规划的平台,ROS已经将其中的ikfast(计算串联机械臂运动学解析解)等功能吸收。
Player:一款优秀的二维仿真平台,可以用于平面移动机器人的仿真,现在在ROS里可以直接使用。
OpenCV:大名鼎鼎的机器视觉开源项目,ROS提供了cv_bridge,可以将OpenCV的图片与ROS的图片格式相互转换。
OMPL:现在最著名的运动规划开源项目,已经成了MoveIt的一部分。
Visp:一个开源视觉伺服项目,已经跟ROS完美整合。
Gazebo:一款优秀的开源仿真平台,可以实现动力学仿真、传感器仿真等,也已被ROS吸收。
△左下角gazebo,右下角Rviz
当然,除了吸收别的优秀开源项目,ROS自己也发展出许多非常优秀的项目和库。
ORK:一个物体识别与位姿估计开源库,包含LineMod等算法,但实际使用效果还不是太理想。
△LineMod识别效果