- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- 強化学習/LEGO MINDSTORMS EV3でPythonを使う へ行く。
- 1 (2017-10-17 (火) 12:57:16)
- 2 (2017-10-22 (日) 15:55:29)
- 3 (2018-01-23 (火) 19:27:38)
- 4 (2018-01-26 (金) 11:02:54)
はじめに †
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カード・アダプターを)差し込みます。
dfコマンドで、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 ...
ボリューム名は /Volumes/NO NAME という感じのヤツ、デバイス名は /dev/disk*s* という感じのやつです。
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= の後にはデバイス名の /dev/ より後の部分の先頭に r をつけて、最後の *s を取り除いたものです。 管理者でないと実行できないので、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プログラムの実行が終了します。