打印

双轮自平衡小车~

[复制链接]
楼主: 索伦之眼
手机看帖
扫描二维码
随时随地手机跟帖
81
车子的平衡能力貌似还不错!

使用特权

评论回复
82
xidao| | 2010-5-22 08:51 | 只看该作者
哈哈,回weihualong,偶确实做得不怎么样~
这只是一个beta版而已,整个小车前前后后所用的时间还不到一个星期。

要像你说的倒下还能站起来,这个是需要资金量的。
你看看偶的电机就知道了。50元的普通减速电机。200RPM速度。你要是能使用这个电机让他站起来,那我非常非常佩服你!

PS:老外使用我这配置绝对站不起来,这是力学原理,学过力学的人一分析就知道了!:P

使用特权

评论回复
83
xwj| | 2010-5-22 09:19 | 只看该作者
79楼的视频倒下去轮子都悬空了,怎么可能再站起来?

要想能自己站起来的话,轮子必须得有足够的抓地力来克服自重的扭矩,或者倒下去时重心比轴高,然后利用大的加速度冲起来,
很明显,两种方法对轮子、电机都有很高的要求,前者对轮子要求更高,而后者只能有一边能爬起来,所以不用考虑。


附79楼的视频:

使用特权

评论回复
84
xwj| | 2010-5-22 09:31 | 只看该作者
另外,看LZ的控制器用的是ATMEGA168,这个是很便宜的8位单片机啦,自带多路10bit ADC,属于很常用的IC了,可不是ARM。(当然不止2元钱)

个人觉得,这玩意最贵、最难的还是传感器和机械结构,这些才是花钱的大头,比如“3轴加速度+2轴陀螺仪”得多少钱?
机体开模、电机+ 减速结构开模、电机驱动IC等加起来多少钱?

在此基础上何必再去省单片机的那几块钱了???
(个人DIY当然是用手头有的现成IC,一般资源都会留的很富裕的,像LZ要省钱的话完全可以把单片机换成便宜的ATTINY26等)

使用特权

评论回复
85
algr| | 2010-5-22 10:37 | 只看该作者
79楼 单片机用那么贵的,还ARM,自己玩还可以,做产品赚钱,根本没竞争力,我们都是用两元以下的
单片机(自带AD),3轴加速度+2轴陀螺仪,要不然没的做。

我们自己diy,做个大点的平台,玩多一点的东西,2元的cpu???

ps:市场上赚钱的产品有两类,一类就是薄利多销,成本优势
另一类是技术垄断,稳定性,可靠性。。。成本根本就不是重点。。。

使用特权

评论回复
86
5880527| | 2010-5-22 11:43 | 只看该作者
就是,在校学生能做到这样就很不错了,很多行业不在乎这个成本的

使用特权

评论回复
87
xiao0310hua| | 2010-5-22 11:47 | 只看该作者
围观下~:P

使用特权

评论回复
88
jaylondon| | 2010-5-22 17:53 | 只看该作者
没想到这个帖子这么热 !!
楼主
我今天的小车也站起来了!
用的还是我自己的那套方案
稳定性还没有你的那么出色,站立的时候有一些抖动
这个我慢慢还在调

但是我的抗干扰性比你的要稍微好些
用力推车子,车子晃荡个几下也能重新站稳

现在车子是外接电源的,电源线对平衡总是有些影响
现在要解决这个问题
稍后放上资料

使用特权

评论回复
89
索伦之眼|  楼主 | 2010-5-22 19:18 | 只看该作者
呵呵~鼓励一下LS的!
我即将闭关修炼ARM了~
可能以后不会常来这里了~
你有什么问题想交流的话可以EMAIL我。
EMAIL:wuyuan2012     gmail.com (把空格换成@就好了)

使用特权

评论回复
90
jaylondon| | 2010-5-22 20:45 | 只看该作者
呵呵,又见LZ
我刚给小车加了自带电源
用了8节干电池..
效果非常之好
经过几次晃动后,可以一动不动的站立。
抗干扰性也很好,45度左右的干扰都没问题

唯一缺点就是比较耗电,电流峰值大概有1A。

稍后给大家上个资料吧。
还在调试中...

最近实验室入手了块Cortex-M3 也正准备玩玩呢
和楼主一起努力呀!

使用特权

评论回复
91
jaylondon| | 2010-5-22 20:45 | 只看该作者
我准备再加个遥控部分 这样比较有实用性

使用特权

评论回复
92
kubuco| | 2010-5-23 22:04 | 只看该作者
持续关注。

使用特权

评论回复
93
AV693| | 2010-5-26 07:52 | 只看该作者
角加速传感器检测的是哪个轴啊?不会是垂直轴吧,车子都在自己打转了

使用特权

评论回复
94
索伦之眼|  楼主 | 2010-5-26 13:49 | 只看该作者
本帖最后由 索伦之眼 于 2010-5-28 22:32 编辑

几天没来,没想到被置顶了~
什么资料都没发布,却被置顶,有点囧。。。
很多网友问过我一些代码问题,虽然想回复,但是因为硬件差距太大,真的不好说。
熟话说,授之以鱼,不如授之以渔。
我在这里就说下大概的流程吧。
整个系统分为三大部分。
1.角度采集  
2.电机数据运算  
3.电机驱动


先说第一部分:角度采集.
这里我采用两种传感器:一种是陀螺仪(ENC03),另一种是加速度计(MMA7260).其实任何其中一
种都可以得出现在的车体倾斜角度值。为什么我们要选择两种呢?原因是这里有一种思想在里面:互补。

