光流传感器特性测试

光流传感器
目 录
Contents
背景测试
测试反射物
对比不同高度
总 结
测量程序

光流传感器GL9306

§01 流传感器


一、背景测试

  下面是参加智能车竞赛同学所使用的光流传感器GL9306, 使用MicroPython搭建了数据接收和处理平台, 下面对于它的相关特性进行测试。 这些特性包括: 反射物对测量的影响,以及高度对测量的影响。

  # # -3-
  这里使用一个滑轨带动光流传感器移动, 它移动的距离大约为10厘米。 下面就可以通过读取光流传感器累计数值,来获得移动的距离。

  # # GM1657369178_1280_800.MPG|

二、测试反射物

  首先,在光流传感器下面设置一块黑色泡沫海绵。 它上表面距离传感器距离大约为7.3厘米。 下面测试滑轨移动对应的数值变化。 可以看到光流传感器输出累积值,在y轴方向从18 变化到700。

  # GM1657369430_1000_625.MPG| GM1657369597_1280_800.MPG|
  这是铺设有白纸上面的情况, 可以看到传感器输出数值已经在发生比较明显的漂移。 显然此时已经没有移动测量的必要了。 本身数值就非常不稳定了。

   GM1657369993_1280_800.MPG|GM1657370116_1280_800.MPG|GM1657370173_1280_800.MPG|
  铺设红色隔离布, 输出数值就非常稳定了。 它的表面距离传感器大约为9 厘米。 测量滑轨移动对对应数据变化。 可以看到光流传感器输出累计值, 在y轴上变化从18变化到700。 相比黑色海绵, 光流传感器输出减小了。

  * GM1657370394_1280_800.MPG| GM1657370536_1280_800.MPG| GM1657370437_1280_800.MPG| -4-

三、对比不同高度

  下面将光流传感器抬升,距离红色隔离棉表面大约17厘米。 移动光流传感器,查看传感器y轴的变化。 光流传感器输出值变化为311, 对比前面测量结果来看。 输出数值在下降。】这与高度呈现一定的关系, 也就是表面距离光流传感器越大,移动数值越小。
  GM1657370994_1280_800.MPG| GM1657371146_1280_800.MPG| -5-
 

  结 ※


  里对于光流位移传感器的特性进行了初步测试, 它的输出与传感器前面反射物特征, 以及相对距离都有关系。

  GM1657380008_1056_660.MPG| GM1657380059_1056_660.MPG|

一、测量程序

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')


猜你喜欢

转载自blog.csdn.net/zhuoqingjoking97298/article/details/125696630