0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用Cyber RT创建新组件

YB7m_Apollo_Dev 来源:lq 2019-01-29 15:20 次阅读

Apollo Cyber 运行时。

其框架 ( Apollo Cyber RT Framework ) 是基于组件概念来构建的。

组件化开发的成果是基础库和公共组件,其原则是高重用,低耦合

如果让我们来看组件化开发的定义,它的着重点就是代码重用。代码重构这一步最后的结果就是提炼出一个个组件给不同的功能使用。

这里我们可以看一下其中的依赖关系:具体功能依赖提炼出来的组件,组件本身之间可能也有依赖关系,但一般不多。

每个组件都是Cyber框架的一个构建块, 它包括一个特定的算法模块,此算法模块处理一组输入数椐并产生一组输出数椐。

要创建并启动一个算法组件, 需要通过以下4个步骤:

初如化组件的文件结构

实现组件类

设置配置文件

启动组件

下面的例子中,阿波君将为大家展示如何创建、编译和运行一个组件,并观察组件在屏幕上的输出。

如果想更深入的探索Apollo Cyber RT框架。

可以在这个目录/apollo/cyber/examples/找到很多例子,这些例子详细展示如何使用Cyber框架的各种功能。

Note: 这些例子必须运行在Apollo docker环境, 且需要通过Bazel来编译。

例如组件的根目录为

/apollo/cyber/examples/common_component_example/

需要创建以下文件:

Header file: common_component_example.h

Source file: common_component_example.cc

Build file: BUILD

DAG dependency file: common.dag

Launch file: common.launch

1#include 2#include"cyber/class_loader/class_loader.h" 3#include"cyber/component/component.h" 4#include"cyber/examples/proto/examples.pb.h" 5 6usingapollo::cyber::examples::proto::Driver; 7usingapollo::cyber::Component; 8usingapollo::cyber::ComponentBase; 910classCommonComponentSample:publicComponent{11public:12boolInit()override;13boolProc(conststd::shared_ptr&msg0,14conststd::shared_ptr&msg1)override;15};1617CYBER_REGISTER_COMPONENT(CommonComponentSample)

如何实现common_component_example.h:

继承 Component 类;

定义自己的Init和Proc 函数. Proc 需要指定输入数椐类型;

使用CYBER_REGISTER_COMPONENT宏定义把组件类注册成全局可用。

对于源文件 common_component_example.cc, Init 和 Proc 这两个函数需要实现。

1#include"cyber/examples/common_component_example/common_component_example.h" 2#include"cyber/class_loader/class_loader.h" 3#include"cyber/component/component.h" 4 5boolCommonComponentSample::Init(){ 6AINFO<< "Commontest component init"; 7  return true; 8} 910bool CommonComponentSample::Proc(const std::shared_ptr& msg0,11                               const std::shared_ptr& msg1) {12  AINFO << "Start common component Proc [" << msg0->msg_id()<< "] ["13        << msg1->msg_id()<< "]";14  return true;15}

创建 Bazel BUILD 文件.

1load("//tools:cpplint.bzl","cpplint") 2 3package(default_visibility=["//visibility:public"]) 4 5cc_binary( 6name="libcommon_component_example.so", 7deps=[":common_component_example_lib"], 8linkopts=["-shared"], 9linkstatic=False,10)1112cc_library(13name="common_component_example_lib",14srcs=[15"common_component_example.cc",16],17hdrs=[18"common_component_example.h",19],20deps=[21"//cyber",22"//cyber/examples/proto:examples_cc_proto",23],24)2526cpplint()

在DAG依赖配置文件 (例如common.dag)中配置下面的项:

Channel names: 输入输出数椐的Channel名字

Library path: 此组件最终编译出的库的名字

Class name: 此组件的入口类的名字

1#DefineallcomsinDAGstreaming. 2component_config{ 3component_library:"/apollo/bazel-bin/cyber/examples/common_component_example/libcommon_component_example.so" 4components{ 5class_name:"CommonComponentSample" 6config{ 7name:"common" 8readers{ 9channel:"/apollo/prediction"10}11readers{12channel:"/apollo/test"13}14}15}16}

在Launch启动文件中(common.launch), 配置下面的项:

组件的名字。

上一步创建的dag配置的名字。

组件运行时所在的进程目录。

123commonname>4/apollo/cyber/examples/common_component_example/common.dagdag_conf>5commonprocess_name>6component>7cyber>

通过下面的命令来编译组件:

1bash/apollo/apollo.shbuild

Note:确定组件正常编译成功

然后配置环境:

1cd/apollo/cyber2sourcesetup.bash

有两种方法来启动组件:

使用Launch文件来启动 (推荐这种方式)

1cyber_launchstart/apollo/cyber/examples/common_component_example/common.launch

使用Dag文件来启动:

1mainboard-d/apollo/cyber/examples/common_component_example/common.dag

在完上步骤后,您就使用Cyber RT成功创建一个新的组件。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 组件
    +关注

    关注

    1

    文章

    504

    浏览量

    17799

