编译系统将各种软件包组织在一起,生产一个可执行程序或被其他可执行程序调用的库文件。如果我们记得ROS的设计原则之一是:跨平台和多语言支持,做到这一点非常不易,编译系统起到关键作用。
大家试想一下,你下载了他人的代码,这个代码是C/C++写的,你希望让代码能在Windows下跑起来,这时候,你又发现了一个算法,这个算法是Python写的,你怎么把他们集成在一起。一般情况下,你可能还要下载一些第三方的软件包,放在合适的目录表,还要要考虑是各个软件包是32位的,还是64位的。任何一步,遇到问题,都要费不少功夫,也有可能最终不成功,不得不放弃。
ROS将世界各地,不同人写的代码组织起来,还要支持不同的操作系统,有些代码是C/C++写的,有的是Python写的,有些事Java写的。每个人写的代码又可能用到五花八门的软件包,想想把这些源代码,软件包,各类库文件,生产一个可执行的程序,可真不易啊。
这样的跨平台编译工具不是没有,大家常用的CMake就是常用的一种跨平台的编译工具。
rosbuild的核心也还是CMake。 rosbuild的是由布莱恩·格基(Brian Gerkey)、特洛伊·斯特拉斯海姆(Troy Straszheim)、摩根·奎格利(Morgen Quigley)负责开发的。
图:从左到右,布莱恩·格基(Brian Gerkey)、特洛伊·斯特拉斯海姆(Troy Straszheim)、摩根·奎格利(Morgen Quigley)
布莱恩·格基毕业于南加州大学(University of Southen California )。前面说过,Gazebo的两位开发者安德鲁·霍华德(Andrew Howard)和凯特·考尼(Nate Koenig)在也在南加州大学工作或学习过。布莱恩·格基,大学期间就热衷于机器人开源软件,他负责开发Player机器人开发环境,在机器人学界的影响力非常大。后来加入车库,并领导ROS的开发,关于布莱恩·格基、Player和ROS团队我们以后再说。
图:特洛伊·斯特拉斯海姆
后来, 特洛伊·斯特拉斯海姆与车库的两位资深科学家科特·康诺利格(Kurt Konolige,CTO)和 盖里·布拉德斯基(Gary Bradski), 还有伊森·鲁布利(Ethan Rublee),史蒂芬·英特托瑟(Stefan Hinterstoisser)一起创建了Industrial Perception, Inc.(IPI)。 后IPI被Google收购,随公司一起加入Goo9gle。
rosbuild的初衷还是为车库自己的机器人开发而设计的。对硬件的兼容性,对各种操作系统的兼容性,都考虑的不周全。当时几乎没有特别考虑对MS Windows的兼容性。虽然,丹尼尔·斯托尼(Daniel Stonier),这位澳大利亚人领导一个韩国团队开发了win_ros,随着ros版本的演进,并没有人进一步的维护。rosbuild用了很多Linux特有的脚本命令,Windows下没有相应的命令。随着ROS社群的扩大,各种硬件都希望利用ROS,各种软件包越来越多,编译效率(速度)变得越来越低。在这样一个大背景下,大家期待一个新的编译系统,这样catkin应运而生。
从G版本(拉风龟)开始,正式将catkin[1]编译系统引进ROS,希望能替代原有的编译系统rosbuild。
catkin的是由特洛伊·斯特拉斯海姆(Troy Straszheim)、莫腾·谢尔高(Morten Kjaergaard)、布莱恩·格基(Brian Gerkey)、德克·托马斯(Dirk Thomas)负责开发的。特洛伊·斯特拉斯海姆和布莱恩·格基,这两位前面说过,他们参与过rosbuild的开发。
另外两位莫腾·谢尔高和德克·托马斯。莫腾·谢尔高毕业于丹麦技术大学(Technical University of Denmark),获机器人方向博士学位,后加入一家人工智能+医疗的创业公司,任CTO。德克·托马斯毕业于德国达姆施塔特工业大学(Technische Universität Darmstadt),加入车库后不久,就随ROS团队,一起加入布莱恩·格基领导的机器人开源基金会(OSRF)。
图:左:莫腾·谢尔高(Morten Kjaergaard),右:德克·托马斯(Dirk Thomas)
到了ROS2,则推出了替代catkin的新的编译系统ament[2]。ROS的编译系统不停进行调整,说明这个问题一直没有很好的解决。用户编写的软件包都是相互独立,耦合性较弱,这一方面方便了用户独立开发,不用管其它软件的存在形式。另一方面,这样一个低耦合、模块化、分布式的框架,对于编译系统来讲有相当的挑战,编译系统需要正确、快速地、自动编译生成一个可运行软件包,需要解决软件包之间的依赖关系。相比ROS最初使用的rosbuild,catkin在做了一些改进,如支持CMake配置文件的自动生成。ament的引入还主要是为ROS2考量的,所以原有的ROS1还是用catkin作为编译系统,ROS2则用ament。这样的考虑是极明智,不是左右人都愿意或有能力将现有的系统从ROS1迁移到ROS2。
[1] catkin意为“柳树上结的尾状花序”,源于公司的名称“柳树车库”。“The name catkin comes from the tail-shaped flower cluster found on willow trees — a reference to Willow Garage where catkin was created. ”
[2] ament跟catkin意思相近意为“柳树上的花序”