关于 Powered Up 系统最常见的抱怨之一就是需要使用智能设备进行控制,并且您只能通过官方 Control+ 应用程序,通过屏幕进行触摸控制。即使利用Powered Up编程可以进行自定义控制,您仍然需要在智能设备上一直运行 Powered Up 应用程序。特别是对于小孩子而言,长期接触手机或平板等智能设备总归不是一件太好的事情。
现在,你可以利用Pybricks 来摆脱乐高Control+套装对智能设备的依赖。通过在集线器中运行PyBricks程序代码即可实现。听起来很复杂?其实很简单,无需编程基础也能搞定!以下是RacingBricks的视频教程。
下面是视频中用于带遥控器的 42124 越野车的修改代码:
from pybricks.pupdevices import Motor, Remote
from pybricks.parameters import Port, Direction, Stop, Button
from pybricks.tools import wait
# Initialize the motors.
steer = Motor(Port.B)
front = Motor(Port.A, Direction.COUNTERCLOCKWISE)
# Connect to the remote.
remote = Remote()
# Read the current settings
old_kp, old_ki, old_kd, _, _ = steer.control.pid()
# Set new values
steer.control.pid(kp=old_kp*4, kd=old_kd*0.4)
# Find the steering endpoint on the left and right.
# The middle is in between.
left_end = steer.run_until_stalled(-200, then=Stop.HOLD)
right_end = steer.run_until_stalled(200, then=Stop.HOLD)
# We are now at the right. Reset this angle to be half the difference.
# That puts zero in the middle.
steer.reset_angle((right_end - left_end)/2)
steer.run_target(speed=200, target_angle=0, wait=False)
# Set steering angle for the buggy
steer_angle = (((right_end - left_end)/2)-5)
print('steer angle:',steer_angle)
# Now we can start driving!
while True:
# Check which buttons are pressed.
pressed = remote.buttons.pressed()
# Choose the steer angle based on the right controls.
if Button.RIGHT_PLUS in pressed:
steer.run_target(1400, -steer_angle, Stop.HOLD, False)
elif Button.RIGHT_MINUS in pressed:
steer.run_target(1400, steer_angle, Stop.HOLD, False)
else:
steer.track_target(0)
# Choose the drive speed based on the left controls.
drive_speed = 0
if Button.LEFT_PLUS in pressed:
drive_speed += 100
if Button.LEFT_MINUS in pressed:
drive_speed -= 100
# Apply the selected speed.
front.dc(drive_speed)
# Wait.
wait(10)
下面是带有遥控器的 42129 4×4 梅赛德斯-奔驰卡车的代码:
from pybricks.pupdevices import Motor, DCMotor, Remote
from pybricks.parameters import Port, Direction, Stop, Button, Color
from pybricks.hubs import TechnicHub
from pybricks.tools import wait
# Initialize the motors.
steer = Motor(Port.D)
drive1 = Motor(Port.B)
drive2 = Motor(Port.A)
diff_control = DCMotor(Port.C)
# Initialize the hub.
hub = TechnicHub()
# Connect to the remote.
remote = Remote()
# Read the current settings
old_kp, old_ki, old_kd, _, _ = steer.control.pid()
# Set new values
steer.control.pid(kp=old_kp*4, kd=old_kd*0.8)
#Set the differential lock in open position
diff_control.dc(100)
wait(400)
diff_control.brake()
hub.light.on(Color.GREEN)
hublight = 0
# Find the steering endpoint on the left and right.
# The middle is in between.
left_end = steer.run_until_stalled(-500, then=Stop.HOLD)
right_end = steer.run_until_stalled(500, then=Stop.HOLD)
# We are now at the right. Reset this angle to be half the difference.
# That puts zero in the middle.
steer.reset_angle((right_end - left_end)/2)
steer.run_target(speed=200, target_angle=0, wait=False)
# Set steering angle for the Zetros
steer_angle = (((right_end - left_end)/2)+5)
# Now we can start driving!
while True:
# Check which buttons are pressed.
pressed = remote.buttons.pressed()
# Choose the steer angle based on the right controls.
if Button.RIGHT_PLUS in pressed:
steer.run_target(1400, -steer_angle, Stop.HOLD, False)
elif Button.RIGHT_MINUS in pressed:
steer.run_target(1400, steer_angle, Stop.HOLD, False)
else:
steer.track_target(0)
# Choose the drive speed based on the left controls.
drive_speed = 0
if Button.LEFT_PLUS in pressed:
drive_speed += 100
if Button.LEFT_MINUS in pressed:
drive_speed -= 100
if Button.LEFT in pressed:
print('Battery voltage:',(hub.battery.voltage())/1000,"V")
wait(100)
# Apply the selected speed.
drive1.dc(drive_speed)
drive2.dc(drive_speed)
if (Button.RIGHT in pressed) and (hublight == 0):
hublight = 1
diff_control.dc(-100)
wait(400)
diff_control.brake()
hub.light.on(Color.RED)
elif (Button.RIGHT in pressed) and (hublight == 1):
diff_control.dc(100)
wait(400)
diff_control.brake()
hub.light.on(Color.GREEN)
hublight = 0
# Wait.
wait(10)
参考来源:https://racingbrick.com/
关于PyBricks,后面我会抽时间进行更多介绍和编制教程。