• 红外权值拟合


      不同的算法适应不同的场合,而好的算法都是从以前的经验中提取出来的,只有理论没有实践的算法是闭门造车,从实践中归纳出来的解决问题的办法往往具有便捷性。

      大一跟着学长做机器人省赛的时候拼的是时间,因为大一什么都不懂,而我们有的就是时间比较闲,学长做我们看,用俗话说就是跟着学长打酱油;等到大二自己真正动手做的时候,也是用的学长搭好的框架然后自己去在里面添加东西,没有太多思考自己的东西;大三回过来再看的时候突然发现就会时不时的出现一些新的想法,有时候就会产生一些思路去解决问题,这大概就是一个过程吧。

      等回过来再做的时候,还是碰到巡线这个问题,硬件还是红外,但思想却有了一个提升,大一是if...else机械式的判断,而现在想到的是我能够通过传感器采集到什么数据,这些数据的准确性如何,我能够利用的是什么数据以及我怎么利用这些数据,如何利用这些数据就涉及到算法的东西了,下面介绍的是我想到的一个算法--红外权值拟合,其实也很简单。

      红外权值拟合,思想很简单就是将用于巡线检测的红外赋予不同的权值,中间为零,越往两侧的权值绝对值越大,而左边为正,右边为负,通过求得权值的累加和来算和中线的偏差error作为pid调节的输入来调节舵机的打角,即将偏差映射到二次函数上,实现二次函数的拟合,程序是在codeblocks上模拟的一段代码,具体代码如下:

      

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 
     4 unsigned short int infrValue = 0x09 ;
     5 signed short int servoErrorThis = 0 ;
     6 
     7 signed short int calcServoError()
     8 {
     9     unsigned char i ;
    10     signed short int error;
    11     for (i = 0,error = 0 ;i < 8;i++)
    12     {
    13         if(infrValue&(0x01<<i))
    14         {
    15             //构造偏差函数servoError = (x-4)^2
    16             //新函数 (x-2)^2 红外分布为内5外2
    17             if(i > 2)        //红外左5,符号为正
    18                 error += i*i-(i<<2)+4 ;
    19             else            //右2,符号为负
    20                 error -= i*i-(i<<2)+4 ;
    21             printf("%d	",error) ;
    22         }
    23     }
    24 
    25     return error;
    26 }
    27 
    28 int main()
    29 {
    30     servoErrorThis = calcServoError();
    31     printf("
    %d",servoErrorThis);
    32     return 0;
    33 }

      

  • 相关阅读:
    mysql 语句的查询过程解析
    postman 百度网盘下载 64位
    java 读取文内容(text,html)
    java把Word文件转成html的字符串返回出去
    spring boot 2.X上传文件限制大小
    nginx 做反向代理
    Linux下安装Redis
    微信小程序云开发个人博客项目实战(2)---引入-Vant-Weapp-小程序-UI-组件库
    微信小程序云开发个人博客项目实战(1)- 准备工作及引入 Vant Weapp 小程序 UI 组件库
    Video 视频播放防作弊和禁止下载
  • 原文地址:https://www.cnblogs.com/Karma-wjc/p/4117292.html
Copyright © 2020-2023  润新知