第一部分 编程基础 | 第4章:精确地移动机器人
在本章中,你将利用电机模块精确地运转电机指定的角度,而不是指定的时间。你将学习什么是角度,如何去测量,如何利用角度精确地移动你的机器人指定的距离。在完成本章的学习后,你将能够更精确的控制你的机器人。
角度传感器
机器人用传感器来感知周围的世界,就像人类用五官来感知周围的世界一样。机器人的传感器将读取到的数据传给处理器(在乐高BOOST中,处理器位于集线器内),就像人类的五官将收集到信息传递给大脑一样。
乐高BOOST集线器内置两个电机,每个电机都带一个角度传感器,用来测量电机转动的角度。外部电机同样带有角度传感器。角度传感器能够测量电机转动的角度,从而使集线器能够精确地控制电机的角度和速度。下面我们来看一下这能给我们的机器人带来什么。
定距基底移动转向模块

该模块中角度值的设置方式如下图所示。

上图中三个示例的角度值分别是360度、354度和918度。请注意中心位置处显示的已完整转动的圈数,每完整转动一圈是360度。
观察角度旋转
让我们来看看如果通过设定角度值来控制马里奥,首先需要在马里奥的轮子上做个标记(如下图所示)以便于观察。在开始程序前,旋转马里奥的轮子,让刚才做好的标记位于最上方。

现在你可以在定距基底移动转向模块里输入不同的角度值,来观察马里奥轮子的转动角度。你可以分别尝试输入90度、180度、360度等,看看轮子的实际转动效果(结果见下图)。

移动一个精确的距离
我们已经知道如何用角度值控制轮子转动了,但是还不清楚如何控制马里奥的移动距离。比如想要让马里奥移动157毫米的话,需要转动多少角度?
想要知道这个问题的答案,需要做点数学题。下图展示了如何测量马里奥轮胎的直径D(结果是51毫米),假设我们想要马里奥移动的距离为X。

按照距离计算所需角度
移动距离与轮胎转动角度的数学关系如下(记为公式1):
有了上面的公式,我们现在可以计算前面问题的答案,即如何让马里奥精确移动157毫米。下面是计算步骤:
轮胎转动角度 = 115 × 157毫米 ÷ 51毫米 = 354
也就是说,想要让马里奥精确移动157毫米,需要在角度设定值处填写354度。如果你控制的是其他机器人,其轮胎大小可能不同,那么你需要测量其轮胎直径,并重复上面的步骤来计算所需要的角度值。
好了,现在你可能有个疑问,上面公式里的115是怎么来的?下面就简单介绍一下。
我们知道轮胎周长(记为C)的数学计算公式为:
C = π D
其中π为圆周率,为常数,其值近似为3.14,D为轮胎直径。
我们知道轮胎转动一周为360度,假设我们想要移动的距离为L,所对应的角度为A,根据等比例原则,有:
L ÷ C = A ÷ 360
由于C = πD,则
L ÷ π D = A ÷ 360
两边同时乘以360,有
A = 360 × L ÷ π D =(360 ÷ π) × (L ÷ D)
将π的近似取值3.14代入,有
A = (360 ÷ 3.14) × (L ÷ D) = 115 × (L ÷ D)
上面便是115这个数值的由来,即轮胎转动一圈的角度360除以圆周率π的近似结果。
利用角度设置转向
下面让我们利用定距基底移动转向模块使马里奥精确转向。首先,我们来编程控制马里奥原地右转(如下图所示)。D表示轮子直径,L代表两个轮子地面接触点之间的水平距离(对于马里奥,该值为120毫米)。我们需要计算出实现转向角度A所需要的角度设定值。

计算角度设定值以精确转向
下面来看下如何利用角度设定值来控制马里奥精确转向。假设我们想让马里奥转向90度,那么定距基底移动转向模块中角度值的计算公式如下(记为公式2):
下面是利用公式2计算马里奥转向90度需要设定的角度值:
电机角度之 = 90(转向角度) × 120 (马里奥的轮间距) ÷ 51(马里奥的轮子直径) = 212
现在你可以利用上面的公式和计算方法,来尝试一下其他转向角度的计算,并运行看看实际效果。
好了,现在的问题是,公式2是怎么计算出来的?别急,下面就来给出答案:

上图中,转动角度A与轮胎行进轨迹K之间有如下关系:
A ÷ 360 = K ÷ (π × L )
上式中 π × L 为轮胎运动圆形轨迹的周长。假设所需的电机转动角度为Y,则有 K = πD × Y ÷ 360,将该式代入上面的等式,有
A ÷ 360 = πD × Y ÷ 360 ÷ (π × L ) = D × Y ÷ 360 ÷ L
上式等号两边同时乘以360,有
A = D × Y ÷ L
因此有
电机转动角度为Y = 转向角度 A × 轮间距 L ÷ 轮直径D
为什么实际测试中有时并没有达到预期的效果?
如果你利用前面讲到的方法对马里奥进行实际测试,你会发现有时候机器人的移动距离或转向角度并没有精确地达到你所期望的结果。原因有以下几个方面:
1、首先是摩擦力问题。摩擦力是物体运动不可或缺的因素,对于机器人来说摩擦力可以为其提供抓地力以使其能够正常移动。但另一方面,摩擦力会给机器人的移动带来一些能量损失,从而导致机器人的移动结果与计算值存在偏差。
2、轮子打滑问题。轮子打滑的结果就是轮子按照设定值转动了制定的距离,但是机器人的实际移动距离缺没有达到逾期的值。
3、地面的平整度问题。机器人在不平整的地面上的移动效果和在平地上的移动效果会有细微的区别。
转向类型 | 转向角度 | 电机角度设定值 |
1/8转向 | 45° | 106 |
1/4转向 | 90° | 212 |
1/2转向 | 180° | 424 |
3/4转向 | 270° | 636 |
原地转动 | 360° | 848 |
上表是几个特定的转向角度和电机角度设定值的关系,方便查看,不用每次都进行计算。