跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C算法

智能小车快速循迹串级 PID 算法实现

综述由AI生成智能小车快速循迹的实现方案。首先通过红外传感器获取车身位置信息,利用位运算优化信号读取逻辑。其次讲解单级 PID 控制算法,通过误差反馈调节 PWM 输出,解决基本循迹问题。最后提出串级 PID 方案,引入陀螺仪角速度反馈,有效解决了高速循迹时的震荡和脱线问题。

橘子海发布于 2026/3/26更新于 2026/5/2830 浏览
智能小车快速循迹串级 PID 算法实现

一、基础篇

智能小车通常采用灰度或红外模块来判断在循迹线的位置。 文章配图 文章配图 以 8 路红外模块为例,从左到右依次记为灯 1 - 灯 8。小车在线中间位置时灯 4 和灯 5 亮起,对应信号输出口返回 0。若小车往右偏,灯 3 和灯 4 对应的信号输出口为 0,主控据此判断位置。快速循迹一般建议至少 8 路,推荐使用 12 路以提高微动判断精度。

二、进阶篇

主控读取信号后的处理逻辑至关重要。相比多层 if-else 判断,将传感器状态合并为二进制数值并使用 switch 语句更为简洁高效。 以 STM32 标准库为例,读取 GPIO 高低电平函数如下:

GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_1);

将多个引脚状态合并为一个整型变量 val:

int read(void) { 
    int val = 0; 
    val |= (GPIO_ReadInputDataBit(GPIOC, OUT1) << 7); 
    val |= (GPIO_ReadInputDataBit(GPIOC, OUT2) << 6); 
    val |= (GPIO_ReadInputDataBit(GPIOC, OUT3) << 5); 
    val |= (GPIO_ReadInputDataBit(GPIOC, OUT4) << 4); 
    val |= (GPIO_ReadInputDataBit(GPIOC, OUT5) << 3); 
    val |= (GPIO_ReadInputDataBit(GPIOC, OUT6) << 2); 
    val |= (GPIO_ReadInputDataBit(GPIOC, OUT7) << 1); 
    val |= (GPIO_ReadInputDataBit(GPIOC, OUT8) << 0); 
    return val; 
} 

通过 switch 语句对 val 进行判断:

read(); 
switch (read()) { 
    case 127: break; // 0111 1111 
    case 191: break; // 1011 1111 
     : ; 
     : ; 
     : ; 
     : ; 
     : ; 
     : ; 
     : ; 
     : ; 
    : ; 
} 
case
223
break
// 1101 1111
case
239
break
// 1110 1111
case
247
break
// 1111 0111
case
251
break
// 1111 1011
case
253
break
// 1111 1101
case
254
break
// 1111 1110
case
0
break
// 0000 0000
case
255
break
// 1111 1111
default
break

两个灯亮和三个灯亮的情况类似,可根据实际硬件配置计算对应值。

三、单级 PID

PID 控制的核心在于误差反馈。根据传感器返回值映射出误差值:

float error; 
read(); 
switch (read()) { 
    case 127: error = -3; break; 
    case 191: error = -1; break; 
    case 223: error = -0.5; break; 
    case 239: error = 0; break; 
    case 247: error = 0; break; 
    case 251: error = 0.5; break; 
    case 253: error = 1; break; 
    case 254: error = 3; break; 
    case 0: error = 0; break; 
    case 255: error = 0; break; 
    default: error = 0; break; 
} 

采用位置式 PID,此处仅使用 P 和 D 项:

P = error; 
D = error - previous_error; 
PID_value = (Kp * P) + (Kd * D); 
previous_error = error; 
X = Pwm + PID_value; 
Y = Pwm - PID_value; 

// 限幅处理
if(X >= 100) X = 100; else if(X < -100) X = -100; 
if(Y >= 100) Y = 100; else if(Y < -100) Y = -100; 

motor(X, Y); 

其中 Pwm 为目标速度,motor 函数执行电机控制。调参时建议先调 Kp,再调 Kd,经验上 Kd 通常大于 Kp。单级 PID 在低速下效果尚可,但在高速状态下容易出现震荡或出线。

四、串级 PID

串级 PID 由两个 PID 控制器串联组成。其中一个 PID 基于陀螺仪(如 MPU6050)的 Z 轴角速度值进行运算,用于提高高速稳定性。具体参数匹配与代码实现需结合硬件特性调试。

目录

  1. 一、基础篇
  2. 二、进阶篇
  3. 三、单级 PID
  4. 四、串级 PID
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Mac mini M4 部署 OpenClaw + Ollama 本地大模型接入飞书机器人
  • Web 自动化测试实战:常用函数全解析与场景化应用指南
  • 双指针算法原理与经典题目解析
  • OpenClaw 101:从零部署与实战指南
  • PostgreSQL 动态分区裁剪技术:查询性能优化解析
  • 世界模型发展脉络整理:理解世界还是预测未来?
  • 前端 React 50 个基础高频面试题精选
  • COT 思维链:AI 拆解问题与逻辑推理方法
  • linux中从零开始,将OpenClaw 接入 QQ 机器人
  • C++ 协程与 Fiber:游戏开发中的异步编程模型应用
  • Linux 核心 IO 模型深析:Cmake 构建与 poll 多路转接实现
  • Ansible 批量部署 Nginx 实战指南
  • 卷积神经网络 CNN 经典架构解析与 PyTorch 实战
  • C++ 汉诺塔问题:递归与非递归实战解析
  • 解决 AnythingLLM 文件定位问题:从错误分析到 Whisper 模型路径优化
  • PyTorch 实战——基于文本引导的图像生成技术与 Stable Diffusion 实践
  • SQL Server 配置管理器无法打开的解决方法
  • C++ 特殊类设计:不可拷贝、堆栈限制及单例模式实现
  • Anaconda Prompt 环境下 GitHub 项目的 AI 辅助开发实践
  • Java 中使用 Lua 脚本实现 Redis 原子操作与高并发场景优化

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online