K210视觉循迹,STM32之间串口通信 #智能车
温馨提示:这篇文章已超过401天没有更新,请注意相关的内容是否还可用!
目录
个人感慨与感悟
K210视觉循迹
个人感慨与感悟
本人是一名大二的二本学生,本篇文章记录一下我这一年多的学习历程(主要还是针对标题的内 容)。下面是我的一些经历和感悟,不感兴趣的可以直接跳过-——————————
高考完之后,在我收到录取通知书之后,父母让我提前学点大学的东西,比如高数英语之类的。后来,我就在b站上面逛逛,然后了解到了python这门语言。后来........被卖课的骗了,上了及几十节基础语法(上网上搜,随便一搜一大堆),花了三千多(服了,当时我还傻乎乎的分期付款);正如我前几篇文章。
开学之后,在新生群里,看到有机器人之类的社团招生。想着给自己的大学生活找点事情做做,进入社团之后,我被那些智能车给深深的迷住了。从此开启造车之路。
大一上没学啥。就学了Arduino的一些基础知识,如digitalRead(),analogWrite()函数之类的,后来在期末的时候勉强做出了一个小车。仅仅能控制正转反转哈哈哈。当时一直不理解寻迹小车是生么个逻辑,为什么检测到黑线能直走,为什么检测到十字路口就能转弯;(实际上,就是循迹传感器检测到黑线返回高电平(也有的是低电平),单片机检测到为高电平(低电平),我就控制电机,从而它才能走。而不是检测到高电平它自己就动,而是我写了代码让他动而已)
第一次做的小车
大一下学的还行,还是学arduino。现在看来进度挺慢的。就学了一些模块,如超声波,机械臂,esp8266,激光传感器,播放器之类的。因为口罩原因,所有吉林省电赛推迟举办了,然后我就碰巧让我遇上了,那年省赛是自主命题,也是小车循迹,不过那时候我还没有完全搞清楚循迹的逻辑,很菜,然后连循迹都没循好,(扇形那块卡住了),后来和学长合作,给学长了做了个人机互界面
人机交互,发送数据
淘晶驰的显示屏
升大二时候的暑假,打了电赛,也取得了一点成绩(大佬轻喷,手下留情),我做的是E题,激光追踪,主控还是用的Mega2560,搭配云台,K210。
2023电赛
大二上,也就是这个学期。提前一个月准备 吉林省人工智能创新大赛。打了四次板子,车身外壳用3d打印机打的,最后比赛前一天晚上摄像头被我搞坏了,哎。好了,正式开始正题吧
K210视觉循迹
K210基于MicroPython 语言,而“MicroPython 是 Python 3 编程语言的精简高效实现。说人话就是K210用python编程。
我是利用K210检测物体的方法来写的循迹,这个方法的话肯定是没有利用二值化那些方法寻线好,因为我选择的赛道是全地形赛道,需要识别不同颜色的障碍物,所以只能靠检测物体来做。
全地形赛道
先附上源码(参考CSDN一些大佬文章写的,不是纯手搓哈哈哈,刚接触K210,还没那个实力
/(ㄒoㄒ)/~~)
# Untitled - By: ZWHSONDER - 周四 10月 26 2023
# 导入模块
import sensor, time, image ,lcd
from machine import UART
from fpioa_manager import fm
# 配置串口引脚
fm.register(18, fm.fpioa.UART1_TX, force=True)
uart_A = UART(UART.UART1, 115200, 8, 0, 1, timeout=1000, read_buf_len=4096)
# 感光元件设置
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_auto_exposure(1)
sensor.set_auto_gain(False)
sensor.set_auto_whitebal(False)
sensor.set_vflip(1)
sensor.set_hmirror(False)
sensor.skip_frames(time = 2000)
# 显示屏初始化
lcd.init(freq=15000000)
# 创建时钟对象
clock = time.clock()
# 寻找色块
# 定义类
class color_property():
cx = 0
cy = 0
flag = 0
color = 0
pixels_max = 0
color_threshold = (0, 0, 0, 0, 0, 0)
color_roi = (0,0,320,240)
color_x_stride = 1
color_y_stride = 1
color_pixels_threshold = 100
color_area_threshold = 100
color_merge = True
color_margin = 1
# 定义黑色色块
black = color_property()
black.color_threshold = (0, 20, -9, 4, -5, 6)
black.color_roi = (0,120,320,240)
black.color_x_stride = 1
black.color_y_stride = 1
black.color_pixels_threshold = 4000
black.color_area_threshold = 4000
black.color_merge = True
black.color_margin = 1
#串口发送数据
def sending_data(x,y):
FH = bytearray([0x2C,0x12,x,y,0x5B])
uart_A.write(FH);
# 定义寻找色块函数
def opv_find_blobs(color,led_flag):
color.pixels_max = 0
color.flag = 0
color.led_flag = 0
for blobs in img.find_blobs([color.color_threshold],
roi = color.color_roi,
x_stride = color.color_x_stride,
y_stride = color.color_y_stride,
pixels_threshold = color.color_pixels_threshold,
area_threshold = color.color_area_threshold,
merge = color.color_merge,
margin = color.color_margin):
img.draw_rectangle(blobs[0:4])
if color.pixels_max 160:
if black.cy60:#80
if black.cx>140:
if black.cx160:
if black.cy160:
if black.cy