如何控制奇异轮驱动机器人?

8

我在高中的FIRST机器人团队,我们正在致力于开发一款奇异轮驱动机器人,它由三个全向轮构成一个等边三角形,如下图所示:

三个编号全向轮形成等边三角形的配置

问题是如何编写机器人的程序使得电机能够以给定的操纵杆输入方向移动。例如,为了向“上”移动,电机1和2将被平等地供电,而电机3将关闭。操纵杆位置表示为矢量,如果电机也用向量表示,则可能需要使用向量投影。但是,我不确定这是否正确,如果正确,应该如何应用它。我还有一种感觉,即“操纵杆位置可能有多个解”。非常感谢任何帮助。


你可以将方向向量表示为两个电机向量的和,因为它们构成完整的基础。你应该使用一些标准省略第三个向量。然后你应该得出唯一的解决方案。 - Anycorn
4个回答

4

在我上学期间,我已经制作了9个机器人(1个FIRST和8个RoboCup)。我们使用的是与你们相同的全向驱动布局。Beta的回答看起来是正确的,但之后需要将所有轮子旋转

W1 = -1/2 X - sqrt(3)/2 Y + R 
W2 = -1/2 X + sqrt(3)/2 Y + R
W3 = X + R

[这是Beta的公式,添加了一些旋转]

你需要考虑电机可用范围。我猜它可以接受+/-255的PWM信号,因此输入或输出必须进行适当调整。(这并不难...)

一篇详细的论文

回答你具体的问题: 向量投影 就是你在这里所做的事情。你通过拥有一个矩阵 M,从操纵杆获得输入 I,并将输出传递给电机 O 来应用它。因此,O = M * I;

M = [(-0.5 -sqrt(3)/2    +1)
     (-0.5 +sqrt(3)/2    +1)
     (1     0            +1)]

2

虽然这个系统可以通过数学方法解决,但在2002年,FIRST 857队选择了机械解决方案。我们的控制系统使用三个手柄,它们的X轴形成一个等边三角形,并用球座臂连接代替手柄,形成一个Y形犁头。直接将每个手柄的X轴映射到电机速度,控制系统就被解决了。作为优势,这个系统非常直观易懂,适合普通人操作——向想要前进的方向推动犁头,旋转犁头即可转向。


2
首先,让我们定义一些术语。按照通常的惯例,X轴指向右侧,y轴指向上方(使第三个轮子的推力沿X轴)。我们将称轮子的运动为W1、W2和W3,每个被定义为Wi > 0表示该轮顺时针旋转。在你的例子中,如果W1 < 0,W2 = W1,W3 = 0,那么机器人将向+Y方向移动。
如果三个轮子以相同的速率旋转(W1 = W2 = W3),则机器人会原地旋转。我猜你不想要这样,所以旋转的总和必须为零:W1 + W2 + W3 = 0
每个轮子的运动都对机器人的运动做出贡献;它们作为矢量相加:
W1 = -1/2 X - sqrt(3)/2 Y
W2 = -1/2 X + sqrt(3)/2 Y
W3 = X
所以,如果你知道手柄的期望X和Y值,你就有了W1、W2和W3。正如我们已经看到的,W1和W2之间的差异驱动Y方向的运动。它们的总和驱动X方向的运动。

我知道这是一个非常老的答案,但你从哪里得到了0.5和sqrt(3)/2呢?我认识0.5是sin(pi/6),sqrt(3)/2是cos(pi/6),但你怎么知道在这里使用这些值呢? - Nathan
@Nathan:这只是等边三角形的向量几何,将W1向量分解为x和y分量。 - Beta

1

正如您所认识到的,首先需要找到一个适当的方程来表示任何电机设置的结果运动。根据您对电机速度的控制和反馈水平,我建议您开始编写一个向量方程的过程:

-M1Cos(30)+M2Cos(30)=X(负号是因为1和2必须具有相同的功率大小,但极性相反以实现前进运动)

M1Sin(30)+M2Sin(30)-M3 = Y(1和2的逆时针运动将导致机器人向左移动,在3的逆时针运动将导致机器人向右移动)

您需要添加到此方程中的另一个输入是机器人的期望旋转,幸运的是,M1+M2+M3 = W(旋转速度)

您的操纵杆输入将给您X、Y和W,因此您有3个未知数的3个方程。

从这里开始就是同时方程,因此您可能会得到多个解,但这些解通常可以基于可能的电机速度等进行限制。

一个例子是rec::robotino::com::OmniDrive Class - 这个方法的源代码也是可用的...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接