特别感谢皎皎的大力帮助

项目要求

项目分析

要解决这个问题我们可以把这个项目划分为以下几个板块

解决步骤

数据接收:

我们在这次的项目中用的雷达是RPLIDAR A1的雷达

他的接收数据的格式为:

所以我们把线接好:如图:

然后我们就可以接收到数据了:
这是原始数据:

可以发现这是非常杂乱无章的,我们把这个数据处理和解算一下:
我们用以下代码来处理数据:

 while(1)            {   if(mark)break;if(jyj){//接收到数据:if(flag==1){RX_buffer[count]=m;count++;if(count==4){if(!(RX_buffer[0]&0x01)){flag=0;count=0;}angle2=(RX_buffer[1]<<1);distance=(RX_buffer[3]<<6|RX_buffer[2]>>2);if(distance!=0&&count!=0){//记录数据angle=(RX_buffer[1]<<1);dis=(RX_buffer[3]<<6|RX_buffer[2]>>2);tot=tot+1;JD[angle]=dis;if(tot>650)mark=1;//扫描的点数}flag=0;count=0;}}if(flag==0)//点的检测标志{               if(m==0x3E)//检测到点{flag=1;}}jyj=0;}}

然后我们得到处理好的数据:

算法设计

有了数据我们就需要设计算法来判断直线和曲线了。
我设计的算法的大致的流程如下:

  • 得到数据点集:存储一个数组,下标为角度,数值为方向
  • 每三度计算一次平均值,去除噪点
  • 在去除噪点的数据上,每三个数据计算一次斜率,若差值小则判断为直线,否则为曲线
  • 对于每个判断的直线或曲线,在相应的方向加减权值
  • 小车每次往权值最大的方向运动
  • 反复执行上述代码

具体代码:

for(j=1;j<120;j++){//判断直线和弧线if(res[j-1]==0||res[j]==0||res[j+1]==0)continue;k1=(sin((j-1)*3*pi)*res[j-1]-sin(j*3*pi)*res[j])/(cos((j-1)*3*pi)*res[j-1]-cos(j*3*pi)*res[j]);k2=(sin(j*3*pi)*res[j]-sin((j+1)*3*pi)*res[j+1])/(cos(j*3*pi)*res[j]-cos((j+1)*3*pi)*res[j+1]);if(k1>=k2)cha=k1-k2;else cha=k2-k1;if(cha>0.38)continue;if( cha<0.12 ){theta=j*3;d=res[j];Add(j,0);}else{theta=j*3;d=res[j];Add(j,1);}}//判断哪个方向forward[3]=-1000;for(j=1;j<=4;j++){if(forward[j]>Max)Max=forward[j];}//小车运行:for(j=1;j<=4;j++){if(forward[j]==Max){if(j==1)USART_SendData(USART1,0x01);if(j==2)USART_SendData(USART1,0x02);if(j==3)USART_SendData(USART1,0x03);if(j==4)USART_SendData(USART1,0x04);}forward[j]=0;}

硬件连接

设置好串口,中断(具体详见代码)

完整代码

结果检测

传送门

【stm32】利用单片机实现小车直线和圆弧的识别相关推荐

  1. 【stm32】单片机学习——小车的开环控制

    项目要求: 项目分析: 整个过程是开环的,意味着我们需要提前计算好小车在每一个段的左右轮的速度与运行的时间. 整个问题的关键是计算每一段的速度: 于是我们得出解决这个问题的步骤: 项目解决过程: 1. ...

  2. stm32毕业设计 单片机遥控小车

    文章目录 1 简介 2 主要器件与实现 2.1 电机驱动模块 2.2 蓝牙模块 2.3 蓝牙调试APP 3 实现效果 5 部分参考代码 1 简介

  3. stm32捕获占空比_基于STM32超声波避障小车

    不管是对于初学者还是对于一个玩过单片机的电子爱好者来说,或多或少都接触到过小车项目,今天给大家介绍的的一个项目基于STM32超声波避障小车.这也是我曾经的一个课设,在此开源分享给大家,全文5000多字 ...

  4. 基于STM32的斯特林驱动小车论文

    基于STM32的斯特林驱动小车论文 [内容摘要]:根据"第九届上海市大学生工程训练综合能力竞赛"的规则和要求,设计了一种采用斯特林技术和自动控制技术,自主设计并制作一台可将液态乙醇 ...

  5. 利用单片机快速实现家庭智能控制平台

    2019独角兽企业重金招聘Python工程师标准>>> 0x00 前言 一提到智能家庭,大家可能首先想到的是各种大佬级公司搞的牛逼产品,或者说是创新产品.想想就觉得很复杂,有的用工控 ...

  6. 直线宽度2 points wide_OpenGL 绘图实例二之直线和圆弧的绘制

    综述 在上一篇文章我们介绍了利用类库来完成一个机器人绘制的过程,这里我们一起来看一下怎样直接利用直线和圆弧生成算法来进行图形的绘制. P.S. 本篇文章针对<计算机图形学>张彩明 版来探讨 ...

  7. 太原工业学院单片机课程设计_单片机智能小车毕业设计论文

    一.单片机智能小车毕业设计论文 已录入:205499篇 热门排序 推荐排序 此频道包含与小车和单片机和毕业设计相关的例文,免费为你学单片机毕业设计论文提供有关参考文献. [小车语音](沈阳师范大学物理 ...

  8. 【毕业设计】基于云平台的火灾报警器 - stm32 物联网 单片机 OneNET云平台

    文章目录 0 简介 1 项目简介 2 开发环境 3 火焰传感器 4 连接OneNET云平台 5 演示效果 6 最后 0 简介 Hi,大家好,这里是丹成学长,今天向大家介绍一个 单片机项目 基于云平台的 ...

  9. 毕业设计 基于云平台的火灾报警系统设计与实现 - stm32 物联网 单片机 OneNET云平台

    文章目录 0 简介 1 项目简介 2 开发环境 3 火焰传感器 4 连接OneNET云平台 5 演示效果 6 最后 0 简介 Hi,大家好,学长今天向大家介绍一个 单片机项目 基于云平台的火灾报警器 ...

最新文章

  1. 因为名字叫True,她被苹果iCloud服务器拒绝了
  2. systemd管理mysql多实例_使用 systemd 配置多个 MySQL 8.0 实例
  3. [Java基础]final和static修饰符
  4. python多列排序
  5. Dapper逆天入门~强类型,动态类型,多映射,多返回值,增删改查+存储过程+事物案例演示...
  6. lua_tinker源码笔记1
  7. 性能监控工具——Cacti安装文档
  8. mfc opengl 三维地形图_衢州三维动画制作传媒企业哪家好2020收费
  9. [CF1093G] Multidimensional Queries
  10. Tensorflow2.0:使用Keras自定义网络实战
  11. MSN退休,寻找微软如何融合MSN的答案:体验skype6国际版MSN功能。
  12. viper4android ddc,蝰蛇音效v4a音效最新版
  13. iphone6s读写速度测试软件,iPhone6S/7/8运行iOS13速度测试:结果有点失望
  14. 如何查看计算机关机事件,深度技术win7系统如何查看电脑的开关机时间【图文】...
  15. python实现程序自动运行的库_python tkiner实现自动打包程序
  16. DUTOJ-1013: 小q与面试题
  17. sketch html插件,玩转Sketch,不容错过的5大实用插件推荐
  18. 冯绍峰,如果你爱她,记得不要把名字倒过来讲!
  19. 设备树学习(四、内核head.S对uboot传参的处理)
  20. 数据结构与算法分析C++语言描述(第四版)图论学习记录

热门文章

  1. PHP过滤相同key ,去掉重复key值
  2. 一次性提取网页中所有图片的代码
  3. abb限位开关已打开drv1_ABB限位开关.pdf
  4. Probit模型、Logit模型、IV-Probit模型、IV-Probit模型
  5. 二项分布累积分布函数绘制
  6. 安卓搭建局域网服务器KSWEB--序列号
  7. Thinkphp3.2开发阿里云短信验证码
  8. 计算天数-本题要求编写程序计算某年某月某日是该年中的第几天
  9. 简要说明linux系统FHS结构;用自己的理解总结 文件管理,用户管理,组用户,权限管理相关的命令
  10. 物体跟着鼠标移动旋转