智能车浅谈 电磁组——环岛处理

本文详细介绍了第十七届全国大学生智能车电磁四轮组在环岛处理的技术实现,包括电感排布、入环、环岛内寻迹和出环的策略。在入环阶段,通过预圆环判断和编码器计程确定入环时机;环岛内利用陀螺仪积分进行寻迹;出环时则依据陀螺仪积分判断,确保稳定驶出。整个过程中,陀螺仪积分持续执行,直至圆环处理完毕。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

本文为第十七届全国大学生智能车电磁四轮部分经验分享,转载于智能车电磁组——环岛处理,文中如有不妥之处欢迎批评指正。
在这里插入图片描述

智能车电磁组——环岛处理

智能车电磁组——环岛处理


在这里插入图片描述

一、电感排布

在这里插入图片描述

二、圆环思路

1.入环

(1)预圆环

在电磁智能车中,圆环要想稳定入环,预圆环判断及处理是非常重要以及不可缺少的。
在这里插入图片描述
在预圆环的判断过程中,我使用的是M、L、M_2这三路电感,当进入靠近预圆环的位置时,M、L、M_2这三路电感都会增大,而且当到达预圆环的位置时,M电感与M_2电感会有一个差值,通过判断M、L、M-M_2大于阈值来判断预圆环的标志位。

(2)入环

当预圆环的标志位置1之后,接下来就到了入环,我是通过判断预圆环然后开始通过编码器去计路程,当路程达到一个定值之后就通过舵机固定打角,执行入环程序。
在这里插入图片描述
注:在编码器计路程的过程中,为了防止高速情况下因为电感值的变化过大导致舵机小幅度的摆动进而导致车身姿态不稳,可以在这过程中让差比和的误差手动置零,让舵机保持在中值状态。

2.环岛内

当执行入环程序之后,在圆环里不能一直保持固定打角,所以我在入环之后,开启陀螺仪的积分标志位,当陀螺仪的积分数值大于一个定值,则代表入环程序结束,执行环内寻迹。
在这里插入图片描述
这里环内寻迹我切换到第二排的三个电感寻迹,因为第一排的三个电感已经在赛道之外了,无法计算出正确的差比和值。
!!!!环内寻迹别忘了写丢线!!!!!!

3.出环

(1)预出环

预出环也是必不可少的一部分,因为如果正常寻迹接近到出环那里,与出环方向相反的那个电感的电感值会变得很大,经过差比和计算,舵机会打向和出环方向相反的方向。这也进而会导致车声冲出赛道。我的处理方案是陀螺仪的积分数值大于一个定值,就执行舵机固定打角。

(2)出环

预出环判定到后就执行出环程序,给舵机固定打角,当陀螺仪的积分值达到整整一圈之后,舵机回正,差比和手动置零。这时候如果让它正常寻迹的话,车子可能会因为还没远离圆环,导致左边或右边的电感值偏大,导致舵机往左大或者往右打,进而影响车身姿态。所以在出环执行完后,让车子自行一段距离,直到远离圆环,最后把圆环标志位、陀螺仪积分执行标志位和陀螺仪积分数值置零。等待下一次圆环。
在这里插入图片描述
!!!!!圆环的整个过程中,陀螺仪积分都在执行,直到圆环整个过程结束!!!!!

三、代码部分

1.入环

预圆环判断

if(M>650&&M-M_2>100&&L>500&&Statu == 1){
		L_RING_FLAG1=1;
		Statu=2;  //圆环状态
		BeeOn;		//蜂鸣器
		ring_running_flag = 1; //圆环内标志
		Record_Dis = 1;//开启计算距离
	}

入环

	if((L_RING_FLAG1 || L_RING_DELAY_FLAG1)){
		L_RING_FLAG1=0;
		L_RING_DELAY_FLAG1=1;
		if(Distance>75){//入环,路程大于一个值
			L_RING_DELAY_FLAG1=0;
			L_RING_FLAG2=1;
			Record_Angle=1; //开启陀螺仪积分
			Statu = 3;
		}
	}

结束入环
如果陀螺仪积分值大于一个阈值,则代表车身已在环内,代表入环结束,反之,则代表车身还没有在圆环内,继续执行入环。

if(L_RING_FLAG2 || L_RING_DELAY_FLAG2){
		L_RING_FLAG2=0;
		L_RING_DELAY_FLAG2=1;
		if(Angle>150){//陀螺仪积分到一定数值,代表车身已经在圆环内
			L_RING_DELAY_FLAG2=0;
			L_RING_FLAG3=1;
			Statu = 4;
			Record_Dis = 0;//距离清零,方便下次计数
			Distance = 0;
			(PWMB_CH1_P74,1490);	//舵机固定打角
		}
	}

