|
上位机里面有一段代码是收到串口传过来的数据后就进行解析,然后可以得到标签与基站的距离,这个解析的原理是什么?- //当接收到有效数据包后,对数据包里的数据进行解析,
- //解析主要内容有3个距离信息(如果是4基站定位有4个距离信息),标签的ID以及其它信息。
- void mainwindow::ProcessData(void)
- {
- uint8_t frame_type;
- uint8_t TAG_ID,seq;
- uint16 range[4],lnum;
- frame_type = frame[0];
- TAG_ID = frame[1];
- lnum = frame[2]|frame[3]<<8;
- seq = lnum&0xff;
- if(frame_type==1)
- {
- range[0]=frame[6]|frame[7]<<8;
- range[1]=frame[8]|frame[9]<<8;
- range[2]=frame[10]|frame[11]<<8;
- range[0] = range[0]*10;
- range[1] = range[1]*10;
- range[2] = range[2]*10;
- if(_useAutoPos) //if Anchor auto positioning is enabled then process Anchor-Anchor TWR data
- {
- processAnchRangeReport(0, 1, range[0], lnum, seq);
- processAnchRangeReport(0, 2, range[1], lnum, seq);
- processAnchRangeReport(1, 2, range[2], lnum, seq);
- }
- }
- else if(frame_type == 2)
- {
- range[0]=frame[4]|frame[5]<<8;
- range[1]=frame[6]|frame[7]<<8;
- range[2]=frame[8]|frame[9]<<8;
- range[3]=frame[10]|frame[11]<<8;
- ra[0] = range[0]*10;//解码
- ra[1] = range[1]*10;
- ra[2] = range[2]*10;
- ra[3] = range[3]*10;
- processTagRangeReport(0, TAG_ID, range[0]*10, lnum, seq);//校正
- processTagRangeReport(1, TAG_ID, range[1]*10, lnum, seq);
- processTagRangeReport(2, TAG_ID, range[2]*10, lnum, seq);
- processTagRangeReport(3, TAG_ID, range[3]*10, lnum, seq);
- trilaterateTag(TAG_ID, seq);//定位
- //qDebug() << range[0];
- //这个是解算标签坐标的入口函数,在这个函数会判断是有几个基站距离,然后调用calculateTagLocation 完成解算
- }
- }
复制代码
|
|