原文标题:技术文档 | 如何使用Cyber RT创建新组件

文章出处:【微信号:Apollo_Developers,微信公众号:Apollo开发者社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    RT-Thread记录(十七、 AT组件-使用at软件包)

    AT 组件RT-Thread 一个比较典型的组件, 解决了不同网络模块AT命令之间的差异导致的重复开发的问题,大幅度简化了MCU+无线模块方案开发。
    的头像 发表于 07-06 20:33 4733次阅读
    <b class='flag-5'>RT</b>-Thread记录(十七、 AT<b class='flag-5'>组件</b>-使用at软件包)

    如何更好地使用RT-Thread AT组件

    本文介绍了RT-Thread AT组件的基本知识和AT客户端的使用方法,帮助开发者更好地使用RT-Thread AT组件
    发表于 03-30 07:23

    STM32cubeMX创建项目

    一、STM32cubeMX创建项目STM32使用的是nucleostm32f411re官方的开发板下面是RT-Thread官网下的教程,帮你更方便的创建基于RT-Thread实时操作系
    发表于 07-30 06:51

    使用RT-Thread的PM组件时的问题

    最近在使用RT-Thread的PM组件时遇到了一奇怪的现象,发现居然进不去,调用HAL_PWREx_EnterSTOP2Mode(PWR_STOPENTRY_WFI)函数会直接跳过里面的__WFI
    发表于 08-13 07:14

    如何使用RT-Thread AT组件

    文章目录前言硬件准备软件准备百问网STM32F103ESP8266 01SESP8266介绍ESP8266 01S 技术规格参数RT-Thread源码RT-Thread AT组件前言本文介绍
    发表于 12-10 06:14

    如何移植RT-Thread PM组件

    一, 认识 PM 组件在上一篇的文章中,介绍了如何移植 RT-Thread PM 组件,PM 组件的作用是通过 RTOS 来统一的管理,超低功耗是一个细致的工作,所以在使用的时候必须要
    发表于 02-23 06:01

    RT-Thread设备组件是如何运行的

    一: 设备组件通用模型device.c设备组件device 组件的运作大致如上图所示。RTT DEVICE API1.是用户对设备进行访问的统一接口。2.设备的访问通过handler索引
    发表于 05-16 15:55

    自制Cyber​​Simp徽章

    描述Cyber​​Simp徽章我为锦标赛创建了这个 PCB,这非常困难,因为我对 PCB 和 PCB 设计一无所知,但是通过一些练习,我在这里做了这个人。这是圣诞树的装饰品,所以当有人触摸这些垫子时,蜂鸣器会播放铃铛音乐,全部由 ESP 32 控制,一切由 CR2025
    发表于 07-29 06:00

    PSoC Creator教程:如何创建组件符号

    赛普拉斯 PSoC Creator教程,包括时钟、生成组件等内容,例如添加API模板、设置组件参数、创建符号、添加Library Dpendency,创建电路图等。
    的头像 发表于 07-01 12:08 1973次阅读

    RT-Thread 应用笔记 - RTC Alarm 组件的使用

    RT-Thread 应用笔记 - 不正确使用LOG也会引发hard faultRT-Thread 应用笔记 - RTC Alarm 组件的使用RT-Thread 应用笔记 - freemodbus
    发表于 01-25 18:18 10次下载
    <b class='flag-5'>RT</b>-Thread 应用笔记 - RTC Alarm <b class='flag-5'>组件</b>的使用

    RT-Thread全球技术大会:什么是电源管理组件

    RT-Thread全球技术大会:什么是电源管理组件?           审核编辑:彭静  
    的头像 发表于 05-27 15:12 1120次阅读
    <b class='flag-5'>RT</b>-Thread全球技术大会:什么是电源管理<b class='flag-5'>组件</b>?

    RT-Thread大会:组件使用和设备接入

    如何使用组件   休眠模式API:   请求休眠模式: void rt pm_ request(rt uint8 t sleep mode);   释放休眠模式: void rt
    的头像 发表于 05-27 15:21 758次阅读
    <b class='flag-5'>RT</b>-Thread大会:<b class='flag-5'>组件</b>使用和设备接入

    RT-Thread设备模型框架及创建注册设备的实现

    RT-Thread设备模型框架及创建注册设备的实现方式介绍如下:
    的头像 发表于 05-28 10:38 2142次阅读
    <b class='flag-5'>RT</b>-Thread设备模型框架及<b class='flag-5'>创建</b>注册设备的实现

    RT-Thread文档_FAL 组件

    RT-Thread文档_FAL 组件
    发表于 02-22 18:41 0次下载
    <b class='flag-5'>RT</b>-Thread文档_FAL <b class='flag-5'>组件</b>

    [esp32教程]3、利用idf.py创建组件

    [esp32教程]3、利用idf.py创建组件
    的头像 发表于 05-05 09:05 2186次阅读