RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用Cyber RT創(chuàng)建新組件

YB7m_Apollo_Dev ? 來源:lq ? 2019-01-29 15:20 ? 次閱讀

Apollo Cyber 運(yùn)行時(shí)。

其框架 ( Apollo Cyber RT Framework ) 是基于組件概念來構(gòu)建的。

組件化開發(fā)的成果是基礎(chǔ)庫和公共組件,其原則是高重用,低耦合。

如果讓我們來看組件化開發(fā)的定義,它的著重點(diǎn)就是代碼重用。代碼重構(gòu)這一步最后的結(jié)果就是提煉出一個(gè)個(gè)組件給不同的功能使用。

這里我們可以看一下其中的依賴關(guān)系:具體功能依賴提煉出來的組件,組件本身之間可能也有依賴關(guān)系,但一般不多。

每個(gè)組件都是Cyber框架的一個(gè)構(gòu)建塊, 它包括一個(gè)特定的算法模塊,此算法模塊處理一組輸入數(shù)椐并產(chǎn)生一組輸出數(shù)椐。

要?jiǎng)?chuàng)建并啟動(dòng)一個(gè)算法組件, 需要通過以下4個(gè)步驟:

初如化組件的文件結(jié)構(gòu)

實(shí)現(xiàn)組件類

設(shè)置配置文件

啟動(dòng)組件

下面的例子中,阿波君將為大家展示如何創(chuàng)建、編譯和運(yùn)行一個(gè)組件,并觀察組件在屏幕上的輸出。

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

可以在這個(gè)目錄/apollo/cyber/examples/找到很多例子,這些例子詳細(xì)展示如何使用Cyber框架的各種功能。

Note: 這些例子必須運(yùn)行在Apollo docker環(huán)境, 且需要通過Bazel來編譯。

例如組件的根目錄為

/apollo/cyber/examples/common_component_example/

需要?jiǎng)?chuàng)建以下文件:

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)

如何實(shí)現(xiàn)common_component_example.h:

繼承 Component 類;

定義自己的Init和Proc 函數(shù). Proc 需要指定輸入數(shù)椐類型;

使用CYBER_REGISTER_COMPONENT宏定義把組件類注冊(cè)成全局可用。

對(duì)于源文件 common_component_example.cc, Init 和 Proc 這兩個(gè)函數(shù)需要實(shí)現(xiàn)。

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<msg_id()<msg_id()<

創(chuàng)建 Bazel BUILD 文件.

