浅谈两轮平衡车的控制原理

2023-05-16

前言:在IT行业摸爬滚打了好几年,好不容易从学生熬成了社会人士,通过自己的不断努力又从社会人士熬成了学生。这几年的修行,同道博友给了我很多的帮助,很早之前就有写博客的想法,想借自己绵薄之力来回馈一下默默奋斗的你,但是一直拖着,最近闲暇无事,才真正提笔,愿能够对你有用。

上周末去苏州玩儿,同行小伙伴的侄女骑着一辆小米平衡车,运用自如好拉风的感觉。此时我的职业病又犯了,思考了一下原理,觉得不是很难,就是一个陀螺仪姿态加几个PID的事情(专业毒已病入膏肓)。平衡车的制作冲动从这一刻迸发,回家之后事不宜迟直接着手去做,这都要归功于闲暇的暑期。

通过网上查资料发现,两轮平衡车的资料并不多,大多都是飞思卡尔比赛的直立小车资料,但是两者有一定的联系,由于飞思卡尔资助的原因,限制了器件的选型等,而我们业余的选择是广泛的。我选择了当前主流的STM32F103为主控,成熟的MPU6050陀螺仪加速度计,车架让一位同事帮忙组装,很快平衡车成型,心情有点激动,忍不住要上一张图。

细心的同事帮我加了配重,非常感谢我的热心朋友。(PS:珍惜身边的朋友,他们都是缔造你生命意义的人!)哈哈,这个小车看上去还是有模有样。加配重的原因是让车架的平很轴接近电机轴,也就是车架在水平时,车前后的质量分布基本一致。说的有点抽象,换句话说就是找车架的平衡位置或者平衡角度。

好了,废话说了一大堆,接下来进入正题。

首先从控制板说起,借用以前公司的一个控制板,主要用到的模块有降压模块,PWM与编码器接口,IIC接口,SPI接口TFT屏幕。由于主控板没有集成MPU6050,用了一个外部的小模块,使用IIC接口。电池使用14.8V锂电池,电机驱动是TI的LMD18200,与L298比较相似,但性能更彪悍一些。电机是带正交编码器的减速电机。基本硬件就是这些了,其实这种配置已经算得上豪华配置了,但是都是借用的没有花钱(硬件烧钱,入坑谨慎)。

其实吾理小子(本人)是做硬件的,在这里的硬件都是比较基本的,而且市面上很容易买到,就不多啰嗦了。

下面开始说控制思路,我觉得开始做之前一定要考虑清楚控制思路,否则就是盲目上路,事倍功半。平衡车实际会涉及到三个PID环,分别是直立环(角度环)、速度环、转向环。其实一般都叫直立环,但是我更愿意把这个理解为角度环,因为这样理解的话更容易和反馈量结合起来。

逐个介绍每个环的作用:

直立环,也就是角度环,通过陀螺仪得到车架的姿态角度,通过当前角度与目标角度比对的差值进行一定的计算控制轮子,以保证车架维持在目标角度附近。总结一句话来说就是直立环保证车架站起来并且稳住;

速度环,速度环是直立环的辅助调节,直立环能够保证车架直立,但是不能保证车直立的速度为零,速度环就可以保证车架保持直立的同时控制此时的速度;

转向环,控制车架的方向。与直立环用到的反馈量不一样。

综合起来的效果就是保证车架直立的同时车的行走速度与方向可控。这就是三个环的综合效果,其中直立环是核心,其它两个是辅助。

其实平衡车的PID调试过程中,还是和传统的位置式与增量式PID有一定的区别,而且区别是致命的,不容小觑!那么具体区别在哪里呢,继续看下文。

在讲解具体的编程之前,首先说一下我们的老大哥——陀螺仪MPU6050。为什么说他是老大哥,因为整个姿态的调节反馈量都来自于他。我不想夸它是第一款集成的6轴陀螺仪与加速度计,也不想夸集成了DMP库,更不想夸它价格便宜简单易用……我想说说陀螺仪与加速度计的测量的物理量。说到这里,可能有人会嘲笑小编好傻,陀螺仪不就是测姿态角的吗还用说!但是,小编刚开始用陀螺仪的时候也是这么认为的,而且把别人的代码拿过来移植到自己的工程中能正常跑,就很骄傲,实际上没有那么简单,你不相信的话,有一天你也会回头来重新认识一次老大哥,相信吾理小子

