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

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

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

橘子海发布于 2026/3/26更新于 2026/7/2457 浏览
智能小车快速循迹串级 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
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

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

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

更多推荐文章

查看全部
  • 数据结构实战:双向链表实现与算法解析
  • DTS-BLY-5S 分布式光纤测温主机:20km 覆盖与 FPGA 架构
  • 主流 C++ 集成开发环境(IDE)推荐
  • AI 绘画电商产品提示词撰写指南
  • 基于大模型 API 开发本地 AI 对话应用
  • VS Code GitHub Copilot 插件无法加载模型排查指南
  • MySQL 实战:VARCHAR 类型安全转换为 INT
  • 小爱音箱自定义固件开发指南:解锁开源智能家居功能
  • Gazebo 机器人三维物理仿真平台
  • VSCode 中使用 CMake 构建 C/C++ 多文件项目
  • Python 零基础学习指南
  • Seedance 2.0 使用指南:免费渠道对比与高效创作方案
  • 数学建模竞赛 AI 提示词框架:从题目解析到模型求解
  • MCP 协议详解:与 Function Call 的区别及使用方法
  • CentOS 7 + Docker 部署 KaiwuDB 社区版 3.1.0 全流程及跨模查询实测
  • 测试开发核心知识点梳理:网络、并发与框架原理
  • 飞算 JavaAI 代码审查落地:4 个关键细节与实践
  • macOS 本地部署 Llama3:Ollama 与 Enchanted 实战指南
  • IDEA 三大 AI 编程插件实测对比:Copilot、TRAE 与灵码
  • Trae IDE 实战:从零开发 AI Chatbot 应用

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如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