2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Koushiroによる WRO / EV3rt / SPIKE-RT などなどのAdvent Calendar 2023

Day 1

#1 開発環境を作ろう【もっと!後輩たちのためのEV3rt講座】

Last updated at Posted at 2023-11-30

目次

タイトル 内容
1 はじめに 本シリーズについて
2 EV3rtとは? EV3rtについての簡単な説明
3 環境構築の流れ 今回行う事について説明
4 開発環境構築 環境構築について説明
5 microSDカードの準備 EV3本体に挿すmicroSDカードについて説明
6 まとめ 今回のまとめと次回について

4. 開発環境構築の目次

ステップ タイトル
Step 1 WSLの有効化 ⇒ インストール
Step 2 必要なパッケージのインストール
Step 3 EV3rt用のシェルスクリプトの実行
Step 4 EV3rtのファイルをダウンロード ⇒ 配置
Step 5 動作確認

1. はじめに

今回から、TOPPERS/EV3rtを使って、ロボットプログラミングをする方法を紹介していきます。
本シリーズは以下👇のシリーズの改訂版にあたります。

今までのシリーズは、主に私が高校生の時に書いたもので、内容に不備があったり、時間の経過により仕様が変わっている点等がありました。
これらを解決してより分かりやすい記事にしようと思い、今回の新シリーズを書くことにしました。

尚、私は高校生の時にEV3rtを使ってロボットコンテスト WRO (World Robot Olympiad) に出場しておりました。
現在はこの大会に運営側として関わらせて頂いております。
従いまして、本シリーズにおいてもWROを念頭に置いた説明が多くなるかもしれませんがご了承ください。

そして本シリーズの位置付けですが、私の後輩をはじめとした初学者向けの記事となっています。
よって、かなり簡単な表現を使い、丁寧に説明していきたいと考えています。
既にある程度知識のある方は適宜読み飛ばして下さい。

それでは、EV3rtについて学んでいきましょう!!

2. EV3rtとは?

EV3rtとは、​名古屋大学 大学院情報学研究科 高田研究室 (ERTL: 組み込みリアルタイムシステム研究室) で主に開発されている、LEGO Mindstorms EV3用のOSです。

EV3rtはTOPPERS/HRP3をベースに開発されている RTOS(リアルタイムOS) です。
リアルタイムOSをとてもに簡単に説明すれば、与えられた時間内で、完璧で正確な処理を行うことに重きを置いたOSです。

高田研究室のHPに良い例がありましたので紹介させて頂きます。

リアルタイムシステムのわかりやすい例として、自動車のブレーキを制御するコンピュータシステムを考えます。
例えば、「99.99% はブレーキをかけてから 1秒以内に止まるが、残りの 0.01% は 10秒かかる自動車」と、「必ず2秒以内で止まる自動車」のどちらが優れているかは、説明するまでもないでしょう。

こういった特徴のあるRTOSをEV3でも使えるようにしたのが、EV3rtというわけです。

尚、EV3rtの開発言語はCC++rubyなどがありますが、本シリーズでは基本に則って C言語 で開発をしたいと思います。

EV3rtの良いところ

まず、起動がめちゃくちゃ高速です。
EV3標準のOSは、起動に数十秒かかりますが、EV3rtであれば約5秒で立ち上がります!!
これで長い起動時間に悩まされる事もなくなります👍

次に、C言語を使って開発できる点。
EV3ソフトウェアは以下のようないわゆるビジュアルプログラミングと呼ばれるものですが、初心者には分かりやすくて使いやすい反面、規模の大きいプロジェクト製作には向いていません。

ev3_software.png

ちょっとしたプログラムだけでも画面領域を広く取ってしまいますし、何よりこのEV3ソフトウェアは動作が重たい…
私も現役時代、使っているPCがソフトの重さに耐えきれなくなり、円滑な開発が出来なくなったため、エディタさえあれば開発できるEV3rtに移行したという経緯があります。
他にも、コードで書けば 可読性が上がる(どんなプログラムを書いているのか分かりやすい) という利点もあり、良いところづくしと言えるでしょう。

3. 環境構築の流れ

今回と次回で、 「開発環境の構築」 という作業を行います。

どんなソフトウェアでもそうですが、まずはPCにソフトをインストールするところから始めますよね。
広く一般的に使われるようなソフトウェアはインストーラーという「ソフトをインストールするソフト」があり、それが全て自動的に作業をしてくれますが、EV3rtはそうはいきません。
自分で、必要なものをインストールしていかなければならないのです。
これはEV3rtに限らず、アプリケーション開発においてはごく一般的な事です。

