BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / smartcar / #227同步于 2017/3/14
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Smartcar机器人发帖

直立调试步骤详解

Ncer
2017/3/14镜像同步3 回复
马上就要热身赛了,但好像很多人还是不太清楚直立车的原理。 在这里重新讲讲。 ### 官方方案请看至少5遍以上,调试指南PDF及视频也请多看几遍。 ### 熟悉底层,会用虚拟示波器 底层里有这么一段,其中将OutData[0-3]赋值为你需要在示波器上看的变量,即可。 ``` #elif 1 //虚拟示波器使用方法,四路同时输出你想要的参数,务必转换为int类型 while(1) { OutData[0] =(int)(CarVacceVal);//(CarVacceVal);//g_lLeftMotorOut //加速度计直接测出角度,原理参考MMA7361手册 OutData[1] =(int)(CarGyroVal);//CarGyroVal);//(g_lRightMotorOut); //陀螺仪乘以系数以后的值 OutData[2] =(int)(CarAngle);//(CarAngle);//(g_nLeftMotorPulseSigma); //拟合出来的角度 OutData[3] =(int)(g_nRightMotorPulseSigma);//(g_nRightMotorPulseSigma);//CarGyroVal*100); OutPut_Data(); } ``` 注意:在之前需要先初始化串口,波特率为__9600(因为示波器没破解,只支持9600)__ 然后将用有线串口或者蓝牙接在主板上,开示波器(不要开串口助手,因为一次只能一个软件操作同一个串口),接收数据即可。__电脑的串口号必须修改为com1,修改方式不动的去百度__ ### 角度拟合 大家相比都知道直立的基本原理。但是最基础的,我们要能知道车身的角度才能对其进行控制。 角度拟合就是干这事的。 为什么要角度拟合?参考:https://bbs.byr.cn/#!article/Smartcar/216 角度拟合,就是使陀螺仪积分的角度能跟随上加速度计的角度。我们进行直立控制使用的陀螺仪积分的角度。 进行角度拟合前,先接好线。__假设你是用模拟陀螺仪,接线按照ADdevice.h__ __只要接5V、Z(接PE2)、V1(或者V2,看你陀螺仪的安装方式)(接PE3)、GND即可。__ 角度拟合的代码底层里已经写好,参考即可。 角度拟合的时候,将陀螺仪的积分量CarAngle、陀螺仪的输出量CarGyroVal、加速度计的角度CarVacceVal输出到示波器。 __调整角度拟合的情况,参考这段代码,注释写得很清楚,调整0.02这个系数即可。__ __然后看波形,若是过冲(什么是过冲?官方方案写得很清楚),减小这个系数。若是跟随较慢,加大这个系数。__ ``` void Gyro_Result() //这段代码在control.c里面 { s32 result = 0; result = GET_ADVAL(ENC_AD,ENC_X_CH); CarGyroVal=result-gyro_stand_voltage;//依米:-13.5 CarGyroVal*=0.02; //调整这个值来控制拟合角度拟合曲线 0.11 } ``` ``` void Get_Angle() { //使用官方推荐的互补滤波的拟合方式,跟踪速度快是最主要有点,卡尔曼滤波速度太慢 float temp_angle; temp_angle = CarAngleSigma ; DeltaValue = (CarVacceVal - temp_angle)/2.5; //时间补偿常数我们更改到 6 ,仿佛这样能有更稳定的直立效果,官方推荐1~4 3.5 CarAngleSigma = CarAngleSigma + (CarGyroVal + DeltaValue)*0.05; //依米:-CGV //CarGyroVal 的符号可能改变,根据安装陀螺仪位置不同决定, //最后乘以系数0.05原理上应该是0.005(积分周期), //如果更改其他参数相应增大(如陀螺仪系数) CarAngle= CarAngleSigma; } ``` __上面这段代码的CarGyroVal的符号可能要改变。根据你陀螺仪的安装方式__ ### 直立控制 在进行直立控制之前,要先修改平衡位置的角度。(请确定你角度拟合已经完成,陀螺仪积分能较快跟随上加速度计,不过冲)(假设车平衡的时候是50度,则将其修改为50度。其代表的是车直立的__期望角度__) 测平衡位置的角度输出到示波器。同时将车放到差不多平衡,在平衡位置周围,车会要嘛往前倾要嘛往后倾 测完之后,将CAR_ANGLE_SET修改为该角度。(在global.c中) 直立控制就一个函数: ``` void AngleControl() { float fValue; fValue = (CAR_ANGLE_SET - CarAngle) * g_fAngleControlP - CarGyroVal * g_fAngleControlD; //角度和角速度对角度输出的贡献与加速度计和陀螺仪安装方式有关 // 因此g_fAngleControlP 与 g_fAngleControlD 正负 可能需要调整 g_fAngleControlOut = fValue; } ``` 修改两个参数g_fAngleControlP、g_fAngleControlD,正负需要调整。 这些参数都在global.c里面。 调试的时候,先将D设为0。将P设一个数。 怎么看P的正负是不是对的?将车往前倾,电机应该往前转。将车往后倾,车应该往后倾。如果相反负号就是反的。 直立调试这两个参数就可以了。
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
JYWL125机器人#1 · 2017/3/14
bd
bdyzhy9527机器人#2 · 2017/3/14
Bd
LeeSir机器人#3 · 2017/3/14
BD