K210的MicroPython扩展例程——自动驾驶例程(视觉循迹)

前言

该例程实现的功能是循迹功能,可为想拿K210做视觉循迹开发作为参考
例程使用前需要搭建好MicroPython的开发环境
K210开发板MicroPython开发环境搭建

一、将K210连接好后打开CanMV IDE,连接成功后,三角形变成绿色

在这里插入图片描述

二、然后要把小车驱动库PID控制库下载到内存卡的根目录上。

1、现在官方资料包找到下面三个源码,然后复制到文档/CanMV这个文件夹里
在这里插入图片描述
2、点这里,先把这两个库存进内存卡(前提是插上了内存卡)
在这里插入图片描述
3、点打开,依次写入这两个库
在这里插入图片描述
4、写入成功即可
在这里插入图片描述

三、在这个位置打开循迹例程

在这里插入图片描述

四、源码

import sensor, image, time, lcd

#导入所需模块
from modules import ybserial #串口通信模块
from robot_Lib import Robot  #机器人控制模块
from simplePID import PID    #PID控制器模块

#FollowLinePID = (22, 0, 2)
FollowLinePID = (15, 0, 2)  #循迹PID参数
SCALE = 1000.0         #PID控制器缩放比例

#初始化PID控制器
PID_controller = PID(
    160,
    FollowLinePID[0] / 1.0 / (SCALE),
    FollowLinePID[1] / 1.0 / (SCALE),
    FollowLinePID[2] / 1.0 / (SCALE))

#初始化串口通信
ser = ybserial()


#初始化机器人控制
bot = Robot(ser)

#设置机器人声音和运动状态
bot.set_beep(50)
bot.set_car_motion(0, 0, 0)

#初始化相机传感器
lcd.init()
sensor.reset()
sensor.set_pixformat(sensor.RGB565) #设置图像格式为RGB565
sensor.set_framesize(sensor.QVGA)   #设置图像帧大小为QVGA
sensor.skip_frames(time = 100)      #跳过100ms的帧
sensor.set_auto_gain(False)         #关闭自动增益
sensor.set_auto_whitebal(True)      #打开自动白平衡

#初始化时间时钟
clock = time.clock()

#提示用户在摄像头前放置要跟踪的对象,并学习其颜色阈值
print("Hold the object you want to track in front of the camera in the box.")
print("MAKE SURE THE COLOR OF THE OBJECT YOU WANT TO TRACK IS FULLY ENCLOSED BY THE BOX!")

