玩转OpenHarmony PID:教你打造两轮平衡车
简介
此次为大家带来的是OpenAtom OpenHarmony(以下简称“OpenHarmony”)系统与PID控制算法相结合并落地的平衡车项目。
PID控制算法是一种经典的,并被广泛应用在控制领域的算法。类似于这种:需要将某一个物理量保持稳定的场合,比如维持平衡,稳定温度、转速等,PID都会适用。在四轴飞行器,平衡小车、汽车定速巡航、温度控制器等场景均有应用。


通过本样例的学习,开发者能够对OpenHarmony系统设备端开发有进一步的认识,还能够掌握PID控制算法的使用。本样例使用OpenHarmony 3.2 Beta1操作系统,硬件平台采用小熊派BearPi-HM Nano(Hi3861)开发板。
本样例效果动图:


硬件配置资源
两轮平衡小车主要硬件资源:
主控CPU:小熊派BearPi-HM Nano(Hi3861)开发板;
陀螺仪:MPU6050六轴陀螺仪传感器;
左右轮:带有霍尔传感器的直流电机;
小车平台及结构件资源可以自行在相关网站获得。
原理概括

小时候都玩过上图游戏吧:木杆立在手指上,尽量保持木杆直立不倒。
当木杆向前倾斜时,我们会往前行走,以用来抵消木杆的前倾;往后倾斜时,我们会往后倒退。对的!没错!你猜对了。平衡车的控制原理就是这样:

PID算法介绍
平衡车的控制离不开对PID算法的应用。那么什么是PID算法?它能解决什么问题?
PID算法:就是“比例(proportional)、积分(integral)、微分(derivative)”,是一种常见的“保持稳定”控制算法。


结合两轮平衡车的场景,对PID参数的认识如下:
P比例参数:该参数能够快速让小车达到平衡状态,但是由于控制是滞后的,以及是惯性系统,容易带来超调,即小车会出现前后摇摆的现象。所以P参数不能太大;
I积分参数:小车由于摩擦力或者风阻力,并且P不能太大,只靠P控制有可能达不到稳定状态,所以需要加入I积分参数,消除稳态误差;
D微分参数:平衡小车维持的是倾斜角度要为平衡角度,由于PI参数使小车振荡,小车会出现前后摇摆现象,加入D微分参数能够消除小车的振荡。
两步搭建样例工程
在OpenHarmony源码基础上,两步构建平衡小车代码。(OpenHarmony源码下载路径及BearPi-HM Nano(Hi3861)开发板代码烧录,请参考文章末尾相关链接)
第一步:拷贝Balance_car文件夹到源码路径下:\device\board\bearpi\bearpi_hm_nano\app\ (Balance_car文件获取路径,请参考文章末尾相关链接)
如图文件夹目录:

第二步:修改BUILD.gn,在源码路径下:\device\board\bearpi\bearpi_hm_nano\app\BUILD.gn
添加编译依赖:"Balance_car:balance_car",如下图:

关键算法讲解
两轮平衡车的控制主要涉及三个PID环的串联使用,它们分别是直立环(平衡控制)、速度环(速度控制)、转向环(方向控制)。三个控制效果合成,控制轮子运行。