しかし、初心者の方にはハードルが高いと思いますので、記事に沿って作業を行なって貰えればと思います。

プログラム開発の流れ

環境構築について説明する前に、まずはEV3rtでのプログラム開発の流れについて軽く触れておきましょう。

スライド1.PNG

まず、私たち開発者は 「エディタ」 というソフトを使い、C言語を使ってプログラムファイルを書きます。
「エディタ」とは文字を書くためのツールの総称であり、Windows標準搭載の 「メモ帳」 もエディタの一つと言えます。
実際には、アプリケーション開発に向いたエディタの方が使いやすいため、Microsoft社のVisual Studio Codeというとても有名なエディタを使いたいと思います。(エディタのインストール・設定は次回)

ここで、エディタで作製するC言語で書かれたプログラムファイルは、人間は読むことは出来ても、機械はそのままでは読むことが出来ません。
そこで、「人間が読める言葉」から「機械が読める言葉」に変換する作業が必要です。
この作業のことを 「コンパイル」 と呼び、コンパイルするソフトのことを 「コンパイラ」 と呼びます。

そしてこの「コンパイラ」ですが、Windowsで動かすには少し工夫が必要です。
今回はWindowsの上でLinuxという別のOSを動かし、そのLinuxの中のコンパイラで、プログラムをコンパイルしてもらうことにします。
尚、Windowsの上でLinuxを動かす機能をWSL (Windows Subsystem for Linux) と言います。

今回の工程について

今回はまず WSL を使えるようにして、そのあとにLinuxの一つである Ubuntu というOSを入れていきます。
Ubuntuのインストールが出来たら、コンパイラ を含めた「パッケージ」をインストールします。
最後に、EV3rtのホームページからソースコードをダウンロードし、コンパイルが出来るかどうかの動作確認をしたいと思います。

環境構築後には、EV3インテリジェントブロックにEV3rt用のmicroSDカードを挿し、起動するかも確認したいと思います。

4. 開発環境構築

Step 1. WSLの有効化 ⇒ インストール

WSL有効化

まず、WSLはデフォルトでは無効なので、これを有効化する作業を行います。
今回はPowershellというソフトを使って有効化します。

プログラム一覧からPowershellを探して、 「管理者として実行」 をしてください。
見つからなければ👇こんな風に検索してみましょう。

powershell_find.png

すると以下のようなウィンドウが出現します。

powershell_window.png

ここで、以下のコマンドを打ち込んでください。

Powershell
> Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

コマンドの前の>は入力する必要はありませんので注意してください。
上のスクショで言えばC:¥windows¥system32>の一番右の>に対応すると考えてください。

これでまず、WSLの有効化が完了しました。

【2023/12/13 追記】WSLのアップデート

以下のコマンドで、WSLの機能をアップデートしておいてください。

Powershell
> wsl --update

WSL2への変更

WSLにはバージョンが12の二つがあります。
必須ではありませんが、WSLのバージョンを2にしておくことをおすすめします。
先ほどWSLを有効化したPowershellの画面で、以下のコマンドを入力してください。

Powershell
> wsl --set-default-version 2
既にLinuxインストール済みの場合

もし既に何かしらのディストリビューションをインストールしていた場合は、以下のようにして変更してください。

Powershell
> wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-22.04    Stopped         1

> wsl --set-version Ubuntu-22.04 2
  1. wsl -l -vでWSLのインストール状況を確認、NAMEを控えておく
  2. wsl --set-versionコマンドの後にNAMEを指定し、VERSIONを2にする

Ubuntuのインストール

次に、WSLに載せる Ubuntu をインストールしていきます。
Ubuntuをインストールする方法も色々ありますが、簡単に済ますために、Microsoft Storeからダウンロードすることにしましょう。

Storeを開いたら、 「Ubuntu」 と検索しましょう。
そうすると、以下のようにUbuntuがいくつか出現するはずです。

ubuntu_find.png

どのバージョンでも構いませんが、今回は現時点で最新バージョンである22.04.2 LTSをダウンロードしたいと思います。

ubuntu_dl.png

上の画面のように 「Ubuntu 22.04.2 LTS」 を選択して、「インストール」を押しましょう。
以下のように「開く」ボタンに変わればインストール完了です。

