2.0协议数据流转图
2021-12-01 15:11:35 0 举报
proto数据格式的2.0协议数据转换图
作者其他创作
大纲/内容
结束
robot绑定rms端口
ProtoRobotServer读取数据绑定RobotTransportMessageDecoder
2.0
具体的处理器处理数据,给robot实例添加协议版本属性值以及机器人上报属性
调度指令
暂不讨论
ProtoRobotServer
RobotTransportMessageEncoder对data包装,添加输出头,输出长度,输出包尾,然后通过ProtoRobotServer发送给robot
JsonRobotServer、1.0的robotServer暂不讨论
根据机器人协议版本+序列化类型获取到要通信的robotServer例如:2.0+PROTOBUF对应ProtoRobotServer
JsonRobotServer
ProtoRobotServer内嵌的RobotMessageHandlerContext确定机器人的协议版本,并且处理解析完毕的数据(json字符串)
ProtoDtoDataEncoder根据消息类型走不同的消息转换方法:InstructionRequestMsg|EventResponseMsg|PingRequestMsg
rms业务层handler业务处理
1.0
第一步:task状态是READY_TO_SEND
JsonRobotServer将AbstractRequestMsg直接转换成json字符串传输给robot
数据的写入:rms->amr
SendDispatchInstructionInExecutingInHandler
判断任务指令/调度指令
RobotInstructionMessageCreatorV2生成任务指令/调度指令,发布事件ROBOT_BUSINESS_INSTRUCTION_DOWN_ADDRESS
RobotBusinessInstructionDownMessageConsumerV2
SendTaskInstructionToRobotInReadyInHandler
工具类
ProtoDtoDataDecoder根据msgType调用不同的解码方法EventRequestMsg|StateRequestMsg|InstructionResponseMsg
这一步填充基本的调度层的数据(指令类型,路径,终点角度),是map结构
1.生成AbstractRequestMsg的子类InstructionRequestMsg,把map结构的数据填充到实体类,调度指令转换成具体指令2.补充传输层需要的所有数据,根据t_robot_config配置获取机器人序列化类型
RobotTransportMessageDecoder读取数据头,读取长度,获得byte数组data,先用common解码获得msgType
发送遥测数据确定通信的robotServer是哪个
消费
第二步:task状态是EXECUTING
将json字符串实例化为对应的Dto例如:转换为InstructionRequestDto再调用InstructionRequestDto.encode方法转换为pb类,然后pb..toByteArray()转换成byte数组data
1.项目已经有Json版本的2.0协议处理方案2.需要做pb版本的2.0协议处理方案 3.业务处理相关的messageHandlerContext希望可以复用,即业务处理跟具体序列化方式解耦 4.pb对象本来可以与json字符串相互转换,但是pb协议中很多内容与1.的数据内容无法匹配,于是抽出一层dto层,在数据的读取与发送之间进行转换,即:发送的时候:json->dto->pb读取的时候:pb->dto->json
判断robot协议版本protocolVersion
直接return
任务指令
数据的读取:amr->rms
ProtoRobotServer将AbstractRequestMsg转换成json字符串
将data数组先转换成pb实例对象例如:将byte转换成Msg.EventRequestEventRequestDto.decode(request)获取dto实例然后将dto实例转换成json字符串
0 条评论
下一页