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?["?<msg_id()<"]?["13????????<msg_id()<"]";14??return?true;15}
創建 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配置的名字。
組件運行時所在的進程目錄。
1
通過下面的命令來編譯組件:
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文章
505瀏覽量
17802
原文標題:技術文檔 | 如何使用Cyber RT創建新組件
文章出處:【微信號:Apollo_Developers,微信公眾號:Apollo開發者社區】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論