- 作者
- 赵曦
- 日期
- 2023/10/02
上一篇教程:顶层模块开发基本流程 ↑
下一篇教程:读取(默认)数据以控制逻辑分支 ↓
概述
软件模块一般在使用时仅涉及到 4 个功能模块,即 检测与识别模块(功能模块) , 补偿模块(功能模块) , 目标预测模块(功能模块) ,和 决策模块(功能模块) 。此外,用户仍然可以基于 RMVL 提供的抽象类数据组件(如 rm::feature )完成适用于个人项目中派生数据组件的接口设计,在这种情况下,初始化的内容可能需要考虑到这些数据组件,在本文中不多介绍。
而硬件设备主要有感知设备和通信设备,目前 RMVL 包含的感知设备涉及到
相机设备
光源控制器
激光雷达
通信设备涉及到
数据链路层
运输层/应用层
软件模块
实际上,各个功能模块在运行时初始化的主要依据正是通信传输的控制信息,这里仅介绍功能模块在运行时初始化的最一般写法。
4 个功能模块均提供了对应的 make_xxx
静态工厂函数,可直接使用此函数完成初始化操作,在 API 概念 的 低耦合逻辑 中涉及到了以下写法,其中最后一个序列组列表则是贯穿于所有功能模块的数据组件集合。
std::vector<rm::group::ptr> groups;
static std::unique_ptr< ArmorDetector > make_detector()
构建 ArmorDetector
Definition: armor_detector.h:66
static std::unique_ptr< ArmorPredictor > make_predictor()
构建 ArmorPredictor
Definition: armor_predictor.h:27
static std::unique_ptr< GravityCompensator > make_compensator()
构造 GravityCompensator
Definition: gravity_compensator.h:27
static std::unique_ptr< TranslationDecider > make_decider()
构造 TranslationDecider
Definition: translation_decider.h:29
std::unique_ptr< compensator > ptr
Definition: compensator.h:53
std::unique_ptr< decider > ptr
Definition: decider.h:43
std::unique_ptr< detector > ptr
Definition: detector.h:51
std::unique_ptr< predictor > ptr
Definition: predictor.h:60
此外,要注意某些静态工厂函数可能需要传入参数,这些参数一般就是对应功能类的构造函数的入参。具体的功能模块在使用上均可参考该类对应的说明文档。
感知设备
相机设备
相机模块可参考手册 相机设备 ,此处不多赘述,以 rm::HikCamera 为例,直接使用
static std::unique_ptr< HikCamera > make_capture(GrabMode grab_mode, RetrieveMode retrieve_mode, std::string_view serial="")
构建 HikCamera 对象 Construct HikCamera object
Definition: hik_camera.h:79
@ RETRIEVE_CV
使用 OpenCV 的 'cvtColor' 进行处理 Retrieve using cvtColor function in OpenCV
Definition: camutils.hpp:41
@ GRAB_CONTINUOUS
连续采样 Continuous grabbing
Definition: camutils.hpp:31
即可完成相机的初始化。
光源控制器
激光雷达
通信设备
数据链路层
串行接口通信,使用方法见 串口通信模块
示例
#pragma pack(1)
struct SendStruct
{
uint8_t test;
};
#pragma pack()
struct ReceiveStruct
{
uint8_t test;
} __attribute__((packed));
int main()
{
auto port = rm::SerialPort("ttyACM1", B115200);
}
- 注解
- 初始化硬件设备同时要定义好串口通信协议
- 串口通信协议可参考 链路层协议 小节
运输层/应用层
涉及到运行时切换模块的功能,可以对上述 软件模块 中的写法进行拓展,请继续阅读下一篇 读取(默认)数据以控制逻辑分支 以了解数据信息是如何控制程序分支的。