智能循迹小车之PID控制算法

通过前面从光电传感器获取信号确认小车和黑线的偏离角度,通过PID算法算出左右车轮速度,控制小车前进或者后退。

一、PID算法

在小车的项目中,输入部分是传感器信号,而输出部分是左右轮子的速度差,可以理解为小车轮子旋转的速度。 

二、代码实现

APP_PATROL.h 

#ifndef __APP_PATROL_H__
#define __APP_PATROL_H__
#include "Int_Sensor.h"
#include "Int_Motor.h"

/**
 * @brief 循迹逻辑
 *
 */
void App_Patrol_Control();

#endif // !__APP_PATROL_H__

APP_PATROL.c

#include "App_Patrol.h"

// 定义PiD参数
#define KP           1000
#define KI           1
#define KD           600

#define MAX_INTEGRAL 1000

static char last_error = 0;
static int integral    = 0;

static char App_Patrol_GetPID()
{
    int result;
    char error;

    // 获取当前误差
    error = Int_Sensor_GetError();

    // 累计当前误差
    integral += error;
    if (integral > MAX_INTEGRAL)
    {
        integral = MAX_INTEGRAL;
    }
    else if (integral < -MAX_INTEGRAL)
    {
        integral = -MAX_INTEGRAL;
    }

    // 计算PID
    result     = KP * error + KI * integral + KD * (error - last_error);
    last_error = error;

    // 除对应系数,并返回最终结果
    result /= 50;
    if (result > 80)
    {
        result = 80;
    }
    else if (result < -80)
    {
        result = -80;
    }

    return result;
}

void App_Patrol_Control()
{
    char error;
    // 获取PID结果
    error = App_Patrol_GetPID();
    // 根据PID结果调节左右轮速
    Int_Motor_SetLeft(40 + error);
    Int_Motor_SetRight(40 - error);
}

 以上就是PID算法的实现过程啦,大家快去试一试吧。

 

前言: 开始之前先要说为什么要采用PID算法来控制小车。玩过小车的DIY爱好者们都会碰到这样一种情况:为什么本该直线行驶的小车走着走着轨迹就会发生偏移,即所谓的“走不直”。 小车走不直的原因有:两个电机本身的驱动特性不可能完全相同,两个电机外形大小不可能是完全一致,组装时精度也会出现差异,另外轮胎在滚动时打滑、遇到细小的障碍物等因素都会造成左右轮的速度出现差异,从而走不直。开环控制是无法消除左右轮的速度误差的,因为上述的扰动是随机的。 要想小车走一条直线,唯有实现闭环控制,当小车受到扰动时能对左右轮及时给予反馈,修正两轮的速度偏差,从而可以走出一条直线。PID算法就是一种闭环控制算法,实现PID算法需得从硬件上实现闭环控制,即存在反馈,所以我采用的是带测速装置的电机。 项目简介: 本项目采用的是PID控制算法来修正小车行走时两轮的速度偏差,实现小车可以走直线。小车是使用一个安卓App来控制小车的行走路径,App通过App Inventor2来进行编写。 完成作品图: 需要用到的材料: 1. Arduino Uno 2. Arduino Uno的扩展板 3. DFRobot L298 双路2A直流电机驱动板 4. HC-05或HC-06的蓝牙模块 5. 坦克小车底盘 6. 两个带霍尔传感器的电机 7. 锂电池 8. 杜邦线若干 软件部分: 1. Arduino IDE 2. App Invent 附件内容截图:
你好!对于STM32电磁循迹小车PID调试,我可以给你一些基本的指导。首先,PID控制器是一种常用的控制算法,用于调节系统的输出以使其稳定在设定值附近。 在循迹小车中,你可以使用PID控制算法来调节车辆的转向角度,使其能够沿着预定的轨迹行驶。以下是一些步骤和注意事项: 1. 确定目标值:首先,你需要确定车辆应该跟随的轨迹。这可以通过传感器检测到的线路位置来实现。 2. 传感器读取:使用适当的传感器(如红外线传感器)读取车辆当前所在位置和轨迹位置之间的差异。 3. 计算PID输出:根据传感器读数计算PID控制器的输出。PID控制器通常由三个部分组成:比例(P)、积分(I)和微分(D)。 - 比例项(P):根据当前误差计算输出,比例项决定了输出与误差之间的直接关系。 - 积分项(I):积分项考虑了过去一段时间内误差的累积,可以帮助消除稳态误差。 - 微分项(D):微分项考虑了误差变化的速度,可以帮助抑制系统的震荡。 PID输出可以通过以下公式计算:PID_output = Kp * error + Ki * integral + Kd * derivative,其中Kp、Ki和Kd是调节参数。 4. 调节参数:PID控制器的性能取决于调节参数的选择。你可以使用试错法或自动调节算法(如Ziegler-Nichols方法)来找到合适的参数。在调试过程中,逐步调整参数,并观察车辆的响应。 5. 实时更新:在循迹过程中,持续读取传感器数据,并根据PID输出进行实时的转向控制。 请注意,PID调试可能需要一些实验和调整,以找到最佳的控制效果。希望这些步骤能对你有所帮助!如果有任何问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值