【智能车】从零写一份自己的完全模型智能车寻路算法(有手就行) --- 01

本文是关于智能车完全模型寻路算法的教程,从提出需求、识别道路线与标识、给出运动方向等方面进行讲解。针对算力有限的硬件,推荐使用传统视觉算法,并介绍了语言基础、OpenCV、开发环境搭建等步骤,最后展示了图像预处理的灰度二值化操作。
摘要由CSDN通过智能技术生成

有手就行的智能车视觉寻路算法

前言

被同学拉进了智能车完全模型组做智能车的上层视觉软件算法,在交流群里吹水很多人起哄说让写一篇博客来教他们怎么写寻路。众望所托,今天就开始了这一系列的更新,保证有手就行,从最基础的开始。
其它的话:距离上次更新数据结构博客也很久了,那个博客并没有鸽,在复习二叉树的时候感觉这东西没啥好写的,和链表一样,而后面一直在看算法方面的东西,所以没有更新,后面的树状数组等等都会有更新的。

一、提出一份完整的需求

一份需求一定要层层细分:

最笼统的需求

  1. 能够识别道路线
  2. 能够识别道路标识
  3. 能够给出运动方向
  4. 特殊任务状态下的寻路
  5. 使用json控制一些变量的输入,方便后期调车
  6. 不重要:图形化界面,修改json文件并查看小车实时状态;使用socket等远程实时调试小车

这些就是最笼统的概念,接下来要细分到每一个部分上去:

识别道路线

识别道路线会遇到多种情况,包括直路,左右转弯,十字路口,环岛。

  1. 精确的识别出直线
  2. 判断出左右转弯状态
  3. 十字路口优化,单独处理十字路口
  4. 环岛入环,出环等状态的判断

识别道路标识

道路标识识别方法比较单一,只能是检测到目标然后进行图像分类确定标识种类。这就是需求了。
方案直接在这里给出:

  1. 直接使用目标检测算法,如yolo。但是效率会低,选择哪种算法请自行考虑。
  2. 传统图像算法优化目标检测,通过图像处理去到标识物的最小正接矩形范围,提取出图片,通过图像分类算法直接得到标识类别。

方便起见,直接选择方案一绝对是最好的,如果想要提升帧率,可以考虑借鉴方案二,或者自己找到其它更优解也是可以的。

给出运动方向

这里需要通过数学方法计算出小车后面需要行进的方向,具体如下

  1. 获得小车行进路线状态
  2. 数学方法处理路线,如拟合成直线等
  3. 通过斜率等判断转向度数
  4. pwm
  5. 串口传输pwm舵机打角信息

特殊任务

根据比赛规则自行调试,这里暂时不写需求

json文件

  1. 编写json文件读取协议
  2. 通过读取json文件初始化程序配置

本教程只针对基础寻路部分进行教学

二、板子的算力限制

这块板子真的是算力有限,只能说比树莓派强。在这样算力有限的情况下要是想跑yolov5或者一些图像分割算法的话那肯定是很难的,帧数很低,做人脸识别还可以,但是做这种实时高速识别的东西确实不太好。
因此,对于道路的识别我们要采用传统视觉算法。

三、从零开始

从零开始我们要先知道需要的一些基础技术,好进行学习。

1. 语言基础

推荐学习C/C++,python可针对深度学习单独学习。
推荐教程:
黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难
从0基础系统化学习C++,不可能学不会
MOOC浙大翁恺C语言
菜鸟教程python

2. OpenCV部分