MPU6050集成了陀螺仪与加速度计,陀螺仪测量的是世界坐标系中各轴的角速度,加速度计测量是世界坐标系中各轴的加速度,这个加速度是加速度的总和包括重力加速度。那么角度是怎么测量的呢?角度是通过对角速度的积分得到的。

明白了这些的话,接下来对陀螺仪的使用会更加如鱼得水。

吾理小子移植正点原子的MPU6050程序,使用DMP库得到姿态角,数据还是比较好的。通过初始化PWM波,车子完全在吾理小子的控制之下了。至此,前期的准备工作已经全部就绪,接下来就是疯狂码代码、看现象、改数据、看现象如此反复,直到达到自己想要的结果。

吾理小子的第一篇博客也要画上一个句号了,天上一脚、地上一脚毫无逻辑的写了一上午,还请各位道友不喜勿喷,下一篇接着说具体编程,并且附上相关代码,各位小伙伴期待吧!

 

 

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

浅谈两轮平衡车的控制原理 的相关文章

  • python基础:布尔运算和四个语句

    布尔运算 计算机的逻辑判断 xff0c 只有True 判断为真 和alse 判断为假 两种结果 xff0c 计算真假的过程就叫做布尔运算 xff0c True和False就是布尔值 while和if中的布尔运算 相同点 xff1a 在whi
  • 解读编码和文件读写

    解读编码和文件读写 编码的本质就是让只认识0和1的计算机 xff0c 能够理解我们人类使用的语言符号 xff0c 并且将数据转换为二进制进行存储和传输 这种从人类语言到计算机语言转换的形式 xff0c 就叫做编码表 xff0c 它让人类语言
  • BeautifulSoup库的简单使用

    BeautifulSoup是什么 网页解析库BeautifulSoup xff0c 用来解析和提取网页中的数据 安装BeautifulSoup库 BeautifulSoup库目前已经进阶到第4版 xff08 Beautiful Soup 4
  • 运行地面站详细步骤

    第一步 xff1a 打开bin目录 xff0c 保留Backup DLL文件夹 xff0c 删除除Backup DLL文件夹之外的所有文件 xff1b 第二步 xff1a 打开Backup DLL文件夹 xff0c 复制里面所有的dll 粘
  • 关于qt和js的html一些修改

    1 调试打印js文件 maptype tms html 文件 xff0c 没有qdebug 和printf 可以用 xff0c 但可以用alert 来代替 xff0c 用alert 地图上会出现对应窗口显示 xff0c 来判断程序 逻辑 2
  • qt+directshow usb摄像头及音频设备录制视频

    最近来了个项目 xff0c 有一块功能是usb摄像头录制视频并且录音的实现 xff0c 网上的东西七七八八什么技术都有 xff0c 先用opencv打了半天环境不能录音频 xff0c 后来用ffmpeg xff0c 原谅我太菜 xff0c
  • VSCode中Git解决冲突的步骤

    VSCode中Git解决冲突的步骤 1 gt gt 合并分支后 如果存在冲突 右下角会出现一个提示框 提示 存在合并冲突 请在提交之前解决这些冲突 2 gt gt 左边导航第三个图标中 xff0c 找到产生冲突的文件 3 gt gt 打开文
  • VsCode一定要安装的几个插件

    1 Vetur VUE语法高亮 智能感知 Emmet等 xff0c 包含格式化功能 xff0c Alt 43 Shift 43 F xff08 格式化全文 xff09 xff0c Ctrl 43 K Ctrl 43 F xff08 格式化选
  • ccm-slam环境配置

    ccm slam 配置过程记录 介绍 xff1a 一种协同视觉slam方法 传统的slam是一个机器人完成定位与建图的任务 xff0c 但对于大范围的环境 xff0c 多机器人协同建图往往能提高效率 xff0c ccm slam就是基于这个
  • 从大到小排序,Comparator类型

    import java util Arrays import java util Comparator public class Main public static void main String args 注意 xff0c 要想改变默
  • 11种服务器编程语言对比(附游戏服务器框架) 2020.06

    各语言对比 语言版本TIOBE排名垃圾回收类型系统性能Web后端非Web后端特性Java142是中Python3 83是动态低C 43 43 174高不适合Node js147 是动态低PHP7 48是动态低不适合Go1 1412是中Rub
  • 【stm32定时器配置步骤和相关概念解析——LL库】

    系列文章目录 文章目录 系列文章目录前言一 cubeMX定时器介绍二 通用寄存器三 PWM模式四 LL库 PWM模式 xff08 定时器14为例 xff09 1 结构体说明2 LL库代码 前言 一 cubeMX定时器介绍 Slave Mod
  • 华为MateBook&暗影精灵游戏本恢复出厂设置

    总目录 文章目录 总目录前言一 华为MateBook恢复出厂设置1 接上电源2 重启 开机按F10 二 暗影精灵游戏本恢复出厂设置1 接上电源2 重启 开机按F11 前言 记一次个人华为笔记本和暗影精灵游戏本的恢复操作 xff0c 说不准下
  • C/C++类库大全(附github连接)

    C 43 43 资源大全中文版 浏览中发现一篇总结的很全的c c 43 43 类库 xff0c 在此做记录 xff0c 以备不时之需 github地址 xff08 内有各个库的源码连接 xff09 https github com jobb
  • VScode 中 Clangd 使用

    1 VScode 中 Clangd 使用 VScode 中 Clangd 优缺点 优点 占用系统资源确实比 C C 43 43 少了很多 xff0c 无论是 CPU 还是 内存的使用 xff08 最重要 xff09 缺点 操作相较于 C C
  • FreeRTOS 线程安全的printf输出(使用STM32F103)

    https blog csdn net baidu 23187363 article details 53811144 环境 STM32F103开发板 HAL库 xff08 标准库也没事换个串口输出函数就行 xff09 MDK5 28 ST
  • Windows下配置sphinx+reStructuredText详解

    Windows下配置sphinx 43 reStructuredText详解 最近有朋友想在windows下做个人笔记 xff0c 没有找到顺手的工具 xff0c 问我有什么好的工具推荐 正好前两天在网上看到一款做文档的利器sphinx 4
  • 进程的组成部分

    在UNIX系统中进程由以下三部分组成 xff1a 进程控制块PCB 数据段 正文段 进程控制块 PCB 是用来记录进程状态及其他相关信息的数据结构 PCB是进程存在的唯一标志 xff0c PCB存在则进程存在 系统创建进程时会产生一个PCB

