.NET の Lego Mindstorms EV3 を使用します。 2 つ以上の EV3 ブロックを接続する Wi-Fi 経由で接続する

USB接続

LEGO Mindstorms EV3 は、USB 接続を介して PC または他の EV3 に接続できます。 この場合の接続速度と安定性は、Bluetooth を含む他のどの方法よりも優れています。

LEGO Mindstorms EV3 には 2 つの USB ポートがあります。

デイジーチェーンモードでの LEGO EV3 と他の LEGO EV3 ブロック間の通信。

デイジーチェーン モードは、2 つ以上の LEGO EV3 ブロックを接続するために使用されます。

このモード:

  • 複数のレゴ マインドストーム EV3 を接続するように設計されています。
  • より多くのセンサー、モーター、その他のデバイスを接続するのに役立ちます。
  • 複数のレゴ マインドストーム EV3 (最大 4 つ) 間の通信が可能になり、最大 16 個の外部ポートと同数の内部ポートが得られます。
  • メインの LEGO Mindstorms EV3 からチェーン全体を制御できるようになります。
  • Wi-Fi または Bluetooth がアクティブな場合は機能しません。

デイジーチェーン接続モードを有効にするには、プロジェクト設定ウィンドウに移動し、チェックボックスをオンにします。

このモードを選択すると、どのモーターでも使用する EV3 ブロックと必要なセンサーを選択できます。

この表は、EV3 ブロックを使用するためのオプションを示しています。

アクション

中型モーター

ビッグモーター

操舵

独立した経営

ジャイロスコープ

赤外線

超音波

モーターの回転

気温

エネルギーメーター

Bluetoothによる接続

Bluetooth を使用すると、LEGO Mindstorms EV3 を PC、他の LEGO Mindstorms EV3、スマートフォン、およびその他の Bluetooth デバイスに接続できます。 Bluetoothによる通信距離は最大25mです。

1 つのレゴ マインドストーム EV3 に最大 7 つのブロックを接続できます。 EV3 マスター ブリックを使用すると、各 EV3 スレーブとメッセージを送受信できます。 EV3 スレーブは、EV3 マスター ブリックにのみメッセージを送信でき、相互にメッセージを送信することはできません。

BluetoothによるEV3接続シーケンス

2 つ以上の EV3 ブロックを Bluetooth 経由で相互に接続するには、次の手順を実行する必要があります。

1.タブを開く 設定.

2. 選択します ブルートゥースそして中央のボタンを押します。

3.入れます チェックボックス 可視性ブルートゥース。

4. Bluetooth サイン ("<") виден на верхней левой стороне.

5. 必要な数の EV3 ブリックに対して上記の手順を実行します。

6. [接続] タブに移動します。

7. 「検索」ボタンをクリックします。

8. 接続したい EV3 (または接続したい EV3) を選択し、中央のボタンを押します。

9. 最初と 2 番目のブロックをアクセス キーで接続します。

すべて正しく行うと、左上隅にアイコン「」が表示されます。<>」のように、他の EV3 ブロックが 2 つ以上ある場合も同様に接続します。

LEGO EV3 の電源をオフにすると、接続が失われるため、すべての手順を繰り返す必要があります。

重要: 各ブロックには独自のプログラムを記述する必要があります。

プログラム例:

最初のブロック: タッチ センサーが押されると、最初の EV3 ブロックは 3 秒の遅延でテキストを 2 番目のブロックに送信します (メイン ブロック)。

ブロック 2 のプログラム例:

2 番目のブロックは、最初のブロックからテキストを受信するのを待ち、それを受信すると、単語 (この例では「Hello」という単語) を 10 秒間表示します (スレーブ ブロック)。

Wi-Fi経由で接続する

Wi-Fi ドングルを EV3 の USB ポートに接続すると、より長距離の通信が可能になります。

