花费200元,我用全志H616和雪糕棒手搓了一台可UI交互的视觉循迹小车

这篇具有很好参考价值的文章主要介绍了花费200元,我用全志H616和雪糕棒手搓了一台可UI交互的视觉循迹小车。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

常见的视觉循迹小车都具备有路径识别、轨迹跟踪、转向避障、自主决策等基本功能,如果不采用红外避障的方案,那么想要完全满足以上这些功能,摄像头、电机、传感器这类关键部件缺一不可,由此一来小车成本也就难以控制了。

但如果,有这样一款视觉循迹小车,它可以完全自己手搓,并用成本极低的雪糕棒来搭建车体架构,不仅保留了传统循迹小车具备的所有功能,还额外适配上一块小屏幕并配上UI界面用于升级人机交互方式。

花费200元,我用全志H616和雪糕棒手搓了一台可UI交互的视觉循迹小车,全志H616,智能硬件,ui,交互,循迹小车,全志,H616

花费200元,我用全志H616和雪糕棒手搓了一台可UI交互的视觉循迹小车,全志H616,智能硬件,ui,交互,循迹小车,全志,H616

更重要的是,它的器件成本被压缩到200元左右,这样的视觉循迹小车能让你心动吗~

花费200元,我用全志H616和雪糕棒手搓了一台可UI交互的视觉循迹小车,全志H616,智能硬件,ui,交互,循迹小车,全志,H616

核桃派视觉循迹小车简介

核桃派H616视觉循迹小车的循迹功能和人机交互界面整体代码由Python+Qt实现,它通过摄像头获取周围环境的图像信息,并利用图像处理算法识别出特定的标记或路径,然后根据标记或路径的形状和方向信息,自动控制小车的行驶方向和速度,以实现沿着预定轨迹自动行驶的目的。

花费200元,我用全志H616和雪糕棒手搓了一台可UI交互的视觉循迹小车,全志H616,智能硬件,ui,交互,循迹小车,全志,H616

手搓一台视觉循迹小车所需要用到的基础硬件材料如下:

1、核桃派H616开发板+LCD屏幕≈178元;
2、四个电机+车轮≈16元;
3、电机驱动模块≈4元;
4、摄像头≈50元;
5、移动电源≈20元;
6、雪糕棒若干≈4元(也可以≈不要钱);

循迹功能实现

要让小车实现循迹自运动的操作,其实也可以说是一个在教小车如何精准识别线路并做出判断的过程,想要小车的摄像头实现对路线的准确判断,就需要用到一个目前循迹小车最广泛采用的技术手段——二值化。

花费200元,我用全志H616和雪糕棒手搓了一台可UI交互的视觉循迹小车,全志H616,智能硬件,ui,交互,循迹小车,全志,H616

二值化是图像分割的一种方法,用于将图像中的像素点矩阵的灰度值设置为0或255,也就是将整个图像呈现出明显的只有黑和白的视觉效果。

在二值化过程中,将大于某个临界灰度值的像素灰度设为灰度极大值(通常是255),将小于这个值的像素灰度设为灰度极小值(通常是0),从而实现二值化。

# 根据不同模式,用不同的hsv上下限值
upper_hsv = (180,255,100)
lower_hsv = (0,0,0)
grayImage = cv2.inRange(hsvImage, np.array(lower_hsv), np.array( upper_hsv)) # 颜色二值化

花费200元,我用全志H616和雪糕棒手搓了一台可UI交互的视觉循迹小车,全志H616,智能硬件,ui,交互,循迹小车,全志,H616

二值化图像后,整个画面会被区分为黑白分明的两种颜色,之后就需要进行路线轮廓的描绘以及质心的标注,这个操作的目的是让小车知道该往左拐还是往右拐,进而控制两边车轮的速度。

  • 获取最大轮廓
# 获取所有轮廓,画出所有轮廓
contours, hierarchy = cv2.findContours(grayImage, cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
areas = [cv2.contourArea(c) for c in contours]]
cv2.drawContours(rgbImage,contours, -1,(0,255,0),3)
  • 计算质心
# 计算面积最大轮廓的质心
areas = [cv2.contourArea(c) for c in contours]
   try:
      M = cv2.moments(contours[areas.index(max(areas))])
   except:
      pass
   M10=M.get("m10")
   M01=M.get("m01")
   M00=M.get("m00")
   if M00 <= 0 :
      continue
   cX = int(M10 / M00)
   cY = int(M01 / M00)
# 绘制质心
cv2.circle(rgbImage, (cX, cY), 15, (255, 0, 255), -1)

花费200元,我用全志H616和雪糕棒手搓了一台可UI交互的视觉循迹小车,全志H616,智能硬件,ui,交互,循迹小车,全志,H616

