平衡小车PID学习

2023-05-16

离散式PID:

位置环:

入口参数:位置测量值,编码器的位置测量值

系统的参数调定要求:

目标: 准确性,稳定性,快速性。
指标: 最大超调量,响应时间,静差。
最大超调量->稳定性
响应时间 ->快速性
静差 ->准确性

参数:

P:提高响应速度。

  • KP大会减小静差,提高速度。但是过大会振荡(引入微分)
  • KP小且KI为0时会出现静差

I:减小静差。

  • 响应速度更快。
  • 弊端是if有误差,随着时间推移会越来越大。
    D:抑制振荡
  • 防止超调,减少振荡次数。
  • 弊端:响应速度变慢。因为系统的阻尼增大

位置环调节:先只调P,增大P直至振荡,引入D,增大阻尼以消除振荡。此时根据系统对静差和响应时间要求来调P和I。
位置环我们用的是负反馈。

速度环

在规定时间内测量所产生的脉冲个数来获得被测速度,称为M法测速。
使用增量式PID。

速度环我们用的是正反馈。

直立控制

算法原理

为了保持小车的直立,小车往前倾时需要车轮往前走,后倾时车轮往后走,所以直立控制最本质就是让小车的加速度与倾角成正比。
其实小车的直立可以与单摆类比,都是一维的。单摆收到重力的分力产生的回复力(与角度成正比)使单摆回到垂直平衡位置。而如果理想状态下,没有阻力是一定不会停下的,这就需要空气阻力作为阻尼(与速度成正比)。
所以回到小车,我们最开始是设置,加速度与速度成正比 ,(这就是比例控制)但是由于惯性,小车在达到直立的时候由于转动惯量,会往另一个方向倒去,这样就一直在平衡位置振荡,这时候的这个力相当于回复力。而我们要让车能直立,还需要一个阻尼力。这就需要微分发挥作用。此时
加速度 = b1角度偏差+b2角度偏差的变化率(即角速度)
这就是直立的算法表达式,比例控制——回复力。微分控制——阻尼力,转动惯量(质量与重心位置)决定微分系数。

代码

在这里插入代码片

速度控制

算法原理

速度环使用的是正反馈。如果是负反馈,当小车向前走的时候,车需要往后,速度会下降,如果是负反馈,就会继续让车轮向后加速,倾角继续增大,小车就倒了。
(其实这里有个问题就是车轮需要往后让小车向前倾斜,才能向前走吗,车往后又与速度下降有什么关系呢)

小车前行的原理:想提高小车向前运动的速度,就需要增加小车的前倾角。倾角加大之后,由于直立环的控制,需要车轮往前,这样就实现保持平衡,并加速向前走。
这样其实就把速度环的输出作为直立环的输入,形成了串级PID。直立使用PD,速度使用PI。

获取小车倾角:

加速度计对于短时间内的角度变化测量误差较大,适合长时间的测量,不适合短时间测量。
陀螺仪应用起来有很大的局限性,对长期的角度变化测量误差较大。
陀螺仪不适合长时间测量,加速度计不适合短时间测量。
MPU6050通过配置,可以精确测量角度的变化,通过DMP处理,可以输出16位的原始数据(16位ADC),然后通过算法得到四元数,再转换为欧拉角,我们就可以根据欧拉角的变化来进一步是小车处于平衡状态!

如果做自由落体,加速度计输出为0,也就是加速度计设计是为了测量重力加速度在坐标轴的分量导致的。

  • 机体好似一条船,姿态就是航向(船头的方位),重力是灯塔,陀螺(角速度积分)是舵手,加速度计是瞭望手。舵手负责估计和把稳航向,他相信自己,本来船向北开的,就一定会一直往北开,觉得转了90度弯,那就会往东开。当然如果舵手很牛逼,也许能估计很准确,维持很长时间。不过只信任舵手,肯定会迷路,所以一般都有瞭望手来观察误差。

  • 瞭望手根据地图灯塔方位和船的当前航向,算出灯塔理论上应该在船的X方位。然而看到实际灯塔在船的Y方位,那肯定船的当前航向有偏差了,偏差就是ERR=X-Y。舵手收到瞭望手给的ERR报告,觉得可靠,那就听个90%ERR,觉得天气不好、地图误差大,那就听个10%ERR,根据这个来纠正估算航向。

DMP硬件解算

在Crazepony上,测试了软件解算四元素,然后通过四元素解算姿态角这种实现方式,其实总的来说,并没感觉36MHz的主控压力有多大,没有出现机身不稳,卡死的情况。

同时,本着务实他的态度,我们也测试了MPU6050的硬解四元素,即从IIC总线上读到的数据不再是MPU60x0的AD值,而是通过初始化对DMP引擎的配置,从IIC总线上读到的直接就是四元素的值,从而跳过了程序通过AD值计算四元素这个看起来繁琐的步骤。测试结果是,机身反应的确要比之前反应灵活,最关键的一点是,这样得出的偏航角(Yaw)很稳很稳,基本不会漂移或者说漂移小到了可以容忍的地步。

最后,MPU60x0的强大之处不仅于此,它支持一个从IIC接口,可以外部接上一个磁力计,如HMC5883,这样一来,DMP引擎可以直接输出一个绝对的方向姿态,即能够输出一个带东西南北的姿态数据包,很厉害的样子。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

平衡小车PID学习 的相关文章

