【问题标题】:How to control a kiwi drive robot?如何控制猕猴桃驱动机器人?
【发布时间】:2011-04-14 11:09:57
【问题描述】:

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

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

【问题讨论】:

  • 您可以将方向矢量表示为两个运动矢量的总和,因为它们形成了完整的基础。您应该使用某些标准省略第三个向量。那么你应该找到独特的解决方案。

标签: language-agnostic math vector robotics


【解决方案1】:

虽然这个系统可以数学求解,但在 2002 年,FIRST Team 857 选择了机械求解。我们的控制系统使用了三个操纵杆,它们的 X 轴形成一个等边三角形,手柄被替换为与 Y 形轭相连的球窝臂。将每个摇杆的X轴直接映射到一个电机速度,控制系统已经解决。作为一个优势,这个系统对于外行人来说运行非常直观——将轭推向你想要去的方向,旋转它来转动。

【讨论】:

    【解决方案2】:

    我在学校期间已经制造了 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 信号,因此必须对输入或输出进行一些调整。 (没那么难……)

    A good paper with details

    回答您的具体问题:矢量投影本质上就是您在这里所做的。您可以通过矩阵 M、操纵杆的输入 I 和电机的输出 O 来应用它。因此 O = M * I;

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

    【讨论】:

      【解决方案3】:

      首先让我们定义一些术语。按照通常的约定,X 轴将指向右侧,y 轴将指向上方(因此轮子 3 的推力沿 X 轴)。我们将轮子的运动称为 W1、W2 和 W3,每个都定义为 Wi sub>> 0 表示轮子顺时针方向旋转。在您的示例中,如果 W12 = 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 运动的原因。它们的 sum 驱动 X 中的运动。

      【讨论】:

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

      正如您所认识到的,第一部分将找到一个合适的方程来表示任何电机设置的合成运动。根据您对电机速度的控制和反馈水平,我建议您完成的过程应该从编写矢量方程开始:(将正 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 就是一个例子——这个方法的源代码也是可用的......

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-02
        • 1970-01-01
        • 2016-04-03
        • 2021-06-30
        • 2020-02-18
        • 1970-01-01
        相关资源
        最近更新 更多