关闭串口缓存
在使用422转USB数据线采集IMU数据时,上位机的USB驱动程序会对接收到的数据进行缓存,表现在于IMU使用200Hz的频率发送IMU数据,而采集到的IMU数据的时间戳间隔并不是5ms,而是出现一串时间戳相近的数据,这串数据就是因为被驱动程序缓存到了一个包里,然后再发送给上位机程序,所以上位机读取到这些数据时的时间都是相近的。解决方法如下:
https://stackoverflow.com/questions/3267139/how-do-i-stop-usb-buffering
对于linux系统,首先使用udevadm info -a -n /dev/ttyUSB0
查看对应串口设备的键值对,如果返回列表中存在ATTRS{latency_timer}
,则可以通过减少latency_timer来减少缓存
然后在/etc/udev/rules.d
为串口设备创建一个规则文件:99-ttyusb.rules
KERNEL=="ttyUSB[0-9]*", SUBSYSTEMS=="usb-serial", DRIVERS=="ftdi_sio", ATTR{device/latency_timer}="2"