Pybricksは、レゴの各種スマートハブのためのオープンソース開発環境。これを使うと、PythonやScratchのようなビジュアルプログラミング言語を使用して、レゴのモーターを動かしたり、Bluetoothを介して通信したりすることが簡単にできる。ただし、Pybricksは非公式のツールで、使用するためにはスマートハブのファームウェアを書き換える必要がある。書き換えるのは簡単だけど、気分的なハードルは高め。書き換えたファームウェアは、いつでも元の状態に戻すことができるし、その方法もサポートされてる。
そんなPybricksを使って、適当にロボットを作り、PCから動かした記録です。
主な材料、環境
LEGO SPIKEかLEGO マインドストーム(51515)のスマートハブ
レゴ Mモーター4つ
レゴ Lモーター1つ
適当なレゴパーツ
Windows 11
Pybricks v3.3.0 (Pybricks Beta v2.3.0-beta.6)
レゴ組み立て方メモ
胴体の組み立て
次に腕
次に頭
全部組み合わせて完成。
プログラム
from pybricks.pupdevices import Motor from pybricks.parameters import Port, Stop from pybricks.tools import wait from usys import stdin from uselect import poll keyboard = poll() keyboard.register(stdin) angles = [0, 0, 0, 0, 0] previous_angles = angles.copy() HEAD_INDEX = 0 LEFT_SHOULDER_INDEX = 1 RIGHT_SHOULDER_INDEX = 2 LEFT_ARM_INDEX = 3 RIGHT_ARM_INDEX = 4 motors = [ Motor(Port.B), Motor(Port.C), Motor(Port.D), Motor(Port.E), Motor(Port.F) ] for i, motor in enumerate(motors): motor.run_target(200, angles[i], wait=False, then=Stop.COAST) while True: if keyboard.poll(0): key = stdin.read(1) print("You pressed:", key) if key in ('q'): angles[LEFT_ARM_INDEX] += 10 elif key in ('a'): angles[LEFT_ARM_INDEX] -= 10 elif key in ('w'): angles[LEFT_SHOULDER_INDEX] -= 10 elif key in ('s'): angles[LEFT_SHOULDER_INDEX] += 10 elif key in ('e'): angles[RIGHT_SHOULDER_INDEX] += 10 elif key in ('d'): angles[RIGHT_SHOULDER_INDEX] -= 10 elif key in ('r'): angles[RIGHT_ARM_INDEX] -= 10 elif key in ('f'): angles[RIGHT_ARM_INDEX] += 10 elif key in ('z'): angles[HEAD_INDEX] += 10 elif key in ('x'): angles[HEAD_INDEX] -= 10 for i, motor in enumerate(motors): if angles[i] != previous_angles[i]: motor.run_target(200, angles[i], wait=False, then=Stop.COAST) previous_angles = angles.copy() current_angles = [motor.angle() for motor in motors] print("Current angles:", current_angles) # この2行を有効にすると動きはカクカクするが、キーへの反応は良くなる # while keyboard.poll(0): # stdin.read(1)