随机推荐

  • 对一个程序的理解

    一 什么是程序 1 程序的结构 指令 数据 2 指令 操作CPU的一段指令集合 xff0c 更详细的说 xff0c 是对数据的加载 xff0c 移动 xff0c 以及需要进行的计算的集合 指令存储在 非易失存储器 xff08 一般指 xff
  • mv替换文件名前缀shell命令

    for name in prefix do mv name 96 echo e name sed s prefix g 96 done
  • VSCode Workspace使用,以及file.exclude、search.exclude的使用模板

    代码如下 xff1a 文件名 xff1a Project code workspace 文件描述 xff1a 此文件文件为VSCode工作区启动文件 文件内容 xff1a 代码路径 工作区设置 不包含的文件 包含路径 文件编码 针对的编译器
  • roslaunch turtlebot_gazebo turtlebot_world.launch 报错ResourceNotFound

    报错 xff1a ResourceNotFound gazebo ros 这里是引用 logging to home kwunphi ros log e14aa722 32b9 11ea 94f7 00d8613afe77 roslaunc
  • 基于MDK Keil将中断及中断服务函数定位到RAM中的.sct文件

    VectorTable ROM 0x08000000 0x00000200 VectorTable RAM 0x20000000 0x00000200 o RESET 43 First IntFunction ROM 0x08000200
  • Linux镜像各种文件名来源

    vmlinux或vmlinuz xff1a Linux直接编译得到 的elf文件 Image xff1a 上面的 elf 文件会比较大 xff0c 为了烧录方便 xff0c 会使用 objcopy工具制作成镜像文件 xff0c 叫 Imag
  • 字节序最本质的地方

    个人理解 xff1a 1 数据的传输路径是 内存 gt 总线 gt 内存 xff1b 2 内存有存放顺序 xff1b 3 总线有发送顺序 xff1b 4 不同的机器内存的存放顺序可能不同 xff1b 5 总线发送顺序也有不同 xff1b 所
  • gcc 关于目标平台相关选项的查询

    gcc target help 列出目标平台可以指定的选项 xff0c 包括gcc选项 汇编选项 链接选项 gcc help 61 target 列出目标平台可以指定的选项 xff0c 只有gcc选项 gcc march 61 armv7
  • 描述点云关键点提取ISS3D、Harris3D、NARF、SIFT3D算法原理

    ISS3D xff08 Intrinsic Shape Signatures 3D xff09 xff1a ISS3D算法是一种基于曲率变化的点云关键点提取算法 它通过计算每个点与其近邻点的曲率变化 xff0c 得到该点的稳定性和自适应尺度
  • 描述相机内部参数以及外部参数

    内部参数和外部参数是数字摄影测量中经常使用的两个概念 xff0c 它们分别用于描述相机内部性能和相机与物体之间的几何关系 内部参数 xff1a 内部参数是相机的内部性能参数 xff0c 包括焦距 主点位置 径向畸变等 这些参数决定了相机成像
  • 最优化建模、算法与理论(二)—— 典型优化问题

    参考书籍 最优化 xff1a 建模 算法与理论 文章目录 1 线性规划2 最小二乘问题3 复合优化问题4 随机优化问题5 半定规划6 矩阵优化7 整数优化附录 常用软件包 库或软件 1 线性规划 一般形式 min
  • 蒙特卡罗求积分(使用MATLAB实现,分层抽样,重点抽样,对偶变量,控制变量,Metropolis Hasting,Gibbs)

    蒙特卡罗求积分 64 author HCF 背景概述 为了解决某问题 xff0c 首先需要把它变成一个概率模型的求解问题 xff0c 然后产生符合模型的大量随机数 xff0c 最后对产生的随机数进行分析从而求解问题 xff0c 这种方法叫做
  • docker容器编译程序 的两种方案

    如果用docker 容器编译程序 有两种方案可供选择 1 xff0c 激活镜像作为slave编译 采用Jenkins提供的jnlp slave 或ssh slave 标准镜像二次封装 xff0c 或者初始镜像 xff0c 然后通过label
  • 安卓与串口通信-校验篇

    前言 一些闲话 时隔好几个月 xff0c 终于又继续更新安卓与串口通信系列了 这几个月太颓废了 xff0c 每天不是在睡觉就是虚度光阴 xff0c 最近准备重新开始上进了 xff0c 所以将会继续填坑 今天这篇文章 xff0c 我们来说说串
  • vscode的git冲突

    vscode的git冲突 vscode中使用git进行代码管理 xff0c 如果出现冲突了 xff0c git pull会报错 xff0c 需要进行以下步骤 xff1a git stash git pull git stash pop gi
  • 树莓派4b ubuntu mate 18.04设置开机自动登录,解决无HDMI无法开机问题

    一 树莓派4b ubuntu mate 18 04设置开机自动登录 之前安装的是树莓派4b Ubuntu server 的18 04版本 xff0c 通过命令行安装的ubuntu mate 18 04 xff0c 由于官方没有18 04ma
  • TX2 NX核心板-VNC远程桌面

    文章目录 前言一 前期准备二 TX2端安装VNC1 安装vino2 使能VNC服务3 编辑org gnome4 设置为Gnome编译模式5 设置VNC 登录密码6 配置本地网络地址为静态7 开机自启VNC 二 WINDOWS端安装VNC参考
  • docker(三)dockerfile

    文章目录 dockerfile构建过程基础知识dockerfile 的指令简单的dockerfile实验docker historyCMD 和 ENTRYPOUNT的区别举例 tomcat镜像 dockerfile构建过程 编写一个dock
  • FIND_IN_SET函数

    FIND IN SET函数是IN函数的升级版 功能类似 区别在于 如果是常量 xff0c 则可以直接用IN xff0c 否则要用FIND IN SET 函数 MySQL中原型为 xff1a FIND IN SET str strlist 假
  • 浅谈两轮平衡车的控制原理

    前言 xff1a 在IT行业摸爬滚打了好几年 xff0c 好不容易从学生熬成了社会人士 xff0c 通过自己的不断努力又从社会人士熬成了学生 这几年的修行 xff0c 同道博友给了我很多的帮助 xff0c 很早之前就有写博客的想法 xff0