| ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|---|
tools -- 汎用ツール¶
タイミングと、データロギング、線形代数のための共通ツール。
タイミングツール¶
入力ツール¶
バージョン 3.3 で変更: オプション last と chr を追加。
| ❌ | ❌ | ❌ | ✅ | ✅ | ❌ |
|---|
ハブのディスプレイにメニューを表示し、ユーザーがボタンを使ってアイテム選択するのを待ちます。これは、他のプログラムを実行するかどうかを選択するカスタムメニュープログラム内で使えます。
これは、ディスプレイ、ボタン、および待機を組み合わせてシンプルなメニューを作成するための便益関数であることに注意してください。したがって、プログラムの開始時だけでなく、プログラム内のどこでも使えます。
from pybricks.tools import hub_menu
# この例は、Pybricks Code に "fly_mission", "drive_mission",
# "zigzag" という名前の他の3つのプログラムがあることを前提としています。
# この例では、実行するプログラムを選択できるメニューを作成します。
# 文字を選択。
selected = hub_menu("F", "D", "Z")
# 選択したものに該当するプログラムを実行。
if selected == "F":
import fly_mission
elif selected == "D":
import drive_mission
elif selected == "Z":
import zigzag
線形代数ツール¶
バージョン 3.3 で変更: このツールは以前、 pybricks.geometry モジュールに配置されていました。
| ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
|---|
- class Matrix(rows)¶
行列の数学的表現。互換性のあるサイズの行列に対して、加算 (
A + B)、減算 (A - B)、乗算 (A * B) をサポートします。また、スカラー倍算(
c * AまたはA * c)やスカラー除算(A / c)もサポートします。Matrixオブジェクトは不変です。- パラメータ:
rows (list) -- 行のリスト。各行は、それ自体が数値のリストです。
- shape¶
タプル (
m,n) を返します。mは行の数、nは列の数です。
| ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
|---|
マルチタスク¶
バージョン 3.3 で追加.
Pybricks は async および await キーワードを使った協調的マルチタスクをサポートしています。これにより、通常時間がかかる操作を他の操作と並行して実行できます。
- awaitmultitask(coroutine1, coroutine2, ...) Tuple¶
複数のコルーチンを同時に実行します。これにより、他のどのコルーチンと同様に使える新しいコルーチンが作成されます。また、別のマルチタスクステートメント内でも使えます。
- run_task(coroutine) bool | None¶
プログラムの残り部分をブロックしながら、コルーチンを最初から最後まで実行します。これは主に、プログラムのメインコルーチンを実行するために使います。
この関数の呼び出しを入れ子にすることはできません。
- パラメータ:
coroutine (coroutine) -- 実行するメインコルーチン。
- 戻り値:
coroutineが指定されていない場合、この関数は実行ループが現在アクティブであるか(True)そうでないか(False)を返します。
次の例では、マルチタスクを使って、ロボットを前進させ、同時にグリッパーを上下に動かし、その後後退させる方法を示しています。
from pybricks.pupdevices import Motor
from pybricks.parameters import Direction, Port
from pybricks.robotics import DriveBase
from pybricks.tools import multitask, run_task
# 全てのデバイスをセットアップ。
left = Motor(Port.A, Direction.COUNTERCLOCKWISE)
right = Motor(Port.B)
gripper = Motor(Port.C)
drive_base = DriveBase(left, right, 56, 114)
# グリッパーをアップ・ダウン。
async def move_gripper():
await gripper.run_angle(500, -90)
await gripper.run_angle(500, 90)
# 前進させ、同時にグリッパーを動かし、後退させる。
async def main():
await drive_base.straight(250)
await multitask(drive_base.turn(90), move_gripper())
await drive_base.straight(-250)
# 開始から終了までメインプログラムを走らせる。
run_task(main())
- class coroutine¶
- class await¶
await キーワードでプレフィックスされた関数やメソッドがあれば、それはマルチタスクをサポートしていることを意味します。 run_task でコルーチンを実行すると、 await でプレフィックスされたすべてのメソッドや関数はコルーチンとして動作します。
マルチタスクを使わない場合、 await キーワードを無視して、通常通りプログラムを書けます。具体的には run_task を使用しない場合、 await でプレフィックスされた関数は通常の関数として動作します。