红外权值拟合

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

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

  等回过来再做的时候,还是碰到巡线这个问题,硬件还是红外,但思想却有了一个提升,大一是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\t",error) ;
22         }
23     }
24
25     return error;
26 }
27
28 int main()
29 {
30     servoErrorThis = calcServoError();
31     printf("\n%d",servoErrorThis);
32     return 0;
33 }

  

时间: 2024-08-02 06:41:37

红外权值拟合的相关文章

weight decay (权值衰减)

http://blog.sina.com.cn/s/blog_890c6aa30100z7su.html 在机器学习或者模式识别中,会出现overfitting,而当网络逐渐overfitting时网络权值逐渐变大,因此,为了避免出现overfitting,会给误差函数添加一个惩罚项,常用的惩罚项是所有权重的平方乘以一个衰减常量之和.其用来惩罚大的权值. 权值衰减惩罚项使得权值收敛到较小的绝对值,而惩罚大的权值.因为大的权值会使得系统出现过拟合,降低其泛化性能.

多层感知机,非权值共享型卷积神经网络,权值共享型卷积神经网络之间的关系

前言:最近学习深度学习,有感写一点总结. 我们常常所说的神经网络,一般是指原始的多层感知机,简称MLP,它是在原始感知机堆叠多层而成的,MLP完全由全连接层组成(当然也有激活函数),即Caffe里的IP层.MLP的最大的缺点在于参数众多,比如说我们的网络层为1000--1000--500--20,那么它的总的参数为:1000*1000+1000*500+500*20. 参数过多不好训练,容易产生过拟合现象. 卷积神经网络,即CNN,它大大减少的网络参数的数目,通过1. 权值共享 2. 局部连接

激活函数与权值初始化

1.sigmod函数--(tf.nn.sigmoid()) sigmod函数性质: 1.如图像所示其值域在[0,1]之间,函数输出不是0均值的,权重更新效率降低,因为这会导致后层的神经元的输入是非0均值的信号,这会对梯度产生影响:假设后层神经元的输入都为正(e.g. x>0 elementwise in ),那么对w求局部梯度则都为正,这样在反向传播的过程中w要么都往正方向更新,要么都往负方向更新,导致有一种捆绑的效果,使得收敛缓慢. 当然了,如果你是按batch去训练,那么每个batch可能得

[bzoj3932][CQOI2015]任务查询系统-题解[主席树][权值线段树]

Description 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第Ei秒后结束(第Si秒和Ei秒任务也在运行 ),其优先级为Pi.同一时间可能有多个任务同时执行,它们的优先级可能相同,也可能不同.调度系统会经常向 查询系统询问,第Xi秒正在运行的任务中,优先级最小的Ki个任务(即将任务按照优先级从小到大排序后取前Ki个 )的优先级之和是多少.特别的,如

[NOIP2014]联合权值

描述 无向连通图G有n个点,n-1条边.点从1到n依次编号,编号为i的点的权值为Wi  ,每条边的长度均为1.图上两点(u, v)的距离定义为u点到v点的最短距离.对于图G上的点对(u, v),若它们的距离为2,则它们之间会产生Wu×Wv的联合权值. 请问图G上所有可产生联合权值的有序点对中,联合权值最大的是多少?所有联合权值之和是多少? 输入格式 输入文件名为link.in. 第一行包含1个整数n. 接下来n-1行,每行包含2个用空格隔开的正整数u.v,表示编号为u和编号为v的点之间有边相连.

优先队列实现哈弗曼最小权值

建立哈弗曼树要求我们每次都选频率权值最小的点构成节点,即权值小的点在树的深处,权值大的点在树的浅处,根据节点选择的特点,我们可以把节点的值放在优先队列中,包括新形成的节点. 我们先定义优先队列的优先级别. 1 struct cmp 2 { 3 bool operator()(const int &a,const int &b) 4 { 5 return a>b; 6 } 7 };//最小值优先出队 然后就是实现的整个程序. #include<stdio.h> #inclu

POJ--3259--Wormholes【SPFA判负权值回路】

题意:有n个点,之间有m条双向路径,还有w个虫洞,单向,从一点到另一点需要花费时间,但是有虫洞的话会减少时间,一个人想要走某一条路使得他能碰到过去的自己,问这个图是否能让他实现他的想法. 其实就是判一个图是否存在负权值回路,SPFA可以实现,原理是:如果存在负权值回路,那么从源点到某个顶点的距离就可以无限缩短,因此就会无限入队,所以在SPFA中统计每个顶点的入队次数,如果超过了n个(顶点个数)则说明存在负权值回路. 我把输出yes和输出no写反了,WA了两发,看了半天都没发现... #inclu

HDOJ 3790 双权值Dijkstra

1 #include <iostream> 2 #include <stdio.h> 3 #include <string.h> 4 #include <cstring> 5 using namespace std; 6 7 const int INF = 1000000; 8 const int MAXSIZE = 1005; 9 10 int map[MAXSIZE][MAXSIZE]; 11 int price[MAXSIZE][MAXSIZE]; 1

洛谷 P1351 联合权值(NOIp2014D1T2)

题目描述 无向连通图G 有n 个点,n - 1 条边.点从1 到n 依次编号,编号为 i 的点的权值为W i ,每条边的长度均为1 .图上两点( u , v ) 的距离定义为u 点到v 点的最短距离.对于图G 上的点对( u, v) ,若它们的距离为2 ,则它们之间会产生Wu×Wv 的联合权值. 请问图G 上所有可产生联合权值的有序点对中,联合权值最大的是多少?所有联合权值之和是多少? 输入输出格式 输入格式: 输入文件名为link .in. 第一行包含1 个整数n . 接下来n - 1 行,每