在我上学期间,我已经制作了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)]
虽然这个系统可以通过数学方法解决,但在2002年,FIRST 857队选择了机械解决方案。我们的控制系统使用三个手柄,它们的X轴形成一个等边三角形,并用球座臂连接代替手柄,形成一个Y形犁头。直接将每个手柄的X轴映射到电机速度,控制系统就被解决了。作为优势,这个系统非常直观易懂,适合普通人操作——向想要前进的方向推动犁头,旋转犁头即可转向。
正如您所认识到的,首先需要找到一个适当的方程来表示任何电机设置的结果运动。根据您对电机速度的控制和反馈水平,我建议您开始编写一个向量方程的过程:
-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 - 这个方法的源代码也是可用的...