OpenMV:14巡线小车

文章目录

*

+
* 追小球的小车
* 巡线小车

这个例子展示了在OpenMV Cam上使用get_regression()方法获得ROI的线性回归。使用这种方法,可以轻松让机器人跟踪所有指向相同大致方向的线。

本例程可以用于机器人巡线,效果非常好。

“巡线小车”的原理和”追小球的小车”是差不多一样的,其中car.py和pid.py完全一样,改动的就只有主函数main.py

追小球的小车

采用的是 颜色识别算法,调用的是 find_blobs()函数

巡线小车

采用的是 线性回归算法,调用的是 get_regression()函数:快速线性回归,返回视野中的一条回归直线,该函数可以得到直线的斜率、角度(或者说是偏移的距离),然后我们就可以 用直线返回来的角度来控制我们的小球进行运动
如果我们在OpenMV视野中看到的 直线正好是竖直的,说明我们看到的是一条 位于正前方的直线,那么我们就可以 控制小车的两个电机转速一样往前跑
如果我们在OpenMV视野中看到的直线是 左偏45°,那么我们就可以 控制我们的小车右边的电机比左边的速度快让小车稍微向左前方进行移动,右前方同理

OpenMV:14巡线小车

car.py和pid.py详见”追小球的小车”
使用时要将car.py和pid.py保存到OpenMV内置的flash中!

main.py

THRESHOLD = (5, 70, -23, 15, -57, 0)

import sensor, image, time
from pyb import LED
import car
from pid import PID

rho_pid = PID(p=0.4, i=0)
theta_pid = PID(p=0.001, i=0)

LED(1).on()
LED(2).on()
LED(3).on()

sensor.reset()

sensor.set_vflip(True)
sensor.set_hmirror(True)
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QQQVGA)

sensor.skip_frames(time = 2000)

clock = time.clock()

while(True):
    clock.tick()
    img = sensor.snapshot().binary([THRESHOLD])

    line = img.get_regression([(100,100)], robust = True)

    if (line):
        rho_err = abs(line.rho())-img.width()/2

        if line.theta()>90:
            theta_err = line.theta()-180
        else:
            theta_err = line.theta()

        img.draw_line(line.line(), color = 127)

        print(rho_err,line.magnitude(),rho_err)

        if line.magnitude()>8:

            rho_output = rho_pid.get_pid(rho_err,1)
            theta_output = theta_pid.get_pid(theta_err,1)
            output = rho_output+theta_output

            car.run(50+output, 50-output)

        else:
            car.run(0,0)

    else:
        car.run(50,-50)
        pass

Original: https://blog.csdn.net/m0_59466249/article/details/125238701
Author: Lionetxx
Title: OpenMV:14巡线小车

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/613270/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球