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%左右。目前暂时可以接受这种错误率。
谢谢回复。