基于open mv 搭配stm32循迹

基于open mv 搭配stm32循迹

一.代码

THRESHOLD = (0, 43, 20, -8, -37, 14) # Grayscale threshold for dark things...
import sensor, image, time
from pyb import LED
import car
from pid import PID
from pyb import UART
from pyb import Pin
rho_pid = PID(p=0.4, i=0)
theta_pid = PID(p=0.001, i=0)

sensor.reset()
sensor.set_vflip(True)
sensor.set_hmirror(True)
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QQQVGA) # 80x60 (4,800 pixels) - O(N^2) max = 2,3040,000.
#sensor.set_windowing([0,20,80,40])
sensor.skip_frames(time = 2000)     # WARNING: If you use QQVGA it may take seconds
clock = time.clock()                # to process a frame sometimes.
uart = UART(3, 115200)

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:   #值越大线性回归效果越好
            #if -40<b_err<40 and -30<t_err<30:
            rho_output = rho_pid.get_pid(rho_err,1)
            theta_output = theta_pid.get_pid(theta_err,1)
            output = rho_output+theta_output
            if rho_err > -3 and rho_err < 3:
                uart.write("1")
                p_out = Pin('P0', Pin.OUT_PP)
                p_out.high()
                p_out = Pin('P1', Pin.OUT_PP)
                p_out.low()#设置p_out引脚为低
                p_out = Pin('P2', Pin.OUT_PP)
                p_out.low()#设置p_out引脚为低
                print('0')
            elif rho_err <= -3:
                p_out = Pin('P1', Pin.OUT_PP)#设置p_out为输出引脚
                p_out.high()#设置p_out引脚为高
                p_out = Pin('P0', Pin.OUT_PP)
                p_out.low()#设置p_out引脚为低
                p_out = Pin('P2', Pin.OUT_PP)
                p_out.low()#设置p_out引脚为低
                uart.write("2")
                print('1')
            elif rho_err >= 3:
                uart.write("3")
                p_out = Pin('P2', Pin.OUT_PP)#设置p_out为输出引脚
                p_out.high()#设置p_out引脚为高
                p_out = Pin('P1', Pin.OUT_PP)
                p_out.low()#设置p_out引脚为低
                p_out = Pin('P0', Pin.OUT_PP)
                p_out.low()#设置p_out引脚为低
                print('2')

    #print(clock.fps())

这里使用星瞳的例程,加入自己的思想,由于时刚学OPEN MV所以使用这种简单的思想。这里OPEN MV相当于循迹模块。

二.思想
这里我是主要使用rho_err这个函数,在星瞳例程中会在所循迹物体中间画出一条线,而rho_err便是那个线对于所循的误差,偏左了小于0,偏大了大于0,rho_err >= 某个数,某个数就是偏移量,可以对某个数进行调整使路线更加精准。然后对IO口设置高低电平。32读取io电平对路线进行调整。

如果还有问题可以在下方留言。

  • 6
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
循迹避障小车是一种智能小车,它可以自动跟随指定的路径行驶,并根据环境情况自动避障。基于stm32循迹避障小车设计需要进行以下步骤: 1. 硬件设计:包括小车底盘、电机驱动模块、超声波传感器、红外循迹模块、STM32单片机等硬件的选择和布局。 2. 软件设计:包括底盘控制程序、循迹算法、避障算法、通信协议等软件的编写。 3. 调试测试:对硬件和软件进行集成测试和调试,确保小车能够正常运行。 以下是基于stm32循迹避障小车的设计流程: 1. 硬件设计 首先需要确定小车的整体尺寸和结构布局,并选择适合的电机驱动模块、超声波传感器、红外循迹模块、STM32单片机等硬件。其次,需要对这些硬件进行布局设计,确定它们在小车上的位置和连接方式。 2. 软件设计 小车的软件设计需要包括底盘控制程序、循迹算法、避障算法、通信协议等方面。其中,底盘控制程序需要实现小车的前进、后退、转向等基本动作。循迹算法需要根据红外循迹模块的信号进行分析,实现小车的自动跟踪和转向。避障算法需要利用超声波传感器的信号进行分析,实现小车的自动避障。通信协议需要定义小车与其他设备之间的通信格式和协议。 3. 调试测试 在整个设计过程中,需要进行多次调试测试,以确保硬件和软件的正常运行。调试测试可以分为单项测试和集成测试两个阶段。在单项测试中,需要对每个硬件和软件进行单独测试;在集成测试中,需要将所有硬件和软件进行集成测试,以确保小车能够正常运行。 总体来说,基于stm32循迹避障小车设计需要进行综合考虑,包括硬件、软件、通信等方面的设计。只有在各个方面都考虑周全,才能设计出一款稳定可靠、功能强大的智能小车。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值