feat:新科目视觉类代码
This commit is contained in:
		
							parent
							
								
									50c16cb56a
								
							
						
					
					
						commit
						158f6260db
					
				| @ -7,7 +7,6 @@ import systemTime from '@ohos.systemDateTime'; | |||||||
| export default class RadarClient{ | export default class RadarClient{ | ||||||
| 
 | 
 | ||||||
|   public localRadarUdp: UdpClient |   public localRadarUdp: UdpClient | ||||||
|   private radarMessageIds:messageIds = {} |  | ||||||
| 
 | 
 | ||||||
|   constructor(params:{ |   constructor(params:{ | ||||||
|     deviceIpArr:string[], |     deviceIpArr:string[], | ||||||
| @ -15,18 +14,19 @@ export default class RadarClient{ | |||||||
|     udplocalIp:string |     udplocalIp:string | ||||||
|   }) { |   }) { | ||||||
|     const {deviceIpArr,devicePortArr,udplocalIp} = params; |     const {deviceIpArr,devicePortArr,udplocalIp} = params; | ||||||
| 
 |  | ||||||
|     //雷达UDP
 |     //雷达UDP
 | ||||||
|     this.localRadarUdp = new UdpClient('radar', { |     this.localRadarUdp = new UdpClient('radar', { | ||||||
|       deviceIpArr, devicePortArr, udplocalIp |       deviceIpArr, devicePortArr, udplocalIp | ||||||
|     }); |     }); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   onMessage(callback){ |   //雷达信息监听
 | ||||||
|     this.localRadarUdp.onClientMessage((str) => { |   async onRadarClientMessage(callback){ | ||||||
|       const data = this.radarStrToObj(str) |     this.localRadarUdp.onClientMessage((radarStr)=>{ | ||||||
|       callback( data) |       const radarObj = this.radarStrToObj(radarStr) | ||||||
|     }) |       callback(radarObj) | ||||||
|  |       console.log(radarStr+''); | ||||||
|  |     }); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   // 雷达数据解析
 |   // 雷达数据解析
 | ||||||
| @ -47,13 +47,6 @@ export default class RadarClient{ | |||||||
|     tempObj.rc = this.getMachineRc(machineArr[12]) |     tempObj.rc = this.getMachineRc(machineArr[12]) | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   // 视觉数据解析
 |  | ||||||
|   async visionStrToObj(str:string){ |  | ||||||
|     //$SBXS,85,20250603115529563,B202,赣A78QK6@360803200602253517@1@20250603115523132@@@@@李从星@001@@001@2506455453517,05,*SBJS
 |  | ||||||
| 
 |  | ||||||
|     //$SBXS,213,20250603090553562,B207,邓凯倩@@320250603085259@000000100000001001001000@14@870@28520185@115902060@1@828@4294943473@359.8704@0@0@1111111111011111111111111111111100000000@0@0000000000@3142@0@0@@C1@赣A78QK6@0@001-001@360121200401040528,01,*SBJS
 |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   getMachineItem(str){ |   getMachineItem(str){ | ||||||
|     const strArr = str.split('_'); |     const strArr = str.split('_'); | ||||||
|     return { |     return { | ||||||
| @ -90,4 +83,8 @@ export default class RadarClient{ | |||||||
|     } |     } | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   async offMessage(){ | ||||||
|  |     this.localRadarUdp.closeUdp() | ||||||
|  |   } | ||||||
|  | 
 | ||||||
| } | } | ||||||
| @ -51,42 +51,11 @@ export default class LidaUdpClient{ | |||||||
|     this.offMessage() |     this.offMessage() | ||||||
|     //message
 |     //message
 | ||||||
|     this.udpClient.on('message',(buffer)=>{ |     this.udpClient.on('message',(buffer)=>{ | ||||||
|       const str =  this.arrayBuffetToStr(buffer.message); |       const dataStr =  this.arrayBuffetToStr(buffer.message); | ||||||
|       //解析数据
 |       callback(dataStr) | ||||||
|       switch (this.type){ |  | ||||||
|         //激光雷达
 |  | ||||||
|         case 'radar': |  | ||||||
|           const radarObj = this.radarStrToObj(str) |  | ||||||
|           callback(radarObj) |  | ||||||
|           break; |  | ||||||
|         //TODO 视觉
 |  | ||||||
|         case 'vision': |  | ||||||
|           const visionObj = this.visionStrToObj(str) |  | ||||||
|           callback(str) |  | ||||||
|           break; |  | ||||||
|       } |  | ||||||
|       console.log(str+''); |  | ||||||
|     }); |     }); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   // 雷达数据解析
 |  | ||||||
|   async radarStrToObj(str:string){ |  | ||||||
|     //$MachineVision,30.950^0_-1_1_1,-1^-1_-1_-1_1,-1^-1_-1_-1_1,-1^-1_-1_-1_1,-1^-1_-1_-1_1,-1^-1_-1_-1_1,-1^-1_-1_-1_1,-1^-1_-1_-1_1,-1^-1_-1_-1_1,-1^-1_-1^-1,43083,0_0_0_0,-1^-1_-1_-1_1,-1^-1_-1_-1_1,-1^-1_-1_-1_1,10102264201.69632,1.1.1.2,0*+$VisualInfo,1_-7205_3480_-7300_3350_-7655_3610_-7560_3735_,*+[ { "bodyangle": "1.00", "bodyx": "0.490", "bodyy": "31.300", "elevation": "2.403", "geoangle": "323.90", "geolat": "29.92678975", "geolon": "119.89823128", "id": 1, "type": 2 } ]
 |  | ||||||
|     const [machine, visual, obj] = str.split('+'); |  | ||||||
|     const machineArr = machine.split(','); |  | ||||||
|     let tempObj:Machine = {}; |  | ||||||
|     tempObj.sj = await systemTime.getCurrentTime(); |  | ||||||
|     tempObj.xh = Number(machineArr[10]); |  | ||||||
|     ['qf', 'hf', 'zq', 'zh', 'yq', 'yh', 'zc', 'yc', 'zf'].forEach((c,index) => { |  | ||||||
|       tempObj[c] = this.getMachineItem(machineArr[index + 1]); |  | ||||||
|     }); |  | ||||||
|     ['lq', 'lz', 'ly'].forEach((c,index) => { |  | ||||||
|       tempObj[c] = this.getMachineItem(machineArr[index + 13]); |  | ||||||
|     }); |  | ||||||
|     tempObj.wt = this.getMachineWt(machineArr[10]) |  | ||||||
|     tempObj.rc = this.getMachineRc(machineArr[12]) |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   // 视觉数据解析
 |   // 视觉数据解析
 | ||||||
|   async visionStrToObj(str:string){ |   async visionStrToObj(str:string){ | ||||||
|     //头部姿态 驾驶行为 前方障碍物
 |     //头部姿态 驾驶行为 前方障碍物
 | ||||||
| @ -95,42 +64,6 @@ export default class LidaUdpClient{ | |||||||
|     //$SBXS,213,20250603090553562,B207,邓凯倩@@320250603085259@000000100000001001001000@14@870@28520185@115902060@1@828@4294943473@359.8704@0@0@1111111111011111111111111111111100000000@0@0000000000@3142@0@0@@C1@赣A78QK6@0@001-001@360121200401040528,01,*SBJS
 |     //$SBXS,213,20250603090553562,B207,邓凯倩@@320250603085259@000000100000001001001000@14@870@28520185@115902060@1@828@4294943473@359.8704@0@0@1111111111011111111111111111111100000000@0@0000000000@3142@0@0@@C1@赣A78QK6@0@001-001@360121200401040528,01,*SBJS
 | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   getMachineItem(str){ |  | ||||||
|     const strArr = str.split('_'); |  | ||||||
|     return { |  | ||||||
|       //对象编号
 |  | ||||||
|       bh:strArr[2], |  | ||||||
|       //车类型
 |  | ||||||
|       lx:strArr[3], |  | ||||||
|       //纵向距离
 |  | ||||||
|       jz:strArr[0].split('^')[0], |  | ||||||
|       //横向距离
 |  | ||||||
|       jh:strArr[0].split('^')[1], |  | ||||||
|       //速度
 |  | ||||||
|       sd:strArr[1] |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   //获取前方数据
 |  | ||||||
|   getMachineWt(str){ |  | ||||||
|     return { |  | ||||||
|       xz:str.split('_')[0].split('^')[0], |  | ||||||
|       xh:str.split('_')[0].split('^')[1], |  | ||||||
|       zz:str.split('_')[1].split('^')[0], |  | ||||||
|       zh:str.split('_')[1].split('^')[1], |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   //获取绕车一周数据
 |  | ||||||
|   getMachineRc(str){ |  | ||||||
|     return { |  | ||||||
|       zh:str.split('_')[0], |  | ||||||
|       yh:str.split('_')[1], |  | ||||||
|       yq:str.split('_')[2], |  | ||||||
|       zq:str.split('_')[3] |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   //arrayBuffer转string
 |   //arrayBuffer转string
 | ||||||
|   arrayBuffetToStr(arrayBuffer){ |   arrayBuffetToStr(arrayBuffer){ | ||||||
|     let dataView = new DataView(arrayBuffer) |     let dataView = new DataView(arrayBuffer) | ||||||
|  | |||||||
| @ -6,7 +6,6 @@ import systemTime from '@ohos.systemDateTime'; | |||||||
| export default class VisionClient{ | export default class VisionClient{ | ||||||
| 
 | 
 | ||||||
|   public localVisionUdp: UdpClient |   public localVisionUdp: UdpClient | ||||||
|   private visionMessageIds:messageIds = {} |  | ||||||
| 
 | 
 | ||||||
|   constructor(params:{ |   constructor(params:{ | ||||||
|     deviceIpArr:string[], |     deviceIpArr:string[], | ||||||
| @ -21,22 +20,76 @@ export default class VisionClient{ | |||||||
|     }); |     }); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   onMessage(callback){ |   // 视觉信息监听
 | ||||||
|  |   async onVisionClientMessage(callback){ | ||||||
|     this.localVisionUdp.onClientMessage((str) => { |     this.localVisionUdp.onClientMessage((str) => { | ||||||
|       const data = this.visionStrToObj(str) |       const data = this.visionStrToObj(str) | ||||||
|       callback( data) |       callback(data) | ||||||
|     }) |     }) | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   // 视觉数据解析
 |   // 视觉数据解析
 | ||||||
|   async visionStrToObj(str:string){ |   async visionStrToObj(visionStr:string){ | ||||||
|     //$SBXS,85,20250603115529563,B202,赣A78QK6@360803200602253517@1@20250603115523132@@@@@李从星@001@@001@2506455453517,05,*SBJS
 |     const visionDataArr = visionStr.split(','); | ||||||
|  |     const [dataType, message] = [visionDataArr[3] , visionDataArr[4]]; | ||||||
|  |     const messageArr = (message || '').split('@') | ||||||
|  |     const sj = await systemTime.getCurrentTime(); | ||||||
|  |     switch (dataType){ | ||||||
|  |       //头部姿态
 | ||||||
|  |       case 'A204':return { | ||||||
|  |         //系统时间戳
 | ||||||
|  |         sj, | ||||||
|  |         //置信度
 | ||||||
|  |         df:Number(messageArr[0]), | ||||||
|  |         //摇头旋转角度
 | ||||||
|  |         yt:Number(messageArr[1]), | ||||||
|  |         //左右旋转角度
 | ||||||
|  |         zy:Number(messageArr[2]), | ||||||
|  |         //上下点头角度
 | ||||||
|  |         sx:Number(messageArr[3]), | ||||||
|  |       } | ||||||
|  |       //驾驶行为
 | ||||||
|  |       case 'A206':return { | ||||||
|  |         //系统时间戳
 | ||||||
|  |         sj, | ||||||
|  |         //控制方向盘
 | ||||||
|  |         fx:Number(messageArr[0]), | ||||||
|  |         //手伸出窗外
 | ||||||
|  |         ch:Number(messageArr[1]), | ||||||
|  |       } | ||||||
|  |       //前方障碍物
 | ||||||
|  |       case 'A205':return { | ||||||
|  |         //系统时间戳
 | ||||||
|  |         sj, | ||||||
|  |         //信号灯
 | ||||||
|  |         xd:messageArr[0], | ||||||
|  |         //识别前方物体
 | ||||||
|  |         wt:Number(messageArr[1]), | ||||||
|  |         //中心隔离设施或中心线
 | ||||||
|  |         zx:Number(messageArr[2]), | ||||||
|  |         //后车超车信号
 | ||||||
|  |         hc:messageArr[3] | ||||||
|  |       } | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
|  |     //头部姿态 驾驶行为 前方障碍物
 | ||||||
|  |     //$SBXS,85,20250603115529563,B202,赣A78QK6@360803200602253517@1@20250603115523132@@@@@李从星@001@@001@2506455453517,05,*SBJS
 | ||||||
|     //$SBXS,213,20250603090553562,B207,邓凯倩@@320250603085259@000000100000001001001000@14@870@28520185@115902060@1@828@4294943473@359.8704@0@0@1111111111011111111111111111111100000000@0@0000000000@3142@0@0@@C1@赣A78QK6@0@001-001@360121200401040528,01,*SBJS
 |     //$SBXS,213,20250603090553562,B207,邓凯倩@@320250603085259@000000100000001001001000@14@870@28520185@115902060@1@828@4294943473@359.8704@0@0@1111111111011111111111111111111100000000@0@0000000000@3142@0@0@@C1@赣A78QK6@0@001-001@360121200401040528,01,*SBJS
 | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   //扣分
 | 
 | ||||||
|   //开始考试
 | 
 | ||||||
|   //结束考试
 |   // 初始化指令
 | ||||||
|  |   async visionInit(){} | ||||||
|  |   // 开始考试指令
 | ||||||
|  |   async visionExamStart(){} | ||||||
|  |   // 结束考试指令
 | ||||||
|  |   async visionExamEnd(){} | ||||||
|  |   // 安全员开始录像
 | ||||||
|  |   async visionStartRecord(){} | ||||||
|  |   // 安全员结束录像
 | ||||||
|  |   async visionEndRecord(){} | ||||||
|  |   // 安全员信号传输
 | ||||||
|  |   async visionSignalTransfer(){} | ||||||
| 
 | 
 | ||||||
| } | } | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user