<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
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<msg_id()<msg_id()<

創建 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)中配置下面的項:

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

    文章

    363

    瀏覽量

    17638

原文標題:技術文檔 | 如何使用Cyber RT創建新組件

文章出處:【微信號:Apollo_Developers,微信公眾號:Apollo開發者社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    如何讓RT-thread接入機智云來創建一個線程去點亮LED

    本文以gokit為例,闡述RT-thread接入機智云,創建一個線程,點亮一盞燈。
    的頭像 發表于 07-17 08:59 ?6404次閱讀
    如何讓<b class='flag-5'>RT</b>-thread接入機智云來<b class='flag-5'>創建</b>一個線程去點亮LED

    組件創建訪問組件定義錯誤

    ()做工精細。但使用該組件定義創建一個錯誤信息,例如:` instance_name美元` _spi_sts_tx_fifo_not_full將導致一個錯誤消息:未申報(在函數首先使用)。如果我注釋掉這行
    發表于 02-22 13:35

    如何更好地使用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 ?1815次閱讀

    RT-Thread文件系統組件在STM32H743上的應用

    RT-Thread(后文簡稱RT)提供的DFS組件、Fatfs組件和SDIO驅動組合起來可用于操作SD卡,但RT的底層驅動目前對STM32H
    發表于 12-05 18:36 ?4次下載
    <b class='flag-5'>RT</b>-Thread文件系統<b class='flag-5'>組件</b>在STM32H743上的應用

    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大會:組件使用和設備接入

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

    RT-Thread設備模型框架及創建注冊設備的實現

    RT-Thread設備模型框架及創建注冊設備的實現方式介紹如下:
    的頭像 發表于 05-28 10:38 ?1861次閱讀
    <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>
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>