DoubleMotor クラス

class legoeducation.DoubleMotor()

ペアリングされた左右2つのモーターを同期走行させたり、車体の旋回、独立した車輪制御を行います。

movement関数の制限

movement_move_* などの高度なシャーシ駆動関数は、内部で独自のマルチ制御を行うため、バッチモード内(begin_batchend_batch)で呼び出すことはできません。左右を同時に別々の速度で動かしたい場合は、共通APIタブにある通り、継承した motor_run() 関数をバッチ処理してください。

1. DoubleMotor制御関数

1-1. movement_move()

movement_move(*, direction=MOVEMENT_DIRECTION_FORWARD, speed=UNCHANGED, blocking=True)

指定した方向(前進/後退/左右旋回)に、シャーシ全体を連続駆動させます。

引数名 要求される型 数値の範囲 / 選択肢 備考
direction int (厳格) 03 (MovementDirection定数) 0:前進, 1:後退, 2:左旋回, 3:右旋回
speed int/float / None -100100、または None None指定時は現在の設定速度を維持。
blocking bool True または False コマンド完了まで待機するかどうか。

1-2. movement_move_for_time()

movement_move_for_time(time_ms, *, direction=MOVEMENT_DIRECTION_FORWARD, speed=UNCHANGED, blocking=True)

指定した時間(ミリ秒)だけペアモーターを駆動して自動停止します。

引数名 要求される型 数値の範囲 / 選択肢 備考
time_ms int / float (四捨五入) UINT32幅: 04294967295 走行駆動時間。
direction int (厳格) 03 (MovementDirection定数) 0:前進, 1:後退, 2:左旋回, 3:右旋回
speed int/float / None -100100、または None None指定時は現在の設定速度を維持。
blocking bool True または False -

1-3. movement_move_for_degrees()

movement_move_for_degrees(degrees, *, direction=MOVEMENT_MOVE_DIRECTION_FORWARD, speed=UNCHANGED, blocking=True)

車輪モーターの回転角度の累計を指定して前進・後退を行います。

引数名 要求される型 数値の範囲 / 選択肢 備考
degrees int / float (四捨五入) INT32幅: -21474836482147483647 ターゲット回転度数。
direction int (厳格) 0 (FORWARD) または 1 (BACKWARD) MovementMoveDirectionに準拠。
speed int/float / None -100100、または None None指定時は現在の設定速度を維持。
blocking bool True または False -

1-4. movement_move_tank()

movement_move_tank(speed_left, speed_right, *, blocking=True)

左右の車輪速度比率を個別に設定してタンク走行を実行します。

引数名 要求される型 数値の範囲 / 選択肢 備考
speed_left int / float (四捨五入) -100100 (%) 左モーターの独立速度。
speed_right int / float (四捨五入) -100100 (%) 右モーターの独立速度。
blocking bool True または False コマンド完了まで待機するかどうか。

1-5. movement_move_tank_for_degrees()

movement_move_tank_for_degrees(degrees, *, speed_left=50, speed_right=50, blocking=True)

指定した個別の速度を適用し、いずれかの車輪が指定角度分まわるまでタンク走行します。

引数名 要求される型 数値の範囲 / 選択肢 備考
degrees int / float (四捨五入) INT32幅: -21474836482147483647 いずれかの車輪が到達すべき目標角度。
speed_left int / float (四捨五入) -100100 (%) 左モーターの回転速度(デフォルト 50)。
speed_right int / float (四捨五入) -100100 (%) 右モーターの回転速度(デフォルト 50)。
blocking bool True または False -

1-6. movement_turn_for_degrees()

movement_turn_for_degrees(degrees, *, direction=MOVEMENT_TURN_DIRECTION_LEFT, speed=UNCHANGED, blocking=True)

内蔵IMU(ジャイロセンサー)の角度変位を正確にフィードバックし、指定度数分だけ正確にスピン旋回します。

引数名 要求される型 数値の範囲 / 選択肢 備考
degrees int / float (四捨五入) INT32幅: -21474836482147483647 旋回目標角度。
direction int (厳格) 2 (LEFT) または 3 (RIGHT) 指定外はValueError。

1-7. movement_stop()

movement_stop(*, blocking=True)

実行中のすべての移動・走行複合コマンド(movement_move_*)を即時緊急停止させます。

引数名 要求される型 数値の範囲 / 選択肢 備考
blocking bool True または False 停止処理の完了を同期待機するか。不整合はTypeError。

