用stm32f407zgt6做一个小车全向轮地盘(三个电机)通过编码器读取电机值通过pid算法联合陀螺仪让车走直线不偏离轨道,求大神

2019-07-20 02:19发布

用stm32f407zgt6做一个小车全向轮地盘(三个电机),通过编码器读取电机值通过pid算法联合陀螺仪让车走直线不偏离轨道,求大神帮忙

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
15条回答
HexAI
1楼-- · 2019-07-20 17:26
 精彩回答 2  元偷偷看……
nidechuizi
2楼-- · 2019-07-20 22:34
HexAI 发表于 2018-8-15 00:47
电机是靠驱动器还是H桥?
Yaw轴锁定只要一个P控制的位置式PID,H桥电机控制的话PI控制的增量式PID即可。
...

电机是靠驱动,其实就是想让车子走直线不偏离轨道,拜托老铁了
edmund1234
3楼-- · 2019-07-20 23:33
 精彩回答 2  元偷偷看……
HexAI
4楼-- · 2019-07-21 02:10
本帖最后由 HexAI 于 2018-8-17 19:44 编辑

位置式PID
PID_P.png
增量式PID
PID_Inc.png

MPU6050初始化
MPU6050.png
读取与积分(上点时持续收集10000个数据来统计零漂并在后期减去)
使用的为STM32的硬件 I2C + 中断,软件I2C或者轮询I2C太占CPU
MPU6050 Int.png
滤波和姿态融合都没贴上去,然后PID只截取了部分代码,不包括一些核心算法

速度公式如下,
Underpan.Speed_Wheel_1 =        -1.0f        *        Underpan.Speed_x
                                                -SQRT_3        *        Underpan.Speed_y
                                                +Ratio        *        Underpan.Speed_a;
Underpan.Speed_Wheel_2 =        +2.0f        *        Underpan.Speed_x
                                                +ZERO        *        Underpan.Speed_y
                                                +Ratio        *        Underpan.Speed_a;
Underpan.Speed_Wheel_3 =        -1.0f                *        Underpan.Speed_x
                                                +SQRT_3        *        Underpan.Speed_y
                                                +Ratio        *        Underpan.Speed_a;
如果前进的话,那么
Speed_x = 0;
Speed_y = 随便一个你想要的速度,当然你有定位器的话可以根据横坐标和PID进行纠正;
Speed_a = PID_Regular_Cacl(&PID_Underpan_Yaw);
利用PID来纠正角度误差

你没有正交全向轮定位系统,有的话可以如下来获得基于上电时刻的实时坐标
初始化:
EncoderConfig.png

坐标更新 每1ms
Encoder.png


同时屏幕上可以实时显示坐标,电机速度电流位置,PID参数并可实时调节
LCD.png

HexAI
5楼-- · 2019-07-21 05:50
edmund1234 发表于 2018-8-17 17:36
陀螺仪给不了你绝对位置, 这方案行不通, 想想别的吧

是的,陀螺仪只能给出角速度,并且不做任何处理的话误差是很大的,包括零漂、零偏,非线性,温漂,内部ADC精度等等一系列因素造成的误差,即使陀螺仪做好了你也只能通过对角速度的积分得出当前的欧拉角(包括了你所需要的前进方向,我们管它叫偏航角或者Yaw轴),走直线的话通过PID可以使得你的Yaw轴误差在一定的范围内但是仍然不能保证是很直的线,比起陀螺仪复杂的原始数据处理,其实两个平行与墙面的激光测距模块倒是更好的选择,可以保证到墙壁的距离一定,同时一前一后地放置方法甚至不需要陀螺仪就能够纠正航向角偏差(单纯的通过PID让底盘上前后两个点到墙壁距离都相等即可)。但是工业级激光距离传感器的价格我担心楼主会受不了,你可以先试试ST的VL53L0X,正点原子有卖,稍微改一下就可以挂载多路了,价格才四五十的样子
深海我
6楼-- · 2019-07-21 09:41
 精彩回答 2  元偷偷看……

一周热门 更多>