Apollo系统是影响力比较大的智能驾驶开源系统,仅不说其在模型和算法上的表现,其整个车载上部署的智能驾驶系统的代码是有很多借鉴和学习的地方的。其特色主要在于其在操作系统之上构建的中间件(middleware)CyberRT,是在apollo开发过程中不断迭代逐渐发展起来的。今天不说apollo中使用的智能算法,仅说一说其中间件的特性。
ROS(Robot Operating System)是一个开源的机器人操作系统,虽说是操作系统,其实是建立在底层操作系统上的一个开源机器人的应用的框架,其基于Node的结构实现了不同的逻辑节点之间的相对独立,不同的Node之间可以通过pub/sub机制进行通信。一般一个Node为单独的进程,通信采用socket网络模式进行,效率不高,而且进程太多也会影响系统的调度。在智能驾驶系统中,ROS的框架在性能上有很多可以提升的地方,所以CyberRT在其思想之上做了不少的优化和改进更新。
apollo里采用了component为单位对计算逻辑节点进行建模,每一个计算component一般对应为一个协程,协程是比线程更小粒度的计算实体,其载体为线程,一个线程可以运行多个协程,多个协程在线程里依次切换上下文执行,不能同时并行。同时apollo里采用了processor类来对线程进行了抽象,比如processor可以调度协程,可以设置cpu亲和性等,以便对很多个任务进行合理调度编排(如某个processor在固定的cpu上进行执行,这样可以根据任务的先后顺序关系和计算量大小进行合理的任务拓扑排序,以便能够高效执行,而且这样的编排可以通过配置文件进行编辑,给系统的扩展带来了很大的灵活性)。
采用component和processor的模式相比ros的好处是每个计算逻辑单元不必是独立的进程,一个进程内部的多线程或协程间的数据访问和通信要快捷很多。关于apollo的通信机制,以前在知乎写过一篇简要的介绍文章,可以参考引文。
从我个人的感受来看,apollo系统的中间件是比较优秀的,ros2系统也估计很不错,不过没有细看过,就不好去和apollo之间去做对比了,据说其通信机制也很优秀。
以后国内开源生态建立的更完善以后,期待这样的场景:open harmony os+apollo+芯片实现万物互联的的底层软硬件基础设施,虽严格来讲apollo算是中间层,但如果和这些组合一起进行软硬件打包,对于智能机器人系统(包括智能汽车)来说,可以将开发更专注在要求更加个性化的智能算法上,从而也从效率上带来很大的提升。
References
Leave a Reply