学习ROS的一些思考

摘要

对于每个要准备进入机器人领域的小白来说,ROS应该会是每个人都绕不过的坎。用ROS做开发大概有两个月了,对于如何学习ROS有了一点点简单的看法和思考。

什么是ROS

首先看看ROS wiki对于ROS的定义:ROS (Robot Operating System, 机器人操作系统) 提供一系列程序库和工具以帮助软件开发者创建机器人应用软件。它提供了硬件抽象、设备驱动、函数库、可视化工具、消息传递和软件包管理等诸多功能。
这两个月,我也一直在思考,到底ROS是什么。
从最狭义的ROS来讲,ROS就是通信机制。鉴于机器人的控制比较复杂,对于机器人常见的编程范式“观察 - 判断 - 决策 - 行动”(OODA)来说,会涉及大量的信息通信问题,因此ROS设计了两种通信机制:基于发布订阅的消息通信和基于服务的RPC通信。有了这些通信机制,在进行机器人开发时,我们就可以设计出非常松耦合的分布式OODA软件框架。基于这种松耦合的优点,在开发过程中产生了很多很多的函数库和开发工具,使得机器人开发者可以快速复用,方便机器人应用的开发,调试。

总的来说可以从以下几个方面看待ROS。
首先是硬件抽象和设备驱动。很多比较常用的硬件在ROS中都提供了相应的包,使得开发者可以非常方便的获取传感器数据以及控制硬件。比如通过openni的包,可以非常方便的从kinect中获取彩色图像和深度图像。通过turtlebot bringup包可以实现对turtlebot的控制。
第二是构建工具和通信机制。基于通信机制和应用需求,构造出ROS Package和分布式的ROS Node,这些Package和Node构成了分布式的机器人软件框架。
第三是仿真工具和可视化工具。ROS提供了一系列仿真工具和可视化工具来提高机器人应用的开发效率。
第四是函数库和第三方开源包。ROS提供了一系列在机器人应用开发中非常实用的函数库,比如坐标转换、插件机制等等。其次很多开发者也通过开源的方式为ROS贡献优秀的算法和工具。比如在SLAM领域就有很多支持ROS的开源算法。

如何学习ROS

从我学习ROS的经历来看,学习ROS门槛低、入门快,但是ROS是典型的从入门到放弃,当真正使用ROS进行开发时,就会发现然而一切都没有那么简单。因此在这里只能简单介绍一些能够快速入门ROS的方法。

首先是要了解ROS的基本用法,包括熟悉构建ROS Package和ROS Node的过程,使用发布订阅获取消息,使用服务端和客户端实现RPC调用,Rosbag,Roslaunch,TF,rviz,gazebo等等等等。这方面的内容ROS wiki是很好的入门材料,还有一本我们学校老师翻译的《机器人操作系统(ROS)浅析》,也是很好的入门资料。

其次就是要阅读和编写一定的代码量,来提高ROS的编码水平,逐步提高对ROS的设计思想和核心概念的理解。这方面的资料推荐Turtlebot的ROS Wiki主页和《ROS By Example》这本书。通过这两份资料,可以从一个Turtlebot这样一个简单的机器人出发,借助ROS实现很多有意思的功能。

接下来应该就是从实际的应用需求出发,详细学习ROS的核心模块和核心工具,没事再看看大牛的博客,这一阶段真是印了一句老话,修行靠个人。

最后推荐一下IDE。
刚开始用过Clion,但是Clion对与ROS的支持并不完善,弃用。
转战ROS版的Qt Creator,目前来说还算好用,就是丑。
听过有个叫RoboWare的IDE不错,打算有机会用用。

总结

以上。