1load("http://tools:cpplint.bzl","cpplint") 2 3package(default_visibility=["http://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"http://cyber",22"http://cyber/examples/proto:examples_cc_proto",23],24)2526cpplint()

在DAG依賴配置文件 (例如common.dag)中配置下面的項(xiàng):

Channel names: 輸入輸出數(shù)椐的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啟動(dòng)文件中(common.launch), 配置下面的項(xiàng):

組件的名字。

上一步創(chuàng)建的dag配置的名字。

組件運(yùn)行時(shí)所在的進(jìn)程目錄。

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

通過下面的命令來編譯組件:

1bash/apollo/apollo.shbuild

Note:確定組件正常編譯成功

然后配置環(huán)境:

1cd/apollo/cyber2sourcesetup.bash

有兩種方法來啟動(dòng)組件:

使用Launch文件來啟動(dòng) (推薦這種方式)

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

使用Dag文件來啟動(dòng):

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

在完上步驟后,您就使用Cyber RT成功創(chuàng)建一個(gè)新的組件。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 組件
    +關(guān)注

    關(guān)注

    1

    文章

    512

    瀏覽量

    17813

原文標(biāo)題:技術(shù)文檔 | 如何使用Cyber RT創(chuàng)建新組件

文章出處:【微信號(hào):Apollo_Developers,微信公眾號(hào):Apollo開發(fā)者社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    RT-Thread記錄(十七、 AT組件-使用at軟件包)

    AT 組件RT-Thread 一個(gè)比較典型的組件, 解決了不同網(wǎng)絡(luò)模塊AT命令之間的差異導(dǎo)致的重復(fù)開發(fā)的問題,大幅度簡(jiǎn)化了MCU+無線模塊方案開發(fā)。
    的頭像 發(fā)表于 07-06 20:33 ?4831次閱讀
    <b class='flag-5'>RT</b>-Thread記錄(十七、 AT<b class='flag-5'>組件</b>-使用at軟件包)

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

    本文介紹了RT-Thread AT組件的基本知識(shí)和AT客戶端的使用方法,幫助開發(fā)者更好地使用RT-Thread AT組件。
    發(fā)表于 03-30 07:23

    STM32cubeMX創(chuàng)建項(xiàng)目

    一、STM32cubeMX創(chuàng)建項(xiàng)目STM32使用的是nucleostm32f411re官方的開發(fā)板下面是RT-Thread官網(wǎng)下的教程,幫你更方便的創(chuàng)建基于RT-Thread實(shí)時(shí)操作系
    發(fā)表于 07-30 06:51

    使用RT-Thread的PM組件時(shí)的問題

    最近在使用RT-Thread的PM組件時(shí)遇到了一奇怪的現(xiàn)象,發(fā)現(xiàn)居然進(jìn)不去,調(diào)用HAL_PWREx_EnterSTOP2Mode(PWR_STOPENTRY_WFI)函數(shù)會(huì)直接跳過里面的__WFI
    發(fā)表于 08-13 07:14

    如何使用RT-Thread AT組件

    文章目錄前言硬件準(zhǔn)備軟件準(zhǔn)備百問網(wǎng)STM32F103ESP8266 01SESP8266介紹ESP8266 01S 技術(shù)規(guī)格參數(shù)RT-Thread源碼RT-Thread AT組件前言本文介紹
    發(fā)表于 12-10 06:14

    如何移植RT-Thread PM組件

    一, 認(rèn)識(shí) PM 組件在上一篇的文章中,介紹了如何移植 RT-Thread PM 組件,PM 組件的作用是通過 RTOS 來統(tǒng)一的管理,超低功耗是一個(gè)細(xì)致的工作,所以在使用的時(shí)候必須要
    發(fā)表于 02-23 06:01

    RT-Thread設(shè)備組件是如何運(yùn)行的

    一: 設(shè)備組件通用模型device.c設(shè)備組件device 組件的運(yùn)作大致如上圖所示。RTT DEVICE API1.是用戶對(duì)設(shè)備進(jìn)行訪問的統(tǒng)一接口。2.設(shè)備的訪問通過handler索引
    發(fā)表于 05-16 15:55

    自制Cyber??Simp徽章

    描述Cyber??Simp徽章我為錦標(biāo)賽創(chuàng)建了這個(gè) PCB,這非常困難,因?yàn)槲覍?duì) PCB 和 PCB 設(shè)計(jì)一無所知,但是通過一些練習(xí),我在這里做了這個(gè)人。這是圣誕樹的裝飾品,所以當(dāng)有人觸摸這些墊子時(shí),蜂鳴器會(huì)播放鈴鐺音樂,全部由 ESP 32 控制,一切由 CR2025
    發(fā)表于 07-29 06:00

    PSoC Creator教程:如何創(chuàng)建組件符號(hào)

    賽普拉斯 PSoC Creator教程,包括時(shí)鐘、生成組件等內(nèi)容,例如添加API模板、設(shè)置組件參數(shù)、創(chuàng)建符號(hào)、添加Library Dpendency,創(chuàng)建電路圖等。
    的頭像 發(fā)表于 07-01 12:08 ?2001次閱讀

    RT-Thread 應(yīng)用筆記 - RTC Alarm 組件的使用

    RT-Thread 應(yīng)用筆記 - 不正確使用LOG也會(huì)引發(fā)hard faultRT-Thread 應(yīng)用筆記 - RTC Alarm 組件的使用RT-Thread 應(yīng)用筆記 - freemodbus
    發(fā)表于 01-25 18:18 ?10次下載
    <b class='flag-5'>RT</b>-Thread 應(yīng)用筆記 - RTC Alarm <b class='flag-5'>組件</b>的使用

    RT-Thread全球技術(shù)大會(huì):什么是電源管理組件?

    RT-Thread全球技術(shù)大會(huì):什么是電源管理組件? ? ? ? ? ? 審核編輯:彭靜 ?
    的頭像 發(fā)表于 05-27 15:12 ?1148次閱讀
    <b class='flag-5'>RT</b>-Thread全球技術(shù)大會(huì):什么是電源管理<b class='flag-5'>組件</b>?

    RT-Thread大會(huì):組件使用和設(shè)備接入

    如何使用組件   休眠模式API:   請(qǐng)求休眠模式: void rt pm_ request(rt uint8 t sleep mode);   釋放休眠模式: void rt
    的頭像 發(fā)表于 05-27 15:21 ?778次閱讀
    <b class='flag-5'>RT</b>-Thread大會(huì):<b class='flag-5'>組件</b>使用和設(shè)備接入

    RT-Thread設(shè)備模型框架及創(chuàng)建注冊(cè)設(shè)備的實(shí)現(xiàn)

    RT-Thread設(shè)備模型框架及創(chuàng)建注冊(cè)設(shè)備的實(shí)現(xiàn)方式介紹如下:
    的頭像 發(fā)表于 05-28 10:38 ?2177次閱讀
    <b class='flag-5'>RT</b>-Thread設(shè)備模型框架及<b class='flag-5'>創(chuàng)建</b>注冊(cè)設(shè)備的實(shí)現(xiàn)

    RT-Thread文檔_FAL 組件

    RT-Thread文檔_FAL 組件
    發(fā)表于 02-22 18:41 ?0次下載
    <b class='flag-5'>RT</b>-Thread文檔_FAL <b class='flag-5'>組件</b>

    [esp32教程]3、利用idf.py創(chuàng)建組件

    [esp32教程]3、利用idf.py創(chuàng)建組件
    的頭像 發(fā)表于 05-05 09:05 ?2295次閱讀
    RM新时代网站-首页