feat:新科目视觉类代码

This commit is contained in:
Surenjun 2025-09-29 08:39:44 +08:00
parent 50c16cb56a
commit 158f6260db
3 changed files with 74 additions and 91 deletions

View File

@ -7,7 +7,6 @@ import systemTime from '@ohos.systemDateTime';
export default class RadarClient{
public localRadarUdp: UdpClient
private radarMessageIds:messageIds = {}
constructor(params:{
deviceIpArr:string[],
@ -15,18 +14,19 @@ export default class RadarClient{
udplocalIp:string
}) {
const {deviceIpArr,devicePortArr,udplocalIp} = params;
//雷达UDP
this.localRadarUdp = new UdpClient('radar', {
deviceIpArr, devicePortArr, udplocalIp
});
}
onMessage(callback){
this.localRadarUdp.onClientMessage((str) => {
const data = this.radarStrToObj(str)
callback( data)
})
//雷达信息监听
async onRadarClientMessage(callback){
this.localRadarUdp.onClientMessage((radarStr)=>{
const radarObj = this.radarStrToObj(radarStr)
callback(radarObj)
console.log(radarStr+'');
});
}
// 雷达数据解析
@ -47,13 +47,6 @@ export default class RadarClient{
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){
const strArr = str.split('_');
return {
@ -90,4 +83,8 @@ export default class RadarClient{
}
}
async offMessage(){
this.localRadarUdp.closeUdp()
}
}

View File

@ -51,42 +51,11 @@ export default class LidaUdpClient{
this.offMessage()
//message
this.udpClient.on('message',(buffer)=>{
const str = this.arrayBuffetToStr(buffer.message);
//解析数据
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+'');
const dataStr = this.arrayBuffetToStr(buffer.message);
callback(dataStr)
});
}
// 雷达数据解析
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){
//头部姿态 驾驶行为 前方障碍物
@ -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
}
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
arrayBuffetToStr(arrayBuffer){
let dataView = new DataView(arrayBuffer)

View File

@ -6,7 +6,6 @@ import systemTime from '@ohos.systemDateTime';
export default class VisionClient{
public localVisionUdp: UdpClient
private visionMessageIds:messageIds = {}
constructor(params:{
deviceIpArr:string[],
@ -21,22 +20,76 @@ export default class VisionClient{
});
}
onMessage(callback){
// 视觉信息监听
async onVisionClientMessage(callback){
this.localVisionUdp.onClientMessage((str) => {
const data = this.visionStrToObj(str)
callback( data)
callback(data)
})
}
// 视觉数据解析
async visionStrToObj(str:string){
//$SBXS,85,20250603115529563,B202,赣A78QK6@360803200602253517@1@20250603115523132@@@@@李从星@001@@001@2506455453517,05,*SBJS
async visionStrToObj(visionStr:string){
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
}
//扣分
//开始考试
//结束考试
// 初始化指令
async visionInit(){}
// 开始考试指令
async visionExamStart(){}
// 结束考试指令
async visionExamEnd(){}
// 安全员开始录像
async visionStartRecord(){}
// 安全员结束录像
async visionEndRecord(){}
// 安全员信号传输
async visionSignalTransfer(){}
}