直立环控制算法:
直立环控制算法是平衡小车维持平衡的主要算法。直立环采用了PD算法环节,即只有比例与微分环节。
倾斜角度大小以及角加速度大小决定了轮子的速度大小。可以理解为倾斜角度越大,控制轮子顺着倾斜的方向的速度越大;倾斜的角加速度越大,控制轮子速度也要越大。
float g_middleAngle = 1.0;//平衡角度
float g_kpBalance = -85800.0;
float g_kdBalance = -400; static int ControlBalance(float angle, short gyro)
{
int outpwm = 0;
float angleBias = 0.0;
float gyroBias = 0.0;
float tempAngle = 0.0;
float tempGyro = 0.0; tempAngle = 0 - angle;//极性控制
tempGyro = 0 - gyro; angleBias = g_middleAngle - tempAngle;
gyroBias = 0 - tempGyro;
outpwm = (g_kpBalance / 100 * angleBias + g_kdBalance
* gyroBias / 100); return outpwm;
}
速度环控制算法:
速度环控制的目的是让机器以恒定速度前进或后退,该恒定速度可以为0速度,即要让平衡车静止。速度环采用了PI环控制,只有比例与积分环节。
float g_kpSpeed = 95800.0;
float g_kiSpeed = 200; static int ControlSpeed(long int left, long int right)
{
int outpwm = 0;
int speedBias = 0;
int speedBiasLowpass = 0;
static int speed_i = 0;
float a = 0.68;
static int speedBiasLast = 0; speedBias = 0 - left - right;
speedBiasLowpass = (1 - a) * speedBias
+ a * speedBiasLast;
speedBiasLast = speedBiasLowpass; speed_i += speedBiasLowpass;
speed_i = limit_data(speed_i, SPEED_H, SPEED_L); outpwm = (g_kpSpeed * speedBiasLowpass / 100 +
gkiSpeed * speed_i / 100); return outpwm;
}
转向环控制算法:
转向环的目的是控制小车以恒定速度转向。在本次场景为了控制小车平衡静止,所以只做了限制转向的操作。
static int ControlTurn(short gyro)
{
int outpwm; outpwm = g_kpTurn * gyro;
return outpwm;
}
以上详细代码,请参考文章末尾的相关链接(Balance_car文件获取路径)。
总结
本文呈现了两轮平衡小车的大致原理。简单介绍了一下PID算法的效果:P比例参数,能够快速让系统达到稳定值,但是P太大容易超调,带来振荡;I积分参数,消除稳态误差,让系统达到稳定值;D积分参数,能消除振荡,但是会使系统时效性变慢。开发者可以根据现场情况,合理调节PID三个参数。
本样例是OpenHarmony知识体系工作组(相关链接在文章末尾)为广大开发者分享的样例。同时知识体系工作组结合日常生活,给开发者规划了各种场景的Demo样例,如智能家居场景、影音娱乐场景、运动健康场景等;欢迎广大开发者一同参与OpenHarmony的开发,更加完善样例,相互学习,相互进步。
相关链接
OpenHarmony源码下载路径:https://gitee.com/openharmony/docs/blob/master/zh-cn/release-notes/OpenHarmony-v3.2-beta1.md
Balance_car文件获取路径:https://gitee.com/openharmony-sig/vendor_oh_fun
BearPi-HM Nano(Hi3861)开发板代码烧录参考链接:https://gitee.com/bearpi/bearpi-hm_nano/tree/master/applications/BearPi/BearPi-HM_Nano/docs/quick-start
OpenHarmony知识体系共建开发仓:https://gitee.com/openharmony-sig/knowledge/blob/master/docs/co-construct_demos/README_zh.md
小熊派开发板学习路径:https://growing.openharmony.cn/mainPlay/learnPathMaps?id=19
OpenHarmony知识体系工作组智慧家居开发样例https://gitee.com/openharmony-sig/knowledge_demo_smart_home
参考资料:
第七届全国大学生“飞思卡尔”杯智能汽车竞赛
电磁组直立行车参考设计方案