在绘制轮廓与质心后就需要进行质心坐标的判断,这里的原理很简单,就是质心偏左就往左转,质心偏右就往右转,在判断的同时通过电机来控制两边车轮的速度进而控制小车的行驶方向。

花费200元,我用全志H616和雪糕棒手搓了一台可UI交互的视觉循迹小车,全志H616,智能硬件,ui,交互,循迹小车,全志,H616
花费200元,我用全志H616和雪糕棒手搓了一台可UI交互的视觉循迹小车,全志H616,智能硬件,ui,交互,循迹小车,全志,H616
花费200元,我用全志H616和雪糕棒手搓了一台可UI交互的视觉循迹小车,全志H616,智能硬件,ui,交互,循迹小车,全志,H616

根据质心的位置计算车轮速度的控制参数postion,根据具体的计算公式可以得知,postion的取值范围为-50到+50,其中0代表质心在正中间,+越大质心越往左,-越大质心越往右,则进行下面的速度计算和控制,否则将速度设置为0,再根据postion和delta_sum的值以及其他参数的调整,计算并控制左右车轮的速度。


# 车轮速度控制
if self.flag_start.status() == True :
    # -50 ~ +50  :0为正中间,+越大则越往左,-越大则越往右,
    postion = int(int(center_x - cX) / int(center_x / 50)) 
    # postion += self.delta_sum 

    step = self.postion_last - postion
    self.delta_sum += (postion - step)*0.01
    if self.delta_sum > 100:
        self.delta_sum =  100
    elif self.delta_sum < -100:
        self.delta_sum =  -100
    if abs(postion) < 5 :
        self.delta_sum = 0
       
    # print("self.delta_sum", self.delta_sum)
    self.postion_last = postion
         
    speed_l = 50 - postion - int(self.delta_sum) 
    speed_r = 50 + postion + int(self.delta_sum) 

    motor.L.speed(speed_l)
    motor.R.speed(speed_r)
    self._slider_l.setValue(speed_l)
    self._slider_r.setValue(speed_r)

花费200元,我用全志H616和雪糕棒手搓了一台可UI交互的视觉循迹小车,全志H616,智能硬件,ui,交互,循迹小车,全志,H616

人机交互界面

核桃派H616开发板上预装了PyQt,所以可以使用Qt自带的设计器软件来画窗口,在设计好后通过命令一键转化为Python代码,再去核桃派的开发文档复制一段显示案例的代码,就可以轻松在电脑上预览到刚刚的窗口画面。

花费200元,我用全志H616和雪糕棒手搓了一台可UI交互的视觉循迹小车,全志H616,智能硬件,ui,交互,循迹小车,全志,H616

为了在远程服务器上运行图形界面应用程序,通过设置os.environ[“DISPLAY”] = ":0.0"允许Thonny远程运行。

# 允许Thonny远程运行
import os
os.environ["DISPLAY"] = ":0.0"

定义了一个名为event_press的函数,用于处理QPushButton按钮的released事件。当按钮被释放时,切换work.flag_start的状态,并根据状态改变按钮的文本。

def event_press():
    if work.flag_start.status():
        work.flag_start.disable()
        ui.pushButton.setText("点击开始")
    else :
        work.flag_start.enable()
        ui.pushButton.setText("点击结束")

花费200元,我用全志H616和雪糕棒手搓了一台可UI交互的视觉循迹小车,全志H616,智能硬件,ui,交互,循迹小车,全志,H616

为了处理三个不同按钮的released事件,定义了change_to_mode三个函数,这些函数用于将work.flag_mode的模式设置为不同的值。


def change_to_mode0():
    work.flag_mode.set_mod( 0 )
def change_to_mode1():
    work.flag_mode.set_mod( 1 )
def change_to_mode2():
    work.flag_mode.set_mod( 2 )
ui.pushButton.released.connect(event_press)
ui.pushButton_auto.released.connect(change_to_mode0)
ui.pushButton_black.released.connect(change_to_mode1)
ui.pushButton_white.released.connect(change_to_mode2)

以上这些代码片段是构成一个由PyQt所创建GUI的关键部分。它通过创建一个窗口,并在窗口中显示了一些UI元素,同时定义了一些事件处理函数,这个应用程序根据用户的操作来控制某些功能,并使用定时器来让解释器每隔一段时间运行一次,以保持界面响应性能,最后进入主循环等待事件的触发和处理。文章来源地址https://www.toymoban.com/news/detail-832118.html