先说下陀螺仪:
陀螺仪属于测量旋转运动的传感器,其输出的是角度变化速度。即旋转的越快,输出量越大(不能
无限大,传感器上有极限指标);旋转的越慢,输出量越小(最小为0,即静止时)。
我们可以通过积分运算(累加),得出相对角度数据,这里假设为A。但是我们知道,积分是有严重
的累积误差的。我们可以一句话概括:陀螺仪短时间准确,长时间不准确。
再说下加速度计:
加速度计属于测量线性运动的传感器,其输出的是传感器沿某个轴向直线运行时的速度变化量。即
速度变化的越快,输出量越大(不能无限大,传感器上有极限指标);速度变化的越慢,输出量越小(最小
为0,即静止时)。这种特性用来做惯导研究很好。但是如何和我们的角度倾斜量相关呢?
我们知道加速度计测量的是加速度量,而地球上的物体都是受万有引力制约的,即我们时刻都受到
一个大小为g的竖直向下的加速度的作用。可能很多人都快看不下去了,我就直接贴图说明吧,如下:


我们通过反正弦运算,可以得到加速度计当前与重力方向的夹角数据,这里假设为B。
但是又有新的问题了。加速度计是测量线性运动的,即其对震动非常敏感。电机转动,所产生的震
动是不可小视的。所以其会有很大的噪声。而且当加速度计运动时,其输出量是运动加速度与重力加速度的
混合数据,这会严重影响角度计算的准确性。其特点用一句话概括:加速度计长时间较准确,短时间误差大。

现在我们重新审视一下,这两个传感器恰恰成互补关系。要得出比较准确的、长时间稳定的角度数
据,这两种传感器是缺一不可的。这也就是贯穿我整个数据采集过程的基本思想--互补。
我的具体做法是偏向于使用陀螺仪数据。原因是陀螺仪数据的噪声较小,短时间内误差小。而其长
时间的积分误差怎么解决呢?我的方法是使用加速度计角度数据B的平均值来校准陀螺仪的角度数据A.
直接伪代码如下:
A += (B-A)/k;
这里的K是衰减倍数。
其实就这么简单,这就实现了比较准确的角度数据的采集工作。

下面说下滤波问题。我们知道加速度计的噪声很大,我们这里采用卡尔曼的思想来滤波,另一种说法是数据融合。
//要上课去了,上完课继续。。。
其实这里就是两种传感器的典型互补了,用其算出来的角度数据相对来说很准了。
设加速度计换算出的角度数据为M,陀螺仪只采数据为s,陀螺仪相对加速度计的因子为k,上次加速度计经过滤波后的角度数据为M_2,卡尔曼
增益选择固定值为g.滤波后的角度数据为real_M;
那么滤波伪代码:
Temp=M_2+s*k;
real_M = Temp*g+(m-Temp)*(1-g);
M_2 = real_M ;

其实整个小车中,最关键、也最难的地方就是角度采集问题。准确的角度,只要一个P作用量就能轻松让小车站起来。

使用特权

评论回复
95
索伦之眼|  楼主 | 2010-5-26 17:22 | 只看该作者
本帖最后由 索伦之眼 于 2010-5-29 08:25 编辑

第一部分:电机数据运算.
其实网上关于这部分的资料是最多的。我采用的是经典的PID算法。
理论我不讲了。我只讲讲实现过程。
这里如果先试试车体的稳定性,我们先只使用P作用
现在以能立住为目标。
//先吃饭~
//PS:刚参加了全国机械大赛黑龙江省赛,所以没时间过来写。结果还行,一等奖;小庆祝一下~^_^
P,就是比例。假设当前角度偏差为error,目标角度为aim,比例系数为p,那么
PID计算伪代码为PID_result = (error-aim)*p;//(这里aim=0,即竖直状态)。
可以看出,如果车体倾斜度越大,那么计算出的PID的P值比例性的增大。

举实例说明(具体参数与车体和电机等有关):
我的电机为[email=200RPM@12V]200RPM@12V[/email],PWM的调制精度为-255~+255,那么当我的P参数p=30时,小车基本能够立住了(不足点就是总喜欢前后跑动)。

其实就这么简单。

剩下的I和D参数的调制方法,大家可以查阅网上的丰富的资料。I是减小误差的,D是阻碍小车姿态变化的。

3.电机驱动
这部分是最基础的。我才用的是L298驱动芯片。加了光耦隔离(原因是减速电机正反转切换时,产生的反电动势会造成单片机死机)。电机控制器为ATmega8,脉宽调制是使用的其内部自带的硬件PWM。为了简单起见,直接给两个轮子临时加上了码盘,而ATmega8也承担了由码盘数据得出电机转速和行程的数据任务。其与控制器ATmega168之间使用TWI(其实就是I2C)协议通讯。

这就是我目前的整体做法。更多功能请网友们自行加载。
最后希望各位的小车被推倒后还能自己立起来。^_^

有问题请EMAIL:

wuyuan2012   gmail.com(空格换成@)。

使用特权

评论回复
96
xuyiyi| | 2010-5-27 05:02 | 只看该作者
呵呵!
索伦之眼 小友的饭局也够长的了。
不过俺有耐心,静等 索伦之眼 小友 继续授之以渔。

使用特权

评论回复
97
odqqdo| | 2010-5-27 06:38 | 只看该作者
看不见图

使用特权

评论回复
98
cheer_zeng| | 2010-5-28 09:47 | 只看该作者
真想自己也弄一个~~~

使用特权

评论回复
99
jaylondon| | 2010-5-28 21:57 | 只看该作者
哇哦,楼主开源咯~

使用特权

评论回复
100
xuyiyi| | 2010-5-29 06:34 | 只看该作者
//PS:刚参加了全国机械大赛黑龙江省赛,所以没时间过来写。结果还行,一等奖;小庆祝一下~^_^
索伦之眼 发表于 2010-5-26 17:22


恭喜恭喜!同庆同庆!:)

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则