スレッド#
導入#
スレッドを使用することで、ロボットは同じプログラム内で複数のタスクを同時に実行できます。これによりマルチタスクが可能になり、ロボットは複数の独立した動作を同時に実行できます。
注: スレッドで使用するには、まず関数を定義する必要があります。
コンストラクタ – 新しいスレッドを作成して開始します。
Thread– メインプログラムと並行して指定された関数を実行する新しいスレッドを開始します。
アクション – 実行中のスレッドを制御します。
stop– スレッドを手動で停止します。バックグラウンド動作を停止する場合に便利です。
コンストラクタ#
Thread#
Thread はスレッドを作成して開始します。スレッドを作成する際に名前を付けることで、不要になったときに停止させることができます。
使用法:
my_thread = Thread(my_function)
パラメータ |
説明 |
|---|---|
|
オプション。新しいスレッドの名前。 |
|
以前に定義された 関数 の名前。 |
注: 関数は呼び出される前に必ず定義されていなければなりません。
def move_square():
# Move in a square path
while True:
arm.move_inc(100, 0, 0)
arm.move_inc(0, 100, 0)
arm.move_inc(-100, 0, 0)
arm.move_inc(0, 100, 0)
move_square_thread = Thread(move_square)
signal_tower.set_color(SignalTower.BLUE, SignalTower.BLINK)
# Run multiple threads simultaneously
def move_square():
# Move in a square path
while True:
arm.move_inc(100, 0, 0)
arm.move_inc(0, 100, 0)
arm.move_inc(-100, 0, 0)
arm.move_inc(0, 100, 0)
def lights():
while True:
# Turn on all LEDs
signal_tower.set_colors(SignalTower.ON, SignalTower.ON, SignalTower.ON, SignalTower.ON, SignalTower.ON)
wait(0.25, SECONDS)
# Turn on just the red LED
signal_tower.set_colors(SignalTower.ON, SignalTower.OFF, SignalTower.OFF, SignalTower.OFF, SignalTower.OFF)
wait(0.25, SECONDS)
move_square_thread = Thread(move_square)
lights_thread = Thread(lights)
アクション#
stop#
stop はスレッドを手動で停止します。これは、タスクが不要になった場合や、プログラムがスレッドをリセットする必要がある場合に便利です。スレッドが停止すると、再開することはできません。再度実行するには、Thread を使用して新しいスレッドを作成する必要があります。
使用法:
my_thread.stop()
パラメータ |
説明 |
|---|---|
|
以前に開始されたスレッドオブジェクト。これは、 |
"""
Run multiple threads simultaneously
Move the end effector, flash lights and display the x position at once
Stop blinking after 2 seconds
"""
def lights():
while True:
# Turn on all LEDs
signal_tower.set_colors(SignalTower.ON, SignalTower.ON, SignalTower.ON, SignalTower.ON, SignalTower.ON)
wait(0.25, SECONDS)
# Turn on just the red LED
signal_tower.set_colors(SignalTower.ON, SignalTower.OFF, SignalTower.OFF, SignalTower.OFF, SignalTower.OFF)
wait(0.25, SECONDS)
def display_x():
while True:
brain.clear_row()
brain.set_cursor(1, 1)
brain.print("X Position: {}".format(arm.get_x()))
wait(50, MSEC)
lights_thread = Thread(lights)
display_x_thread = Thread(display_x)
arm.move_to(200, 140, 210)
wait(2, SECONDS)
lights_thread.stop()