智能车电磁组软件开源分享

本人本科阶段参加过两届智能车比赛,一次线上省二,一次线下省一。现已毕业,决定将软件代码分享给大家,其中也包含着自己这两年收集的各种程序。本人开源的代码经过大赛测试,其鲁棒性很强,但是提速较为困难,希望有缘人能够在此代码基础上有所突破。

<think>好的,我现在需要回答用户关于GD32三轮智能电磁小车环岛判断和处理方法的问题。用户提到已经处理好五路电感,左中右横向电感,中间偏左偏右为纵向电感。我需要先理解这些配置,然后分析常见的环岛处理方法。 首先,环岛处理通常分为判断和进入后的控制两个部分。判断部分需要检测何时遇到环岛,常见的方法包括电感值突变、路径形状识别或者特定标志检测。用户已经布置了多个电感,横向和纵向的,可能需要结合这些数据来识别环岛的特征。 横向电感可能用于检测左右是否有环岛入口,而纵向电感可能帮助判断是否进入环岛区域。例如,当小车接近环岛时,横向电感可能会检测到磁场的变化,比如某一侧的电感值突然升高,而另一侧降低。同时,纵向电感的变化可能帮助确认是否已经进入环岛,比如中间纵向电感的值变化趋势。 接下来是处理方式,一旦判断进入环岛,小车需要调整路径。可能需要差速控制,比如让内侧轮减速,外侧轮加速,以保持转弯。同时,需要持续检测电感值的变化来确定何时完成环岛,并调整回正常行驶。 可能需要考虑环岛的不同情况,比如左环岛和右环岛,处理方式可能不同。例如,右环岛可能需要右转,而左环岛需要左转,这时候横向电感的布局就很重要,需要根据哪一侧的电感值变化来触发不同的处理逻辑。 另外,用户提到的五路电感可能包括中间三个横向,左右各一个纵向?或者不同的布局?需要确认,但根据描述,左中右是横向,中间偏左偏右是纵向。这样的布局可能在环岛入口处,横向电感检测到磁场的变化,而纵向电感帮助判断进入的方向。 在判断环岛时,可能需要设置阈值,当某一侧横向电感的值超过阈值,并且纵向电感的变化符合预期模式时,触发环岛处理。例如,右环岛可能右侧横向电感值骤降,同时右侧纵向电感值上升,这时候小车知道需要右转进入环岛。 处理过程中,可能需要分阶段,比如进入环岛时调整方向,保持沿环岛内壁行驶,然后在出口处检测到磁场变化后退出环岛。这时候可能需要记录转弯的角度,或者通过持续的电感值监控来判断是否已经绕行足够。 需要注意的是,不同的赛道情况可能导致电感值的不同变化,因此可能需要动态调整阈值或者采用自适应算法。例如,使用滑动窗口平均来消除噪声,或者结合历史数据进行趋势分析。 另外,环岛处理可能涉及状态机,不同的状态对应不同的控制策略。例如,正常行驶状态、进入环岛状态、环岛内行驶状态、退出环岛状态。每个状态的转换条件需要根据电感值的变化来设定。 可能还需要考虑小车的机械结构,比如三轮差速的响应速度,是否能够及时调整方向。如果处理环岛时转向不足或过度,可能导致冲出赛道,因此PID控制参数的调整也很重要。 总结一下,步骤可能是:检测电感值的突变或特定模式(如横向和纵向的合变化)→ 判断环岛类型(左/右)→ 调整差速和方向进入环岛→ 在环岛内保持沿内壁行驶→ 检测出口并恢复正常行驶。 可能需要参考其他智能车竞赛的方案,比如使用电感值的差值或者比例来判断方向,或者通过积分判断是否完成环岛绕行。例如,当小车绕行环岛时,电感值会有周期性的变化,通过检测这种周期性来判断是否已经绕行一周,或者通过编码器记录车轮转动圈数来估计位置。 不过,具体到GD32平台,可能需要优化代码效率,确保实时处理电感数据。可能采用中断方式读取电感值,或者定时采样,然后进行数字滤波处理,如卡尔曼滤波或移动平均,以提高数据稳定性。 此外,环岛处理中的容错机制也很重要,比如误判后的恢复策略,或者在进入环岛过程中遇到其他障碍时的应对措施。可能需要设置超时机制,如果在一定时间内没有检测到预期的电感变化,则退出环岛处理状态,尝试重新判断。 最后,实际测试和调试是关键,通过反复调整判断阈值和控制参数,确保小车在不同赛道条件下都能可靠处理环岛。</think>针对GD32三轮智能电磁小车的环岛处理,结合五路电感布局(左/中/右横向电感 + 中间偏左/偏右纵向电感),以下是当前较优的判断方式及处理方法: --- ### **一、环岛判断逻辑** #### 1. **横向电感动态阈值法** - **触发条件**:当某一侧横向电感值**突变**(如右环岛时右侧电感值骤降,左环岛时左侧电感值骤降),同时另一侧电感值显著上升。 - **辅助验证**:纵向电感(中间偏左/偏右)检测磁场方向变化,例如右环岛时右侧纵向电感值上升,左侧纵向电感值下降。 #### 2. **特征时序分析法** - 记录电感值变化时序: - **右环岛**:右横向电感先降低→中间横向电感降低→左横向电感升高。 - **左环岛**:左横向电感先降低→中间横向电感降低→右横向电感升高。 - 结合纵向电感趋势,验证是否为连续平滑变化(排除干扰)。 #### 3. **差比和归一化判断** - 计算横向电感差比: $$ \text{差比} = \frac{\text{左电感值 - 右电感值}}{\text{左电感值 + 右电感值}} $$ 当差比绝对值超过阈值(如0.6)且持续一定时间,触发环岛标志。 --- ### **二、环岛处理方法** #### 1. **进入阶段(差速控制)** - **右环岛**:左轮提速,右轮降速,车身右偏进入环岛。 - **左环岛**:右轮提速,左轮降速,车身左偏进入环岛。 - **纵向电感辅助**:中间偏左/右纵向电感用于修正车身与环岛内壁的间距,防止擦碰。 #### 2. **环岛内循迹(动态权重PID)** - 横向电感权重调整:降低中间电感权重,增强外侧电感权重(如右环岛时左电感权重高)。 - 纵向电感作用:中间偏左/右纵向电感检测内壁磁场强度,实现沿内壁行驶。 #### 3. **出环岛判断** - **磁场对称性恢复**:当横向电感差比趋近0,且纵向电感恢复初始状态,判定为出环岛。 - **编码器辅助**:记录进入环岛后的车轮转数,结合磁场变化估算绕行角度(如完成270°后准备退出)。 --- ### **三、关键优化点** 1. **抗干扰设计**: - 对电感值进行滑动平均滤波,避免误触发。 - 设置“环岛锁定”状态机,确保进入后不重复判断。 2. **动态参数调整**: - 根据赛道宽度自适应调整差速比例(如窄赛道降低差速幅度)。 - 出口阶段逐渐恢复权重,避免急转冲出。 3. **调试建议**: - 通过串口实时绘制电感值曲线,观察突变点。 - 在环岛前后放置标记物,验证判断逻辑与实际位置的匹配度。 --- ### **四、典型代码框架(伪代码)** ```c // 状态机定义 enum State {NORMAL, ENTER_ISLAND, IN_ISLAND, EXIT_ISLAND}; void main() { while(1) { read_AD_values(); // 读取五路电感值 filter_values(); // 滤波处理 switch(current_state) { case NORMAL: if (check_island_enter()) current_state = ENTER_ISLAND; break; case ENTER_ISLAND: set_motor_diff_speed(); // 差速进入 if (check_in_island()) current_state = IN_ISLAND; break; case IN_ISLAND: adjust_by_longitudinal(); // 纵向电感修正 if (check_exit()) current_state = EXIT_ISLAND; break; case EXIT_ISLAND: recover_normal_mode(); // 恢复常规PID current_state = NORMAL; break; } } } ``` --- 通过上述方法,可实现对环岛的稳定判断与处理,需结合实地测试微调阈值和差速参数。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值