LEGO MINDSTORMS EV3でPythonを使う

2018-12-17 (月) 16:04:56 (1955d) | Topic path: Top / 強化学習 / LEGO MINDSTORMS EV3でPythonを使う

はじめに

LEGO MINDSTORMS EV3で強化学習をするため、Pythonを使います。

EV3本体は、Micro SDカードが挿入されている状態で電源を入れると、Micro SDカードからOSを起動します。

そこで、Micro SDカードにev3devというLinuxのイメージファイルを入れて、EV3本体に挿入し、このOSを起動します。

無線LANでネットワークに接続し、パソコンからEV3上で動いているLinuxにsshでリモートログインし、Pythonプログラムを動かします。

次の環境で確認しました。

  • macOS Sierra 10.12.5
  • ev3dev 2017-09-14

準備したもの

  • 無線LAN子機 Buffalo WLI-UC-GNM2S
  • Micro SDカード 8GB

ダウンロード

次のページから、LEGO MINDSTORMS EV3用のファイルをダウンロードします。

Micro SDカードへのインストール

ダウンロードしたZipファイルを展開します。 すると、イメージ・ファイル (*.img) が作成されます。

MacにMicro SDカードを(差し込んだSDカード・アダプターを)差し込みます。

diskutilコマンドで、Micro SDカードのデバイス名を確認します。

$ diskutil list
...
/dev/disk5 (internal, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *7.9 GB     disk5
   1:                 DOS_FAT_32 NO NAME                 7.9 GB     disk5s1
...

NO NAMEがボリューム名です。

diskutilコマンドで、SDカードをアンマウントします。

$ diskutil unmountDisk /dev/disk5

ddコマンドで、イメージ・ファイルをMicro SDカードに書き込みます。

$ sudo dd if=ev3dev-jessie-ev3-generic-2017-09-14.img of=/dev/rdisk5 bs=1m

ここで、if= の後はイメージ・ファイルの名前、of= の後はデバイス名の先頭に r をつけたものです。 管理者でないと実行できないので、sudo で実行し、パスワードを入力します。

うまくできると、次のような感じで出力されます。

1800+0 records in
1800+0 records out
1887436800 bytes transferred in 62.141452 secs (30373233 bytes/sec)

ddコマンドでの書き込みが成功すると、自動的にマウントされるので、イジェクトボタンを押して、Micro SDカードを取り出します。

起動

Micro SDカードと無線LAN子機をEV3本体に挿入し、電源を入れます。

Wi-Fiの設定

起動したら、メニューから Wireless and Networks > を選択します。

Wi-Fi > を選択します。

Powered を選択し、チェックを入れます。 すると、電源が入り、無線LAN子機のLEDが点滅を始めます。

しばらく待っているか、Start Scan を選択すると、無線LANの電波をスキャンし、SSIDのリストが出てきます。

利用するSSIDを選択し、Connect を選択します。

パスワードを入力します。 すると、無線LANに接続できます。

接続できると、EV3の画面左上にIPアドレスが表示されます。

Bluetoothの設定

最初はWi-Fiでうまく接続できていたのですが、Not Availableと表示されて接続できなくなってしまいました。 そこで、Bluetoothでも接続できるようにしました。

メニューから Wireless and Networks > を選択します。

Bluetooth > を選択します。

Powered を選択し、チェックを入れます。 すると、画面にBluetoothのマークが表示されます。

Start Scan を選択すると、近くのBluetoothデバイスのリストが表示されるので、Macを選択し、Pair を選択してペアリングします。

macOSのコントロールパネルの「共有」で「インターネット共有」をオンにします。

EV3の Connect を選択し、接続します。

接続できると、EV3の画面左上にIPアドレスが表示されます。

Bluetooth接続の問題点

Macがネットワークに接続していないと、MacからEV3にsshで接続できません。

ペアリングが成功した直後はMacからEV3にsshで接続できますが、なぜか2回目から接続できません。 そこで、毎回ペアリングをやり直しています。

リモート・ログイン

sshコマンドで、EV3上のLinuxにリモート・ログインします。

$ ssh robot@192.168.0.2

robotはユーザー名、@ 以下は確認したIPアドレスです。

初めて接続したときは、今まで接続したことがないサーバーだけど接続してもいいか、という警告が出ます。 Yesと答えると、パスワードを聞かれますので、 maker と入力します。

ログインに成功すると、次のようなメッセージが出力されます。

             _____     _
   _____   _|___ /  __| | _____   __
  / _ \ \ / / |_ \ / _` |/ _ \ \ / /
 |  __/\ V / ___) | (_| |  __/\ V /
  \___| \_/ |____/ \__,_|\___| \_/

Debian jessie on LEGO MINDSTORMS EV3!

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
robot@ev3dev:~$

動作確認

Python3を起動します。

robot@ev3dev:~$ python3

EV3用のライブラリーをインポートします。

>>> import ev3dev.ev3 as ev3

モーターを用意します。

>>> m = ev3.LargeMotor('outB')

今回は、outB 端子に接続された左型のモーターだけを回します。

モーターを回します。

>>> m.run_forever(speed_sp=100)

すると、モーターが回りはじめ、右側のタイヤを中心にしてゆっくりと回り始めます。

モーターを止めます。

>>> m.stop()

python3を終了します。

>>> quit()

Pythonプログラムの作成と実行

Pythonプログラムを作成し、sftpでEV3に転送します。

EV3から実行できるように、Pythonプログラムの1行目には次のように書いておきます。

#!/usr/bin/python3

Pythonプログラムを転送したら、ファイルに実行権限を付与します。

robot@ev3dev:~$ chmod +x example.py

EV3の File Browser > からファイルを選択すると、Pythonプログラムが実行されます。

EV3のキャンセル・ボタン(左上のボタン)を押し続けると、Pythonプログラムの実行が終了します。

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS