OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 11998|回复: 20

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

[复制链接]

2

主题

9

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2018-8-9
在线时间
4 小时
发表于 2018-8-11 15:26:57 | 显示全部楼层 |阅读模式
5金钱
用stm32f407zgt6做一个小车全向轮地盘(三个电机),通过编码器读取电机值通过pid算法联合陀螺仪让车走直线不偏离轨道,求大神帮忙

超级截屏_20180808_160821.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

9

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2018-8-9
在线时间
4 小时
 楼主| 发表于 2018-8-11 15:46:14 | 显示全部楼层
回复

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10569
金钱
10569
注册时间
2017-2-18
在线时间
1913 小时
发表于 2018-8-11 17:35:56 | 显示全部楼层
帮顶!!
回复

使用道具 举报

4

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2018-2-12
在线时间
23 小时
发表于 2018-8-11 18:33:08 | 显示全部楼层
789CAA60-13FB-4638-94D5-8A69D0DD5FEF.png 多少钱啊,我卖你啊

回复

使用道具 举报

4

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2018-2-12
在线时间
23 小时
发表于 2018-8-11 18:37:53 | 显示全部楼层
这种事情得自己来,不然就算拿了我的程序你也改不来的。通过轮子的编码器来定位是不可取的,因为轮子绝对会打滑。一般都是用一对正交全向轮配合编码器来做的定位器,东大有卖,淘宝搜索OPS-9,价格大约3000多一点,但是效果一般,精度大概1cm/m并且伴有零漂,自己做效果会更好一点。
回复

使用道具 举报

2

主题

9

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2018-8-9
在线时间
4 小时
 楼主| 发表于 2018-8-13 17:26:59 | 显示全部楼层
HexAI 发表于 2018-8-11 18:33
多少钱啊,我卖你啊

就是想要一个读取编码器值通过pid算法让速度维持在一个值的程序(是用f4的固件库写的)
最好能结合陀螺仪看偏离多少然后转回来,让车走直线不用知道走多少
回复

使用道具 举报

2

主题

9

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2018-8-9
在线时间
4 小时
 楼主| 发表于 2018-8-13 17:27:37 | 显示全部楼层
HexAI 发表于 2018-8-11 18:37
这种事情得自己来,不然就算拿了我的程序你也改不来的。通过轮子的编码器来定位是不可取的,因为轮子绝对会 ...

就是想要个程序我自己看看,价钱好说
回复

使用道具 举报

4

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2018-2-12
在线时间
23 小时
发表于 2018-8-15 00:47:55 | 显示全部楼层
电机是靠驱动器还是H桥?
Yaw轴锁定只要一个P控制的位置式PID,H桥电机控制的话PI控制的增量式PID即可。
关键是陀螺仪,民用的性能太差,滤波和积分做得好的话每分钟零漂可以1度以下,好的陀螺仪就比较贵了,一般都要5位数的。
底盘买套件的话还行,自己做1W最少了。程序倒是不值几个钱
程序明天给你贴一点让你先参考一下
回复

使用道具 举报

2

主题

9

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2018-8-9
在线时间
4 小时
 楼主| 发表于 2018-8-17 17:05:37 | 显示全部楼层
HexAI 发表于 2018-8-15 00:47
电机是靠驱动器还是H桥?
Yaw轴锁定只要一个P控制的位置式PID,H桥电机控制的话PI控制的增量式PID即可。
...

电机是靠驱动,其实就是想让车子走直线不偏离轨道,拜托老铁了
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2018-8-17 17:36:16 | 显示全部楼层
陀螺仪给不了你绝对位置, 这方案行不通, 想想别的吧
回复

使用道具 举报

4

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2018-2-12
在线时间
23 小时
发表于 2018-8-17 19:41:30 | 显示全部楼层
本帖最后由 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

回复

使用道具 举报

4

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2018-2-12
在线时间
23 小时
发表于 2018-8-17 19:52:55 | 显示全部楼层
edmund1234 发表于 2018-8-17 17:36
陀螺仪给不了你绝对位置, 这方案行不通, 想想别的吧

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

使用道具 举报

8

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2018-1-26
在线时间
9 小时
发表于 2018-8-19 08:59:05 | 显示全部楼层
HexAI 发表于 2018-8-11 18:37
这种事情得自己来,不然就算拿了我的程序你也改不来的。通过轮子的编码器来定位是不可取的,因为轮子绝对会 ...

大哥,程序能为我吗?价钱好商量
回复

使用道具 举报

4

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2018-2-12
在线时间
23 小时
发表于 2018-8-19 14:40:41 | 显示全部楼层
深海我 发表于 2018-8-19 08:59
大哥,程序能为我吗?价钱好商量

程序要改,我用的无刷电机,要是诚心想要把底盘寄给我我调完给你
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2019-1-25
在线时间
0 小时
发表于 2019-1-25 18:55:15 来自手机 | 显示全部楼层
HexAI 发表于 2018-8-19 14:40
程序要改,我用的无刷电机,要是诚心想要把底盘寄给我我调完给你

您好,程序卖吗
回复

使用道具 举报

1

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2019-4-25
在线时间
23 小时
发表于 2019-4-28 14:54:01 | 显示全部楼层
速度分解+速度控制pi函数+陀螺仪的偏航角p函数
回复

使用道具 举报

0

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2019-7-19
在线时间
49 小时
发表于 2019-10-29 17:14:24 | 显示全部楼层
回复

使用道具 举报

6

主题

1127

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1656
金钱
1656
注册时间
2019-8-15
在线时间
102 小时
发表于 2019-11-4 16:41:06 | 显示全部楼层
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2019-11-3
在线时间
4 小时
发表于 2019-11-26 15:05:04 | 显示全部楼层
HexAI 发表于 2018-8-17 19:41
位置式PID

增量式PID

您好,请问您的程序里面读取陀螺仪参数是用的中断吗?我是用的串口(TTL)+中断读取的,但是一直卡在中断出不来,方便看一眼您的中断吗?能解决我这个问题的话钱好说哈~
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2019-12-3
在线时间
1 小时
发表于 2019-12-3 10:31:43 | 显示全部楼层
HexAI 发表于 2018-8-17 19:52
是的,陀螺仪只能给出角速度,并且不做任何处理的话误差是很大的,包括零漂、零偏,非线性,温漂,内部AD ...

现在买了一个姿态传感器模块,输出Yaw无漂移,很稳定,精度也高,想结合编码器PID控制小车长距离直线行走,偏移较少,大概每5m偏移个1cm这样,我微信1248071080
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2019-12-3
在线时间
1 小时
发表于 2019-12-3 10:32:18 | 显示全部楼层
HexAI 发表于 2018-8-19 14:40
程序要改,我用的无刷电机,要是诚心想要把底盘寄给我我调完给你

现在买了一个姿态传感器模块,输出Yaw无漂移,很稳定,精度也高,想结合编码器PID控制小车长距离直线行走,偏移较少,大概每5m偏移个1cm这样,我微信1248071080
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-24 02:37

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表