LoginSignup
1
0

More than 3 years have passed since last update.

【EV3 x C#】lejos-server/clientを使ってC#でEV3を制御する(Windows編)

Last updated at Posted at 2020-12-30

はじめに

EV3をC#で制御したいと思ったとき、昔できていたらしい方法はしばらく開発が止まっていて2020年12月時点ではできなそうな感じでした。
普通なら「じゃあJavaとかPythonで書けば?」ということになりますが、あえて記事の少ないVisual StudioとC#にこだわりその方法を模索しました。
結果的に従来の「組み込み方式」はあきらめ、既存のオープンソースを活用した「通信方式」で実現しましたのでご紹介したいと思います。
ただし、まだ実験的な段階のため本格的なプログラミングにはコマンドや動作検証が足りていませんのであらかじめご了承ください。

準備物/動作環境

  • Windows10 64bit
  • pleiades2020 (eclipse)
  • MicroSDカード/アダプタ/リーダライタ
  • EV3※
  • USBケーブル(PCとEV3の接続用)
  • Visual Studio 2019

※本記事では、EV3は車の基本モデルになった状態を前提としています。
ev3-robot-driving-base.png

ソフトウェアの準備

7-Zipのインストール

次項でpleiadesのインストールの際に必要になります。
https://sevenzip.osdn.jp/
から64bit版をダウンロード、インストールしておきます。

EclipseとJava言語で開発するための諸々

ETrobocon様のWiki leJOS EV3開発環境構築ガイド
「1.準備」から「6.Eclipseのインストール」までを行ってください。
なお、pleiadesは2020 64bitをインストールしました。

Visual Studio 2019のインストール

この記事を読んでいる方には説明不要だと思うので割愛します。ただし.NET Core3.1を使えるようにしてください。

lejos-server

lejos-serverとは

lejos-serverは、EV3上でコマンド受信サーバーとして動作するTCPサーバーです。
crunchinessさんの https://github.com/crunchiness/lejos-server
が元です。 Forkして対応コマンドを追加したブランチがこちらです。
20201/01/13追記:crunchinessさんにプルリクをマージしていただきましたのでURLを変更しました。
2020年12月末現在開発中ですので、すべての動作を網羅しているわけではありません。

lejos-serverをビルドする

eclipse初心者が試行錯誤してやっとのことできた手順が以下のとおりです。

ダウンロード

GitHubにある上記 https://github.com/crunchiness/lejos-server を開き、[Code] -> [Download ZIP]を選択し、任意のフォルダに保存してください。
github_sv1.png

eclipseにインポート

Eclipse IDEのパッケージエクスプローラーで[プロジェクトのインポート…]を選択します。
github_sv2.png
[一般] -> [フォルダーまたはアーカイブからプロジェクト]を選択して[次へ]
github_sv3.png

[アーカイブ]から、ダウンロードしたzipファイルを選択してください。
[完了]をクリックすると、インポートが始まります。
github_sv4.png

インポートが完了した時点では図のようにエラーが表示されます。
github_sv6-1.png

エラーを解除するには次の手順を実施します。
まず、パッケージ・エクスプローラーのRootノードを右クリックして、
[leJOS EV3] -> [leJOS EV3 プロジェクトへ変換]を選択してください。
この時点でエラーはすべて解除されます。
次に、警告の一部を解除するためJREのバージョンを変更します。
パッケージエクスプローラーのツリーから[JREシステム・ライブラリー(java11)]を右クリックし、[プロパティー]を選択してください。
システム・ライブラリーで[実行環境]を選択し、プルダウンから[JavaSE-1.7 (java7)]を選択し、[適用]してください。
github_sv6.png
図のように「警告(2項目)」となればOKです。(この警告はソースの不備によるものですので無視してください)
github_sv7.png

ビルド&EV3に転送

EV3とUSBなりで接続し、プログラムを転送できる状態にしてください。
パッケージ・エクスプローラーの最上部ノードを右クリックし、
[実行] -> [leJOS EV3 Program]を選択します。
EV3の液晶に「READY」と表示されれば成功(lejos-serverが動作中)です。
ready.jpg
lejos-serverの中身を変更しない限り、Eclipse IDEを使用するのは初回限りとなります。

lejos-client

lejos-clientとは

lejos-clientは、lejos-serverのコマンド仕様に合わせて.NET Coreで作成したライブラリです。JSON形式でコマンドを作成し、TCPクライアントとしてEV3にコマンドを送信します。
.NET Coreとすることで、Windows/Mac両方でNuGetから使用できるようにしました。

lejos-clientを使ったコンソールアプリケーション

プロジェクトの作成

  • Visual Studio 2019を起動し、[新しいプロジェクトの作成]を選択
  • テンプレートの選択で、[コンソールアプリ(.NET Core)]を選択し、[次へ]
  • 任意のプロジェクト名を入力

NuGetパッケージのインストール

  • Visual Studioのメインメニューから[ツール] -> [NuGetパッケージマネージャー] -> [パッケージマネージャーコンソール]を選択 client1.png

パッケージ マネージャー コンソールで次のように入力し、Enter

PM> Install-Package lejos-client

コーディング

パッケージをインストールしたら、次のようにコーディングします。

using lejos_client;

namespace lejosWinConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            // EV3に接続 (EV3上で'lejos-server'が動作している前提)
            var ev3 = new EV3("10.0.1.1", 6789);
            ev3.Brick.LED((int)eLEDPatterns.GreenBrink2);
            // ポートB/Cに接続されたLargeモーターを同時にスピード100で360度回転させる
            ev3.Wheels.GoForward(100, 360);
        }
    }
}

【補足】
下図のようにev3オブジェクトからインテリセンスで何となく何ができるかわかると思います。
ev3vs.png
ev3オブジェクトのインスタンスはアドレス毎に作成するため、複数のEV3を同時に制御することも可能です。

実行

あとは通常通りVisual Studioからデバッグ実行します。
EV3がコマンドを受信し、緑のLEDを点滅させながらゆっくりと前進するはずです。
command_rcv.jpg
このような表示状態でもコマンド受信状態ですので、連続して実行できます。

まとめ

  • EV3のOSとしてleJOSを使用する
  • Visual StudioとC#でEV3のプログラミングができる(実験段階)
  • 組み込み方式ではなく「通信方式」
  • 通信方式の利点として複数のEV3を同時に制御するのが比較的容易
  • Macでも同じコードで書ける

参考サイト

https://github.com/ETrobocon/etroboEV3/wiki/lejosev3_win
https://afrel.co.jp/archives/25914

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0