到了这里,关于花费200元,我用全志H616和雪糕棒手搓了一台可UI交互的视觉循迹小车的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Orangepi Zero2 全志H616(一):配置初始化和启动流程

    目录 一,Orangepi简单说明 ①为什么使用全志H616 ②基本特性 ③配套操作系统支持 二,刷机和系统启动 ①准备工具 ②登录系统 ● 开发板供电 ● 登录 ● 开发板上板载LED灯测试说明 ③修改登录密码 ④网络配置 ⑤SSH登陆开发板 三,vim设置:tab键缩进及代码行数显示 四,全志

    2024年02月04日
    浏览(49)
  • 在全志H616核桃派上实现USB摄像头的OpenCV颜色检测

    在给核桃派开发板用OpenCV读取图像并显示到pyqt5的窗口上并加入颜色检测功能,尝试将图像中所有蓝色的东西都用一个框标记出来。 按照惯例,先要介绍一下opencv中常用的hsv像素格式。颜色还是那个颜色,只是描述颜色用的参数变了。h代表色调,s代表饱和度,v代表明度,比

    2024年01月23日
    浏览(44)
  • 【Orangepi Zero2 全志H616】驱动串口实现Tik Tok—VUI(语音交互)

    一、编程实现语音和开发板通信 wiringpi库源码 demo.c 二、基于前面串口的代码修改实现 uartTool.h uartTool.c uartTest.c 三、ADB adb控制指令 四、手机接入Linux热拔插相关 a. 把手机接入开发板 b. 安装adb工具,在终端输入adb安装指令: sudo apt-get install adb c. dmeg能查看到手机接入的信息,

    2024年02月21日
    浏览(41)
  • 【Orangepi Zero2 全志H616】驱动舵机控制 / Linux定时器(signal、setitimer)

    一、SG90舵机开发 舵机基本介绍 二、Linux定时器 signal 函数 setitimer 函数原型 signal、setitimer函数API调用 三、舵机 软件PWM实现 如下图所示,最便宜的舵机sg90,常用三根或者四根接线,黄色为PWM信号控制用处: 垃圾桶项目开盖用、智能小车的全比例转向、摄像头云台、机械臂等

    2024年02月05日
    浏览(52)
  • 【香橙派+DHT11】香橙派(全志H616)+ DHT11温湿度传感器的驱动教程

    最近写DHT11的代码到香橙派(全志H616)上,发现网上案例基本上都是树莓派+DHT11的居多,香橙派的少,少数找得到的代码跑起来也是不稳定或者数据相对不太准确,于是这里自己写了一篇,供大家参考和批评指正 产品概述 DHT11数字温湿度传感器是一款含有已校准数字信号输出

    2024年02月11日
    浏览(37)
  • 【嵌入式Linux项目】基于Linux的全志H616开发板智能家居项目(语音控制、人脸识别、安卓APP和PC端QT客户端远程操控)有视频功能展示

    目录 一、功能需求 二、开发环境 1、硬件: 2、软件: 3、引脚分配: 三、关键点 1、设计模式之工厂模式 2、线程 3、wiringPi库下的相关硬件操作函数调用 4、语音模块的串口通信 5、摄像头的实时监控和拍照功能 6、人脸识别 7、qt程序跨平台运行(编译成安卓APP) 四、编译和

    2024年02月15日
    浏览(61)
  • 用全志R128复刻自平衡赛车机器人,还实现了三种不同的操控方式

    经常翻车的朋友们都知道,能在翻车后快速摆正车身的车才是好车。 就像动画《四驱兄弟》中展现的那样,在比赛中需要跟着赛车一起跑圈,而且赛车如果被撞翻还需要重新用手扶正,所浪费的时间非常影响比赛结果。 如果小豪和小烈可以拥有一款能通过发挥R128的WiFi蓝牙特

    2024年02月03日
    浏览(38)
  • 无敌!我用【C语言】手搓出了一个体系完整的【员工管理系统】还能玩游戏听音乐?(超详细,附完整源码)

    博主简介: Hello大家好呀,我是陈童学,一个与你一样正在慢慢前行的人。 博主主页: @陈童学哦 所属专栏: C语言程序设计实验项目 如果本文对你有所帮助的话,还希望可以点赞👍收藏📂支持一下哦! 前言:员工管理系统是一款面向公司管理员的管理工具,旨在提供员工

    2024年02月08日
    浏览(51)
  • ChatGPT教我用200行代码写一个简版Vue框架 - OpenTiny

    最近,我正在准备一份关于 Vue 基础的学习材料。期间我突发奇想:能否利用现在热门的 ChatGPT 帮我创建学习内容?其实 Vue 本身不难学,特别是基础用法,但是,如果你想深入掌握 Vue,就要通过阅读 Vue 的源码来了解其原理。然而,不是每个人都有足够的时间和耐心阅读 V

    2024年02月08日
    浏览(55)
  • 全志F1C200S嵌入式驱动开发(串口驱动)

    【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】         对于uboot、kernel和rootfs来说,他们的串口输出一般都是uart0。一般这么做,是没有问题的。只不过我们自己买的这块f1c200s电路板,设计者把uart转ttl的接口,改接到了uart1上面。不过这样

    2024年02月16日
    浏览(78)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包