1-8. movement_set_speed()

movement_set_speed(speed, *, blocking=True)

DoubleMotorモジュールによる移動走行時の標準巡航速度を設定します。現在移動中の場合は即座に速度が変わり、停止中の場合は次回以降の走行コマンドに適用されます。

引数名 要求される型 数値の範囲 / 選択肢 備考
speed int / float (四捨五入) -100100 (%) 負の値を設定すると、前進命令時にバックするようになります。
blocking bool True または False 設定反映のレスポンスを待機するか。

1-9. movement_set_end_state()

movement_set_end_state(end_state, *, blocking=True)

走行駆動命令を終えた、または停止した車輪モーターの終了保持状態(ランダウン状態)を規定します。

引数名 要求される型 数値の範囲 / 選択肢 備考
end_state int (厳格) -1, 05 (MotorEndState定数) -1:デフォルト, 0:コースト(完全惰性フリー), 1:ブレーキ, 2:ホールド(強力サーボ位置保持)
blocking bool True または False -

1-10. movement_set_acceleration()

movement_set_acceleration(acceleration, deceleration, *, blocking=True)

走行開始時の加速レート、および走行停止コマンド時の減速レートを、滑らかな傾き(0〜100%)として事前に設定します。

引数名 要求される型 数値の範囲 / 選択肢 備考
acceleration int / float (四捨五入) 0100 (%) 加速の度合い。0で即時最大速、100で極めて緩やかに加速。
deceleration int / float (四捨五入) 0100 (%) 減速の度合い。
blocking bool True または False -

1-11. movement_set_turn_steering()

movement_set_turn_steering(steering, *, blocking=True)

旋回走行コマンドを発行した際、インサイド(内輪)とアウトサイド(外輪)に配分する駆動力のバランス(ステアリングのシャープさ・旋回半径)を事前に規定します。

引数名 要求される型 数値の範囲 / 選択肢 備考
steering int / float (四捨五入) 0100 数値が大きいほど、左右の車輪の回転差が大きくなり、シャープ(小回り)に旋回します。
blocking bool True または False -

2. DoubleMotor内蔵IMUデータ構造

DoubleMotorには、姿勢制御や衝撃を検知するための高精度な6軸IMUが内蔵されており、接続確立後はリアルタイムに以下のプロパティが更新・配信されます。(※未接続時は float('nan')

2-1. imu_device (ImuDeviceNotification)

プロパティ名 データ型 有効レンジ 内容説明
orientation uint8 05 ハブ本体の現在の設置・傾き方向(DeviceFace定数に対応)。
yawFace uint8 05 現在基準とされているヨー(Yaw)軸の向き(DeviceFace定数に対応)。
yaw int16 -3276832767 (度) 水平旋回方向の角度。
pitch int16 -3276832767 (度) 前後の傾き角度。
roll int16 -3276832767 (度) 左右の傾き角度。
accelerometerX / Y / Z int16 各軸の全範囲 内蔵3軸加速度センサーの未加工測定値。
gyroscopeX / Y / Z int16 各軸の全範囲 内蔵3軸ジャイロセンサーの未加工角速度測定値。

2-2. imu_gesture (ImuGestureNotification)

プロパティ名 データ型 有効レンジ / 選択肢 内容説明
gesture int8 -14 ハブ本体が検知した特定のジェスチャー・衝撃イベント(MotionGesture定数に対応)。
(-1: ジェスチャーなし、0: タップ、1: ダブルタップ、2: 衝突、3: シェイク、4: 自由落下)

3. 継承された個別モーター制御関数

SingleMotor クラスとの互換性

以下の関数は、SingleMotorクラスから継承されており、DoubleMotorインスタンスでもそのまま完全に利用可能です。

DoubleMotorでこれらの関数を使用する際は、引数の motor=le.MOTOR_LEFT (0), le.MOTOR_RIGHT (1), le.MOTOR_BOTH (2) を指定することで、左右どちらの車輪を動かすかを個別に制御できます。

注意(引数エラーとデフォルト値):
0, 1, 2 以外の無効な数値を指定した場合は ValueError が発生します
・引数 motor を省略した場合のデフォルト値は基本 0 ですが、done() メソッドのみデフォルトが None (全モーター対象) となり、motor_reset_relative_position() メソッドのみデフォルトが le.MOTOR_BOTH (2) となります。