视觉巡线小车(STM32+OpenMV)——总结

文章目录

目录

文章目录

前言

一、效果展示

二、完整流程

1、STM32CubeMX配置

2、Keil编辑

3、硬件接线

4、参数调试

5、图像处理调试

三、总结


前言

        基于前面的系列文章,已基本介绍完了基于STM32+OpenMV的视觉巡线小车,本文将以小编自己的小车对其进行一下总结。

         系列文章请查看:视觉巡线小车——STM32+OpenMV系列文章


一、效果展示

        视频展示,无倍速。

视觉巡线小车(STM32+OpenMV)视频

 

完整工程如下,可进行二次开发:

        工程链接:http://视觉巡线小车(STM32+OpenMV)完整工程icon-default.png?t=N7T8https://download.csdn.net/download/qq_67319052/89600532上面链接中不含调试助手,不方便下载的可以私信我。

        其中包含STM32CubeMX生成的Keil工程,需要添加外设功能时,可用CubeMX打开进行配置;OpenMV图像处理代码示例,可自行修改代码,实现更多识别功能以及进一步优化代码;附加野火的多功能调试助手,用来进行PID参数的调试(主要是速度环),助手免安装;最后是一个简单的配置调试流程,也可参看本文后续内容。

        写这个示例,主要是为了方便后续的二次开发,比如在遇到各种设计以及巡线作品制作时,只需要在此基础上添加相关功能即可,避免每次都从零开始。

二、完整流程

         整体控制方案:

1、STM32CubeMX配置

2、Keil编辑

        部分代码编辑如下:

3、硬件接线

        由于硬件差异,接线只做参考。

电机A:   PWMA—PA8; AIN1—PB14;AIN2—PB15

                编码器A—PA6

                编码器B—PA7

电机B:    PWMB—PA11;BIN1—PB12;BIN1—PB13

                编码器A—PB6

                编码器B—PB7

        注意:电机的极性需要自己调整,当电机的转向极性有问题时,交换驱动引脚的接线,当编码器测得速度的极性有问题时,交换交换编码器AB相的接线。

串口接线:

        OpenMV与单片机通讯:

                OpenMV_Rx:P0—STM32_Tx2:PA2

                OpenMV_Tx:P1—STM32_Rx2:PA3

        注意:不同型号OpenMV的串口号有区别,需仔细检查,切勿将线接反了,需供地。

        单片机与上位机(野火多功能调试助手)通讯:

                TTL_Rx—STM32_Tx3:PB10

                TTL_Tx—STM32_Rx3:PB11

        注意:需要供地。

4、参数调试

        找到自己满意的参数即可,电机B的调试方法一样。

        注意:如果调试助手出现卡顿现象,可以适当将其所用的串口中断优先级调高一些。

5、图像处理调试


三、总结

        如果完成了前面 视觉巡线小车——STM32+OpenMV系列文章的内容,那么已经实现了一辆基于STM32+OpenMV的视觉巡线小车了。可根据此框架加入自己的功能,如识别线路分支,指示灯提示,蜂鸣器报警,按键切换状态,OLED显示参数,陀螺仪检测姿态等等。

        到此你已经学到了:

                1、直流减速电机的控制;

                2、编码器测速;

                3、STM32——定时器(PWM、正交编码、中断)、串口等;

               4、OpenMV——图像二值化,线性回归处理等;

                5、PID算法——速度环、转向环控制以及串级使用;

                6、数据解析——串口接收处理。

小白文章,有误之处望指正!!

OpenMVSTM32巡线代码可以通过串口通信进行交互。OpenMV使用C语言实现了核心的机器视觉算法,包括寻找色块、人脸检测、眼球跟踪、边缘检测、标志跟踪等等。\[1\]而STM32则负责处理数据,将数组中的二进制数转换为十六进制数,并打包发送给OpenMV。\[2\]下面是一个示例代码: 在OpenMV端,发送数据的函数可以如下定义: ```python def sending_data(data1, data2): global uart data = ustruct.pack("<bbii", 0xAA, 0xAE, data1, data2) uart.write(data) ``` 在STM32端,接收数据的函数可以如下定义: ```c #include <stdio.h> void receive_data() { if (uart_available()) { uint8_t tmp_data\[6\]; uart_read(tmp_data, 6); // 处理接收到的数据 // ... } } ``` 通过以上代码,OpenMVSTM32可以通过串口通信来传递巡线所需的数据。 #### 引用[.reference_title] - *1* *2* [STM32循迹小车系列教程(四)—— 使用OpenMV循迹](https://blog.csdn.net/weixin_49821504/article/details/130451123)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [STM32送药小车(四):Openmv实现数字识别,巡线以及串口通信](https://blog.csdn.net/ssfight1/article/details/123117274)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

画凉ZL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值