百度Apollo的dreamview的frontend的数据传输部分简单梳理

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,258评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,335评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,225评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,126评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,140评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,098评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,018评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,857评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,298评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,518评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,400评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,993评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,638评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,661评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容