光流传感器特性测试
Posted 卓晴
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了光流传感器特性测试相关的知识,希望对你有一定的参考价值。
光流传感器GL9306
§01 光流传感器
一、背景测试
下面是参加智能车竞赛同学所使用的光流传感器GL9306, 使用MicroPython搭建了数据接收和处理平台, 下面对于它的相关特性进行测试。 这些特性包括: 反射物对测量的影响,以及高度对测量的影响。
这里使用一个滑轨带动光流传感器移动, 它移动的距离大约为10厘米。 下面就可以通过读取光流传感器累计数值,来获得移动的距离。
二、测试反射物
首先,在光流传感器下面设置一块黑色泡沫海绵。 它上表面距离传感器距离大约为7.3厘米。 下面测试滑轨移动对应的数值变化。 可以看到光流传感器输出累积值,在y轴方向从18 变化到700。
这是铺设有白纸上面的情况, 可以看到传感器输出数值已经在发生比较明显的漂移。 显然此时已经没有移动测量的必要了。 本身数值就非常不稳定了。
铺设红色隔离布, 输出数值就非常稳定了。 它的表面距离传感器大约为9 厘米。 测量滑轨移动对对应数据变化。 可以看到光流传感器输出累计值, 在y轴上变化从18变化到700。 相比黑色海绵, 光流传感器输出减小了。
三、对比不同高度
下面将光流传感器抬升,距离红色隔离棉表面大约17厘米。 移动光流传感器,查看传感器y轴的变化。 光流传感器输出值变化为311, 对比前面测量结果来看。 输出数值在下降。】这与高度呈现一定的关系, 也就是表面距离光流传感器越大,移动数值越小。
※ 总 结 ※
这里对于光流位移传感器的特性进行了初步测试, 它的输出与传感器前面反射物特征, 以及相对距离都有关系。
一、测量程序
from machine import Pin,UART
import time
uart = UART(1, baudrate=19200)
print(uart)
inbuf = bytes([0]*7)
recebuf = b''
mx = 0
my = 0
squal = 0
sigmax = 0
sigmay = 0
printcount = 0
while True:
if uart.any() > 0:
inb = uart.read(uart.any())
recebuf = recebuf + inb
buflen = len(recebuf)
delflag = 1
if buflen > 0:
id = 0
for b in recebuf:
if b == 0xfe:
if buflen >= id+9:
mx = recebuf[id+3]
mx = mx*256 + recebuf[id+2]
my = recebuf[id+5]
my = my*256 + recebuf[id+4]
squal = recebuf[id+7]
if mx > 0x7fff: mx -= 0x10000
if my > 0x7fff: my -= 0x10000
if squal > 0x80 and recebuf[id+8] == 0xaa:
sigmax += mx
sigmay += my
else:
recebuf = recebuf[id:]
delflag = 0
break
id += 1
if delflag > 0: recebuf = b''
time.sleep_ms(10)
printcount += 1
if printcount >= 10:
printcount = 0
print(sigmax, sigmay, squal, mx, my)
from head import *
from tsmodule.tsvisa import *
RAIL_CONTROL_IP = '192.168.0.203'
RAIL_CONTROL_PORT = 6000
def rcccw(step):
strcmd = 'ccw %d'%step
udpsendstr(RAIL_CONTROL_IP,
RAIL_CONTROL_PORT,
strcmd)
def rccw(step):
strcmd = 'cw %d'%step
udpsendstr(RAIL_CONTROL_IP,
RAIL_CONTROL_PORT,
strcmd)
time.sleep(10)
rcccw(4500)
time.sleep(15)
rccw(5500)
printf('\\a')
以上是关于光流传感器特性测试的主要内容,如果未能解决你的问题,请参考以下文章