ubuntu_dl_sucsess.png

それでは、「開く」を押してUbuntuを起動しましょう。

Ubuntuセットアップ

Ubuntuを開くと以下のようなターミナルが開き、自動的に初期セットアップが始まるはずです。
ある程度進むと、Enter new UNIX usernameと聞かれるので、このコンピュータに使う名前を入力しましょう。

enter_username.png

又、New passwordと聞かれるので、パスワードも設定しましょう。
パスワードは事あるごとに入力が求められるので、忘れないようにしてください。

enter_pass.png

全てが完了したら、以下のように緑色の文字で名前が表示され、コマンドが打てる状態になります。

ubuntu_wakeup.png

これで、Ubuntuのセットアップは完了です。

この先、 「Ubuntuのターミナルを開いてください」 という表現が出てきたときは、プログラム一覧からUbuntuのアイコンを選択して起動し、ターミナルを出現させることだと認識してください。

ubuntu_menu.png

Step 2. 必要なパッケージのインストール

gcc, make, diff のインストール

ここからは「コンパイラ」を含めた 「パッケージ」 をインストールしていきます。
「パッケージ」とは平たく言えば、ソフトウェアとそれに付随するファイル群のことで、Linuxでは「パッケージ管理システム」を使うことで簡単にソフトウェアをインストールしたり、アップデートすることが出来ます。

では、Ubuntuのターミナルを開き、以下のコマンドを一行ずつ入力していきましょう。

Ubuntu
$ sudo apt update
$ sudo apt install build-essential

Linuxのターミナルについても、コマンドの前の$は入力する必要はありませんので注意してください。
上のスクショで言えばkoushiro@DESKTOP-■■■■■:~$の一番右の$に対応すると考えてください。

$ sudo apt update は、パッケージ管理システム「apt」のアップデートです。
2行目はパッケージのインストールを行っており、gccmakediffといったパッケージを使えるようにするものです。

ここで、各行の先頭にsudoというコマンドがありますが、こちらは 「管理者権限で実行する」 という意味です。
この際、パスワードの入力が求められますので、Ubuntuの設定で入力したパスワードを入力してください。

これらのパッケージを正しくインストール出来ているかは、以下のコマンドで確認することが出来ます。

Ubuntu
$ gcc -v
$ make -v
$ diff -v

以下のように出力されればOKです。

gcc-v.png

ruby のインストール

次に、コンパイルに必要なrubyの環境を整えます。
Ubuntuのターミナルを開き、以下のコマンドによりrubyをインストールします。

Ubuntu
$ sudo apt install ruby

インストール出来たかは以下のコマンドにより確認することが出来ます。

Ubuntu
$ ruby -v

以下のように出力されればOKです。

ruby-v.png

rubyのバージョンが3.0以上の場合、この後必要な作業があるので注意してください。

shell のインストール

コンパイルの際にrubyのライブラリでshellというものを用います。
ruby 2.7系以降では標準搭載されていないので、インストールしていきます。

Ubuntuのターミナルで、以下のコマンドを入力してインストールします。

Ubuntu
$ sudo gem install shell
余談

shellをインストールするためにgemというものを使っています。
これもまた「パッケージ管理システム」で、これはrubyのライブラリを管理するパッケージ管理システムとなります。

インストール出来たかは以下のコマンドにより確認することが出来ます。

Ubuntu
$ gem list

インストールされているライブラリが一覧表示されますが、その中に shell (バージョン) があればOKです。

以上で、必要なパッケージのインストールは完了です!

Step3. EV3rt用のシェルスクリプトの実行

ここからは、TOPPERSが用意している 「シェルスクリプト」 を用います。
「シェルスクリプト」とは、今まで手打ちで行っていたコマンドが書かれているファイルで、これを用いることでコマンドの実行を自動化することが出来ます。

Ubuntuのターミナルを開き、以下のコマンドを一行ずつ実行してください。

Ubuntu
$ wget http://ev3rt-git.github.io/public/ev3rt-prepare-ubuntu.sh
$ sudo bash ev3rt-prepare-ubuntu.sh

1つ目のコマンドではgithub上にあるev3rt-git.github.ioというリポジトリから、インストールに用いるシェルスクリプトをダウンロードしています。
2つ目のコマンドはそのシェルスクリプトを実行しています。

2つ目のコマンドを入力すると、次のような表示がなされます。

