博客
关于我
平衡小车从原理到实践
阅读量:321 次
发布时间:2019-03-01

本文共 1625 字,大约阅读时间需要 5 分钟。

平衡小车从原理到实践


平衡小车是一种通过智能控制实现长期稳定平衡的小型移动机器人。它的核心控制原理结合了直立环和速度环,能够在复杂环境中保持平衡。以下从理论到实践详细解析平衡小车的设计与实现。

1. 平衡小车控制原理

平衡小车的核心在于通过闭环控制实现稳定性。其控制算法主要包含直立环和速度环两个部分,两者协同工作,使小车能够在动态环境中保持平衡。

1.1 直立环的引出

直立环的主要作用是通过控制小车的倾角来抵消惯性效应。理想情况下,控制电机的加速度与倾角成正比。然而,实际应用中,小车因机械惯性会在倾角为零时产生反向倾斜。因此,直立环需要通过PD控制算法来消除这种惯性效应。

1.2 速度环的引出

仅依靠直立环的小车往往只能短暂保持平衡,随后因速度累积而倒下。速度环的引入可以通过闭环控制限制小车的平移速度,从而实现长期稳定平衡。

2. 制作一个平衡小车

2.1 硬件准备

  • 主控板:如Arduino Uno、STM32等;
  • 驱动电机:如L298N驱动模块;
  • 传感器:MPU6050惯性测量单元;
  • 编码器:用于测量小车速度;
  • 电机驱动:直流电机及减速电机。

2.2 软件实现

  • 代码框架:包括直立环和速度环的控制逻辑,通常采用C语言编写;
  • 调试与测试:需要通过实验调整参数,确保系统稳定性。

3. 平衡小车-PD直立环

PD直立环是平衡小车的基础控制算法。其核心原理是通过负反馈机制,控制电机加速度以抵消倾角和角速度。代码实现如下:

int balance(float Angle, float Gyro) {    static float ZHONGZHI; // 机械中值,根据安装位置调整    float Balance_Kp = 700, Balance_Kd = 2.0;    float Bias = Angle - ZHONGZHI;    int result = Balance_Kp * Bias + Gyro * Balance_Kd;    return result;}

3.1 参数调试

  • Kp范围:根据电机最大占空比确定,通常为0-720;
  • Kd范围:根据转动惯量调整,通常为0-2.0。

4. 平衡小车-PI速度环

PI速度环通过正反馈控制平移速度,使小车在直立的基础上尽量保持静止。其代码实现如下:

int velocity(int encoder_left, int encoder_right) {    static float Encoder_Integral = 0;    static float Encoder_Least = (encoder_left + encoder_right) - 0;    float Encoder = Encoder_Least * 0.8 + Encoder_Least * 0.2;    Encoder += Encoder_Least * 0.2;    Encoder_Integral += Encoder;    Encoder_Integral = (Encoder_Integral > 10000) ? 10000 : (Encoder_Integral < -10000) ? -10000 : Encoder_Integral;    float Velocity = Encoder * Velocity_Kp + Encoder_Integral * Velocity_Ki;    return Velocity;}

4.1 参数调试

  • Kp范围:根据编码器最大变化量确定,通常为-180-185;
  • Ki范围:根据Kp调整,通常为-0.925。

5. 总结

通过以上理论和实践,能够实现一个基本的平衡小车。其核心控制算法结合了直立环和速度环,确保小车在动态环境中保持稳定。实际应用中,还需要引入转向环和遥控环,才能实现更复杂的功能。

转载地址:http://vzwl.baihongyu.com/

你可能感兴趣的文章
Python 从数据库中存储和检索密码的最安全方法
查看>>
Python语言及其应用 - 知识点遍历
查看>>
Python 优化提速的 8 个小技巧
查看>>
Python 余弦相似度与皮尔逊相关系数 计算
查看>>
python 使用execjs 报编码错误解决办法,UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xac in position 145: il
查看>>
python 使用filetype校验文件
查看>>
Python 使用flush函数将缓冲区数据立即写磁盘
查看>>
python 使用in判断不准确,in不好使
查看>>
Python 使用pandas 进行查询和统计详解
查看>>
Redis 配置文件redis.conf详细解释
查看>>
python网络爬虫(2)——scrapy框架的基础使用
查看>>
python网络爬虫实例教程试读_Python网络爬虫实战教程(全套完整版) - 学途无忧网 - 做技术的王者 - Powered By EduSoho...
查看>>
Python 使用哈希函数用于加密
查看>>
Python 依赖管理的革新——Poetry 深度解析
查看>>
python 保留精度及增加去除数字的千位分隔符(金额化数字)
查看>>
python 倒计时 9,8,7,。。。。。。0
查看>>
Python 入门开发学习笔记之数据的增删改查
查看>>
Python 入门教程(2)搭建环境 2.4、VSCode配置Node.js运行环境
查看>>
Python 八大排序算法合集
查看>>
python 关于epoll的学习
查看>>