主控MSP430F5529,电机驱动模块L298N,openMV摄像头

一、总体思路

使用openMV线性回归,然后使用pid输出,使用串口发送到MSP430,在经过处理输出PWM到车轮,实现循迹

二、openMV代码

THRESHOLD = (0, 20, -128, 127, -128, 127) # Grayscale threshold for dark things...
import sensor, image, time
from pyb import UART,LED
from pid import PID
import ustruct
rho_pid = PID(p=0.17, i=0 , d=0)#y=ax+b b截距
theta_pid = PID(p=0.001, i=0, d=0)#a斜率sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QQQVGA) # 80x60 (4,800 pixels) - O(N^2) max = 2,3040,000.
sensor.skip_frames(time = 2000)     # 跳过2s帧
clock = time.clock()                # to process a frame sometimes.uart = UART(3,115200)   #定义串口3变量
uart.init(115200, bits=8, parity=None, stop=1) # init with given parameters
def sending_data(xw):global uart;data = ustruct.pack("<bbib",      0x2C,                      #帧头10x12,                      #帧头2int(xw), # up sample by 4   #数据10x5B)uart.write(data);   #必须要传入一个字节数组while(True):clock.tick()img = sensor.snapshot().binary([THRESHOLD])#线设置为白色,其他为黑色line = img.get_regression([(100,100)], robust = True)#返回直线蓝色if (line):rho_err = abs(line.rho())-img.width()/2#直线偏移距离if line.theta()>90:#直线角度theta_err = line.theta()-180else:theta_err = line.theta()img.draw_line(line.line(), color = 127)#画出蓝色直线#print(rho_err,line.magnitude(),rho_err)if line.magnitude()>8:#线性回归效果,好进行下一步,否则不进行s#if -40<b_err<40 and -30<t_err<30:rho_output = rho_pid.get_pid(rho_err,1)theta_output = theta_pid.get_pid(theta_err,1)xw = rho_output+theta_outputelse:xw=0.0else:xw=-404.0passFH = ustruct.pack("<bbib",      #格式为俩个字符俩个短整型(2字节)0x2C,                      #帧头10x12,                      #帧头2int(xw*1000), # up sample by 4   #数据10x5B)uart.write(FH)

三、MSP430部分代码

1、串口接收openMV发送过来的数据,一帧数据是7个字节,因为发送过程中可能会丢包,所以接收2帧数据做一次处理

2、使用联合体获取数据处理

typedef union{          //联合体,供数据处理,4个char合并为1个long或floatlong word32;float  byte32_arry;char data[4];
}Openmv_word_bytes;static int num=0;
Openmv_word_bytes x;//巡线联合体
static char Float_databuf[15];//接收数组
/********************接收中断*************************/
__interrupt void openMV_UART_RX_IRQ_Handler()
{ if(UART_GetITStatus(UART0,UART_RX_IRQn) == TRUE)   //清除串口某一个中断标志{if(num == 14){      //接收到14字节就不接收,等待数据处理完成UART_ClearITPendingBit(UART0,UART_RX_IRQn);return;}Float_databuf[num]=UART_GetChar(UART0);                 //读取一个字节1个字节num++;UART_ClearITPendingBit(UART0,UART_RX_IRQn);    //清除串口某一个中断标志}
}/***************************初始化串口******************/
void openMV_Init()
{UART_Init(UART0,115200); //初始化UART0模块,波特率115200,TX_P33_RX_P34, openmv p5-R p4-TSet_Vector_Handler(VECTOR_UART0,openMV_UART_RX_IRQ_Handler);    //设置接收中断向量UART_ITConfig  (UART0,UART_RX_IRQn,TRUE);                //开串口接收中断
}/*判断头帧位置*/
int pd(int a){while(Float_databuf[a] != 0x2C){a++;}return a;
}/************************巡线小车*********************/
//返回浮点数
void openMV_fdata()
{int a;if(num == 14){a = pd(0);x.data[0] = Float_databuf[a+2];x.data[1] = Float_databuf[a+3];x.data[2] = Float_databuf[a+4];x.data[3] = Float_databuf[a+5];x.byte32_arry = (float)(x.word32/1000.0);//OLED_DispFolatAt(FONT_ASCII_6X8,2,0,x.byte32_arry,3);  //在指定位置显示一个浮点数数字num = 0;memset(Float_databuf,'\0',15);    }
}

openMV循迹小车

openMV摄像头循迹小车相关推荐

  1. 无人机寻迹要两个单片机吗_基于OpenMV的循迹无人机设计

    基于OpenMV的循迹无人机设计 发表时间:2020-08-24 基于OpenMV机器视觉模块进行目标识别算法的研究.利用图像的滤波.二值化等算法对摄像头采集的图像进行预处理;利用边缘检测和形状识别算 ...

  2. 智能循迹小车_智能机器人之循迹小车——循迹原理

    智能机器人之循迹小车 --循迹原理 01 什么是循迹小车 循迹小车是指使用一定的循迹方法,使得小车自动循着赛道运行的小车. 02 循迹小车原理 循迹一般是黑色轨迹,传感器发出红外信号被接收后收入比较器 ...

  3. LDC1000循迹小车

    以LDC1000电感/数字转换器为核心,设计并制作一个可自动根据铁丝形状循迹小车. 系统的主要功能模块包括:主控模块.金属信号探测模块.速度检测模块,电机驱动模块及电源模块. 系统主控芯片STC89C ...

  4. 神经网络视觉循迹小车

    大四狗下学期想学习机器学习.深度学习等相关知识,于是毕设想做些神经网络相关的东西,因为本科期间参加过大学生智能车竞赛,于是想利用小车,通过神经网络,实现自主学习,完成在规定赛道上的行驶.现在在这里,记 ...

  5. arduino黑线循迹小车程序_循迹小车:给我一条线,我能自己走完全程

    在老少通吃的智能小车到底是什么呢?科普来喽!一文中,我们介绍了智能小车的分类及组成,为什么循迹小车能够追踪黑线轨迹呢? 智能小车在画有黑线的白纸 "路面"上行驶,由于黑线和白纸对光 ...

  6. 51单片机智能小车循迹完整程序_电气与信息工程学院双创协会开展循迹小车培训...

    为培养青年学子创新意识和创新能力,激发勇于创新的主动性和积极性,营造良好科技创新氛围,10月29日至30日,电气与信息工程学院双创协会于一教609.三教102和三教202开展循迹小车培训,该培训由电子 ...

  7. 简单循迹小车实验心得_红外自动循迹小车实验报告

    红外自动循迹小车实验报告 1摘要 本实验完成采用红外反射式传感器的自寻迹小车的设计与实现.采用与白色地面色差很大的黑色 路线引导小车按照既定路线前进,在意外偏离引导线的情况下自动回位,并能显示小车停止 ...

  8. 简单循迹小车实验心得_智能循迹小车总结 智能循迹小车报告.doc

    智能循迹小车总结 智能循迹小车报告 西京学院 自动化1002班 概要 本寻迹小车是以万能板为车架,STC12C5A60S2单片机为控制核心,将各传 感器的信号传至单片机分析处理,从而控制 L293D电 ...

  9. 循迹小车智能搬运:调车篇

    循迹小车智能搬运:调车篇 文章目录 循迹小车智能搬运:调车篇 前言 一.调车的原则 二.调车步骤 1.走直线 1.传感器的位置 2.电机的转速 3.修正函数的好坏 2.左右转90° 3.在十字路口停下 ...

最新文章

  1. 明日发布组队学习计划!
  2. 美国研发出百万兆级计算机 Summit,“最强超算”竞争加剧
  3. 整理一些sql server基础资料
  4. 数组常见的遍历循环方法、数组的循环遍历的效率对比
  5. Vr-Vantage之场景与环境
  6. 八类网线和七类网线的区别_什么是七类网线?七类网线水晶头如何制作?
  7. 稀缺时尚男模促销海报|PSD分层,简单搞定设计稿
  8. 微信WeixinJSBridge API 屏蔽右上角分享等常用方法
  9. LeetCode刷题(13)
  10. 031、jvm实战总结:动手实验:线上系统部署如果采用G1垃圾回收器,应该如何设置参数?
  11. Python 数据结构与算法 —— 插入排序
  12. 鹏业安装算量NETDWGCOM接口创建失败处理办法
  13. 移动apn接入点哪个快_51物联卡:使用物联网卡时为什么总要让你设置APN?
  14. Chapter Four : Python 序列之列表、元组操作详解合集
  15. 在图片上涂鸦(其实就是乱画 O(∩_∩)O)
  16. 投资学 U15 利率期限结构 习题解读
  17. python语言表白语句简单_简短的表白语句280句
  18. 简单航班查询系统java_基于jsp的航班信息查询-JavaEE实现航班信息查询 - java项目源码...
  19. oracle创建导入数据库,unix下手动创建oracle以及imp数据导入
  20. 联想服务器查看告警信息,科普 THINKPAD开机错误消息及报警信息详解

热门文章

  1. 2019 校内赛 RPG的地牢猎手(bfs+优先队列)
  2. 财务管理计算机实验日志5天,关于财务管理的实习日记范文
  3. 【每日早报】2019/09/30
  4. evo测试工具错误: evo module evo.main_traj crashed - no logfile written (disabled)
  5. HMC5983求解偏航角
  6. 如何备考2021年最后一场PMP考试?
  7. 北京邮电大学计算机学院考研夏令营,北京邮电大学理学院2021年保研夏令营活动通知...
  8. 筛选质数,埃氏筛和欧拉筛(线性筛)
  9. [IOS APP]魔兽正史-魔兽世界有声小说
  10. 1.10 环的同态和理想