金宏和實です。優秀な小学生プログラマーに教えてもらって、PyBricksとBlocklyPy Commanderを使ってみました。PybricksはMicroPythonのプログラミング環境でBlocklyPy CommanderはVSCodeの拡張機能です。
(VSCodeでPybricksを使えるようにするにはPythonそのものやpybricksライブラリなどのインストールが必要ですが、そこは情報が多いので割愛します。次のサイトなどを参照してください)

ロボットをBluetooth接続した状態で新規にプログラムファイルを作成すれば、上の画像のように各ポートに接続されているデバイスを検知してコードを挿入してくれます。

BlocklyPyを使えば、たとえばGyroセンサーの値を上の画像のようにターミナルに出力させた上で可視化することができます。(コードの書き方が独自の制約があるのでちょっと戸惑い迷いましたが)
次はライントレースをするMicroPythonのコードです。
from pybricks.hubs import PrimeHub
from pybricks.pupdevices import Motor, ColorSensor, UltrasonicSensor, ForceSensor
from pybricks.parameters import Button, Color, Direction, Port, Side, Stop
from pybricks.robotics import DriveBase
from pybricks.tools import wait, StopWatch
hub = PrimeHub() # SPIKE Prime Hub
force_a = ForceSensor(Port.A) # SPIKE/Technic Force Sensor
color_b = ColorSensor(Port.B) # SPIKE/Technic Color Sensor
motor_c = Motor(Port.C, positive_direction=Direction.COUNTERCLOCKWISE) # SPIKE Prime Medium Motor
motor_d = Motor(Port.D) # SPIKE Prime Medium Motor
motor_e = Motor(Port.E) # SPIKE Prime Large Motor
usensor_f = UltrasonicSensor(Port.F) # SPIKE/Technic Ultrasonic Sensor
robot = DriveBase(motor_c, motor_d, wheel_diameter=56, axle_track=112) # DriveBase based on detected motors
# ライントレース用の定数設定
DRIVE_SPEED = 100 # 走行速度 (mm/s)
THRESHOLD = 50 # 白と黒の境界の反射光強度 (中間値)
PROPORTIONAL_GAIN = 1.5 # 補正の強さ(Pゲイン)
def line_trace(distance):
# 指定した距離に達するまでループを回す
while robot.distance() < distance:
# センサーから現在の反射光の明るさを取得 (0〜100)
current_reflection = color_b.reflection()
# 境界値との「ズレ」を計算
deviation = current_reflection - THRESHOLD
# ズレにゲインを掛けて、曲がる勢い(旋回速度)を計算
turn_rate = deviation * PROPORTIONAL_GAIN
# 計算した速度と旋回速度でロボットを動かす(ノンブロッキング)
robot.drive(DRIVE_SPEED, turn_rate)
# ループが早すぎて処理が詰まるのを防ぐための短いウェイト
wait(10)
# 指定距離を走り終えたら、ピタッと停止する
robot.stop()
def main():
print("Starting line trace...")
# 走行距離メーターを0にリセット
robot.reset()
line_trace(1000)
print("Line trace completed.")
if __name__ == "__main__":
main()
指定した距離までライントレースをする関数をひとつ持つサンプルプログラムを作ってみました。と言ってもAI(Gemini)が作ってくれたコードに少し手を加えただけです。MicroPythonは広く使われているのでAIがかなり正確なコードを提示してくれるようです。
Pybricksを始めようとしている人は参考にしてください。
また、小中学生がAI を利用することについていろいろな議論がされていますが、プログラミングの場合、AIが作成したコードを読めないと先に進めないので、私論としてはAIとペアプログラミングも良いんじゃないかと思います。
