上篇讲到,在通信机制部分,我们完全舍弃了ROS基于话题和服务的通信机制,自己又实现了一套通信系统,具体的实现主要基于Linux系统的各种通信方式,此处暂且不表,这篇我们来看下ROS另外一个重要部分——开发工具,如何在机器人产品化过程中应用。
ROS相关的开发工具有很多,大致可以分为以下几种类型:
1.ROS原生工具,比如rviz、qt工具箱、命令行工具等;
2.编译和测试工具,基于已有工具进一步的包装;
3.第三方工具,基于成熟工具,使用一些插件或接口和ROS系统兼容。
就这三种类型的工具,我们来具体分析。
一、ROS原生工具
ROS的原生工具非常丰富,可以参考wiki上的说明:
http://wiki.ros.org/Tools
无论是可视化的qt工具还是命令行工具,都频繁用于ROS开发,这些工具和ROS系统的依赖性最强,想要实现产品化并不容易。
▼ rviz
首先来看最重要的一个工具——rviz。
rviz是ROS中的一个三维可视化平台。为什么说它是ROS最重要的一个工具呢?因为rviz可以把不直观的数据统统可视化地显示出来,比如图像、地图、模型、路径等等,这些还只是rviz官方提供的显示插件。
rviz最厉害的地方是它的扩展性,可以通过插件的形式无限扩展,打造自己的人机交互界面。比如上图是ROScon2017开场演讲的Autoware项目,他们将rviz用于无人驾驶汽车的上位机平台。
上图是我们自己项目开发中设计的rviz插件,作为机器人控制的上位机。
rviz原生的显示组件配合定制化开发的插件,功能强大,开发迅速,简直不能再好用了!
OK!吹了半天rviz的强大,也得说说它的问题!
rviz最大的问题就是对ROS核心通信机制的强依赖,系统中必须要运行ROS Master,显示的数据需要通过话题发布,运行不稳定等等。。。很多时候在启动rviz的过程中,总是伴随着警告和错误,一次启动失败就再来一次,最多三四次还是可以启动成功的。。。
基于上边这些问题,rviz基本不可能直接拿来产品化,作为开发过程中的工具还是非常棒的。不过,rviz的架构设计还值得参考,我曾“企图”利用rviz的源码重新开发一个类似的界面工具,摆脱对ROS的依赖,不过最终还是因为没有时间而放弃了,有兴趣的小伙伴可以试一下,记得告诉我结果哦!
▼ 命令行工具和rqt工具
ROS提供的命令行工具非常丰富,比如rostopic、rosservice、rosnode、rosparam等等。虽然没有图形化工具那么直观,但是很多时候更加简洁明快。
ROS还提供了一系列轻量化的可视化工具,比如:
显示计算图的rqt_graph
显示数据包的rqt_bag
绘制数据曲线的rqt_plot
这些工具的问题和rviz类似,或者说ROS的原生工具都有这样的问题,毕竟是“直系血亲”,和ROS核心部分紧密相连,同样继承了ROS通信机制部分的问题。
所以,如果想在机器人产品中为用户提供相关的工具,需要慎重考虑一下面向的对象,和对稳定性的需求。
二、编译和测试工具
第二个部分是ROS提供的编译和测试工具。
▼ 编译系统——catkin
ROS的编译系统基于CMake,针对ROS本身的特点进行了包装,可以比较方便的管理包之间的依赖关系,而且ROS功能包可以实现系统模块化、松耦合的管理机制,编译开发版和发布版都没有问题。
功能包或编译系统和ROS的核心通信机制没有直接关系,所以代码里边没有任何ROS相关的代码,一样可以使用。在机器人开发过程中,我们项目中的所有代码都使用ROS包管理、catkin编译。
这种方案还有一个很大的好处,就是很容易在CMakeLists中链接ROS的库,比如tf库。tf库是坐标变换的数学处理库,而我们常用的tf功能包是在tf库的基础上加入了ROS封装,所以两者是有区别的。借助tf库可以帮助我们实现坐标变换,不需要再重复造这个轮子。
▼ 单元测试——gtest
ROS的单元测试系统基于谷歌的gtest,结合catkin编译系统,非常好用。我们项目所有的单元测试,都是通过这种方式完成,相关的语法和gtest一样,可以参考:
http://wiki.ros.org/gtest
可以说,ROS的编译和测试工具在产品化开发过程中可以直接使用,而且包管理机制、单元测试方法让整个软件系统的框架清晰明了、分工明确。
三、第三方工具
ROS的迅速崛起,也不断吸收更多第三方工具的加入,比如Gazebo、Matlab、Qt Creator、SolidWorks等。
▼
机器人仿真是机器人开发过程中非常重要的一个环节,可以针对机器人模型、应用功能、算法处理、环境状态等方面做仿真。Gazebo是ROS中主要的仿真工具,现在已经独立维护,可以通过ROS接口接入ROS环境,所以无论我们是否使用ROS,都可以使用Gazebo,从开发到产品的过渡相对平滑。
▼
Matlab是数据处理方面的强大工具,2013之后的机器人工具箱也提供了对ROS的支持,实现了ROS核心通信的大部分功能,可以运行ROS Master和节点,并且发布话题消息。这为ROS开发提供了一个强大的数据演算后台,也可以利用matlab的可视化编程功能,实现人机界面的开发。
▼
Qt Creator、SolidWorks等工具,都是以插件的形式提供对ROS的支持,从而实现与ROS相关的功能。
随着ROS的发展,会有越来越多的第三方工具加入ROS的生态环境,这些“兵器”也必定会直接带来生产效率的提高,促进机器人产品化的进程!
本篇针对ROS相关的部分工具进行了分析,当然还有很多工具没有涵盖进来。工具的根本目的是提高我们的开发效率,每一种工具都有其擅长之地,也有其不足之处,所以在我们设计、开发机器人产品的过程中,可以综合考虑,发挥每一个开发工具的优势。
(未完待续)
PS. 下篇预告:浅谈ROS的产品化探索(三)——应用功能篇