循迹小车的核心代码

news/2024/12/2 22:52:28/

循迹核心部分

Author:家有仙妻谢掌柜
Date:2021/2/3

最近收拾屋子,看到了大学时期为了比赛做的循迹小车,由于DIY其他项目,小车已经被拆的七零八落了,写在这里记录自己的成长历程,也分享出去供大家参考!

首先声明在本程序中和移植相关的针对不同MCU等差异所需要的做出的修改如下:
1.ReadPinReadPin(GPIO1);就是读取GPIO1引脚的高低电平。
2.变量定义这里统一用int类型,移植到自己工程上的时候,做相应修改,注意符号。
3.我的设计本循迹小车共采用7个红外对管(循迹模块),当检测到黑线的时候,传感器对应的IO的电平是低电平,黑线用的是黑色的电工胶带,7个infrared sensor并排紧挨着,检测宽度大于黑线宽度。
4.循迹效果足够用!
/******************************************************************************** fuction	InfraredDetection* brief	判断当前是那几个探头被触发 * param	无* return	value:该值表明是那几个探头被触发*******************************************************************************/ /*
对每个探头赋值,记录检测到黑线的探头个数并将值相加
在这里我的赋值是将7个探头从左往右依次赋值为:-6;-4;-2;0;2;4;6;
也分别对应了GPIO1-7
*/ 
int InfraredDetection(void)//对每个探头赋值,记录检测到黑线的探头个数并将值相加
{int IR1=0,IR2=0,IR3=0,IR4=0,IR5=0,IR6=0,IR7=0;int sum=0;int i=0,value=0;if(!ReadPin(GPIO1)){IR1=-6;i++;}//最左边探头if(!ReadPin(GPIO2)){IR2=-4;i++;}if(!ReadPin(GPIO3)){IR3=-2;i++;}if(!ReadPin(GPIO4)){IR4= 0;i++;}//中间探头if(!ReadPin(GPIO5)){IR5= 2;i++;}if(!ReadPin(GPIO6)){IR6= 4;i++;}if(!ReadPin(GPIO7)){IR7= 6;i++;}//最右边探头sum = IR1+IR2+IR3+IR4+IR5+IR6+IR7;//求平均值,较精确的确定黑线和探头的相对位置if(i==0) 			value=7;	  //没有一个传感器被触发,检测到的是白色else if(i<=2) 		value=sum/i;  //一般的情况:1个或2个检测到黑线else{if(sum<0) 		value=8;	  //左急弯else if(sum>0) 	value=9;	  //右急弯else  value=10;//检测多个黑色情况,十字路口标志 或抬起}  return value;
}
/******************************************************************************** fuction	TrackingSpeed* brief	根据检测到的探头来配速 * param	无* return	无*******************************************************************************/  
void TrackingSpeed(void)
{int k = 0;k = InfraredDetection();//状态检测if(k<11){switch(k) //对各种返回值的响应速度和转弯角度{case -6:T_L_XL();break;      //左大case -5:T_L_L(); break;      //左中case -4:T_L_M(); break;      //左小case -3:T_L_M(); break;      //左小case -2:T_L_S(); break;      //左微case -1:T_L_S(); break;      //左微case  0:T_run(); break;      //直走case  1:T_R_S(); break;      //右微case  2:T_R_S(); break;      //右微case  3:T_R_M(); break;      //右小case  4:T_R_M(); break;      //右小case  5:T_R_L(); break;      //右中case  6:T_R_XL();break;      //右大case  7:T_run(); break;      //直行case  8:T_L_XL();break;      //左急弯case  9:T_R_XL();break;      //右急弯case 10:T_run(); break;      //直行			}}
}
/*
上述的如:T_L_XL();这一类的函数都是封装起来的对应的左右电机不同的速度,以达到响应的效果,这里
只是按照我的需求写的,移植的时候根据想要实现的具体功能修改这个速度函数就可以了;
有的K值在不同的地图上不会出现也是有可能的,这个根据实际情况即可!
*/

到此,循迹小车循迹核心代码部分介绍已经结束,如果有看官姥爷觉得写得还不错的,烦请不吝点赞收藏关注!有发现问题的请在评论区指出,有需要进一步了解的可以私信!
感谢您的支持!


http://www.ppmy.cn/news/117040.html

相关文章

goland激活码

1. goland License&#xff1a; http://idea.youbbs.org 失效 http://idea.iblue.me 可用 2019年3月6号更新只限于18.2以下版本的使用&#xff0c;激活码从18.2开始失效&#xff0c;可使用的最高版本&#xff1a;goland-2018.1.7.exe 2. Activation code 激活方式 一直可…

电子实习—循迹小车

实习目的 &#xff08;1&#xff09;&#xff0e;锻炼焊接技能、掌握识别电子元器件的方法 &#xff08;2&#xff09;&#xff0e;利用所学过的模电数电的理论基础知识&#xff0c;通过本次电子实习培养独立解决实际问题的能力&#xff1b; &#xff08;3&#xff09;&…

机器人轨迹控制

文章目录 轨迹控制Bahnsteuerung1. Bahnsteuerung im Konfigurationsraum 关节空间**点到点插值** 2. Bahnsteuerung im Arbeitsraum笛卡尔坐标系3. 点到点的轨迹控制&#xff08;插值、joint空间&#xff09;点到点插值Asynchrone und synchrone PTP-Steuerungdie synchrone P…

百度地图- - - 鹰眼轨迹- - - 历史轨迹和里程查询

2019独角兽企业重金招聘Python工程师标准>>> 准备工作就不多说了,在之前的实时定位中已经提过,这里就主要说下思路 查询历史轨迹, 主要是要有时间段,并且这个时间段必须在24小时之内,而且传入的时间参数居然是int的,为毛百度就不能用long呢,坑爹的,将long转化为int有…

百度地图车辆运动轨迹

先看效果&#xff1a; bolg地址&#xff1a;http://blog.csdn.net/adsdassadfasdfasdf/article/details/7549787 下面是代码&#xff1a; 页面代码&#xff1a; <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/h…

轨迹评估工具使用总结(一) evo从安装到入门

evo是一款用于视觉里程计和slam问题的轨迹评估工具。核心功能是能够绘制相机的轨迹&#xff0c;或评估估计轨迹与真值的误差。支持多种数据集的轨迹格式&#xff08;TUM、KITTI、EuRoC MAV、ROS的bag&#xff09;&#xff0c;同时支持这些数据格式之间进行相互转换。在此仅对其…

CocosCreator 子弹运动轨迹的绘制

实现效果: 子弹在发射之前提前把轨迹绘制出来.类似愤怒小鸟子弹的运动轨迹. 实现步骤分3步: 1 子弹的发射; 2 子弹运动过程中角度的变化; 3 辅助线的绘制. 开发工具: CocosCreator, VsCode 场景介绍: 场景是自己随便搭的, 比较简陋. 1:代表子弹, 2:代表炮台. 6, 7 为子弹…

机器人轨迹规划(生成)-1

用b样条曲线生成多项式轨迹 主要用到的语句是&#xff1a; [q,qd,qdd,pp] bsplinepolytraj(controlPoints,tInterval,tSamples) 生成一个落在由controlPoints定义的控制多边形中的分段三次b样条轨迹。 轨迹是在tInterval中给定的开始和结束时间之间均匀采样的。 该函数返…