Robot OS 系统架构设计
1. 背景
目前移动机器人已得到了大范围应用,无论是在大型商场还是银行都可以看到移动机器人身影。移动机器人主要是移动加决策,移动方式主要以轮式和足式,在商场见到的主要以轮式拟人的形态出现,足式的主要以动物形象为主,前段时间还看到了上海一个小区,机器人上绑着喇叭在小区跑,提示人们注意做好个人防范等。
目前在着手负责移动机器人操作系统相关的工作,系统在 Android 基础上搭载智能语音图像的 AI 能力,运动控制能力封装以及决策引擎。Robot OS 整个架构设计围绕这些核心能力ß展开。
2. 系统设计准则
在和团队沟通出系统设计方案时,先定好设计准则,在我们上达成一致。
开放性:即整个 Robot OS 是开放的,而不是封闭的,允许安装第三方应用,所以要有以下能力:
有应用商店;
提供类似于小程序的开发平台;
AI 与运动能力提供开放的接口和能力;
有平台化、生态化、商业化扩展能力。
扩展性:系统是可扩展,包括:
硬件扩展性;
软件系统扩展性;
场景扩展性;
灵活性:
配置灵活性;
场景组合灵活性;
流程可干预;
高性能:
交互延时;
CPU 占用;
内存、网络、电量消耗
安全性:
防撞(日志可追溯);
防丢(远程定位、锁机);
防破解;
用户隐私保护;
高效性:
更新成本低;
开发成本低;
部署成本低;
调试成本。
目标达成共识后就开始对系统进行设计。
3. Android 系统架构介绍
Android 系统架构图:
其中我们可以看到:
Android 平台的基础是 Linux 内核。例如,Android Runtime (ART) 依靠 Linux 内核来执行底层功能,例如线程和低层内存管理。使用 Linux 内核可让 Android 利用主要安全功能,并且允许设备制造商为内核开发硬件驱动程序。
Android****专用驱动:Android Ashmen、Logger、Binder、Power Management、Low Memory Killer、PMEM(物理内存驱动)、USB Gadget、Ram Console、Time Device、Android Alarm
Android****设备驱动:Framebuff 显示驱动、Event 输入设备驱动、ALSA 音频驱动、OSS 音频驱动、v412 摄像头驱动、MTD 驱动、蓝牙驱动、WLAN 设备驱动
硬件抽象层 (HAL) 提供标准接口,向更高级别的 Java API 框架展示设备硬件功能。HAL 包含多个库模块,其中每个模块都为特定类型的硬件组件实现一个接口,例如相机或蓝牙模块。当框架 API 要求访问设备硬件时,Android 系统将为该硬件组件加载库模块。
framework 和应用层我们接触的比较多,容易理解,这里不做详细介绍。
在 Android 系统架构基础上封装出我们的 Robot OS 架构:
其中 Service 与 Core 核心层对应 Androi 的 framework 层。
4. 硬件架构设计
系统开发板是运行我们 Robot OS 的主板,通过网线与控制底盘运动的主板通信,扩展 Robot OS 的基础能力。
5. 模块设计
我们要在系统 framework 层实现语音,图像,运动相关服务,以及控制信令下发的指令接收分发服务,并未这些能力封装对应的应用层 SDK,是接入 SDK 的 APP 可以与我们提供的核心能力服务通信。
这里把每个核心能力单独设计为一个独立进程的好处:
1.隔离性:一个模块崩溃不影响另外模块;
2.开放性:所有运行在我们机器上的应用都可以通过 SDK 调用这些核心算法与运动服务;
3.安全性:提供的 SDK 只是 IPC 客户端,核心算法能力在 OS 层,防止被破解;
4.高性能:多个应用使用一个能力,该能力只在系统存在一份既可,重用提高性能。
6. 业务架构设计
业务架构设计准则:
将业务平台化,相互独立;基础业务下沉,便于复用;
将核心业务和非核心业务分离
隔离不同类型业务
区分主流程和辅助流程
基于这些准则和 OS 提供的核心能力,可以快速开发基于特定场景的产品,快速迭代,快速交付。
7. 总结
本文介绍了 Robot OS 的核心能力及架构设计,包含硬件架构设计、业务架构设计,以及模块设计,并且介绍了 Android 系统整体架构分层。
版权声明: 本文为 InfoQ 作者【轻口味】的原创文章。
原文链接:【http://xie.infoq.cn/article/50ba162d0662a1125b211c8f9】。文章转载请联系作者。
评论