代码之家  ›  专栏  ›  技术社区  ›  Ben

如何控制一个猕猴桃驱动机器人?

  •  8
  • Ben  · 技术社区  · 14 年前

    我正在 FIRST 我高中的机器人团队,我们正在开发一个猕猴桃驱动机器人,有三个 omni wheels 安装在等边三角形配置中,如:

    three numbered omni wheels in an equilateral triangle configuration

    问题在于对机器人进行编程,使其驱动电机,使其沿给定操纵杆输入的方向移动。例如,要“向上”移动,电机1和2的功率将相等,而电机3将关闭。操纵杆的位置是作为一个矢量给出的,我想如果电机也被表示为矢量, vector projection 可能是我需要的。但是,我不确定这是否正确,如果正确,我将如何应用它。我还觉得一个操纵杆位置可能有多种解决方案。任何帮助都将不胜感激。

    4 回复  |  直到 14 年前
        1
  •  4
  •   Unapiedra    14 年前

    我在学校的时候已经制造了9个机器人(1个第一,8个机器人眼)。我们使用的OmniDrive布局与您相同。贝塔的答案看起来是正确的,但是 添加旋转 之后所有车轮:

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

    [这是加了旋转的β公式]

    你需要考虑一下你的发动机的适用范围。我猜它可能需要一个+/-255的脉宽调制信号,因此输入或输出必须进行一定程度的调整。(没那么难…)

    A good paper with details

    要回答您的特定问题: 矢量投影 基本上就是你在这里所做的。你用矩阵来应用它 ,您的操纵杆输入 以及你对电机的输出 o . 因此 o = * ;

    M = [(-0.5 -sqrt(3)/2    +1)
         (-0.5 +sqrt(3)/2    +1)
         (1     0            +1)]
    
        2
  •  2
  •   Beta    14 年前

    首先,让我们定义一些术语。按照通常的惯例,X轴指向右侧,Y轴指向上方(这样3号轮的推力就沿着X轴)。我们称车轮的运动为W W 和W ,每个定义使得w >0表示车轮顺时针旋转。在您的示例中,如果w <0,宽 = W 和W =0,机器人将向+Y方向移动。

    如果所有三个车轮以相同的速度旋转(W = W = W )机器人会原地旋转。我猜你不想那样,所以 旋转的和必须为零:w +W +W = 0 .

    每个轮子的运动有助于机器人的运动;它们作为矢量添加:
    W =-1/2 x-sqrt(3)/2 y
    W =-1/2 x+sqrt(3)/2 y
    W = X

    所以,如果你从操纵杆上知道你想要的x和y,你有w W 和W . 正如我们已经看到的那样, 差异 W之间 和W 是什么驱动了Y运动。他们 总和 在X中驱动运动。

        3
  •  1
  •   Tim Joseph    14 年前

    正如你所认识到的,第一部分将找到一个合适的方程来表示任何电机设置的合成运动。根据你的控制水平和对你的电机速度的反馈,我建议你应该从写一个向量方程开始进行深入的过程:(定义正x为正前方)

    -m1cos(30)+m2cos(30)=x(负是因为1和2的功率必须相同,但向前运动的极性相反)

    m1sin(30)+m2sin(30)-m3=y(1和2的逆时针运动将导致机器人在y中向左移动,3的逆时针运动将导致机器人向右移动)

    你需要加入的另一个输入是机器人的期望旋转,谢天谢地,M1+M2+M3=W(旋转速度)

    你的操纵杆输入会给你x,y和w,所以你有3个方程,有3个未知数。

    从这里,它是联立方程,所以你可能最终得到多个解,但这些通常可以根据可能的电机速度等限制。

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

        4
  •  1
  •   Andrew Meyer    14 年前

    虽然这个系统可以用数学来解决,但在2002年,第一个团队857选择用机械方法来解决它。我们的控制系统使用三个操纵杆,它们的X轴构成一个等边三角形,把手被球窝臂取代,球窝臂与Y形轭相连。将每根杆的X轴直接映射到电机转速上,解决了控制系统的问题。作为一个优势,这个系统对于外行来说是非常直观的——把轭推到你想去的方向,旋转它来转动。