ROS史话36篇.24 ROS之编译系统
编译系统将各种软件包组织在一起,生产一个可执行程序或被其他可执行程序调用的库文件。如果我们记得 ROS 的设计原则之一是:跨平台和多语言支持,做到这一点非常不易,编译系统起到关键作用。
大家试想一下,你下载了他人的代码,这个代码是 C/C++写的,你希望让代码能在Windows下跑起来,这时候,你又发现了一个算法,这个算法是Python写的,你怎么把他们集成在一起。一般情况下,你可能还要下载一些第三方的软件包,放在合适的目录表,还要要考虑是各个软件包是 32位的,还是 64位的。
任何一步,遇到问题,都要费不少功夫,也有可能最终不成功,不得不放弃。
ROS 将世界各地,不同人写的代码组织起来,还要支持不同的操作系统,有些代码是 C/C++写的,有的是 Python写的,有些事 Java写的。
每个人写的代码又可能用到五花八门的软件包,想想把这些源代码,软件包,各类库文件,生产一个可执行的程序,可真不易啊。
这样的跨平台编译工具不是没有,大家常用的 CMake 就是常用的一种跨平台的编译工具。
rosbuild 的核心也还是 CMake。 rosbuild 的是由布莱恩·格基(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版本(拉风龟)开始,正式将 catkin18编译系统引进 ROS,希望能替代原有的编译系统rosbuild。
catkin 的是由特洛伊·斯特拉斯海姆(Troy Straszheim)、莫腾·谢尔高(Morten Kjaergaard)、布莱恩·格基(Brian Gerkey)、德克·托马斯(Dirk Thomas)负责开发的。特洛伊·斯特拉斯海姆和布莱恩·格基,这两位前面说过,他们参与过rosbuild的开发。
另外两位莫腾·谢尔高和德克·托马斯。莫腾·谢尔高毕业于丹麦技术大学(Technical University of Denmark),获机器人方向博士学位,后加入一家人工智能+医疗的创业公司,任 CTO。德克·托马斯毕业于德国达姆施塔特工业大学(Technische Universität Darmstadt),加入车库后不久,就随 ROS 团队,一起加入布莱恩·格基领导的机器人开源基金会(OSRF)。
到了 ROS2,则推出了替代 catkin的新的编译系统 ament19。ROS的编译系统不停进行调整,说明这个问题一直没有很好的解决。用户编写的软件包都是相互独立,耦合性较弱,这一方面方便了用户独立开发,不用管其它软件的存在形式。
另一方面,这样一个低耦合、模块化、分布式的框架,对于编译系统来讲有相当的挑战,编译系统需要正确、快速地、自动编译生成一个可运行软件包,需要解决软件包之间的依赖关系。
相比 ROS 最初使用的 rosbuild,catkin 在做了一些改进,如支持 CMake 配置文件的自动生成。ament的引入还主要是为ROS2考量的,所以原有的ROS1还是用catkin 作为编译系统,ROS2 则用 ament。
这样的考虑是极明智,不是左右人都愿意或有能力将现有的系统从ROS1迁移到ROS2。
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号