玩转OpenHarmony PID:教你打造两轮平衡车的更多相关文章
- PID算法 旋转倒立摆与平衡车的区别。此贴后边会更新。
我做PID算法的背景和经历:本人之前电子信息科学与技术专业,对控制方向颇感兴趣,刚上大学时听到实验室老师说PID算法,那年在暑假集训准备全国电子设计竞赛,我正在练习做一个以前专科的题目,帆板角度控制系 ...
- 两轮自平衡小车双闭环PID控制设计
两轮自平衡小车的研究意义 ...
- Android 教你打造炫酷的ViewPagerIndicator 不仅仅是高仿MIUI
1.概述 哈,今天给大家带来一个ViewPagerIndicator的制作,相信大家在做tabIndicator的时候,大多数人都用过 TabPageIndicator,并且很多知名APP都使用过这个 ...
- Android 进阶 教你打造 Android 中的 IOC 框架 【ViewInject】 (下)
上一篇博客我们已经带大家简单的吹了一下IoC,实现了Activity中View的布局以及控件的注入,如果你不了解,请参考:Android 进阶 教你打造 Android 中的 IOC 框架 [View ...
- Android:手把手教你打造可缩放移动的ImageView(下)
在上一篇Android:手把手教你打造可缩放移动的ImageView最后提出了一个注意点:当自定义的MatrixImageView如ViewPager.ListView等带有滑动效果的ViewGrou ...
- jsoi2014前两轮回眸
今天从常州回来了,第二轮考得惨不忍睹 大概来总结一下前两轮: 第一轮是4个小时,3道题,一道网络流,一道环形DP,一道线段树 最后一道题ahoi的原题(传送bzoj1798),非常水的线段树,是个很好 ...
- 【树莓派+.NET MF打造视频监控智能车】控制篇(树莓派)
对已经具备一定Linux基础的人来说,树莓派学习起来应该非常简单自然.在他们眼中,树莓派就是一个简易版的,卡通版的Linux而已.但是对我这样一个早已习惯微软技术生态系统的人或者初学者来说,要实现一个 ...
- 【树莓派+.NET MF打造视频监控智能车】控制篇(.NET MF)
在上一篇<遥控篇>文章中,我们介绍了Sony PS2手柄信号的采集和编程,通过简单的封装,以事件的方式向我们提供按键信息.本篇文章主要介绍.NET Micro Framework系统接受到 ...
- 【树莓派+.NET MF打造视频监控智能车】遥控篇
树莓派是最近比较火热的开源硬件,其设备只有信用卡大小,运行着Linux系统,专为学生编程教育而设计.我十多年的技术路线基本以学习微软的技术为主,中间也曾试图学习过linux,但是相对陡峭的学习曲线,只 ...
- PID算法通俗理解,平衡车,倒立摆,适合不理解PID算法的人来看!
先插句广告,本人QQ522414928,不熟悉PID算法的可以一起交流学习,随时在线(PID资料再我的另一篇博客里) 倒立摆资料连接↓ https://www.cnblogs.com/LiuXinyu ...
随机推荐
- windows下redis安装与使用
下载 redis下载地址 步骤,一直下一步按就完事了,记得勾选添加到环境配置 其中建议自定义路径吧,文件夹名字Redis,一定要大写,小写不来事. 安装完后 启动命令 找到你安装redis的文件夹,在 ...
- ABP的版本升级,从7.2.2升级到7.2.3
1.升级ABP CLI 见前面的文章:ABP开发需要用到的命令 更新最新版本: ~~~ dotnet tool update -g Volo.Abp.Cli ~~~ 2.升级ABP Suite 见前面 ...
- 【Azure 存储服务】记一次调用Storage Blob API使用 SharedKey Authorization出现的403错误
问题描述 使用Azure Storag Blob REST API上传文件,用SharedKey作为Authorization出现403错误. 错误消息 b'\xef\xbb\xbf<?xml ...
- 容器与 Pod
现在 Docker 的流行程度越来越高,越来越多的公司使用 Docker 打包和部署项目.但是也有很多公司只是追求新技术,将以前的单体应用直接打包为镜像,代码.配置方式等各方面保持不变,使用 Dock ...
- Nebula Importer 数据导入实践
本文首发于 Nebula Graph Community 公众号 前言 Nebula 目前作为较为成熟的产品,已经有着很丰富的生态.数据导入的维度而言就已经提供了多种选择.有大而全的Nebula Ex ...
- mysql-查询库中所有表名称或者某一张表的所有字段名称
-- 查询某一库中所有表的名称, SELECT a.TABLE_SCHEMA ,a.TABLE_NAME ,a.TABLE_COMMENT FROM information_schema.TABLES ...
- 使用 ASP.NET Core MVC 创建 Web API 系列文章目录
使用 ASP.NET Core MVC 创建 Web API(一) 使用 ASP.NET Core MVC 创建 Web API(二) 使用 ASP.NET Core MVC 创建 Web API(三 ...
- B站Aimls的JavaFx教程目录合集
B站里有时候不太好去找资源,用JS爬了下,整出标题和链接,方便后续查询某个知识点的使用! JavaFX视频教程第1课,hello world JavaFX视频教程第2课,application的启动方 ...
- day17--Java常用类05
Java常用类 5.其他常用类 5.1Math类 java.lang.Math提供了一系列静态方法用于科学计算:其方法的参数和返回值类型一般为double型.如果需要更加强大的数学运算能力,计算高等数 ...
- 推荐一款idea神级免费插件【Bito-ChatGPT】
今天推荐一款IDEA 插件神器:Bito-ChatGPT,在 IDEA 中安装直接可以使用 GPT,不需要使用魔法! 还有很重要的一点这个插件完全免费,且不限次数(目前是免费不限制次数). 环境要求: ...