您好,登錄后才能下訂單哦!
這篇文章主要介紹了怎么在A(yíng)pollo中添加新的車(chē)輛,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
簡(jiǎn)介
我們通過(guò)本文將向開(kāi)發(fā)者闡述如何向Apollo中添加新的車(chē)輛。
注意: Apollo控制算法將林肯MKZ配置為默認(rèn)車(chē)輛
添加新的車(chē)輛時(shí),如果您的車(chē)輛需要不同于A(yíng)pollo控制算法提供的屬性,請(qǐng)參考:
使用適合您的車(chē)輛的其它控制算法。
修改現(xiàn)有算法的參數(shù)以獲得更好的結(jié)果。
添加新車(chē)輛的步驟
按照以下步驟以實(shí)現(xiàn)新車(chē)輛的添加:
實(shí)現(xiàn)新的車(chē)輛控制器
實(shí)現(xiàn)新的消息管理器
實(shí)現(xiàn)新的車(chē)輛工廠(chǎng)
注冊(cè)新的車(chē)輛
更新配置文件
一、實(shí)現(xiàn)新的車(chē)輛控制器
新的車(chē)輛控制器是從 VehicleController
類(lèi)繼承的。 下面提供了一個(gè)頭文件示例:
/** * @class NewVehicleController * * @brief this class implements the vehicle controller for a new vehicle. */ class NewVehicleController final : public VehicleController { public: /** * @brief initialize the new vehicle controller. * @return init error_code */ ::apollo::common::ErrorCode Init( const VehicleParameter& params, CanSender* const can_sender, MessageManager* const message_manager) override; /** * @brief start the new vehicle controller. * @return true if successfully started. */ bool Start() override; /** * @brief stop the new vehicle controller. */ void Stop() override; /** * @brief calculate and return the chassis. * @returns a copy of chassis. Use copy here to avoid multi-thread issues. */ Chassis chassis() override; // more functions implemented here ... };
二、實(shí)現(xiàn)新的消息管理器
新的消息管理器是從 MessageManager
類(lèi)繼承的。 下面提供了一個(gè)頭文件示例。
/** * @class NewVehicleMessageManager * * @brief implementation of MessageManager for the new vehicle */ class NewVehicleMessageManager : public MessageManager { public: /** * @brief construct a lincoln message manager. protocol data for send and * receive are added in the construction. */ NewVehicleMessageManager(); virtual ~NewVehicleMessageManager(); // define more functions here. ... };
三、實(shí)施新的車(chē)輛工廠(chǎng)
新的車(chē)輛工廠(chǎng)是從 AbstractVehicleFactory
類(lèi)繼承的。下面提供了一個(gè)頭文件示例。
/** * @class NewVehicleFactory * * @brief this class is inherited from AbstractVehicleFactory. It can be used to * create controller and message manager for lincoln vehicle. */ class NewVehicleFactory : public AbstractVehicleFactory { public: /** * @brief destructor */ virtual ~NewVehicleFactory() = default; /** * @brief create lincoln vehicle controller * @returns a unique_ptr that points to the created controller */ std::unique_ptr<VehicleController> CreateVehicleController() override; /** * @brief create lincoln message manager * @returns a unique_ptr that points to the created message manager */ std::unique_ptr<MessageManager> CreateMessageManager() override; };
一個(gè).cc
示例文件如下:
std::unique_ptr<VehicleController> NewVehicleFactory::CreateVehicleController() { return std::unique_ptr<VehicleController>(new lincoln::LincolnController()); } std::unique_ptr<MessageManager> NewVehicleFactory::CreateMessageManager() { return std::unique_ptr<MessageManager>(new lincoln::LincolnMessageManager()); }
Apollo提供可以用于實(shí)現(xiàn)新車(chē)輛協(xié)議的基類(lèi) ProtocolData
。
四、注冊(cè)新的車(chē)輛
在modules/canbus/vehicle/vehicle_factory.cc
里注冊(cè)新的車(chē)輛。 下面提供了一個(gè)頭文件示例。
void VehicleFactory::RegisterVehicleFactory() { Register(VehicleParameter::LINCOLN_MKZ, []() -> AbstractVehicleFactory* { return new LincolnVehicleFactory(); }); // register the new vehicle here. Register(VehicleParameter::NEW_VEHICLE_BRAND, []() -> AbstractVehicleFactory* { return new NewVehicleFactory(); }); }
五、更新配置文件
在 modules/canbus/conf/canbus_conf.pb.txt
中更新配置,在A(yíng)pollo系統(tǒng)中激活車(chē)輛。
vehicle_parameter { brand: NEW_VEHICLE_BRAND // put other parameters below ... }
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“怎么在A(yíng)pollo中添加新的車(chē)輛”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。