ev3rt_sh.png

ここで1を入力してください。
これでEV3rtに必要なものが自動的にインストールされます。

余談

今回用いたシェルスクリプトについて、その中身をほんの少しだけご紹介します。
このシェルスクリプトはEV3rtのGithubリポジトリより見ることが出来ます。

https://github.com/ev3rt-git/ev3rt-git.github.io/blob/master/public/ev3rt-prepare-ubuntu.sh

このシェルスクリプトでは 「ARM社のマイコン用のGCCコンパイラ」 、そしてブートローダーである 「U-bootのmkimage」 がインストールされます。
以下、カッコ内の行数はシェルスクリプト上の行数を表しています。

EV3はARM社のプロセッサTexas Instruments AM1808 ARM Microporcessorを採用していますが、このARMプロセッサ用のコンパイラも必要なのです。
ARM社用GCCコンパイラは多くのバージョンがありますが、自動的に動作確認済みバージョンをインストールしてくれます。(58~61行目)
又、コンピュータ内にそれ以外のバージョンがあった場合は削除してくれます。(52行目)

そして、EV3を起動するとき、一番最初に動くソフトウェアであるブートローダーのU-bootの設定も同時にしてくれます。(55行目)

Step4. EV3rtのファイルをダウンロード ⇒ 配置

それでは、EV3rtのソースコードをダウンロードしていきます。

TOPPERS/EV3rtのページから、EV3rtのファイルをダウンロードしましょう。

このページの一番上にある2021年6月25日リリースの1.1版のファイルをダウンロードしましょう。
(ev3rt-1.1-release.zipというzipファイル)

上記ページでのzipファイルのダウンロードですが、Google Chromeを利用するとダウンロードが出来ません。
よって、Microsoft edge や Firefox などの他のブラウザを利用するようにしてください。

ダウンロードが出来たらzipファイルを展開してください。

zip_kaitou.png

zipファイルを開いて、「すべて展開」を押すと展開できます。

展開するとev3rt-1.1-releaseというフォルダが生成されます。
このフォルダ内に入り、その中の同じフォルダ名であるev3rt-1.1-releaseをコピーします。
その後、Cドライブ直下にペーストして移動してください。

Cドライブ直下へのアクセス方法

explorer_c.png

上の画像のように、赤線で囲った枠の部分にC:¥と入力してEnterキーを押してください。
これでCドライブ直下に移動することが出来ます。

Cドライブ直下に移動出来たら先ほどコピーしたフォルダを貼り付けてください。

ev3rt_cdrive.png

貼り付けることが出来たら、Ubuntuのターミナルを起動しましょう。
以下のコマンドを入力して、Ubuntu側からev3rt-1.1-releaseに移動します。

Ubuntu
$ cd /mnt/c/ev3rt-1.1-release

ubuntu_cd_ev3rt.png

cdコマンドとはCurrent Directryすなわち、今のディレクトリを移動するコマンドです。
又、WSLのUbuntuには、WindowsのCドライブが マウント(接続) されているという状態なので、 /mnt/c のようにしてCドライブを指定します。

圧縮フォルダの展開

続いて、そのフォルダ内のhrp3.tar.xzを展開します。

Ubuntu
$ tar xvf hrp3.tar.xz

展開されたファイルがザーーーと流れ、流れが止まってコマンドが打てるようになったら完了です。

ソースコードの修正

ruby 3.0系以上をインストールしている場合は必ずこの作業を行ってください。
2.7以下の場合はやらなくても大丈夫です。

コンパイルする際のrubyのコードに誤りがあるようで、修正しておかないとruby 3.0系以上でコンパイルで出来なくなるバグが発生します。
これを修正したいと思います。

@kuboaki(Kuboaki Shin) 様の下の記事👇の情報を元に修正していきます。

まず、エクスプローラでC:¥ev3rt-1.1-release¥hrp3¥cfg¥pass1.rbを探して開きます。

ruby_repair1.png

pass1.rbのファイルを右クリックして、 「プログラムから開く」 を選択しましょう。

ruby_fileopen.png

ファイルを開く方法を聞かれるので、「メモ帳」を選択して開きましょう。
(常にこのアプリを使って…はチェックを入れなくて大丈夫です。)

メモ帳が起動したら、 「編集」⇒「行へ移動」 を選択して、 178行目 を指定してください。

ruby_fileedit1.png

移動したら、以下の画像の部分を修正します。