# Capture the color thresholds for whatever was in the center of the image.
# 50x50 center of QVGA.
#学习颜色阈值的中心图片区域
BOX = 30
r = [(320//2)-(BOX//2), (240//2)-(BOX//2), BOX, BOX]
for i in range(50):
    img = sensor.snapshot()
    img.draw_rectangle(r)
    lcd.display(img)

#学习颜色阈值
print("Learning thresholds...")
threshold = [BOX, BOX, 0, 0, 0, 0] # Middle L, A, B values.
for i in range(50):
    img = sensor.snapshot()
    hist = img.get_histogram(roi=r)
    lo = hist.get_percentile(0.01) # 获取直方图在1%范围内的累积分布函数值
    hi = hist.get_percentile(0.99) # 获取直方图在99%范围内的累积分布函数值
     # 取百分位值的平均值
    threshold[0] = (threshold[0] + lo.l_value()) // 2
    threshold[1] = (threshold[1] + hi.l_value()) // 2
    threshold[2] = (threshold[2] + lo.a_value()) // 2
    threshold[3] = (threshold[3] + hi.a_value()) // 2
    threshold[4] = (threshold[4] + lo.b_value()) // 2
    threshold[5] = (threshold[5] + hi.b_value()) // 2
    # 绘制目标物体的边界框和中心交叉点
    for blob in img.find_blobs([threshold], pixels_threshold=100, area_threshold=100, merge=True, margin=10):
        img.draw_rectangle(blob.rect())
        img.draw_cross(blob.cx(), blob.cy())
        img.draw_rectangle(r, color=(0,255,0))# 绘制颜色学习的区域
    lcd.display(img)

print("Thresholds learned...")# 学习阈值完成
print("Start Color Recognition...")# 开始颜色识别

state = 0# 初始化状态
while(True):
    clock.tick()
    img = sensor.snapshot() # 获取图像
    fps = clock.fps()       # 计算帧率
    data_in = 0
    index = 0
    for blob in img.find_blobs([threshold], pixels_threshold=100, area_threshold=100, merge=True, margin=10):
        #img.draw_rectangle(blob.rect())
        #img.draw_cross(blob.cx(), blob.cy())
        index = index + 1
        state = 1
        if index == 1:
            area_max = blob.w()*blob.h()
            area = blob
        else:
            temp_area = blob.w()*blob.h()
            if temp_area > area_max:
                area_max = temp_area
                area = blob
    if state == 1:
        print("area:", index, area.w(), area.h())
        value = PID_controller.incremental(area.cx())# 计算PID控制器输出值
        img.draw_rectangle(area.rect())# 绘制目标物体的边界框
        img.draw_cross(area.cx(), area.cy()) # 绘制目标物体的中心交叉点
        bot.set_car_motion(0.2, 0, value)# 设置机器人运动
        state = 0

    img.draw_string(0, 0, "%2.1ffps" %(fps), color=(0, 60, 128), scale=2.0)
    lcd.display(img)# 在LCD上显示帧率
    #print("FPS:s", fps)


五、点击下载运行即可

在这里插入图片描述

六、现象

等待系统初始化完成后,LCD显示摄像头画面,并且屏幕中间有一个白色的方框,请将要识别的颜色放到白色方框内,等待白色方框变绿则开始采集颜色,采集完成绿框消失,开始运行程序。

颜色识别的功能主要是分析颜色的LAB值,先把要识别的颜色放方框内,然后系统会根据方框内读取到的颜色的LAB值,再与摄像头采集到的颜色的LAB值作为分析对比,如果符合要求则画出方框,表示识别到该颜色,并将识别到的颜色的位置信息传输给PID控制器进行计算,判断出识别到的颜色与小车中间的偏移量,根据偏移量来修改小车前进的方向,从而达到小车视觉巡线的功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/634185.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

接口测试怎么测?为什么要做接口测试?

一、前言 接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间及内部各个子系统之间的交互点。测试的重点是检查数据的交换、传递和控制管理过程,以及系统间的逻辑依赖关系等。 简单地说,接口测试就是通过URL向服务器或者…

leetCode-hot100-数组专题之区间问题

数组专题之区间问题 知识点:解决思路:例题56.合并区间57.插入区间253.会议室 Ⅱ485.无重叠区间 数组区间问题是算法中常见的一类问题,它们通常涉及对数组中的区间进行排序、合并、插入或删除操作。无论是合并区间、插入区间还是删除重复空间&…

azure gpt 技术教程教学 | 在Azure OpenAI 上部署GPT-4o

Azure OpenAI GPT-4o是OpenAI推出的最新旗舰级人工智能模型。GPT-4o模型设计为能够实时对音频、视觉和文本进行推理,这是迈向更自然人机交互的重要一步。该模型的一大特点是能够处理多种类型的数据输入和输出,包括文本、音频和图像,实现了跨模…

适用于Windows 电脑的最佳视频恢复软件和方法

毫无疑问,丢失您的基本数据总是有压力的,尤其是当这些是您为捕捉最美好回忆而收集的重要视频文件时。要恢复丢失或损坏的视频文件,您可以借助视频恢复工具。但是,在选择最佳视频恢复工具时,您必须考虑多个扫描选项&…

Windows10安装python3.8.2

1、下载与安装 下载地址:https://www.python.org/downloads/release/python-382/ 滑动到页面底部 下载好的安装包安装到合适的位置(默认安装到C盘) 安装的时候,见到Add Python 3.8 to PATH 记得勾选. 2、检测安装是否成功 cm…

Facebook隐私保护:数据安全的前沿挑战

在数字化时代,随着社交媒体的普及和应用,个人数据的隐私保护问题日益受到关注。作为全球最大的社交平台之一,Facebook承载了数十亿用户的社交活动和信息交流,但与此同时,也面临着来自内外部的数据安全挑战。本文将深入…

Flask Response 对象

文章目录 创建 Response 对象设置响应内容设置响应状态码设置响应头完整的示例拓展设置响应的 cookie重定向响应发送文件作为响应 总结 Flask 是一个 Python Web 框架,用于快速开发 Web 应用程序。在 Flask 中,我们使用 Response 对象来构建 HTTP 响应。…

汽车IVI中控开发入门及进阶(十九):监控视频图像分割处理

图像分割是一种计算机视觉技术,可将数字图像分成离散的像素组(图像分段),为对象检测和相关任务提供信息。通过将图像的复杂视觉数据解析为特定形状的片段,图像分割可以实现更快、更先进的图像处理。 图像分割技术的范围很广,从简单直观的启发式分析到最前沿的深度学习实…

【论文笔记】advPattern

【论文题目】 advPattern: Physical-World Attacks on Deep Person Re-Identification via Adversarially Transformable Patterns Abstract 本文首次尝试对深度reID实施鲁棒的物理世界攻击。提出了一种新颖的攻击算法,称为advPattern,用于在衣服上生成…

CR80清洁卡都能用在什么地方?

CR80清洁卡(也被称为ISO 7810 ID-1清洁卡)的规格确实使其在各种需要读取磁条或接触式智能卡的设备中都有广泛的用途。这些设备包括但不限于: ATM自动终端机:当ATM机的磁条读卡器出现故障或读卡不灵敏时,可以使用CR80清…

H800基础能力测试

H800基础能力测试 参考链接A100、A800、H100、H800差异H100详细规格H100 TensorCore FP16 理论算力计算公式锁频安装依赖pytorch FP16算力测试cublas FP16算力测试运行cuda-samples 本文记录了H800基础测试步骤及测试结果 参考链接 NVIDIA H100 Tensor Core GPU Architecture…

CVPR2022医疗图像-GBCNet网络:胆囊癌(GBC)超声(USG)图像检测模型

Surpassing the Human Accuracy:Detecting Gallbladder Cancer from USG Images with Curriculum Learning:超越人类的准确性:基于课程学习的USG图像检测胆囊癌 目录 一、背景与意义 二、介绍 三、网络框架 3.1 区域选择网络 3.2 MS-SoP分类器 3.3 多尺度块 …

linux创建离线yum源给局域网机器使用

适用场景:在封闭的内网环境中,无法使用互联网进行安装各种rpm包的时候,离线yum源可以解决大部分问题,配置号后可直接使用yum进行安装包 1.准备好镜像源ISO: 例如以下示例,具体可参考自己的系统进行下载&a…

vscode插件-07Java

文章目录 Extension Pack for JavaSpring Initializr Java SupportCodeSwingJdk下载JDK安装jdkWindows安装jdkLinux安装jdk(以Ubuntu为例) jdk环境变量在VScode中配置Windows系统中配置Linux系统中配置(以Ubuntu为例) Extension P…

文心一言 VS 讯飞星火 VS chatgpt (265)-- 算法导论20.1 4题

四、假设不使用一棵叠加的度为 u \sqrt{u} u ​ 的树,而是使用一棵叠加的度为 u 1 k u^{\frac{1}{k}} uk1​的树,这里 k 是大于 1 的常数,则这样的一棵树的高度是多少?又每个操作将需要多长时间?如果要写代码&#xf…

DiskCatalogMaker for Mac:专业的文件搜索与整理助手

DiskCatalogMaker for Mac,这款专业的文件搜索与整理助手,为Mac用户带来了全新的文件管理体验。它不仅能快速扫描和读取各种存储设备中的文件,还能创建详细的磁盘目录数据库,使用户能够轻松查找和管理所需文件。 软件的搜索功能强…

HP1010|图腾柱无桥PFC电流采样模式小结

伴随着氮化镓和碳化硅等第三代半导体功率器件在应用端的兴起,图腾柱PFC也随之从学术研究走到了现实的产品里。然而,在受益于拓扑电路简洁,高功率密度和效率的同时, 还是有很多技术难点是需要克服的。本文将讨论图腾柱PFC电流采样&…

xrdp多用户多控制界面远程控制

1、无桌面安装桌面(原本有ubuntu桌面的可以直接跳过这一步) Gnome 与 xfce 相比,xfce 由于其轻巧,它可以安装在低端台式机上。Xfce 优雅的外观,增强了用户体验,它对用户非常友好,性能优于其他桌…

Excel 下划线转驼峰

Excel 下划线转驼峰 LOWER(LEFT(SUBSTITUTE(PROER(A1),"_",""),1))&RIGHT(SUBSTITUTE(PROPER(A1),"_",""),LEN(SUBSTITUTE(PROPER(A1),"_",""))-1)

【kubernetes】kubeadmin

确定需求 #master的cpu核心数要求大于2 master(2C/4G) 192.168.10.19 docker、kubeadm、kubelet、kubectl、flannel node01(2C/2G) 192.168.10.20 docker、kubeadm、kubelet、kubectl、flannel node02(2C/2…