点击蓝字 ╳ 关注我们
开源项目 openharmony是每个人的 openharmony
王维平
openharmony知识体系工作组
以下内容来自嘉宾分享,不代表开放原子开源基金会观点简介
此次为大家带来的是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文件夹到源码路径下:deviceoardearpiearpi_hm_nanoapp (balance_car文件获取路径,请参考文章末尾相关链接)如图文件夹目录:
第二步:修改build.gn,在源码路径下:deviceoardearpiearpi_hm_nanoappbuild.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:教你打造两轮平衡车
文章出处:【微信公众号:openatom openharmony】欢迎添加关注!文章转载请注明出处。
一加5什么时候上市?一加5最新消息:紧跟OPPOR11步伐,一加5意外撞脸iPhone7Plus?
比亚迪“登陆”元宇宙,上线虚拟展厅!
物联网正悄悄改变我们的世界 浅析物联网改变企业的5种方式
联想Z6青春版官宣将搭载双频GPS定位系统
EVgo充电站将安装特斯拉专用充电桩
玩转OpenHarmony PID:教你打造两轮平衡车
51单片机中断服务子程序的设计
SD-WAN的入门之旅:SD-WAN是什么?能带来什么变化?
AI与区块链能碰撞出怎样的火花
奥地利微电子推出新型双路、超低电压噪声LDO AS1374
中兴天机Axon 20 5G深度评测一览
好用的骨传导耳机有哪些?骨传导耳机品牌推荐
OPPOR7PLUS高清图赏
T载波,T载波是什么意思
万物互联为何需要“信息高铁”
密勒电容对放大电路频率的影响
商业往事丨第79话:老产品的新生命
思必驰在中文文本相似度计算方向上取得阶段性成果
基于PSoC3可编程嵌入式片上系统的智能手机电池充电器
什么是CPU扩展总线速度/Register Pressure