随机推荐

  • keil,stm32,watch窗口,正确的串口数据后面还出现ASCII字符?

    这个问题不知道如何解决 xff0c 串口调试助手数据显示都是准确的 xff0c watch窗口看就不正确 不知道正确数据后面的是什么 xff1f
  • MS5611气压计数据测试报告

    气压计测得气压和温度值为模拟量 xff0c ms5611气压计会自动将模拟量转换成数字量 xff0c 对于不同的精度 xff0c 转换时间也不相同 本测试选用的精度为最高的OSR 61 4096 xff0c 如下表所示 xff0c 转换时间
  • Fatfs文件系统,f_open函数返回值为FR_DISK_ERR解决方法

    最近在操作TF卡 xff0c 芯片stm32f103c8t6 xff0c 编译环境KEIL xff0c 金士顿32G卡 xff0c 用Fatfs文件系统向卡中写入数据 出现的问题 xff1a f open函数返回值为FR DISK ERR
  • Fatfs文件系统向文件写内容出现f_write返回值为1的问题

    f write返回值为1 xff0c 则就是FR DISK ERR 1 A hard error occurred in the low level disk I O layer 低级磁盘I O层中发生硬错误 问题解决方式 xff1a 1
  • vl53l1x激光测距讲解

    使用模块 ATK VL53L0X激光测距模块或者淘宝其他模块 通信方式 xff1a IIC xff0c 接口SHUT用于开机启动时序中 xff0c int是中断模式中的引脚 xff08 触发中断 xff09 参考资料 xff1a https
  • 如何完成一篇发明专利

    专利的组成部分 xff1a 说明书摘要摘要附图权利要求书说明书说明书附图 参考的文献有 专利法 专利审查指南 xff0c 大致写完一篇发明专利需要半个月的时间 xff1b 参考网址 xff0c http www soopat com htt
  • cmd python 缩进 3个点

    问题描述 xff1a indentationerror expected an indented block for 语句和if语句都会遇到 xff0c 解决方法是for 语句和if语句冒号后 xff0c 按enter切换下一行 xff0c
  • 陀螺仪和加速度计MPU6050的单位换算方法

    对于四轴的初学者 xff0c 可能无法理解四轴源代码里面陀螺仪和加速度数据的那些数学转换方法 下面我们来具体描述下这些转换方法 我们首先来看陀螺仪数据 在MPU6050的手册里面 xff0c 提供了一个陀螺仪数据表如下 xff1a 在表格里
  • 【Final Project】Kitti的双目视觉里程计(1)

    1 从CMake文件了解整体结构 xff08 1 xff09 前置工作 0 xff09 文件结构 app CMakeLists txt run kitti stereo cpp CMakeLists txt cmake modules Fi
  • 觅香

    立于浮华之世 奏响天籁之音
  • 多旋翼无人机推荐书

    惯性仪器测试与数据分析 惯性导航 xff08 秦永元 xff09 先进 PID 控制 MATLAB 仿真 多旋翼飞行器设计与控制
  • 飞控PID详解

    串级PID xff1a 单极PID适合线性系统 xff0c 当输出量和被控制量呈线性关系时单极PID能获得较好的效果 xff0c 但是四轴不是线性系统 xff0c 现代学者认为 xff0c 四轴通常可以简化为一个二阶阻尼系统 为什么四轴不是
  • Keil:ST-LINK USB communication error

    error flash download failed target dll has been cancelled 1 USB口的问题 xff1a USB供电不好 xff0c 或则USB驱动程序或ST Link驱动程序有问题 我的解决方案就
  • Cadence OrCAD BOM如何输出封装信息

    Cadence OrCAD 如何输出带封装信息的BOM 1 选中DSN文件 xff0c 打开Tools菜单中 选择Bill of materials选项 2 Bill of materials对话框设置如下 3 ORCAD输出的BOM表是文
  • 随机排列算法及《算法导论》5.3节习题解答

    随机排列算法及 算法导论 5 3节习题解答 算法导论 介绍了两种随机排列数组的算法 第一种算法是为数组的每个元素A i 赋一个随机的优先级P i xff0c 然后依据优先级对数组A中的元素进行排序 例如 xff0c 如果初始数组A 61 1
  • 【Ubuntu-Tensorflow】GPU设置及显存资源分配

    最近笔者在做GPU显存资源分配的研究 xff0c 发现在tf中gpu一些实用的方法和接口 xff0c 共享出来 xff0c 供大家参考学习 xff0c 如有问题 xff0c 欢迎留言讨论 1 运行程序时 xff0c 控制台设置GPU运行参数
  • 为了解决jetson tx2的内存不足。挂载sd卡,并且使用docker在sd中安装jetPack的镜像。

    1 xff0c 使用nvidia官方的sdkmanager工具给jetson tx2刷机 xff0c 并且将sd卡挂载在系统目录下 参考ubuntu18 04主机 43 Jetson TX2 NX刷机 lgh15897723511的博客 C
  • 链表反转 - 链表排序 算法

    链表反转 xff1a 想象有1个新链表 xff0c 每次从旧链表取出一个元素 xff0c 然后插入到新链表的头部 链表排序 xff1a 先将链表拆分为2个子链表 使用快慢指针 xff0c 快指针每次走2步 xff0c 当快指针走到尾部时 x
  • 如何在Ubuntu服务器上安装桌面环境(GUI)

    本文转载至网络 原作者Chris Patrick Carias 你想在你的 Ubuntu 服务器上安装 GUI 吗 xff1f 大部分情况下你是可以安装的 xff0c 在本教程中我会详细介绍安装的步骤 在正式开始之前 xff0c 我来告诉你
  • 平衡小车PID学习

    离散式PID xff1a 位置环 xff1a 入口参数 xff1a 位置测量值 xff0c 编码器的位置测量值 系统的参数调定要求 xff1a 目标 xff1a 准确性 xff0c 稳定性 xff0c 快速性 指标 xff1a 最大超调量