The Fool In The Valleyの雑記帳

-- 好奇心いっぱいのおじいちゃんが綴るよしなし事 --

EV3でPythonを使う

先に、「Mindstorms最新事情」としてLEGOがMIndstorms用のPython(正確にはMicro-Python)をサポートするようになった事を書いた。
それを受けて、今後Mindstorms EV3上でPythonを使っていくことにしたので、備忘のためにその手順を記しておく。

 ◆ Mindstorms EV3用側の準備
 LEGO educationからEV3 MicroPython micro SD card imageのzipファイルをDLする。本ブログを書いている2021/2月時点での最新バージョンは、ev3micropythonv200sdcardimage.zip(358 MB) である。
Etcher等の書き込みプログラムを使って、そのzipファイルをMicroSD(~32GB)に書き込む。

このイメージを書き込んだMicroSDをMindstorms EV3のスロットにいれて起動すればPythonが使えるようになる。

 ◆ Mindstorms EV3用の起動と終了
起動:
中央のボタンを押すと赤のLEDが点灯する。続いてEV3DEVと表示され、Linuxのメッセージが流れオレンジのLEDが点滅するようになる。しばらくするとbrickman loadingと表示されライトが緑になり立ち上がる。その間1分35秒ほどである。

WiFiのドングルをUSBポートに挿しておくと起動の際にドライバが組み込まれ、メニュー>Wireless and Networks>>WiFi が使えるようになる。Powered をオンにして、Start Scanを実行するとWiFiの電波を捉えるので、パスキーを入れてコネクトすると上部にIPアドレスが表示される。この例ではIPが192.168.1.17でつながっている。

終了:
左上のボタンを押す。赤のLEDが点灯し、シャットダウンの処理をして15秒程度で電源OFFになる。

◆ Visual Studio Code(VSCode)のインストール
開発環境はMicrsoftのVisual Studio Codeを使うのが標準となっている。

ここからインストールプログラムをDLできる。2021/2月時点での最新板はVSCodeUserSetup-x64-1.53.0.exe。インストール実行時に、途中で適当なインストール先を指定できるので、ここでは
D:\Development\Microsoft VS Code とした。
PATHへの追加をチェックしておくと環境変数にセットされ、再起動後に D:\Development\Microsoft VS Code\bin;にPATHが通る。

◆ VSCodeへのMindstorms EV3 MicroPythonエクステンションの導入
LEGOはMicroPythonのプログラムをVSCodeで開発することを前提にしており、VSCode用のエクステンションとして、LEGO MINDSTORMS EV3 MicroPython を提供している。
Activity Bar①のExtensionのアイコン②を押し、Mindstromsと入力する③とEV3 MicroPythonが表示されるのでインストールする④。

Activity BarのExplorerを開くと、開いているフォルダー、アウトラインとともに、EV3DEV DEVICE BROUSER が表示される。このEV3DEV DEVICE BROUSER を開くと、Click here to connect to a device とでるので、クリックすると起動していて接続可能なEV3が表示される。目的のEV3を選択すると黄色の●が付き、接続が完了すると緑の●になる。それを右クリックすると、

  • Open SSH Terminal
  • Take Screen Shot
  • Get System Info

のメニューが出る。Open SSH Terminalを使うと、EV3のファイルシステムをPCから操作することができる。また、Take Screen Shotを使うとその時のEV3のLCDの表示状態をキャプチャでき、pngファイルとしてユーザー・ディレクトリの中にセーブされる。


◆プログラムの作成と実行
新規プロジェクトを作る:
EV3 MicroPython では、VSCode側のEV3 MicroPythonタブで表示されるCreate a new project を使って必要なファイルが入るプロジェクト・フォルダをつくり、そのフォルダごとEV3に転送するようになっている。
例えば、D:\Dev\MicroPython\test というプロジェクト・フォルダを作ると、自動的にmain.pyというテンプレートが作られ、それを利用してプログラムを書くことができるようになっている。このmain.pyの中身は以下の通りで、Shebang、importするライブラリ、インスタンスが予めセットされたものになっている。

#!/usr/bin/env pybricks-micropython
from pybricks.hubs import EV3Brick
from pybricks.ev3devices import (Motor, TouchSensor, ColorSensor,
                                 InfraredSensor, UltrasonicSensor, GyroSensor)
from pybricks.parameters import Port, Stop, Direction, Button, Color
from pybricks.tools import wait, StopWatch, DataLog
from pybricks.robotics import DriveBase
from pybricks.media.ev3dev import SoundFile, ImageFile

# This program requires LEGO EV3 MicroPython v2.0 or higher.
# Click "Open user guide" on the EV3 extension tab for more information.

# Create your objects here.
ev3 = EV3Brick()

# Write your program here.
ev3.speaker.beep()

Shebangというのは、#! から始まる1行目のことで、envコマンドでPATH環境変数の通っている場所からPythonインタープリタを探索する。ここではpybricks-micropythonが指定され、その実体は

robot@ev3dev:/usr/bin$ which pybricks-micropython
/usr/bin/pybricks-micropython

にある。

プロジェクトが転送されたときのEV3側のファイル構造も、Open SSH Terminalで確認できる。下に示すように /home/robot 以下にプロジェクトフォルダがコピーされているのが分かる。

robot@ev3dev:~$ pwd
/home/robot
robot@ev3dev:~$ ls -l
total 4
drwxr-xr-x 2 robot robot 4096 Feb 14 22:42 test
robot@ev3dev:~$ cd test
robot@ev3dev:~/test$ ls -l
total 4
-rwxr-xr-x 1 robot robot 663 Feb 14 22:42 main.py
robot@ev3dev:~/test

プログラムをEV3に転送して実行するにはいくつか方法がある。

  • Activity Barの実行を押すとDownload & Runの緑の▷がでてくるのでそれを押す。
  • エクスプローラーのEV3DEV DEVICE BROWSERでファイルを指定し、右クリックするとRunメニューが出てくるのでそれを押す。