2.圆环内寻迹

圆环内寻迹,则使用第二排的三个电感进行差比和运算。

if(ring_running_flag==1)
	{
			cha_2 = my_sqrt(a_L_2)-my_sqrt(a_R_2);
			he_2 = my_sqrt(a_L_2)+my_sqrt(a_M_2)+my_sqrt(a_R_2);
			bi_2	= 	cha_2/he_2;
			poserror = (int16)(bi_2*100);
	}

3.出环

预出环判定

	if(L_RING_FLAG3 || L_RING_DELAY_FLAG3){
		L_RING_FLAG3=0;
		L_RING_DELAY_FLAG3=1;
		if(Angle>735){//判定出还口,angle到达850代表跑了接近一圈
			L_RING_DELAY_FLAG3=0;
			L_RING_FLAG4=1;
			Statu = 5;
		}
		else
		{
			 cal_poserror(L,M,R,L_2,M_2,R_2);
		}
	}

执行出环,舵机固定打角

if(L_RING_FLAG4 || L_RING_DELAY_FLAG4){
		L_RING_FLAG4=0;
		L_RING_DELAY_FLAG4=1;
			if(Angle>1050){//快要结束圆环
			L_RING_DELAY_FLAG4=0;
			L_RING_FLAG5=1;
			Statu = 6;
		}
		else{
			pwm_duty(PWMB_CH1_P74,1500);	//舵机固定打角
		}
	}

出环后,差比和置零,车子直行,如果中间电感小于一个值,代表远离圆环,这时候圆环过程全部结束,正常寻迹和圆环标志位清零。

if(L_RING_FLAG5 || L_RING_DELAY_FLAG5){
		L_RING_FLAG5=0;
		L_RING_DELAY_FLAG5=1;
					if(M>580&&M<880){//
			L_RING_DELAY_FLAG5=0;
			Angle=0;
			Record_Angle=0;
			Statu=1;
			h=0;
			BeeOff;
			ring_running_flag=0;
		}
		else{
			cal_poserror(L,M,R,L_2,M_2,R_2);
		}
	}

电磁寻迹小车

智能车系列文章汇总

智能车浅谈——硬件篇
智能车浅谈——方向控制篇
智能车浅谈——电机控制篇
智能车浅谈——图像篇
智能车浅谈——控制规律篇
智能车浅谈——过程通道篇
智能车浅谈——抗干扰技术硬件篇
智能车浅谈——抗干扰技术软件篇
智能车浅谈——手把手让车跑起来(电磁篇)
智能车浅谈 电磁组——环岛处理
第十七届智能车越野硬件篇——无刷电机驱动
无刷驱动设计——浅谈MOS驱动电路
芯源&立创EDA训练营——无刷电机驱动

电磁三轮差速小车环岛是一个典型的机器人控制项目,通常涉及到电子电路、电机驱动和机械结构的结合。在这个项目中,你需要编写控制代码来实现车辆在环形轨道上自主运行并保持稳定。以下是基本的步骤和部分代码框架: 1. **硬件设计**:准备一个小车平台,包括三个电动机(两个用于驱动,一个用于转向),以及电磁传感器(如霍尔效应传感器)用于检测环岛的位置。 2. **硬件连接**:连接电动机到微控制器(如Arduino或单片机),并通过编码器获取电机转速信息;同时将电磁传感器连接到输入端口。 3. **软件初始化**:编写程序初始化电机驱动器、传感器读取以及环岛识别算法。 4. **PID 控制**:采用比例积分微分(PID)控制策略来调整电机速度,以维持小车在预定的速度和方向上前进。 5. **差速控制**:利用左右电机的不同速度实现转弯,差速原理让内侧轮胎转速低于外侧,使车辆能够灵活改变行驶方向。 ```cpp // 示例代码片段 void loop() { int sensorReading = readSensor(); // 从传感器获取环岛位置数据 float error = targetPosition - sensorReading; // PID 控制 float motorSpeed = pid.update(error); // 差速控制 setMotorSpeed(leftMotor, motorSpeed * speedRatio); setMotorSpeed(rightMotor, motorSpeed * (1-speedRatio)); } double pid.update(double error) { // PID 更新函数 double integral += error; double derivative = error - prevError; return proportional + integralTerm * integral + derivativeTerm * derivative; // 返回调整后的电机速度 } ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值