ruby_fileedit2.png

コードを以下のように修正してください。
({ } 両端の中カッコを取ります。)

pass1.rb
# 元のコード
symvalCsv = CSV.open(symvalTableFileName, { skip_blanks: true, skip_lines: /^#/ })

# 修正後のコード
symvalCsv = CSV.open(symvalTableFileName, skip_blanks: true, skip_lines: /^#/ )

修正出来たら上書き保存して、メモ帳を閉じてください。

以上にて、環境構築完了です!!
このあと、動作確認を行います。

Step 5. 動作確認

それでは最後に、プログラムをコンパイル出来るか確認してみましょう。

Ubuntuのターミナルを開き、EV3rtの ワークスペースフォルダ /mnt/c/ev3rt-1.1-release/hrp3/sdk/workspace に移動します。
この次々回詳しく説明しますが、このフォルダ内にプロジェクトを作製していきます。

Ubuntu
$ cd /mnt/c/ev3rt-1.1-release/hrp3/sdk/workspace

今回は既に用意されているサンプルプログラムをコンパイルしてみます。
以下のコマンドでコンパイルを行います。

Ubuntu
$ make app=helloev3

今回はhelloev3というプログラムをビルドしました。
このサンプルプログラムはev3rtのチュートリアル的なプログラムになっています。
このコマンドを打ち込むことでworkspace内にappというファイルが生成されていれば成功です。

explorer_app.png

以上で、動作確認は完了です!!

5. microSDカードの準備

EV3rtをEV3インテリジェントブロックで起動するためには、EV3rtのOSが書き込まれたmicroSDカードをスロットに差し込む必要があります。
そこで、そのmicroSDカードの作成を行い、EV3rtが起動出来るかまで確認したいと思います。

microSDカードの規格について

EV3rtに使用するmicroSDカードですが、どんなmicroSDでも良いというわけではありません。
以下の記事を参考に、EV3rtに使えるmicroSDカードを探っていきます。

まずSDカードの規格ごとの対応状況ですが、以下の表のようになっております。

規格 サイズ 対応状況
SD ~2GB 非対応
SDHC 4GB~32GB 対応
SDXC 32G~2TB 非対応
SDUC 2TB~128TB 非対応

EV3rtには2GB以下32GB越えのSDカードの読み書きが出来ないという制約があるため、必然的に 「SDHC」 規格のmicroSDカードを選択することになります。

SDHC規格であれば容量は特に問いません。
私は8GBのSDHC規格のmicroSDカードを安く入手することが出来たので、それを使用しています。

IMG_7095.jpg

尚、EV3インテリジェントブロックのmicroSDカードスロットはノック機構がないため、一度挿すと取り出すのが困難になります。
画像のように取り出すためのタグのようなものを付けておくことをおすすめします。

microSDカードのフォーマット

microSDカードを使用する前に、念のためにフォーマットをしておきましょう。

エクスプローラーを起動し、以下の画像のようにSDHCカード部分を右クリックして、フォーマットを選択しましょう。

explorer_sd.png

format_sd.png

「ファイルシステム」が 「FAT32」 になっていることを確認して、下の「開始」を押しましょう。

format_sd_sucess.png

以上で、フォーマットが完了しました。

microSDカードにファイルをコピー

それでは、フォーマットしたmicroSDカードにEV3rt用のファイルを配置していきます。

始めに、エクスプローラーで c:\ev3rt-1.1-release\sdcard にアクセスしてください。

sdcard_folder.png

このsdcardのフォルダに、microSDカードへコピーするファイルが置かれています。
これを全て選択して、コピーしてください。

コピー出来たらmicroSDカードの方へ移動して貼り付けてください。

sdcard_copy.png

貼り付けが完了したらmicroSDカードの準備は完了です。

EV3rtの起動

それでは、microSDカードをEV3インテリジェントブロックに挿し込み、中央ボタンを押して起動してみましょう。

IMG_7096.GIF

IMG_7098.jpg

このように、EV3rtの起動画面が表示されたら成功です!!
ここまでお疲れ様でした!

6. まとめ

今回は開発環境構築編として各種インストール作業を行ってきました。
又最後には実際にEV3rtが起動するかも確認しました。

次回は、プログラム製作をより効率的に行うために、「エディタ」の導入とその設定を行っていきます。
次回も頑張っていきましょう!!

次回: #2 エディタを使おう(VisualStudio Code)

2
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?