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

IWR1642 Boost Linux下people count demo的串口数据读取错误率高达10-20%

Hi TI,

使用IWR1642 Boost (502AC),在Linux(c/c++编写的people count程序)下进行数据读取时,发现错误率高达10-20%,也就是每读5-10帧数据,就会出现一次不同步的情况;需要重新同步后才能成功读取到正确数据。效率很低。对比Windows 10 + Matlab程序,运行几分钟都未出现一次不同步的情况。

不确定是不是对串口的设置以及读取方式不完全正确造成的。能否提供一套完整、高效的Linux C/C++ people count应用程序代码(包括对串口的设置、读取方式)?

谢谢!

user5948440:

回复 Wesley He:

你好,
我看了ROS driver下的源码,它对IWR1642的访问使用了ROS的库,包括serial::Serial定义,以及串口的配置、读写过程。我的代码里没有用ROS,无法参考这种用法。有仅使用Linux下通用库的应用程序代码吗?

谢谢!

Wesley He:

回复 user5948440:

你好,
不好意思,暂时还没有。
另外即是可参考visualizer的matlab代码做数据提取。
谢谢

user5948440:

回复 Wesley He:

matlab用的也是它自己的一套函数。
好吧,谢谢。

user5948440:

回复 Wesley He:

回到这个问题本身,为什么会出现读了几帧数据后,就出现数据错误?可能丢了一些字节。对串口的读取是否要加流控?

Wesley He:

回复 user5948440:

你好,
你这边是串口读取有问题还是解析有问题?
另外,QT版本的C++读写代码可参考以下demo的GUI,数据格式略有不同。
dev.ti.com/…/

user5948440:

回复 Wesley He:

解析的时候出错。frame header读出来之后,解析后面的某个tlv时出错。比如:
readFrame, synced: 1
sync: 506660481457717506
version: 33554436
platform: 661058
timestamp: 734536900
packetLength: 1626
frameNumber: 5395
subframeNumber: 0
chirpMargin: 78
frameMargin: 18678
uartSentTime: 368
trackProcessTime: 18839
numTLVs: 3
checksum: 55123
got frame: 5395, TLV num: 3
tlvHeader length: 1336, tlvHeader type: 6, tlvHeader size: 8, bodyOffset: 0, bodySize: 1574
tlvHeader length: 188818104, tlvHeader type: 1061037589, tlvHeader size: 8, bodyOffset: 1336, bodySize: 1574
unsynced: tlvHeader length error.

tlvHeader length: 188818104,以及tlvHeader type: 1061037589 都出错了。但前面读取的数据还是正确的,中间可能漏掉一些字节,导致后面的解析就错位了。

user5948440:

回复 Wesley He:

正常情况下,读取数据log如下:
readFrame, synced: 1
sync: 506660481457717506
version: 33554436
platform: 661058
timestamp: 724568946
packetLength: 1678
frameNumber: 5394
subframeNumber: 0
chirpMargin: 78
frameMargin: 18705
uartSentTime: 475
trackProcessTime: 19490
numTLVs: 3
checksum: 60921
got frame: 5394, TLV num: 3
tlvHeader length: 1384, tlvHeader type: 6, tlvHeader size: 8, bodyOffset: 0, bodySize: 1626
tlvHeader length: 144, tlvHeader type: 7, tlvHeader size: 8, bodyOffset: 1384, bodySize: 1626
tlvHeader length: 98, tlvHeader type: 8, tlvHeader size: 8, bodyOffset: 1528, bodySize: 1626
readFrame success!

user5948440:

回复 Wesley He:

排查测试代码发现有个地方加了sleep,导致醒来后较大概率引起数据不同步。去掉sleep后,不同步的概率明显变小了,大概在1%左右。目前暂时可以接受这种错误率。

谢谢回复。

赞(0)
未经允许不得转载:TI中文支持网 » IWR1642 Boost Linux下people count demo的串口数据读取错误率高达10-20%
分享到: 更多 (0)