前言
在研究生阶段,我曾自己学习过ROS并在一些机器人平台上进行过实践。记得最早是在Parrot的Bebop 2无人机上实现了对人脸的识别和追踪。然后是在Trossen Robotics的PincherArm机械臂上实践了基于3D点云(Kinect V1版本RGBD相机)的Pick and Place任务。
称得上“年代久远”的机械臂项目[Pincher_projects] 无人机项目[bebop_tracking]
上面谈到的两个基于ROS的小项目若大家感兴趣,可以前往Github查看。
ROS基础原理分析
机器人操作系统(ROS)是机器人中间件,本质是用于机器人软件开发的软件框架的集合。虽然ROS不是操作系统,但它提供了为异构计算机集群(heterogeneous computer cluster)设计的服务,如硬件抽象描述、底层驱动程序管理、共用功能的执行、程序间消息传递、程序发行包管理。
尽管在机器人控制中响应性和低延迟非常重要,但ROS并不是一个实时操作系统(RTOS)。然而,可以将ROS与实时计算代码进行集成。
ROS仍是目前最好用的框架之一,特别是由于ROS运行时是分散在不同的称为节点(Node)的进程中的,这些节点可以运行在同一或多个处理器上,因此,ROS允许开发者灵活添加各个功能模块而无需整体设计,增加了便利性。其次,ROS包括大量的库,方便搭建原型。并且由于ROS是学界和业界最常使用的软件,容易衡量产品性能。随着目前机器人开发的流行,ROS是机器人开发的首选框架之一。
[ROS.org URL:http://wiki.ros.org/ROS/Introduction]
[维基百科 URL:https://en.wikipedia.org/wiki/Robot_Operating_System]
前面描述的来源和依据。
基于ROS所运行进程的集合可以在一个图形(Graph)结构中呈现。ROS中的graph具体指一个由节点(Nodes)和话题(Topics)组成的图形结构,用于描述机器人系统中各个组件之间的交互。这里涉及ROS中的两个关键概念,即节点和话题:节点是指执行特定任务的进程或线程,例如传感器数据采集、运动控制等,它们可以相互通信,通过发布和订阅话题来交换数据。话题是一种消息传递机制,节点可以发布消息到话题上,其他节点则可以订阅该话题并接收消息。因此,节点之间的通信就是通过话题来实现的。
ROS中的软件和工具
ROS生态系统中的软件/工具可以分为三类:
- 与语言和平台无关的工具,主要用于构建和分发基于ROS的软件;
- ROS客户端库实现,如roscpp、rospy和roslisp;
- 包含应用代码的软件包,这些代码使用一个或多个ROS客户端库。