TI中文支持网
TI专业的中文技术问题搜集分享网站

IWR1443: 关于2-1-0-4版本数据格式解析的问题

Part Number:IWR1443

第一张图Size = range bins*2,第二张图Size = Rangebins*4,是不是有错?按照您说的我是*2对吧?那是不是range profiles我算大小的话就是=225接近2的幂是8,那应该就是8+8*2,还是您说的8+256*2?是不是您第三张照片回复我的打错了?因为我抓了好几包数据,检测6-7个目标的,大概数据在600个左右;

关于ChirpsPerFrame的问题我还是不明白,还请您是否可以告诉我这个demo的具体的数值,等我解析没问题我再去理解,谢谢!我有按照您说的看了此函数,此函数的结构体好像跟数据不符,还是说在具体的某一段数据?

最后一张图是我自己抓的数据包,进行分析的,麻烦您帮我确认一下我这么理解是否正确。

detected obects采集几个目标就是几条*12字节

range bins我认为的是8,因为225是离2的8次方最近的

 virtual azimuth antennas =4R*2T=8

doppler bins = 12(根据数据自己算出一个范围,然后取整,试了13,根据数据不像)

Padding Bytes 好像是以 00 00 00 00 01 00 00 00开头,后面结尾跟的是什么数据就不知道作用是什么了

跟上面两个数据不一样,这个后面好像又填充了什么

00 00 00 00 01 00 00 00 08 00 00 00 C0 7E 01 51 BF 00 00 00 07 00 00 00 20 00 00 00

虽然数据已经抓出来了,但是还请推荐一个有解释的数据结构,我好具体分析每一个包的意义;我理解的是低字节在前,高字节在后是吧?

Chris Meng:

你好,

我之前说的代码你有看过么?通过代码你可以了解更清楚,你也可以在ccs里面观察相关变量的值。

/* Send Range profile */ if (pGuiMonSel->logMagRange) { UART_writePolling (uartHandle, (uint8_t*)&tl[tlvIdx], sizeof(MmwDemo_output_message_tl));

for(i = 0; i < obj->numRangeBins; i++) { UART_writePolling (uartHandle, (uint8_t*)&obj->rangeDopplerLogMagMatrix[i*obj->numDopplerBins], sizeof(uint16_t)); } tlvIdx++; }

,

xu william:

您好,我的调试坏掉了,所以没办法debug,这个我看了,所以只能通过抓数据了

,

Chris Meng:

你好,

uart输出格式和代码一致,你参考代码就可以了。注意配置文件里guiMonitor的设置。

什么是调试坏了?IWR1443BOOST的仿真器是在板上的,uart也是通过同样一个接口输出的。你现在的板子仿真器无法连上,但uart还能正常工作?

,

xu william:

那个开发板坏了,自己做了板个子,然后在调试的,只能通过串口看数据目前。

您说的函数我也看了,注释还是公式,具体看每个发送的觉得还是有些不明白,再跟您确认下

/* Send detected Objects */ if ((pGuiMonSel->detectedObjects == 1) && (obj->numObjOut > 0)) { MmwDemo_output_message_dataObjDescr descr;

UART_writePolling (uartHandle, (uint8_t*)&tl[tlvIdx], sizeof(MmwDemo_output_message_tl)); /* Send objects descriptor */ descr.numDetetedObj = (uint16_t) obj->numObjOut; descr.xyzQFormat = (uint16_t) obj->xyzOutputQFormat; UART_writePolling (uartHandle, (uint8_t*)&descr, sizeof(MmwDemo_output_message_dataObjDescr));

/*Send array of objects */ UART_writePolling (uartHandle, (uint8_t*)obj->objOut, sizeof(MmwDemo_detectedObj) * obj->numObjOut); tlvIdx++; }

我先关注UART_writePolling每个发送数据的函数,然后根据后面传参的结构体,比如MmwDemo_output_message_dataObjDescr,然后我再去这个定义的地方,找到具体的定义大小,如下:

typedef struct MmwDemo_output_message_dataObjDescr_t{ /*! @brief Number of detected objects */ uint16_t numDetetedObj;

/*! @brief Q format of detected objects x/y/z coordinates */ uint16_t xyzQFormat;

} MmwDemo_output_message_dataObjDescr;

那我就确定每个发送的都是双字节就可以对吧?然后把整个函数过一遍一个个加就好了对吧?

,

Chris Meng:

你好,

我之前回复已经提到,串口的输出是和guiMonitor配置相关的。在代码里会影响pGuiMonSel变量里的值。把使能输出的不同的数据加起来就可以了。

,

xu william:

