概述
dreamview 的readme.md介绍如下:
一、Introduction
Dreamview或Apollo的HMI模块提供了一个web应用程序,帮助开发人员可视化其他相关自主驾驶模块的输出,例如车辆的规划轨迹、车辆定位、底盘状态等。
二、Input
dreamview监视的消息如下:
1.定位,消息类型“LocalizationEstimate”, 消息定义文件“Localization/proto/Localization.proto",话题名称“/apollo/localizaton/pose";
2.底盘消息,消息类型"Chassis",消息定义文件“canbus/proto/Chassis.proto",话题名称“/apollo/canbus/chassis";
3.规划消息,消息类型“ADCTrajectory",消息定义文件”Planning/proto/Planning",话题名称“/apollo/planning";
4.监控消息,消息类型“MonitorMessage",消息定义文件"common/Monitor/proto/monitor.proto",话题名称”/apollo/monitor";
5.感知障碍结果,消息类型“PerceptionObstacles”,消息定义文件“perception/proto/perception_obstacle.proto",话题名称"/apollo/perception/obstacles";
6.预测结果,消息类型“PredictionObstacles",消息定义文件”prediction/proto/prediction_obstacle.proto",话题名称“/apollo/prediction";
7.路由寻径结果,消息类型“RoutingResponse",消息定义文件”/routing/proto/routing.proto",话题名称“/apollo/routing_response";
三、output
在模拟世界中显示对监控消息进行基于web的动态3D渲染。
四、后端主文件:
modules/apollo/dreamview/main.cc
4.1.实例化Dreamview
apollo::dreamview::Dreamview dreamview; (构造函数采用默认构造函数)
4.2.执行dreamview Init()和Start();
4.2.1 dreamview.Init()
VehicleConfigHelper::Init();
定义options,初始化server_:
server_.reset(new CivetServer(options));
server时CivetWeb的服务器,WebSocketHandler是用来处理和服务器的数据通信(发送和接收),这里这里注册了四个WebSocketHandler,分别为websocket_,map_ws,point_cloud_ws,camera_ws_ ,还有一个ImageHandler可以传输图像。
websocket_.reset(new WebSocketHandler("SimWorld"));
map_ws_.reset(new WebSocketHandler("Map"));
point_cloud_ws_.reset(new WebSocketHandler("PointCloud"));
camera_ws_.reset(new WebSocketHandler("Camera"));
image_.reset(new ImageHandler());
//增加handler
server_->addWebSocketHandler("/websocket", *websocket_);
server_->addWebSocketHandler("/map", *map_ws_);
server_->addWebSocketHandler("/pointcloud", *point_cloud_ws_);
server_->addWebSocketHandler("/camera", *camera_ws_);
server_->addHandler("/image", *image_);
这几个handler只是用来发送/接收的一个接口,实际的执行在下面这几个线程中:
std::unique_ptr<SimulationWorldUpdater> sim_world_updater_;
std::unique_ptr<PointCloudUpdater> point_cloud_updater_;
std::unique_ptr<HMI> hmi_;
std::unique_ptr<PerceptionCameraUpdater> perception_camera_updater_;
对上面几个线程做解释:
//sim_world_updater_实例化
sim_world_updater_.reset(new SimulationWorldUpdater(
websocket_.get(), map_ws_.get(), camera_ws_.get(), sim_control_.get(),
map_service_.get(), perception_camera_updater_.get(),
FLAGS_routing_from_file));
//实例化中用到了
//1. websocket_ 类型:WebSocketHandler
//2. map_ws_ 类型:WebSocketHandler
//3. camera_ws_ 类型:WebSocketHandler
//4. sim_control_ 类型:SimControl 是一个单独的类(sim_control_.reset(new
// SimControl(map_service_.get()));)
//5. map_service_ 类型:MapService 是一个单独的类 (map_service_.reset(new
// MapService());)
//6. perception_camera_updater_: 类型PerceptionCameraUpdater 是一个单独的类
// (perception_camera_updater_.reset(
// new PerceptionCameraUpdater(camera_ws_.get()));)
//7. FLAGS_routing_from_file,一个参数。目前没搞清什么意思
//point_cloud_updater_
//实例化
point_cloud_updater_.reset(
new PointCloudUpdater(point_cloud_ws_.get(), sim_world_updater_.get()));
//1.point_cloud_ws_ 类型:WebSocketHandler
//2. sim_world_updater_ 类型:SimulationWorldUpdater
//hmi_
//实例化
//hmi_.reset(new HMI(websocket_.get(), map_service_.get()));
//1.websocket_ 类型:WebSocketHandler
//2.map_service_ 类型:MapService (map_service_.reset(new MapService());)
perception_camera_updater_
//实例化
perception_camera_updater_.reset(
new PerceptionCameraUpdater(camera_ws_.get()));
//1.camera_ws_ 类型:WebSocketHandler
从构造函数可以看出,这四个线程中调用了一些服务,如地图服务等,同时四个线程之间也会存在相互调用。但是数据接口一定要搞清楚。
根据FLAGS_dreamview_profiling_mode,确定是否启用exit_timer_, 参数默认为false.所以并没有启用exit_timer_。
4.2.1.1dreamview的后台服务器使用的是CivetServer后台服务框架
CivetServer
GitHub - civetweb/civetweb: Embedded C/C++ web server
DreamView数据通信机制 - 灰信网(软件开发博客聚合)
4.2.2 dreamview.Start()
Status Dreamview::Start() {
sim_world_updater_->Start();
point_cloud_updater_->Start();
hmi_->Start();
perception_camera_updater_->Start();
#if WITH_TELEOP == 1
teleop_->Start();
#endif
return Status::OK();
}
然后就是执行start函数,启动四个线程。这就是dreamview后端的一个启动流程。
下一篇记录以下上面四个线程
增加一个内容看到的一个链接,详细讲解dreamview
百度安全验证
最后
以上就是暴躁荷花为你收集整理的apollo_dreamview 学习笔记的全部内容,希望文章能够帮你解决apollo_dreamview 学习笔记所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复