# 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采用车路云一体化架构,分布式协同计算,打造新基建城市底座,可以支持感知、预测、地图、标定等基础能力,为应用开发者提供统一的开发基础依赖,为设施设备和硬件合作伙伴提供技术准则和集成规范。
## 系统架构
技术框架图:

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