上篇讲到,在通信机制部分,我们完全舍弃了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官方提供的显示插件。

1

rviz最厉害的地方是它的扩展性,可以通过插件的形式无限扩展,打造自己的人机交互界面。比如上图是ROScon2017开场演讲的Autoware项目,他们将rviz用于无人驾驶汽车的上位机平台。

 

2

上图是我们自己项目开发中设计的rviz插件,作为机器人控制的上位机。

rviz原生的显示组件配合定制化开发的插件,功能强大,开发迅速,简直不能再好用了!

OK!吹了半天rviz的强大,也得说说它的问题!

rviz最大的问题就是对ROS核心通信机制的强依赖,系统中必须要运行ROS Master,显示的数据需要通过话题发布,运行不稳定等等。。。很多时候在启动rviz的过程中,总是伴随着警告和错误,一次启动失败就再来一次,最多三四次还是可以启动成功的。。。

基于上边这些问题,rviz基本不可能直接拿来产品化,作为开发过程中的工具还是非常棒的。不过,rviz的架构设计还值得参考,我曾“企图”利用rviz的源码重新开发一个类似的界面工具,摆脱对ROS的依赖,不过最终还是因为没有时间而放弃了,有兴趣的小伙伴可以试一下,记得告诉我结果哦!

 

▼ 命令行工具和rqt工具

3

ROS提供的命令行工具非常丰富,比如rostopic、rosservice、rosnode、rosparam等等。虽然没有图形化工具那么直观,但是很多时候更加简洁明快。

ROS还提供了一系列轻量化的可视化工具,比如:

 

4

显示计算图的rqt_graph

 

5

显示数据包的rqt_bag

 

6

绘制数据曲线的rqt_plot

 

这些工具的问题和rviz类似,或者说ROS的原生工具都有这样的问题,毕竟是“直系血亲”,和ROS核心部分紧密相连,同样继承了ROS通信机制部分的问题。

所以,如果想在机器人产品中为用户提供相关的工具,需要慎重考虑一下面向的对象,和对稳定性的需求。

 

二、编译和测试工具

第二个部分是ROS提供的编译和测试工具。

▼ 编译系统——catkin

7

ROS的编译系统基于CMake,针对ROS本身的特点进行了包装,可以比较方便的管理包之间的依赖关系,而且ROS功能包可以实现系统模块化、松耦合的管理机制,编译开发版和发布版都没有问题。

功能包或编译系统和ROS的核心通信机制没有直接关系,所以代码里边没有任何ROS相关的代码,一样可以使用。在机器人开发过程中,我们项目中的所有代码都使用ROS包管理、catkin编译。

这种方案还有一个很大的好处,就是很容易在CMakeLists中链接ROS的库,比如tf库。tf库是坐标变换的数学处理库,而我们常用的tf功能包是在tf库的基础上加入了ROS封装,所以两者是有区别的。借助tf库可以帮助我们实现坐标变换,不需要再重复造这个轮子。

 

▼ 单元测试——gtest

8

ROS的单元测试系统基于谷歌的gtest,结合catkin编译系统,非常好用。我们项目所有的单元测试,都是通过这种方式完成,相关的语法和gtest一样,可以参考:

http://wiki.ros.org/gtest

可以说,ROS的编译和测试工具在产品化开发过程中可以直接使用,而且包管理机制、单元测试方法让整个软件系统的框架清晰明了、分工明确。

 

三、第三方工具

ROS的迅速崛起,也不断吸收更多第三方工具的加入,比如Gazebo、Matlab、Qt Creator、SolidWorks等。

9

机器人仿真是机器人开发过程中非常重要的一个环节,可以针对机器人模型、应用功能、算法处理、环境状态等方面做仿真。Gazebo是ROS中主要的仿真工具,现在已经独立维护,可以通过ROS接口接入ROS环境,所以无论我们是否使用ROS,都可以使用Gazebo,从开发到产品的过渡相对平滑。

 

10

Matlab是数据处理方面的强大工具,2013之后的机器人工具箱也提供了对ROS的支持,实现了ROS核心通信的大部分功能,可以运行ROS Master和节点,并且发布话题消息。这为ROS开发提供了一个强大的数据演算后台,也可以利用matlab的可视化编程功能,实现人机界面的开发。

 

11

Qt Creator、SolidWorks等工具,都是以插件的形式提供对ROS的支持,从而实现与ROS相关的功能。

随着ROS的发展,会有越来越多的第三方工具加入ROS的生态环境,这些“兵器”也必定会直接带来生产效率的提高,促进机器人产品化的进程!

本篇针对ROS相关的部分工具进行了分析,当然还有很多工具没有涵盖进来。工具的根本目的是提高我们的开发效率,每一种工具都有其擅长之地,也有其不足之处,所以在我们设计、开发机器人产品的过程中,可以综合考虑,发挥每一个开发工具的优势。

 

未完待续

 

PS. 下篇预告:浅谈ROS的产品化探索(三)——应用功能篇

 

Capture