乐高机械组(Technic)中最常见的就是各种各样的车辆了,无论是官方套装还是各种MOC,都少不了各种车辆的身影。因此,车辆的前进、后退、转向等基本控制功能,是Powered up编程应用中最常见的功能模块。下面就车辆基本控制工程在Powered Up编程中的实现方式,做一个简单介绍。
一、前进、后退控制
车辆的前进、后退控制在Powered Up中的编程实现方式比较简单,最常见的方式就是利用对电机的转速和转动方向的控制来实现的,下面是编程实例(本例中控制前进后退的电机连接在端口B)。
1、在控制界面放置一个滑动控制器和一个指针仪表盘,如下图。滑动控制器用来控制电机,指针仪表盘用来显示电机转速。

2、利用滑动控制器(本例中编号为0)对电机转速和转动方向进行控制的编程实现如下。在这里要注意使用无限循环模块,来不断地查询滑动控制器当前的设定值。如果没有无限循环模块,则程序只能执行1次,无法做到对电机进行实时控制。

3、利用指针仪表盘(本例中编号为1)对电机转速进行显示的编程实现如下。同样要注意使用无限循环模块,以不断地实时查询当前电机转速并更新显示。

二、转向控制
转向控制与前进后退控制的原理相似,是通过控制电机的转动方向和转动角度来实现的。但是转向控制编程除了实现基本的转向控制功能外,还需要考虑转向范围、转向速度控制、方向自动回正、方向初始化校正、电机控制精度等问题,因此编程实现过程比前进、后退控制复杂一些。
本教程中我们就实现基本转向功能的几个程序进行说明,包括基本转向控制、电机控制精度问题、方向初始化校正等(转向范围、转向速度控制等会在后边的教程中分享),下面是编程实例(本例中控制方向的电机连接在端口D)。
1、在控制界面增加一个横向用于控制方向的滑动控制器。

2、可以利用与前进后退控制相类似的方式,通过一个电机角度控制模块(如下图,模块说明点此查看)来实现基本转向控制。

但这样存在几个小问题,其中的一个问题(其他问题会在后面的教程中分享)就是电机的控制精度问题。由于电机控制精度存在一定的误差,电机的实际到达位置很难精确的与设定值完全相等,一般是存在2度左右的误差,导致电机会不停的在目标位置周围微调。为了克服上面的问题,需要在程序中设置一个偏差允许量(本例中设置为3度,可根据情况调整),即电机实际位置与目标设定位置的角度偏差小于等于该偏差允许量时,则认为已到达目标位置,电机不再动作。编程实现如下。

(1)编号为5的触发执行模块,是为了等待初始化自动找中程序(见后面的程序)执行结束后,再执行此程序,避免程序间冲突。
(2)将电机的响应速度设置为0.1,以便提高电机响应速度,这有利于让车辆更容易控制,减少转向延时。
(3)中间的计算模块,是判断电机实际位置与控制器指令位置的偏差,并取绝对值,当该值大于3时,才继续对电机位置进行调整。
3、完成上面的程序后,转向控制的功能就算实现了。但由于电机默认开机后的位置为0度位置,如果在开机时车辆方向没有在正中,会导致一直跑偏。因此如果不想每次开机前都手动调正方向,需要增加一个方向自动回正程序,具体如下(本例中控制方向的电机连接在端口D)。

程序的实现原理是在开机后分别强制电机向两个方向各转动一定角度(本例中为200度,可根据测量实际情况修改),通过计算两个方向电机的实际转动角度,来计算当前电机的位置,从而执行回正执行。上述程序具体过程如下:
(1)强制电机转动200度,而后将电机的实际转动位置记录在变量a里。
(2)强制电机转动-200度,而后将电机的实际转动位置记录在变量b里。
(3)计算b+(a-b)÷2的值,将结果记录在变量c,该结果即为电机需要回正的调整角度。
(4)调慢电机的响应速度(本例中设置为2)并执行回正操作。
(5)恢复电机的响应速度(0.1),并将电机当前位置设置为0度位置。
您好 首先感谢你的分享,有一个问题想问一下,按照图上模块搭建发现转向回正有很大的延迟,请问调整哪个模块能让转向快速回正。谢谢
感谢你的留言,新年快乐!抱歉春节事多没能及时回复,关于你的问题,我回看了下文章,发现文章中有两个问题(再次抱歉文章写的比较仓促):
1、图6偏差允许量设定程序中,左侧的滑动控制器编号应为2。
2、图6下面第二段我提到了将电机的响应速度设置为0.1,但在图6中并没有体现这一部分程序。
建议检查一下这两个问题,如果只是转向延迟大的话我初步判可能是电机响应速度的问题,具体方法我会节后第一时间在文章里补充一下,如果着急可以看一下:https://www.legofind.com/archives/537,里面有关于电机响应速度设置的模块说明。