mmWave SDK实在是太过于复杂,折腾了半天,主要是TI的DSP核ARM-RF没玩过。实在是调不好。好在天无绝人之路。TI应该也考虑到了这一点,给了我们更简单的应用手段:串口。找了半天,最后发现:<INDUSTRIAL_TOOLBOX_INSTALL_DIR>\mmwave_industrial_toolbox_<VER>\labs\area_scanner\68xx_area_scanner\gui目录下有三个文件很有帮助,分别是:
area_scanner_visualizer.m:主可视化脚本,调用设置,解析和绘图功能。
readUARTToBuffer.m:将串行端口对象上可用的所有字节复制到Matlab工作区中的缓冲区
parseBytes:接收缓冲区并将字节解析为表示帧中数据的输出结构。
然后这里也放一下串口每一帧的格式吧。
帧头长度:44个字节
在每个数据包的开头发送一个帧头。使用魔术字查找每个数据包的开头。
TLV标题
长度:8字节
类型长度值(TLV)从帧头中提取给定数据包中TLV的数量。对于每个TLV,都有一个TLV标头,其中包含“类型”和“长度”信息。长度值给出有效载荷的长度。有效负载应根据下表中列出的相应类型标识符进行解析:
检测到的物体(动态点)类型:1
长度:16字节x检测到的对象
有效载荷由16个字节组成,代表动态点云中EACH点的正定和多普勒。注意:每个点的位置均以球坐标给出。
[td]Value | Type | Bytes |
range [m] | float | 4 |
angle [rad] | float | 4 |
elev [rad] | float | 4 |
doppler [m/s] | float | 4 |
检测到的物体(动态点)侧面信息类型:7
长度:4字节x检测到的对象的数目有效负载由4个字节组成,用于动态点云中的每个点。如mmWave SDK演示的doxygen文档中所述确定snr和noise的值。
[td]Value | Type | Bytes |
snr | uint16_t | 2 |
noise | uint16_t | 2 |
静态检测对象(静态点)类型:8
长度:16字节x静态检测到的对象
的净荷有效负载由16个字节组成,代表静态点云中EACH点的位置和多普勒。注意:每个点的位置均以笛卡尔坐标给出。
[td]Value | Type | Bytes |
x [m] | float | 4 |
y [m] | float | 4 |
z [m] | float | 4 |
doppler [m/s] | float | 4 |
跟踪对象清单类型:10
长度:40字节x跟踪对象
的数量有效载荷由40个字节组成,用于每个跟踪对象,并给出每个目标的ID,位置,速度和加速度分量。
[td]
[td] Value | Type | Bytes | Target ID | uint32_t | 4 | pos X [m] | float | 4 | pos Y [m] | float | 4 | vel X [m/s] | float | 4 | vel Y [m/s] | float | 4 | acc X [m/s^2] | float | 4 | acc Y [m/s^2] | float | 4 | pos Z [m] | float | 4 | vel Z [m/s] | float | 4 | acc Z [m/s^2] | float | 4 |
|
| |
点对轨道协会类型:11
长度:1字节x检测到的对象数
有效负载包含1个字节,用于动态点云中的每个点。如果点n与目标关联,则目标ID的值将是关联目标的ID。否则,该值将指示该点未关联的原因。
[td]
Value | Type | Bytes |
Target ID | uint8_t | 1 |
目标ID可以具有以下值:
[td]
值 | 含义 |
<250 | 该点已关联到的跟踪对象的ID |
253 | 点未关联,不满足SNR要求 |
254 | 未关联点,位于边界框区域之外 |
255 | 点未关联,被认为是噪声
|