Apollo中的控制算法由一個(gè)或多個(gè)控制器組成,可以輕松更改或替換為不同的算法。 每個(gè)控制器將一個(gè)或多個(gè)控制命令輸出到CANbus。 Apollo中的默認(rèn)控制算法包含橫向控制器(LatController)和縱向控制器(LonController)。 它們分別負(fù)責(zé)橫向和縱向的車輛控制。
新的控制算法不必遵循默認(rèn)模式,例如,一個(gè)橫向控制器+一個(gè)縱向控制器。 它可以是單個(gè)控制器,也可以是任意數(shù)量控制器的組合。
添加新的控制算法的步驟:
▼
創(chuàng)建一個(gè)控制器
在文件control_config中添加新控制器的配置信息
注冊(cè)新控制器
為了更好的理解,下面對(duì)每個(gè)步驟進(jìn)行詳細(xì)的闡述:
1
創(chuàng)建一個(gè)控制器
所有控制器都必須繼承基類Controller,它定義了一組接口。 以下是控制器實(shí)現(xiàn)的示例:
123456789101112131415161718 | namespace apollo {namespace control {class NewController : public Controller { public: NewController(); virtual ~NewController(); Status Init(const ControlConf* control_conf) override; Status ComputeControlCommand( const localization::LocalizationEstimate* localization, const canbus::Chassis* chassis, const planning::ADCTrajectory* trajectory, ControlCommand* cmd) override; Status Reset() override; void Stop() override; std::string Name() const override;};} // namespace control} // namespace apollo |
2添加新控制器的配置信息
按照下面的步驟在文件control_config中添加新控制器的配置信息:
1、根據(jù)算法要求為新控制器配置和參數(shù)定義proto。作為示例,可以參考以下位置的LatController的proto定義:modules/control/proto/ lat_controller_conf.proto
2、定義新的控制器proto之后,例如new_controller_conf.proto,輸入以下內(nèi)容:
12345678 | syntax = "proto2";package apollo.control;message NewControllerConf { double parameter1 = 1; int32 parameter2 = 2;} |
3、參考如下內(nèi)容更新modules/control/proto/control_conf.proto文件:
1 | optional apollo.control.NewControllerConf new_controller_conf = 15; |
4、參考以內(nèi)容更新ControllerType(在modules/control/proto/control_conf.proto中):
12345 | enum ControllerType { LAT_CONTROLLER = 0; LON_CONTROLLER = 1; NEW_CONTROLLER = 2; }; |
protobuf定義完成后,在modules/control/conf/lincoln.pb.txt中相應(yīng)更新控制配置文件。
注意:上面的"control/conf"文件是Apollo的默認(rèn)文件。您的項(xiàng)目可能使用不同的控制配置文件。
3注冊(cè)新控制器
要激活A(yù)pollo系統(tǒng)中的新控制器,請(qǐng)?jiān)谌缦挛募械摹癈ontrollerAgent”中注冊(cè)新控制器:modules/control/controller/controller_agent.cc
按照如下示例添加注冊(cè)信息:
12345 | void ControllerAgent::RegisterControllers() { controller_factory_.Register( ControlConf::NEW_CONTROLLER, []() -> Controller * { return new NewController(); });} |
在完成以上步驟后,您的新控制器便可在Apollo系統(tǒng)中生效。
-
控制器
+關(guān)注
關(guān)注
112文章
16445瀏覽量
179451 -
控制算法
+關(guān)注
關(guān)注
4文章
166瀏覽量
21795
原文標(biāo)題:技術(shù)文檔 | 如何添加新的控制算法
文章出處:【微信號(hào):Apollo_Developers,微信公眾號(hào):Apollo開發(fā)者社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
在Apollo2_ble 中添加一個(gè)service
stm32直流電機(jī)控制—PID算法篇 相關(guān)資料推薦
GPIO的庫(kù)函數(shù)添加步驟
如何對(duì)Apollo2.5 CANBUS進(jìn)行全面調(diào)試?
apollo2 mcu開發(fā)的相關(guān)資料分享
PID算法調(diào)試步驟
Ambiq Apollo4的相關(guān)資料推薦
Apollo Heritage版音頻接口附帶的插件
RT-Thread Nano添加shell的步驟有哪些
怎么解決Ambiq Apollo3移植鏈接腳本出錯(cuò)的問題呢?
淺析Apollo 2.5限定場(chǎng)景低成本技術(shù)方案
apollo系列之apollo2 mcu開發(fā)(基礎(chǔ)篇)之1.1-apollo2 mcu簡(jiǎn)介
![<b class='flag-5'>apollo</b>系列之<b class='flag-5'>apollo</b>2 mcu開發(fā)(基礎(chǔ)篇)之1.1-<b class='flag-5'>apollo</b>2 mcu簡(jiǎn)介](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
EEMD方法的原理與算法實(shí)現(xiàn)步驟
![EEMD方法的原理與<b class='flag-5'>算法</b>實(shí)現(xiàn)<b class='flag-5'>步驟</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評(píng)論