https://airos-edge.readthedocs.io/zh/latest/dev_guide/device_dev.html
1 总览
1.1 功能
智路OS设备接入层包含信号机、RSU、Camera、Lidar设备的接入,接入模块的主要功能包括:
- 基于硬件厂商提供的设备SDK或规定的通信协议进行通信,获取数据或者写入数据。
- 将从设备中获取到的数据转换为智路OS规定的标准protobuf格式或者数据并调用框架提供的回调写入
- 将智路OS规定的标准protobuf格式数据转换为设备规定的数据格式并发送给设备
1.2 设计理念
车路协同系统包含多种传感器及通信设备,例如信号机、枪机、鱼眼相机、激光雷达、毫米波雷达、RSU等,各类设备与路侧边缘计算单元(RSCU)之间的协议并没有一个统一的接入标准。同种设备不同厂商可能支持不同的标准协议或者私有协议,开发者需要对各类厂商设备进行重度适配,针对标准协议的理解各厂商也存在偏差,导致数据表现存在差异。
为降低开发门槛,支持生态繁荣,智路OS定义了标准的路侧设备接入架构,为开发者提供了:
- 统一的设备接入标准协议,可自定义设备接入
- 业内广泛使用的标准接入实现,便捷复用
- 低耦合设计原则,显著简化开发、切换和升级过程
设备接入框架
设备接入框架基于抽象工厂设计模式实现,自定义设备接入实现相关流程如下所示:
- 引用设备的基类头文件,该文件定义了设备的抽象基类。
- 继承设备基类,实现自定义设备的Init等接口
- 引用设备的工厂头文件,该文件定义了设备接入智路OS的接口
- 在自定义设备实现的源文件中使用V2XOS_XXXX_REG_FACTORY接口注册设备
- 在自定义实现的函数中将从设备获取的数据使用CallBack发送到智路OS框架
- 编译时链接系统库libairos_device_pb.so和libairos_base.so
- 将编译产出和产出描述打包并进行安装
- 完成安装后,智路OS框架通过动态加载,调用开发者的设备具体实现
智路OS提供了包管理工具简化了以上开发流程,可以实现更便捷的开发
2 类说明
2.1 RSU
RSUDevice
RSU设备接入基类,开发者需要继承该类并实现对应的接口,由智路OS框架加载模块后调用。
构造函数
RSUDevice(const RSUCallBack& cb)
创建一个RSU设备接入对象,传入智路OS提供的回调,RSU设备接入可使用回调发送规定格式的数据
Init
bool Init(const std::string& conf_file)
初始化接口,在RSU设备接入初始化时调用,框架在描述文件中读取配置文件路径后传入接口,默认为绝对路径。
name | value | describe |
---|---|---|
参数 | conf_file | 框架传入的配置文件绝对路径,在开发者具体实现中读取 |
返回值 | bool | 初始化正常时返回true,初始化失败时返回false |
Start
void Start()
应用主逻辑入口,理论上内部为循环数据处理
WriteToDevice
void WriteToDevice( const std::shared_ptr<const RSUData>& re_proto)
将消息写入RSU设备的接口,经过ASN.1编码后的数据通过该接口写入,最终通过RSU发送
GetState
RSUDeviceState GetState()
获取RSU设备状态接口,由上层调用,判断RSU设备状态,设备状态定义如下
enum class RSUDeviceState {
UNKNOWN, // 未知
NORMAL, // 正常
OFFLINE // 离线
};
RSU数据
message RSUData {
required RSUDataType type = 1; // 数据类型
required bytes data = 2; // ASN编码数据
required uint64 time_stamp = 3; // UNIX时间戳,精确到ms
optional uint32 sequence_num = 4; // 消息序列码
optional MessageVersion version = 5; // 版本
}
智路OS规定的写入RSU接入模块和RSU模块输出的数据格式,开发者在继承抽象基类RSUDevice后,调用内部的RSUCallBack将数据发送给智路OS框架,数据为从RSU接收的数据,例如BSM&#