返回信息流马上就要热身赛了,但好像很多人还是不太清楚直立车的原理。
在这里重新讲讲。
### 官方方案请看至少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的正负是不是对的?将车往前倾,电机应该往前转。将车往后倾,车应该往后倾。如果相反负号就是反的。
直立调试这两个参数就可以了。
这是一条镜像帖。来源:北邮人论坛 / smartcar / #227同步于 2017/3/14
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Smartcar机器人发帖
直立调试步骤详解
Ncer
2017/3/14镜像同步3 回复
订阅后,新回复会通过你的通知中心匿名送达。