我创建了一个三轮全向机器人,如下图所示。现在我不确定如何编程。我想使用一个操纵杆,所以一个x和一个y值。 x和y的值介于-1和1之间,电动机也可以设置为-1到1之间的任意值。如何使用这些数据使机器人基于操纵杆移动而不改变方向?在进行了一些初步研究之后,这似乎是一个复杂的问题,但我希望有一个可以解决的公式。



#1 楼

控制完整的机器人所涉及的数学确实还不错。基本上,这只是高中的三角学,并且知道如何设置问题。

首先,让我们从操纵杆开始。我认为处理操纵杆的最简单方法是将其笛卡尔$(x,y)$读数转换为极坐标$(r,\ phi)$坐标。这将使我们能够更自然地控制完整的机器人。



极坐标很简单:
$$
\ phi_ {joy } = atan2(Y_ {joy},X_ {joy})
$$
$$
$$

现在我们可以将其视为向量,其中角度表示移动方向,向量的长度是所需的速度。



如果要使操纵杆笔直向前推动时达到全速,我们会遇到一些问题。如果将操纵杆向对角推,则$ r $会大于向前时的值。基本上是$ \ sqrt {Y_ {max} ^ 2 + X_ {max} ^ 2}> Y_ {max} $。这是因为操纵杆空间是正方形,而我们想要一个圆形空间。



有很多补偿方法。一些简单的方法可以使对角线全速运动,但这并不好,因为直行不再是全速运动。您也可以简单地限制速度,但是现在您的操纵杆具有较大的死区。我的首选方法是根据$ r $在操纵杆空间中的位置来自适应缩放。您需要将操纵杆当前为$(r,\ phi)$的线延伸到空间的边界。我们称这个$ b $。



此长度的计算仅取决于几个条件(确定与正方形相交的边)和更多的三角函数。这留给读者练习。现在平移速度为:

$$
speed_t = maxspeed * r_ {joy} / b
$$

$ maxspeed $是您希望机器人达到的最大平移速度。请注意,您的操纵杆单元在这里抵消。

现在可以计算出各个车轮的速度。此过程适用于任何类型的带有全轮的机器人。 (但不是麦克纳姆轮。那是不同的)。 3个轮子,4个轮子,以及甚至半径与机器人中心和轮子直径不同的奇数组合。只要所有车轮轴都在一个点会聚。但是,请按照您的问题关注3个轮子。



首先,对轮子进行编号。




然后创建一个坐标系。 (即指定机器人的正面)。现在,让我们对每个车轮轴调用角度。 $ \ alpha_1 $,$ \ alpha_2 $和$ \ alpha_3 $。



将常规设置为正电动机速度将使机器人顺时针旋转。



现在,我们将操纵杆矢量叠加在机器人上。我们在电机轴和操纵杆矢量之间创建一个直角三角形。对于车轮1,它看起来像这样:要获得此数量,我们减去角度,然后使用$ sin $。

$$
$$
$$
M_1 = speed_t * sin(\ theta_1)
$$

请注意,这实际上是车轮应具有的地面速度。因此,您可能需要将其转换为转速(例如rpm)。使用方程式计算圆周,并保持单位直。

就这样。信不信由你,但相同的方程式适用于所有车轮。整个过程仅用于翻译机器人。如果您希望机器人也旋转,则只需向所有3个电机添加一些旋转。