github地址:https://github.com/smileyqp/Apollo_frontEnd-
前台消息接收方式为:监听端口49923,在webworker接收消息message,并判断消息的source,消息的source分为三>种map,map_cloud以及realtime,此时给消息type,即realtime为SimWorldUpdate,map为MapData,point_cloud为
接收数据message:
---------------------------------realtime接收数据部分---------------------------------------------
1.HMIConfig
--------接收的为导航栏部分数据------------
dockerImage:字符串文本格式,显示为弹出框版本信息.EX:apolloauto/apollo:dev-x86_64-20180906_2002
modes:模式setup mode的String数组,是mode的下拉列表菜单
传输过去:{type:ChangeMode,mode:value值}
utmZoneId:数据,其中初始值为10(?I can not find it's function?where?what?)
availableVehicles:string数组,将其sort().map(name)排序后就是页面上vehicles的下拉列表
传输过去:{type:ChangeVehicle,new_vehicle: vehcile选项的value值}
availableMaps:string数组,将其sort().map(name)排序后就是页面上的map的下拉列表
传输过去:{type:ChangeMap,new_map: map选项的value值}
---------接收的为左侧为module controller的模块数据-----------------
modules:接收的为对象数据结构为 {key1:value1, key2:value2, ...} ,键值对结构.接收过来的是键值对形>式的对象,之后将其传入到映射中取值
传输过去:这边
{type: "ExecuteModuleCommand",
module: module,//即其中对应的相应模块名称即key
command: command,}//command即其对应的状态
//备注WS.executeModuleCommand(id, command)======>>>key值,key的value值是一个状态,即在其中对应的某讴
歌时间对应的状态
//executeModuleCommand(module, command)
hardware:该模块与上面模块接收相同都是键值对,但是该模块没有发送值只有接收其status在update状态的时候
改变其值
2.HMIStatus
主要是上一步的初始化之后的状态更新(涉及function有updateStatus()和updateGroundImage())
currentMode:string类型字符串,推测为初始化之后服务器端穿过来的一系列mode即模式之后前段选择那种模式>给后端传过去,再之后后端讲这种模式返回来传给前端即在更新状态时候显示
currentMap:string类型字符串,同上
currentVehicle:同上string类型,以及采取的方式同上
systemStatus:在这个systemstatus中,传过来的也是一个键值对对象,该键值对对象中有两个参数传过来的两个key以及其数据格式如下:
modules:modules也是一个键值对的格式,将这个键值对的值存到moduleStatus,moduleStatus中的key为
其中取出来的key,但是其值就modules[key].processStatus.running;moduleStatus是一个键值对结构,之前提到
过,存储了key为Modules这边的值,然后他的value则是状态值
hardware:键值对格式,同上实时更新值
passengerMsg:这是一个string类型的消息
3.VehicleParam
json格式数据类似于 vehicleParam = {
frontEdgeToCenter: 3.89,
backEdgeToCenter: 1.04,
leftEdgeToCenter: 1.055,
rightEdgeToCenter: 1.055,
height: 1.48,
width: 2.11,
length: 4.933,
steerRatio: 16,
}
这个中是直接传过来一个键值对数值,将这个键值对的值直接传给vehicleParam参数,之后在store的update(world){}这个function中调用
4.SimControlStatus
穿过来的值只是触发button的enabled
STORE.setOptionStatus('simControlEnabled', message.enabled);
5.SimWorldUpdate
timestamp
world.sequenceNum
autoDrivingCar键值对结构:
positionX,positionY,heading
navigationPath键值对map
laneMarker
planningTrajectory
6.MapElementIds
mapHash,mapElementIds,mapRadius
7.DefaultEndPoint
poi数组,数组里面包含map,map包含name和waypoint格式如下:
// Map from POI name to its x,y coordinates,
// e.g. {POI-1: [{x: 1.0, y: 1.2}, {x: 101.0, y: 10.2}]}
8.RoutePath
routingTime,routePath
监听三种传过来的数据source,三种source分别为realtime,map,point_cloud:
reaktime的message type为SimWorldUpdate
map的message type为MapData
point_cloud的message type为?此处没有写明
-----------------------------point cloud点云接收数据的部分-------------------------------------
type:PointCloudStatus:传进去的而数据为数组点集合
-------------------------------websocket map数据接收部分-----------------------------
传过来一串map相关数据的数组
-------------------------offline数据接收部分;这个是离线部分咩------------------------------------
GroundMetadata传过来的数据中包含这些,在render的tileground中,初始化使用这些数据
this.metadata = {
tileLength: metadata.tile * metadata.mpp,
left: metadata.left,
top: metadata.top,
numCols: metadata.wnum,
numRows: metadata.hnum,
mpp: metadata.mpp,
tile: metadata.tile,
imageUrl: metadata.image_url,
};
FrameCount:传过来的数据为一串string,但是这个string是只含有数字的,之后会用parseInt将其解析出来使用
RoutePath:
传过来的数据为一个对象有两个属性routingTime和rouotePath,分别有值,键值对形式
SimWorldUpdate:
传过来的数据用于message的check,含有数据为timestamp和world(其中world中还有sequenceNum)
数据发送部分
------------------------------map------------------------------------------
type:RetrieveMapData
传过去的element是一个对象,对象中每个属性即key的值即value又是一个数组
type:RetrieveRelativeMapData
--------------------------------point_cloud----------------------------------
type:TogglePointCloud
传过去的值enable的值为布尔值
-------------------------------realtime----------------------------------------------
function:clearInterval
type:RequestSimulationWorld
planning : requestPlanningData,
function:requestRoute
type: "SendRoutingRequest",
start: start,
end: end,
waypoint: waypoint,
function:requestDefaultRoutingEndPoint
type:GetDefaultEndPoint,没有传其他数据
function:resetBackend
type: "Reset",没有其他数据
function:dumpMessages
type:Dump
function:changeSetupMode
type: "ChangeMode",
new_mode: mode,
function:changeMap
type: "ChangeMap",
new_map: map,
function:changeVeicle
type: "ChangeVehicle",
new_vehicle: vehcile,
function:executeModeCommand
type: "ExecuteModeCommand",
command: command,
function:executeModuleCommand
type: "ExecuteModuleCommand",
module: module,
command: command,
function:executeToolCommand
type: "ExecuteToolCommand",
tool: tool,
command: command,
function:changeDrivingMode
type: "ChangeDrivingMode",
new_mode: mode,
function:submitDriveEvent
type: "SubmitDriveEvent",
event_time_ms: eventTimeMs,
event_msg: eventMessage,
event_type: eventTypes,
function:sendAudioPiece
type: "AudioPiece",
data: btoa(String.fromCharCode(...data)),
function:toggleSimControl
type: "ToggleSimControl",
enable: enable,
function:requestRoutePath
type: "RequestRoutePath",
function:publishNavigationInfo
this.websocket.send(data);这个function中没有type是直接send data过去的
--------------------------------offline传过去的数值---------------------------------------
type: "requestRoutePath"
recordId: recordId,
frameId: frameId,
最近在看百度无人驾驶Apollo的dreamview模块的frontend模块,开始时候考虑找一下数据传输模块相关资料源码分析的没有找到,想自己就稍微边看边简单记载了一下
github:https://github.com/smileyqp/Apollo_frontEnd-/blob/master/apollo_frontend.txt
网友评论