用啥建议直接百度,最好谷歌,有一些问题上stackoverflow也有解,注意搜索的姿势就行(

如果是想了解一下,这里推荐看贾志刚老师的教程(网上很多,就不放链接了),但是很容易困,稍微了解下,剩下的慢慢学,用到的算法我都会写是怎么回事。

3. 开发环境搭建

对于大型项目,尤其是需要放到linux上的,我更倾向于使用Clion来编写,当然vs也是不错的,vscode可以用,就是有点费劲。
因此我选取Clion作为我开发这个寻路程序的IDE。
有了IDE,接下来就该了解一下需要配置什么环境:
首先是C++编译环境,Clion上建议使用CMake,它也会帮你生成CMakeLists.txt这个文件,同时我的CMake用的是clang++编译器,还可以选择g++等,可以自己选择编译器。
有了C++的编译环境,需要配置OpenCV库,EB板子自带一个低版本OpenCV,如果直接在上面开发可以直接看一下怎么用就行了。如果想在自己电脑上调试的话,可以百度,有很多教程,每个人遇到的问题都不一样,但是网上基本都有解了。
串口通讯库,可能会需要,也可能自己写。
额外的,为了后面读取json文件,需要选择一个json解释器的库,这个暂时不谈。
有可能自己需要一个日志系统,选择自己喜欢的日志库就行。
图形库可以暂时不做,因此不装了先。

总结下来就是下面这些:

  1. IDE
  2. C++编译器
  3. CMake帮助编译大型项目
  4. OpenCV环境
  5. 串口库(可能需要)
  6. json解释器(暂时不用管)
  7. 日志库(暂时不用管)
  8. 图形库(暂时不用管)

4. 创建项目

在这里插入图片描述
选择好自己想要的路行,c++标准建议选择c++14、c++17或者c++20,接下来点击创建。
在这里插入图片描述
这是创建后自动生成的主函数文件,我们来看一下文件树。
在这里插入图片描述
红色框出的部分是cmake编译生成的东西,不用管,我们来看另外两个文件。
在这里插入图片描述
这个是main.cpp,生成了一个hello world测试程序,我们可以点一下右上角的运行按钮测试一下能否使用:
在这里插入图片描述
这里可以看到程序运行正常,证明Clion成功找到CMake程序,CMake成功找到了c++编译器并进行编译,同时运行。

这两个按钮用的比较多,第一个是上面用到的那个功能,后面这个是调试按钮,也就是debug。
我们来看看剩下的CMakeLists.txt这个文件:
在这里插入图片描述
这就是用来编译c++项目的cmake的配置文件,具体使用方法百度找个文档就可以很快入门了。
接下来就该将OpenCV引入项目,直接在这个文件中加入下面语句:

#find OpenCV
find_package(OpenCV REQUIRED)
include_directories(${
   OpenCV_INCLUDE_DIRS})

和:

target_link_libraries(zhiNengChe ${
   OpenCV_LIBS})

在这里插入图片描述

然后将main.cpp改成下面这段代码,运行测试能否编译成功,如果不可以,请检查自己的opencv是否安装正确。(请将图片路径,红色圈出部分,修改为自己的图片路径,随便找一张图片测试就行)

#inclu
  • 42
    点赞
  • 149
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
STM32是一款高性能、低功耗的单片机,适合于各种嵌入式系统的设计与开发。智能蓝牙HC-05小车则是一种机器人小车,利用蓝牙技术实现了遥控和自主驶等功能。本文将探究基于STM32的智能蓝牙HC-05小车的设计。 首先,在硬件方面,需要设计一种具有良好控制和传输性能的电路板,可以使用STM32作为主控单元,并搭配一些传感器和执器如电机、驱动模块等。具体来说,可以使用STM32的GPIO控制电机的旋转方向和速度,使用定时器模块控制PWM输出等。此外,需要添加一些传感器,如红外线避障、超声波避障、光电寻迹等,增强小车的自动化和安全性。 其次,在软件方面,需要编写一些代码实现电路板的控制和算法的设计。其中,蓝牙技术是小车控制的关键,它可以透过手机等蓝牙终端设备连接到小车,实现远程遥控。这样可以充分发挥小车的灵活性,达到更好的控制效果。除此之外,编写一些自主控制算法,如避障、寻路、自动循迹等,可以实现更高级的功能,增加小车的实用性和娱乐性。 综合来看,基于STM32的智能蓝牙HC-05小车设计需要一定的硬件和软件知识,但随着技术和市场的不断进步,越来越多的厂家专门设计了应用于机器人小车的芯片和模块,降低了工程师的技术门槛和开发难度,进一步促进了业的发展。虽然这只是机器人技术的一个小领域,但却可以为我们的生活和教育带来新的机遇和乐趣。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值