打印

两轮自平衡机器人,用什么传感器?

[复制链接]
16415|64
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
毕业设计想弄个两轮自平衡机器人,思路是:每过一定时间用传感器测试机器人相对垂直方向的倾角,然后通过CPU计算出给电动机的能量调整机器人的平衡,不知该用哪种传感器测直立机器人的瞬间倾角,请大大们出出主意。    还有就是该用哪种电机比较合适呢?   步进电机虽然好控制,但是他的步进角是固定的,分辨率是否够呢?

相关帖子

来自 2楼
123jj| | 2010-11-24 17:08 | 只看该作者
比较通用简单的方案是:

用 加速度传感器+角速度传感器 测量瞬间倾角,传感器的型号无关系,价格贵的性能好,便宜的杂波大,稳定性差一点。

驱动一般用PWM控制直流电机,调整机器人状态。

步进电机虽然好控制,但是在两轮自平衡机器人中不合适。

使用特权

评论回复
板凳
程序医人|  楼主 | 2010-11-24 11:38 | 只看该作者
坐等中。

使用特权

评论回复
地板
程序医人|  楼主 | 2010-11-24 13:43 | 只看该作者
就没人知道吗?这里不会都是玩奥迪双钻四驱赛车的吧?

使用特权

评论回复
5
123jj| | 2010-11-24 17:18 | 只看该作者
推荐大盆友索伦之眼做的两轮自平衡机器人,加速度传感器用MMA7260,角速度传感器用ENC03。

详见:
[侃单片机] 主题:双轮自平衡小车~
https://bbs.21ic.com/viewthread.php?tid=173418&highlight=

使用特权

评论回复
6
程序医人|  楼主 | 2010-11-24 22:24 | 只看该作者
谢谢!学习中。

使用特权

评论回复
7
程序医人|  楼主 | 2010-11-26 18:40 | 只看该作者
这个角速度传感器怎么和加速度传感器组合起来测出倾角呢?  JJ能指点下吗? 我不是自动化专业的一点不懂。
  毕业设计,急急急!!:Q

使用特权

评论回复
8
xuyiyi| | 2010-11-26 19:35 | 只看该作者
123jj推荐的  

[侃单片机] 主题:双轮自平衡小车~
https://bbs.21ic.com/viewthread.php?tid=173418&highlight=

怎么LZ不看?下面内容摘自 索伦之眼 之 双轮自平衡小车~

使用特权

评论回复
9
xuyiyi| | 2010-11-26 19:38 | 只看该作者
我在这里就说下大概的流程吧。
整个系统分为三大部分。
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作用量就能轻松让小车站起来。

使用特权

评论回复
10
xuyiyi| | 2010-11-26 19:40 | 只看该作者
第二部分:电机数据运算.
其实网上关于这部分的资料是最多的。我采用的是经典的PID算法。
理论我不讲了。我只讲讲实现过程。
这里如果先试试车体的稳定性,我们先只使用P作用。
现在以能立住为目标。

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是阻碍小车姿态变化的。

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

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

使用特权

评论回复
11
xuyiyi| | 2010-11-26 19:40 | 只看该作者
以上内容摘自 索伦之眼 之
[侃单片机] 主题:双轮自平衡小车~
https://bbs.21ic.com/viewthread.php?tid=173418&highlight=

使用特权

评论回复
12
程序医人|  楼主 | 2010-11-26 20:11 | 只看该作者
有点懂了, 非常感谢!   要用角速度计测出很多次角速度后才能进行积分得出倾角吧?机器人调整平衡的时间间隔很短,那样传感器的速度能跟上吗?

使用特权

评论回复
13
程序医人|  楼主 | 2010-11-26 20:12 | 只看该作者
有点懂了, 非常感谢!   要用角速度计测出很多次角速度后才能进行积分得出倾角吧?机器人调整平衡的时间间隔很短,那样传感器的速度能跟上吗?

使用特权

评论回复
14
xuyiyi| | 2010-11-26 20:18 | 只看该作者
理解错误!!!
每次角速度计测出值 加上以前 角速度计测出值之累加值(即积分),就得出当前倾角值!
以后每测一次角速度计值,和以前的 角速度计测出累加值(即积分)再积分,都能得到当前倾角值!

这样,机器人调整平衡的时间间隔很短,传感器的速度照样能跟上。

使用特权

评论回复
15
程序医人|  楼主 | 2010-11-26 20:36 | 只看该作者
原来是这样啊,也不算什么积分了,应该叫积累吧。这样的话不能保证每次测量间隔期间的速度都是匀速的啊。要是角速度变化很大误差不就是非常大了。

使用特权

评论回复
16
程序医人|  楼主 | 2010-11-26 20:38 | 只看该作者
到底有多少人做成功了呢,我怕做失败了毕业设计完不成,还要拖累我们这组人啊。   要是很难做我就换个题目了,况且不是电子专业的,不是自动化的。

使用特权

评论回复
17
奇兵| | 2010-11-26 20:44 | 只看该作者
呵呵 不错!

使用特权

评论回复
18
程序医人|  楼主 | 2010-11-26 20:49 | 只看该作者
哎 其实我最喜欢的应该是机电吧,高中毕业以为机电就是搞那些电动机等等的巨型机器,所以就没敢报。现在感觉太幼稚了。

使用特权

评论回复
19
xuyiyi| | 2010-11-26 20:53 | 只看该作者
原来是这样啊,也不算什么积分了,应该叫积累吧。这样的话不能保证每次测量间隔期间的速度都是匀速的啊。要是角速度变化很大误差不就是非常大了。 ...
程序医人 发表于 2010-11-26 20:36


还是理解错误!!!

反复积累累加),数学上就称作 积分

每次测量间隔不相等没关系,因为 角速度计输出变化值角度变化值 成正比,其 积分值就是当前相对角度(位置)值

使用特权

评论回复
20
程序医人|  楼主 | 2010-11-26 21:09 | 只看该作者
还是理解错误!!!

反复积累(累加),数学上就称作 积分!

每次测量间隔不相等没关系,因为 角速度计输出变化值 和 角度变化值 成正比,其 积分值就是当前相对角度(位置)值。 ...
xuyiyi 发表于 2010-11-26 20:53
假如每次测量角速度间隔为10ms,开始角速度为a,这次测量角速度为b,那么角度变化值为多少呢?    b*1ms  或 [(b+a)/2]*1ms  都是有误差的吧   不过感觉后者的误差很小吧。

使用特权

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

本版积分规则

个人签名:程序医人=《程序医人》不是《程序匠人》!

1

主题

220

帖子

0

粉丝