非常感谢您的指导,具体的报文输出我在code里面找到了,需要什么类型的输出其实就是配合GUI给的标志位然后增加输出这样,之前是因为domo里面一开始只输出Range 的数据;还有一个关于数据的问题请教您,就是我看了输出格式的代码,points的输出我还没找到,只有一个关于points的标志位,但是我使能了标志位,也有数据输出,但是不知是否正确,所以想请教一下您关于points的参数设置和报文具体解析在哪?,像heat map、dopper map读出来的数据如何解析他,理解他;谢谢

,

Chris Meng:

xu william 说:就是我看了输出格式的代码,points的输出我还没找到

你看过下面的代码么?

/* Send detected Objects */ if ((pGuiMonSel->detectedObjects == 1) && (obj->numObjOut > 0)) { MmwDemo_output_message_dataObjDescr descr;

UART_writePolling (uartHandle, (uint8_t*)&tl[tlvIdx], sizeof(MmwDemo_output_message_tl)); /* Send objects descriptor */ descr.numDetetedObj = (uint16_t) obj->numObjOut; descr.xyzQFormat = (uint16_t) obj->xyzOutputQFormat; UART_writePolling (uartHandle, (uint8_t*)&descr, sizeof(MmwDemo_output_message_dataObjDescr));

/*Send array of objects */ UART_writePolling (uartHandle, (uint8_t*)obj->objOut, sizeof(MmwDemo_detectedObj) * obj->numObjOut); tlvIdx++; }

,

Chris Meng:

xu william 说:关于points的参数设置和报文具体解析在哪?,像heat map、dopper map读出来的数据如何解析他,理解他

在chrome的visulizer启动后,请按F12,可以看到相关解析的代码。

,

xu william:

这个我看了,里面没看到有points的宏定义,numDetetedObj、xyzQFormat、type、length,还有就是rangeIdx、dopplerIdx、peakVal、xyz,我没有找到关于point数值对应的参数,还请详细说一下,谢谢!

,

xu william:

第一次使用咱TI的开发环境,不是很了解,是否可以有相关的参考手册,查询?

,

Chris Meng:

你好,

你说的point,是不是点云?如果是,就是detect object。建议你看看visulizer里的源码,了解如何使用detect object信息,解析出最终点云的xyz等信息。

,

xu william:

我想知道的是Range Profile for zero Doppler里面的points,就是识别到的物体的标识和Power强度的值

,

Chris Meng:

你好,

Range Profile for zero Doppler里只有速度为0的信息。你可以搜索“rangeDopplerLogMagMatrix”相关代码。

/* Send Range profile */ if (pGuiMonSel->logMagRange) { UART_writePolling (uartHandle, (uint8_t*)&tl[tlvIdx], sizeof(MmwDemo_output_message_tl));

for(i = 0; i < obj->numRangeBins; i++) { UART_writePolling (uartHandle, (uint8_t*)&obj->rangeDopplerLogMagMatrix[i*obj->numDopplerBins], sizeof(uint16_t)); } tlvIdx++; }

,

xu william:

我测试的就是静止的,数据应该有输出吧?我看gui上面有显示,那么串口一定也有输出,我看看是哪个位

,

xu william:

就是要采集显示的这个数据值,它应该有距离和强度值,或者说是不是也有阈值;目前我还是找不到这个信息

,

Chris Meng:

xu william 说:我看gui上面有显示,那么串口一定也有输出

你好,

在chrome的visulizer启动后,请按F12,请再仔细看看解析代码。range profile里的detect points是把point cloud里的速度为0的detect object显示出来的。

if (isRangeProfile == true && detObjRes) { if (detObjRes.rangeIdx) { var rp_det = []; //math.zeros(math.size(rp)).valueOf(); var rp_det_x = []; math.forEach(detObjRes.rangeIdx, function (value, idx) { // caution the content of x(1,:) is range index, is this indexing 1-based or 0-based in target code? if (detObjRes.dopplerIdx[idx] == 0) { //rp_det[value] = rp[value]; rp_det.push(rp[value]); rp_det_x.push(rp_x[value]); } }); if (Params.use_restyle == 1) { update.x.push(rp_x); update.y.push(rp_det); } else if (Params.use_restyle == 2) { templateObj.$.ti_widget_plot2.data[1].x = rp_det_x; templateObj.$.ti_widget_plot2.data[1].y = rp_det; }

,

xu william:

非常感谢您的回复!那我理解的就是只能通过看gui的输出去推具体的参数输出?是否有关于每一个工作模式的输出具体的数据格式版本的介绍?

,

Chris Meng:

你好,

没有其他文档。请参考mmwave sdk代码和visuzlizer的代码。

,

xu william:

好的,谢谢!

赞(0)
未经允许不得转载:TI中文支持网 » IWR1443: 关于2-1-0-4版本数据格式解析的问题
分享到: 更多 (0)