Wi-Fi を使用するには、USB コネクタ (Wi-Fi アダプター (Netgear N150 ワイヤレス アダプター (WNA1100)) を使用して特別なモジュールを EV3 ブロックにインストールするか、Wi-Fi ドングルを接続する必要があります。

画面モードの選択

モード選択
ブロックテキストフィールド
入力
プレビューボタン

モード セレクターを使用して、表示するテキストまたはグラフィックの種類を選択します。 モードを選択した後、入力値を選択できます。 利用可能な入力はモードによって異なります。 モードと入力については以下で説明します。

[プレビュー] ボタンをクリックすると、EV3 画面に表示ブロックが表示する内容をプレビューできます。 ブロックの入力値を選択している間、ビューを開いたままにすることができます。

画面座標

Screen ブロック モードの多くは、X 座標と Y 座標を使用して要素の位置を決定します。 この座標により、EV3 ブリック画面上のピクセルの位置が決まります。 位置 (0, 0) は、下の図に示すように、画面の左上隅にあります。

画面寸法: 幅 178 ピクセル、高さ 128 ピクセル。 X座標値の範囲は画面左側の0から右側の177までです。 Y座標値の範囲は上部0から下部127までです。

ヒントとコツ

Screen ブロックの左上隅にあるプレビュー ボタンを使用すると、正しい画面座標を見つけることができます。

テキスト - ピクセル

テキスト - ピクセル モードでは、EV3 ブリック画面上の任意の場所にテキストを表示できます。

ウィンドウをリセットする

リセット ウィンドウ モードは、EV3 ブリック画面をプログラムの実行中に表示される標準の情報画面に戻します。 この画面には、プログラム名とその他のフィードバック情報が表示されます。 EV3 ブロックでプログラムを実行すると、プログラムの最初の Screen ブロックが実行される前にこの画面が表示されます。

表示要素の視認性の確保

EV3 プログラムが完了すると、EV3 ブロック画面がクリアされ、EV3 ブロック メニュー画面に戻ります。 プログラムによって表示されたテキストやグラフィックは消去されます。 たとえば、プログラムに「画面」ブロックが 1 つだけあり、他に何もない場合、プログラム終了直後に画面がすぐにクリアされるため、「画面」ブロックの結果は表示されません。

プログラムの完了後も画面を表示したままにしたい場合は、次の例に示すように、プログラムの最後にブロックを追加して、プログラムがすぐに終了しないようにする必要があります。

複数の項目を表示する

画面上に複数のテキストまたはグラフィック要素を同時に表示する場合は、要素間で EV3 ブリック画面をクリアしないことが重要です。 Screen ブロックの各モードには Clear Screen 入力があります。 Clear Screen が true の場合、項目が表示される前に画面全体がクリアされます。 これは、複数の項目を表示するには、最初のブロックを除くすべての Screen ブロックで Clear Screen を False に設定する必要があることを意味します。

数字を表示する

プログラムで数値を表示するには、データ バスを Text Display ブロックの Text 入力に接続します。 数値データ バスは、データ バス タイプ変換を使用して自動的にテキストに変換されます (セクションを参照)

デザイナーのマイクロコンピューターを Beaglebone などに置き換えるというアイデアは新しいものではありません。 しかし、EV3 のリリースにより、100% アナログを入手できるだけでなく、レゴロボットのパフォーマンスを向上させることも可能になりました。

プロジェクトのビデオプレゼンテーション:

E VB は、ハードウェア レベルとソフトウェア レベルの両方で Lego Mindstorms Ev3 システムを完全にサポートしており、すべての Lego センサーおよびモーターと 100% 互換性があります。 このブロックは、レゴ マインドストーム EV3 ブロックと同じように機能します。

ビーグルボーン ブラック— シングルボード Linux コンピューター。 Raspberry Piの競合製品です。 強力なプロセッサ AM335x 720MHz ARM® プロセッサを搭載、大規模 入出力の数、ボードを追加することで機能を拡張できます。

Lego Mindstorms EV3 には ARM9 (TI Sitara AM180x) 300MHz プロセッサが搭載されているため、ARM Cortex-A8 (TI Sitara AM335x) 1GHz BeagleBone Black プロセッサに移行します。 生産性の向上、さらに追加の拡張カードを接続することが可能になります!

最も重要なことは、レゴ マインドストーム EV3 にはすべてのソフトウェアとハ​​ードウェアのオープンな説明があるということです。

たとえば、有名なルービックキューブを解くロボットが組み立てられ、デモンストレーションされています。 EV3 の代わりに開発された EVB をインストールしただけです。 ぜひビデオをご覧ください。

プロジェクトの作成者はすでに EVB を製造および販売しています。 同社は、2015 年 4 月末までに生産を大幅に拡大する予定です。さらに、互換性のあるセンサーをいくつか開発し、生産しています。

従来、ロボットはプラットフォーム上に構築されていました。 レゴ マインドストーム EV3、LabVIEWグラフィカル環境を使用してプログラムされます。 この場合、プログラムはEV3コントローラー上で実行され、ロボットは自律的に動作します。 ここでは、ロボットを制御する別の方法、つまりコンピューター上で実行される .NET プラットフォームを使用する方法について説明します。

ただし、プログラミングに入る前に、これが役立つ可能性のあるいくつかのケースを見てみましょう。

  • ラップトップからロボットをリモート制御する必要があります (ボタンを押すなど)。
  • EV3 コントローラーからデータを収集し、外部システム (IoT システムなど) で処理する必要があります。
  • .NET で制御アルゴリズムを作成し、EV3 コントローラーに接続されたコンピューターから実行するその他の状況

.NET 用レゴ マインドストーム EV3 API

EV3 コントローラは、シリアル ポートにコマンドを送信することで外部システムから制御されます。 コマンド形式自体は Communication Developer Kit に記載されています。

しかし、このプロトコルを手動で実装するのは退屈です。 したがって、Brian Peek が注意深く作成した既製の .NET ラッパーを使用できます。 このライブラリのソース コードは Github でホストされており、すぐに使用できるパッケージは Nuget にあります。

EV3コントローラーへの接続

Brick クラスは、EV3 コントローラーとの通信に使用されます。 このオブジェクトを作成するときは、ICommunication インターフェイスの実装をコンストラクター (EV3 コントローラーへの接続方法を記述するオブジェクト) に渡す必要があります。 USBCommunication、BluetoothCommunication、および NetworkCommunication (WiFi 接続) の実装が利用可能です。

最も一般的な接続方法は Bluetooth 経由です。 この接続方法を詳しく見てみましょう。

Bluetooth 経由でプログラムでコントローラーに接続するには、その前に、オペレーティング システムの設定を使用してコントローラーをコンピューターに接続する必要があります。

コントローラーが接続されたら、Bluetooth 設定に移動し、COM ポート タブを選択します。 コントローラーを見つけました、必要です 発信ポート。 BluetoothCommunication オブジェクトの作成時に指定します。

コントローラーに接続するコードは次のようになります。

パブリック非同期タスク Connect(ICommunication communication) ( var communication = new BluetoothCommunication("COM9"); varrick = _brick = new Brick(communication); await _brick.ConnectAsync(); )

オプションで、コントローラーへの接続タイムアウトを指定できます。

_brick.ConnectAsync(TimeSpan.FromSeconds(5)); を待ちます。

USB または WiFi を介したユニットへの接続は、UsbCommunication オブジェクトと NetworkCommunication オブジェクトが使用されることを除いて、同じ方法で実行されます。

コントローラー上で実行されるその他のアクションはすべて、Brick オブジェクトを通じて実行されます。

エンジンを回しましょう

EV3 コントローラーでコマンドを実行するには、Brick オブジェクトの DirectCommand プロパティにアクセスします。 まずはエンジンを始動してみます。

モーターがコントローラーのポート A に接続されていると仮定します。このモーターを 50% の電力で実行すると、次のようになります。

_brick.DirectCommand.TurnMotorAtPowerAsync(OutputPort.A, 50); を待ちます。

モーターを制御する方法は他にもあります。 たとえば、StepMotorAtPowerAsync() メソッドと StepMotorAtSpeedAsync() メソッドを使用して、モーターを指定した角度まで回転できます。 時間、速度、電力などによってモーターをオンにするモードのバリエーションとして、いくつかの方法が利用可能です。

強制停止は、StopMotorAsync() メソッドを使用して実行されます。

Await _brick.DirectCommand.StopMotorAsync(OutputPort.A, true);

2 番目のパラメータはブレーキの使用を示します。 false に設定すると、モーターは惰性で停止します。

センサーからの値の読み取り

EV3 コントローラには、センサーを接続するためのポートが 4 つあります。 これに加えて、モーターにはエンコーダーも内蔵されており、センサーとして使用できます。 結果として、値を読み取ることができるポートが 8 つあります。

値を読み取るためのポートには、Brick オブジェクトの Ports プロパティを通じてアクセスできます。 ポートは、コントローラーで使用可能なポートのコレクションです。 したがって、特定のポートを使用するには、それを選択する必要があります。 InputPort.One ...InputPort.Four はセンサー ポート、InputPort.A ...InputPort.D はモーター エンコーダーです。

変数 port1 = _brick.Ports;

EV3 のセンサーはさまざまなモードで動作できます。 たとえば、EV3 カラー センサーは、周囲光の測定、反射光の測定、または色の検出に使用できます。 したがって、センサーをどのように使用したいかを正確に「伝える」ために、センサーのモードを設定する必要があります。

Brick.Ports.SetMode(ColorMode.Reflective);

センサーが接続され、動作モードが設定されたので、センサーからデータを読み取ることができます。 「生の」データ、処理された値、およびパーセンテージ値を取得できます。

Float si = _brick.Ports.SIValue; int raw = _brick.Ports.RawValue; バイトパーセント = _brick.Ports.PercentValue;

SIValue プロパティは、処理されたデータを返します。 それはすべて、どのセンサーがどのモードで使用されるかによって異なります。 たとえば、反射光を測定する場合、反射光の強度(黒/白)に応じて0から100の値が得られます。

RawValue プロパティは、ADC から取得した生の値を返します。 場合によっては、後続の処理や使用にそれを使用した方が便利な場合があります。 ちなみに、EV3 開発環境では、「生の」値を取得することもできます。このためには、青いパネルのブロックを使用する必要があります。

使用しているセンサーがパーセンテージで値を受け取ることを期待している場合は、PercentValue プロパティを使用することもできます。

コマンドをバッチで実行する

2 つの車輪を備えたロボット カートがあり、それを所定の位置に展開したいとします。 この場合、2 つの車輪は逆方向に回転する必要があります。 DirectCommand を使用し、2 つのコマンドをコントローラーに連続して送信すると、それらの実行の間に時間がかかることがあります。

_brick.DirectCommand.TurnMotorAtPowerAsync(OutputPort.A, 50); を待ちます。 await _brick.DirectCommand.TurnMotorAtPowerAsync(OutputPort.B, -50);

この例では、モーター A を 50 の速度で回転させるコマンドを送信します。このコマンドが正常に送信された後、ポート B に接続されているモーターで同じことを繰り返します。問題は、コマンドの送信が即座に行われないため、モーターがコマンドがポート B、モーター A に送信されている間、異なるタイミングで回転を開始する可能性があります。 すでに回転が始まります。

モーターを同時に回転させることが重要な場合は、コマンドを「バンドル」でコントローラーに送信できます。 この場合、DirectCommand の代わりに BatchCommand プロパティを使用する必要があります。

Brick.BatchCommand.TurnMotorAtPower(OutputPort.A, 50); _brick.BatchCommand.TurnMotorAtPower(OutputPort.B, -50); await _brick.BatchCommand.SendCommandAsync();

現在、2 つのコマンドが一度に準備され、その後 1 つのパケットでコントローラに送信されます。 これらのコマンドを受信したコントローラーは、モーターを同時に回転させ始めます。

他に何ができるでしょうか

EV3 コントローラーでは、モーターの回転やセンサー値の読み取りに加えて、他の多くのアクションを実行できます。 それぞれについては詳しく説明しません。実行できることのリストのみを示します。

  • CleanUIAsync()、DrawTextAsync()、DrawLineAsync()など - EV3コントローラの内蔵画面の操作
  • PlayToneAsync() および PlaySoundAsync() - 内蔵スピーカーを使用してサウンドを再生します
  • WriteFileAsync() 、 CopyFileAsync() 、 DeleteFileAsync() (SystemCommand から) - ファイルの操作

結論

.NET を使用してマインドストーム EV3 ロボットを制御することは、「異なる世界」のテクノロジーがどのように連携できるかをよく示しています。 .NET 用の EV3 API を研究した結果、コンピューターから EV3 ロボットを制御できる小さなアプリケーションが作成されました。 残念ながら、NXT にも同様のアプリケーションが存在しますが、EV3 はそれらをバイパスしました。 同時に、ロボットサッカーなどの制御されたロボット競技にも役立ちます。

アプリケーションは次のリンクからダウンロードしてインストールできます。