共計 3268 個字符,預計需要花費 9 分鐘才能閱讀完成。
這篇文章主要介紹了怎么在 Apollo 中添加新的車輛,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓丸趣 TV 小編帶著大家一起了解一下。
簡介
我們通過本文將向開發者闡述如何向 Apollo 中添加新的車輛。
注意: Apollo 控制算法將林肯 MKZ 配置為默認車輛
添加新的車輛時,如果您的車輛需要不同于 Apollo 控制算法提供的屬性,請參考:
使用適合您的車輛的其它控制算法。
修改現有算法的參數以獲得更好的結果。
添加新車輛的步驟
按照以下步驟以實現新車輛的添加:
實現新的車輛控制器
實現新的消息管理器
實現新的車輛工廠
注冊新的車輛
更新配置文件
一、實現新的車輛控制器
新的車輛控制器是從 VehicleController 類繼承的。下面提供了一個頭文件示例:
/**
* @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
...
};
二、實現新的消息管理器
新的消息管理器是從 MessageManager 類繼承的。下面提供了一個頭文件示例。
/**
* @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.
...
};
三、實施新的車輛工廠
新的車輛工廠是從 AbstractVehicleFactory 類繼承的。下面提供了一個頭文件示例。
/**
* @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;};
一個.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 提供可以用于實現新車輛協議的基類 ProtocolData。
四、注冊新的車輛
在 modules/canbus/vehicle/vehicle_factory.cc 里注冊新的車輛。下面提供了一個頭文件示例。
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 中更新配置,在 Apollo 系統中激活車輛。
vehicle_parameter {
brand: NEW_VEHICLE_BRAND
// put other parameters below
...
}
感謝你能夠認真閱讀完這篇文章,希望丸趣 TV 小編分享的“怎么在 Apollo 中添加新的車輛”這篇文章對大家有幫助,同時也希望大家多多支持丸趣 TV,關注丸趣 TV 行業資訊頻道,更多相關知識等著你來學習!