# airos **Repository Path**: mayray/airos ## Basic Information - **Project Name**: airos - **Description**: AIROS是一个车路云一体化架构面向智能道路的操作系统,一方面为北向开发者提供智能道路服务框架,一方面为南向开发者提供技术准则和集成规范。 - **Primary Language**: C++ - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 9 - **Created**: 2022-11-23 - **Last Updated**: 2022-11-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 欢迎来到AIROS的开源仓库! AIROS是一个车路云一体化架构面向智能道路的操作系统,一方面为北向开发者提供智能道路服务框架,一方面为南向开发者提供技术准则和集成规范。 目录 - [介绍](#介绍) - [系统架构](#系统架构) - [环境要求](#环境要求) - [AIROS-SDK](#airos-sdk) - [SDK目录说明](#sdk目录说明) - [快速开始](#快速开始) - [AIR-OS docker 获取](#air-os-docker-获取) - [应用方使用指南](#应用方使用指南) - [Demo使用方法](#demo使用方法) - [授权与许可](#授权与许可) - [联系我们](#联系我们) - [关于测试与验证](#关于测试与验证) ## 介绍 AIROS采用车路云一体化架构,分布式协同计算,打造新基建城市底座,可以支持感知、预测、地图、标定等基础能力,为应用开发者提供统一的开发基础依赖,为设施设备和硬件合作伙伴提供技术准则和集成规范。 ## 系统架构 技术框架图: ![技术框架图](docs/images/airos.png) AIROS的核心层和组成模块有实时操作系统内核层、硬件设备抽象层、中间件层、各类域服务、车路云通信、工具链以及安全等模块。 * 实时的操作系统内核层 实时的操作系统内核层,为运行AIROS软件栈提供了必要的内核级支持,同时进行了面向实时处理的定制优化。 * 设备抽象层 设备抽象层是基于AIROS,实现的各种设备设施接入的驱动程序。每种设备会产出各自的动态链接库,如:libxxx.so。 * 中间件层 中间件层包含通用通信计算和AI加速计算等中间件,其中最主要的是CyberRT实时计算框架和百度飞桨深度学习框架。CyberRT是一个开源的高性能运行时框架,专为“聪明的车智能的路”场景而设计。基于集中式计算模型,它针对车路云图中高并发性、低延迟和高吞吐量进行了极大的优化。飞桨(PaddlePaddle)是集深度学习核心框架、工具组件和服务平台为一体的技术先进、功能完备的开源深度学习平台。已被中国企业广泛使用,深度契合企业应用需求,拥有活跃的开发者社区生态。提供丰富的官方支持模型集合,并推出全类型的高性能部署和集成方案供开发者使用。 * 域服务 低时延信号灯服务,屏蔽不同厂商差异,提供统一信号灯接口;全量障碍物感知服务,为车辆提供盲区车、超视距能力;智能协作服务,为车辆提供辅助决策规划能力;高精地图服务,提供高精地图引擎,对高精地图数据进行解析等;提供高精度传感器设备内外参标定等服务。 * 车路云通信 智能道路软件系统会提供的车路、路云通信能力,实现与车端、云端的无缝平滑通信。 * 工具链 工具链为AIROS的编译、调试和分析提供工具支持。1、为开发者提供了一套各主要功能的依赖库版本,经过功能和性能兼容性测试、确保稳定,并提供开发环境、编译环境、调试和监控能力;2、支持数据分析、数据流追溯、数据问题录制和重现;3、提供分析工具,并且可以进一步与QA、CICD环节对接,实现DevOps的能力。 * 安全 安全是AIROS的核心理念,有信息安全和可靠性两方面侧重点,也都是从底层硬件到操作系统、设备设施抽象层、中间件层一直到服务层和应用层贯穿的部分。 ## 环境要求 - 系统:Ubuntu 18.04 - CPU: x86_64 - 内存:>=16G - Docker-CE:>= 19.03 [(官方文档)](https://docs.docker.com/engine/install/ubuntu/) ## AIROS-SDK 我们提供配套的SDK方便用户与AIROS进行交互。AIROS为车路协同提供感知能力,利用CyberRT以通道发布的形式对外输出VRU、Obstacles、RTE、Spat等消息,AIROS-SDK负责对上述数据的接收、预处理并回调业务方代码,开发者则实现具体数据的业务处理函数即可。SDK提供一系列接口用于将开发者实现的业务处理函数注册给SDK,并在收取到相关数据时进行回调处理,业务方的数据处理结果通过SDK Send接口发送给RSU。 使用方法请参考:[AIROS-SDK开发者手册](docs/source/AIROS-SDK_for_Developers.md) 详细的接口请见:[AIROS-SDK接口说明](docs/source/AIROS-SDK_Interface.md) ### SDK目录说明 - *`./conf`*:sdk配置文件目录,`airos_sdk.flag`配置经纬度转化时依赖的`zone`值,`zone`随城市位置改变,`cyber.pb.conf`为`CyberRT`配置文件 - *`./demo`*:sdk demo所在目录,含有演示demo的可执行文件`sdk_demo`及其源码`sdk_demo.c` - *`./docker`*:快速开始步骤使用的脚本 - *`./docs`*:系统架构图 - *`./include`*:sdk头文件目录,含有6个sdk头文件 - *`./lib`*:sdk库目录,含有 `libAIROSSDK.so` 以及其依赖库包`requirement` ,为方便使用,同时添加了`paddle`相关库 - *`./tools`*:sdk工具目录,含有演示数据播放器`cyber_recorder`,以及其额外依赖库`lib` - *`./env.bash`*:sdk运行环境设置脚本,使用方式`source env.bash` (为保证其生效,必须首先执行 `install.bash`) ## 快速开始 我们提供了如何使用sdk与AIROS交互的指南和实验Demo,您可以跟随指引建立自己的工程进行实验。 ### AIR-OS docker 获取 执行以下命令: ```bash # docker拉取 bash docker/scripts/docker_start.sh # 进入docker bash docker/scripts/docker_into.sh ``` ### 应用方使用指南 1. 建立用户自己的工程,并引用AIROSSDK接口头文件 ```c++ #include "AIROSSDKCommon.h" #include "AIROSPerception.h" #include "AIROSEvent.h" #include "AIROSMap.h" #include "AIROSRsu.h" #include "AIROSSpat.h" ``` 2. 用户编写各数据域的数据处理业务函数,并调用`SendRSU`函数用于将处理后的ASN消息发给AIROS框架 ```c++ #define RSU_DATA_SIZE (128) // 用户实现的vru处理函数 void proc_vru(const AIROSVRUDataType *vru_data, unsigned int size) { // 接收并处理AIROSVRUDataType数据 // 如果耗时太长,建议新建业务线程处理 for (unsigned int i=0; iid; /* ... */ } // 结果数据封包、序列化处理 struct AIROSRSUDataHeader header; header.AID[0] = 'v'; header.AID[1] = 'r'; header.msgtype = 'u'; unsigned char *res = (unsigned char *)malloc(RSU_DATA_SIZE); if (!res) { printf("proc_vru malloc failed!\n"); return; } memset(res, 0x00, RSU_DATA_SIZE); res[0] = 'v'; res[1] = 'r'; res[2] = 'u'; res[3] = '0'; res[4] = '1'; // 发送rsu if (AIROS_SUCCESSED != SendRSU(header, res, RSU_DATA_SIZE)) { printf("proc_vru SendRSU failed!\n"); /* 异常处理 */ } free(res); return; } ``` 3. 调用`AIROSPipelineInit`初始化SDK,使用SDK提供的各域数据处理函数的注册接口,将第三步用户实现的业务函数注册给AIROS框架 ```c++ // 初始化AIROSSDK if (AIROSPipelineInit() != AIROS_SUCCESSED) { fprintf(stderr, "V2X Pipeline init failed\n"); } // 注册vru数据处理函数 if (RegisterVRUCallback(proc_vru) != AIROS_SUCCESSED) { fprintf(stderr, "register VRUCallback failed\n"); } ``` 4. 链接AIROSSDK提供的第三方依赖库,编译工程(*完整的demo代码位于./demo目录*) ### Demo使用方法 我们提供了一个编译好了的,可运行的Demo,使用步骤如下: ```bash # 进入docker bash docker/scripts/docker_into.sh # 进入docker内工程主目录 cd /airos # 启动demo bash demo/run.sh ``` 成功运行会打印各类型数据处理函数接收到的“格式化数据”,比如 Obstacles数据: ``` obs_ #############3##############4 obs_ id: 37 obs_ heading: 95 obs_ lon: 1005173212 obs_ lat: 300643241 obs_ elevation: -4096 obs_ speed: 0 obs_ width: 40 obs_ length: 43 obs_ height: 62 obs_ timestamp: 1652929602003 obs_ obstacle_type: 6 obs_ source_type: 2 ``` 如果您想要查看Demo源代码,请访问[sdk_demo.c](/demo/sdk_demo.c) ## 授权与许可 AIROS在 [Apache-2.0 license ](https://gitee.com/link?target=https%3A%2F%2Fgithub.com%2FApolloAuto%2Fapollo%2Fblob%2Fmaster%2FLICENSE) 许可下提供。 ## 联系我们 您有任何问题都可以通过以下方式联系到我们: - Email:zhiluos@163.com ## 关于测试与验证 如果您已经基于开源代码,完成了相关研发工作(包括但不限于应用、驱动等),希望能够在真实硬件上进行测试。我们在北京亦庄搭建了一套具备测试、验证、调试的联合实验室,将为您提供专业的实验环境和技术对接,欢迎您前来接洽。 联合实验室地址:中国北京市大兴区北京经济技术开发区宏达中路10号永晖大厦B座4层 联系方式:发送邮件至zhiluos@163.com