共計(jì) 2033 個(gè)字符,預(yù)計(jì)需要花費(fèi) 6 分鐘才能閱讀完成。
丸趣 TV 小編給大家分享一下 Apollo 中怎么添加新的控制算法,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
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ì)的闡述:
一、創(chuàng)建一個(gè)控制器
所有控制器都必須繼承基類 Controller,它定義了一組接口。以下是控制器實(shí)現(xiàn)的示例:
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
二、添加新控制器的配置信息
按照下面的步驟在文件 control_config 中添加新控制器的配置信息:
1、根據(jù)算法要求為新控制器配置和參數(shù)定義 proto。作為示例,可以參考以下位置的 LatController 的 proto 定義:modules/control/proto/ lat_controller_conf.proto
2、定義新的控制器 proto 之后,例如 new_controller_conf.proto,輸入以下內(nèi)容:
syntax = proto2
package apollo.control;
message NewControllerConf {
double parameter1 = 1;
int32 parameter2 = 2;
}
3、參考如下內(nèi)容更新 modules/control/proto/control_conf.proto 文件:
optional apollo.control.NewControllerConf new_controller_conf = 15;
4、參考以內(nèi)容更新 ControllerType(在 modules/control/proto/control_conf.proto 中):
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)目可能使用不同的控制配置文件。
三、注冊(cè)新控制器
要激活 Apollo 系統(tǒng)中的新控制器,請(qǐng)?jiān)谌缦挛募械摹癈ontrollerAgent”中注冊(cè)新控制器:modules/control/controller/controller_agent.cc
按照如下示例添加注冊(cè)信息:
void ControllerAgent::RegisterControllers() {
controller_factory_.Register(
ControlConf::NEW_CONTROLLER,
[]() - Controller * { return new NewController(); });
}
在完成以上步驟后,您的新控制器便可在 Apollo 系統(tǒng)中生效。
以上是“Apollo 中怎么添加新的控制算法”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注丸趣 TV 行業(yè)資訊頻道!