2021年12月19日日曜日

Raspberry iの環境構築

 raspberry Piの環境構築

先のブログに書きましたが、Freenove 4WD Smart Car Kitを買っちゃいました。以前のMindstormsの時にもRaspberry Piの設定について書きましたが、設定内容が少し変わったので、ここでおさらいの意味も含めてもう一度書いておきます。

1.raspberry Pi OSをインストール

Raspberry Pi OSのインストールですが、前回と同じくRaspberry Pi Imagerを使ってmicroSDに書き込みます。

PaspberryPiのホームページからRaspberry Pi Imagerをダウンロードします。


インストール後、Raspberry Pi Imagerを開きます。
インストールするPaspberry Pi OSですが、現行のBullseye版の前のBuster版にしました。理由はチュートリアルでもBullseye版ではパッチを当てる必要があったり、また記事でも不具合が生じる可能性も示唆されていたからです。

Buster版のRaspberry Piはここからダウンロードしました。
2021-05-07-raspios-buster-armhf-full.zipをダウンロードします。

Raspberry Pi ImagerのCHOSE OSで下のUse customを選び、先程ダウンロードしたファイルを選択します。



次にCHOOSE SD CARDでPCに接続したSDカードを選択し、WRITEで書込みを実施します。

SDカードにOSのインストールが完了したら次は、このSDカードに次の2つを付け加えます。
2.SSH有効化
3.WiFiの有効化

2.SSH有効化

RaspberryPiにアクセスするために、通信環境(SSH通信)を整備します。

sshという名前の空のフォルダーを作成します。

このフォルダーをSDカードのルートディレクトリーにコピーします。これでSSHの準備完了です。


3.WiFiの有効化

次にWiFiが使えるように設定します。
テキストエディタを使って下記を書き込み、wpa_supplicant.confという名前で保存してください。
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
country=JP
update_config=1

network={
    ssid="ssd"
    psk="pwd"
    key_mgmt=WPA-PSK
}

ここで、

ssid="ssid"の""で囲まれた部分は、自宅で使っているWiFiのSSID
psk="pwd"のpwd部分は使っているWiFiのパスワード

に書き換えて、sshファイルと同じくOSを書き込んだSDカードにコピーしてください。

これでWIFIの準備も完了です。
作成したSDカードをPaspberry Piに挿入してください。


4.SSH接続

バッテリーを繋げるとRaspberry Pi OSが起動します。

a)LANケーブルでのSSH接続
テキストではPCとLANケーブルで接続とありますが、同一ネットワーク上であれば何処でもOKです。
ターミナルを開きssh pi@raspberrypi.localを入力します。
パスワードを要求されるのでraspberryと入力します。

下記のように表示されればssh接続でRaspberry Piにログインできました。

b)無線でのSSH接続
先程のLANケーブルを抜いておきます。
はじめにPアドレスを特定する必要があります。ターミナルを開きping raspberrypi.localを入力します。
画面にraspberrypiのIPアドレスが表示されます。今回は192.168.1.8でした。このIPアドレスは接続の度に変わりますので注意が必要です。なこのIPアドレスは、接続の度に変わると厄介なので固定することもできます。
先程のIPアドレスを使って、ターミナルからssh pi@192.168.1.8と入力します。

yes/noを聞いてくることがあるのでyes
下の画面が出てくればRaspberryPiとの接続完了です。

5.VNC接続
VNC接続はラズパイ(raspberry pi)の初期設定をするよに解りやすく載っていて簡単にできます。

1.PaspberryPiの設定
  • ターミナル(Macの場合)からping raspberrypi.localと入力しRaspberryPiのIPアドレスを確認します。


    この例では、192.168.1.9でした。

  • 同じくターミナルからssh pi@192.168.1.9と入力し、ssh接続をします。
    IPアドレスはそれぞれの環境で異なります。
    もし、WARNINGが出たら過去に接続した記録が残っているそうです。設定を一度削除します。


    ターミナルからssh-keygen -R 192.168.1.9と入力し、設定を一度消去後に再度ssh pi@192.168.1.9と入力してssh接続を確立します。

  • ターミナルからsudo raspi-configと入力し、RaspberryPiの設定画面を開きます。

  • 3のInternet Optionを選択し、P3のVNC選択、yesと進みます。
  • 1のSystem Optionを選択し、S5のBoot/Auto Login選択、B4のDesktop Autologin選択。この設定をしないとVNC接続ができないとの事。

  • 2のDisplay Optionを選択し、D1のResolution選択、リモート接続した際のRaspberryPiの画面設定を行います。

  • 8のUpdateを選択し、Finishで終了です。

  • ターミナルからsudo rebootと入力しRaspberryPiを再起動します。


2.PCにVNCアプリ「VNC Viewer」をインストール

VNC CONNECT画面で、RaspberryPiのIPアドレス192.168.1.9を入力すれば接続完了です。

Username:pi
Password:raspberry

です。


6.IPアドレスの固定

RaspberryPiを繋げるたびにIPアドレスが変わってしまうのでは、毎回IPアドレスを調べ直さないといけないので結構手間がかかります。

そこでIPアドレスを固定化しておくことにします。RaspberryPiに使うアドレスは、その他のデバイスとバッティングしない、バッティングする可能性の無いものを使う必要があります。

まず、自分のゲートウェイを確認します。macの場合ターミナルから
route -n get 0.0.0.0と入力します。

私の環境でゲートウェイは192.168.1.1であることがわかりました。

IPアドレス固定の方法もいくつかありますが、ここではラズパイ(Raspberry Pi)を固定IPアドレス化する方法を参考にしました。

RaspberryPiをVNC接続し画面右上のネットワークアイコンを右クリック、表示されたポップアップメニューから"Wireles & Wired Network Setting"をクリックします。

interface右の空のプルダウンメニューをクリックします。有線LANの場合はeth0、無線LANの場合はwlan0を選択します。

"automatically configure empty options"のチェックを外し、IPアドレスを下記のように入力します。

私の場合、Raspberry Piの固定IPアドレスを192.168.1.211としました。そしてRouter、DNS Serversに先ほど調べたゲートウェイのアドレスを入れます。

全てが終了したら再起動して設定を反映させます。


7.RDP接続

VNC接続の場合画面解像度の設定変更が出来なかったり、反応が悪かったり、不便を感じることが多いのですが、RDP接続の場合そういった問題を解決してくれます。
Raspberry Piにリモートデスクトップ接続する(xrdpのインストール)を参考にしました。

Raspberry PiをVNC接続しターミナルから下記を入力し、xrdpソフトをインストールします。

$ sudo apt-get update
$ sudo apt-get install xrdp

Macの場合、App Storeから"Microsoft Remote Desktop"を入手します。

このクライアントソフトを起動し、新しい接続(add PC)を開き、PC name欄にIPアドレスを入力して設定完了です。


8.Python3の設定

おそらくRaspberrypiの初期値ではPythonはPython2の設定になっていると思うので、これをPython3に設定変更する必要があります。

pi@raspberrypy:~$ python

でおそらくpython 2.7が表示されると思います。

cd /usr/bin

sudo rm python

sudo ln -s python3 python

pythonを終了するために Ctrl-Z

python

でpython 3.***が表示されれば設定終了


9.日本語で入力できる設定

日本語が入力できるように設定します。下記を参考にしました。

Raspberry Piに日本語で入力できる設定方法(fcitx-mozc)





2021年12月12日日曜日

Freenove 4WD Smart Car Kit買っちゃいました

 



demoのライントレースのどうがです。

コースは mindstormsでお馴染みのものです。


Myオリジナルコースです。


aspberry pi、リチウム電池はは別途要りますが、本体も7千円弱と安く、pythonで遊ぶのであればmindstormsより断然こちらかなと思います。
アフレルのchainerでAIの様な事が出来れば最高ですね。




2021年12月5日日曜日

Image Classificationにおける元画像の大きさと精度(accuracy)との関係について

今までもPyTorchやfast.aiを使ってImage Classificationを行ってきました。

1つ気になったのが、trainingに使う画像が大きいと、それだけデータ量も多いのだから精度も良くなるのではと言う単純な思いです。そこで確認してみました。

テストの条件は、

・データセットはcifar-10。cifar-10はライブラリーにもありますが、ここでは一度cifar-10をpng形式の画像データに変換したものを使いました。

・fast.aiを使ってresnet18でfine-tuningする。

・DataLoaderは簡単に下記のようにしました。この設定を取敢えずnormal設定とします。
画像サイズは、元の32,64,96,128,224の7種類で検証

 dls=ImageDataLoaders.from_folder(
     path, 
     train='train',
     valid='val',
     bs = 64,
     item_tfms=Resize(160), ⇒ここでサイズを32~224に変更する
     batch_tfms=aug_transforms(),
     seed=123
)

cifar10の32pixのデータ画像



【結果】

32pixの例
epochtrain_lossvalid_lossaccuracytime
01.1776621.0656850.62360001:40
10.9391810.8558660.70190001:42
20.8141380.7357280.74920001:42
30.7176460.6443040.78090001:41
40.6269320.6063300.79260001:42
50.6031020.5930750.80050001:42
60.5150810.5544300.81100001:42
70.4881680.5541700.81190001:43
80.4398750.5499190.81670001:43
90.4493610.5468510.81690001:44




























32~224pixでtrainingした結果は次の通りでした。

Image sizenormalp設定のaccuracy
320.8169
640.8983
960.9334
1280.9435
1600.9483
2240.9483








●当初予想したように画像サイズが大きくなればaccuracyも高まることが確認されました。
ただそれもサイズが128pix以上ではほぼフラットになっています。

2021年6月7日月曜日

Raspberry Pi4にPyTorchをインストールする

mindstorms EV3を使ってDeep Learningで遊んでみようかなと思ってアフレルで資料を集めると、Chainer、TensorFlowバージョンはありましたが、PyTorchはありませんでした。

Chainerを初めて触り、個人的には大変興味を持ったのですが、プリファード・ネットワークスは開発を止めてしまいました。TehsorFlowは殆ど触ったことがありません。天の邪鬼な私は何故かPyTorchを使ってDeep Learningを勉強しようと思って、このブログに少し書き綴っています。と言ってもメインはPyTorchのラッパーのfast.aiですが・・・

と言う事で、PyTorchでもEV3を動かせられればと思いネットを調べて、取敢えずインストール出来たと思うので記録しておきます。

インストールの手順は

1.通常のRaspberryPi 32bitOSではなく、64bitOSにインストールします。
参考にしたのは、Raspberry Pi Imagerで64bit版Raspberry Pi OSイメージを書き込む

ネットでも32bitOSにPyTorchをインストールした記事は多くありましたが、32bitマシーンでPyTorchを構築することはますます困難になってきて、一筋縄では行かないようです。64bitOSのインストールは、ブログの通り行えば簡単に出来てしまいます。操作の過程で私がダウンロードしたPi OSは、現時点で最新の2021-05-07-raspios-buster-arm64.imgでした。

2.上で作成した64bit Raspberry PiへのPyTorchをインストールします。
参考にしたのは、Install PyTorch on a Raspberry Pi 4

インストールはpython3 wheelを使う方法と、最初からビルドする方法が紹介されていますが、wheelを使う方法で行いました。これもブログの通り簡単に出来ました。

Raspberry Piを起動してターミナル(コマンドプロンプト)の

pi@raspberrypi:~$

に1行づつ下記を入力し、実行するだけです。私はPyTorch1.8.0を使いました。

# get a fresh start
$ sudo apt-get update
$ sudo apt-get upgrade
# install the dependencies (if not already onboard)
$ sudo apt-get install python3-pip libopenblas-dev libopenmpi-dev libomp-dev
# upgrade setuptools 47.1.1 -> 54.0.0
$ sudo -H pip3 install --upgrade setuptools
$ sudo -H pip3 install Cython
# install gdown to download from Google drive
$ sudo -H pip3 install gdown
# copy binairy
$ sudo cp ~/.local/bin/gdown /usr/local/bin/gdown
# download the wheel
$ gdown https://drive.google.com/uc?id=1oJITMYYGrlJ66Jw62-PHQLSZO7PT7Wg8
# install PyTorch 1.8.0
$ sudo -H pip3 install torch-1.8.0a0+37c1f4a-cp37-cp37m-linux_aarch64.whl
# clean up
$ rm torch-1.8.0a0+37c1f4a-cp37-cp37m-linux_aarch64.whl


実行後、次のコマンドでPyTorchのチェックを行い、正常に作動していました。

pi@raspberrypi:~$python3でpython3を起動し、

>>> import torch as tr
>>> print(tr.rand(5,3))

>>> print(tr.hypot(tr.tensor([1.]),tr.tensor([1.])))


もし、RaspberryPiの起動までの手順が不安な方は、私の過去のブログを参照してください。




2021年2月27日土曜日

倒立2輪ロボット(BALANC3R)を作ってみた

 倒立2輪ロボット(BALANC3R)を作ってみました。

参考にしたのはこのサイトです。

プログラムはEV3 Lab用ですが、このサイトからたどれます。

作動中の様子です。
ぎこちない動きではありますが、とにかく動いています。
気をつけないといけないのは、プログラムをスタートするとき、ロボットを出来るだけ垂直に立てていないと手を離すと自立走行せずに、直ぐに倒れてしまうところです。
これは、すべての倒立ロボットに言えることなのかな?






2021年2月13日土曜日

実践!Chainerとロボットで学ぶディープラーニング(3)

 前回の実践!Chainerとロボットで学ぶディープラーニング(2)では、ライントレースをルールベースの自動化で実施しましたが、学習ベースの自動化(簡単な深層学習)で実施してみました。

デモプログラムを実行して

データ収集(テキストp182~)
収集したデータを元に学習(テキストp188~)
学習したモデルを使ってライントレース(テキストp190~)

と3ステップ実施しました。


【データ収集】


カラーセンサーを使ったルールベースのライントレースでカメラが所得した画像とステアリングの状態を記録していきます。

【学習したモデルを使ったライントレース】
見づらいですがカラーセンサーはオフにして、カメラからの映像を元にステアリングを決めています。

ステアリングを決めると言いましたが、これはDeep LearningのMNISTデータセットで手書きの1〜9の数字を分類して、これは「1」だこれは「5」だと予測するような手法を使っているので、ステアリング値を決めるではなくpredict(予測する)ですかね。

でもこの手法は、いわゆる強化学習ではありません。私がMindstormsを買うきっかけとなった強化学習ではどのようにするのか?、これから勉強してからになりますので暫くお休みになるかも・・・。出来るのですかね・・・




2021年2月6日土曜日

実践!Chainerとロボットで学ぶディープラーニング(2)

 まずはライントレース

テキストのEV3組立図を参考にモデルを組み立てました。

カメラはまだセッティングしていません。

前回セッティングしたVNC接続でRaspberryPiを開き、LXTerminalを開きます。
LXTerminalにcd chainer-ev3と入力、続いてcd workspaceと入力します。
プロンプトがpi@raspberrypi:~/chainer-ev3/workspace $ になっていると思います。
続いてjupyter labと入力してJupyter-Labを開きます。

とりあえず「linetrace_controller1.ipynb」を選択し実行しました。












2021年1月30日土曜日

実践!Chainerとロボットで学ぶディープラーニング(1)

環境構築

今回Mindstorms EVを買うきっかけになった1つが、Mindstormsを使ってChainerによる強化学習を勉強できるとの記事を目にしたことです。それでアフレルからディープラーニングセットを購入しましたが、RasberryPiを使ったりハードルは高そうです・・・。

とにかくテキスト「実践!Chainerとロボットで学ぶディープラーニング」を参考にまず環境構築を行っていきます。

1.raspberry PiにLinuxOSをインストール

テキストp214からのLinuxOSのインストールは、2021年1月現在もっと簡単にできるようです。

PaspberryPiのホームページからRaspberry Pi Imagerをダウンロードします。


インストール後、Raspberry Pi Imagerを開きます。
CHOOSE OSでPaspberry Pi OS(32bit)を選びます。これで良いのかな?
次にCHOOSE SD CARDでPCに接続したSDカードを選択し、WRITEで書込みを実施します。
これでテキストp222の「1.6イメージファイルをSDカードに書き込む」まで終了です。
簡単になりました。

2.SSH有効化

SDカードにOSのインストールが完了したら次は、RaspberryPiにアクセスするために、通信環境(SSH通信)を整備します。

テキストもわかり易いですが、ラズパイ(raspberry pi)の初期設定をするよを参考にしました。「SSH有効化」のところからです。

ここから設定に使うファイル(raspberry-pi-setup-master.zip)をダウンロードします。
このzipファイルを解凍すると下記のファイルがあるので、sshファイルをOSを書き込んだSDカードに入れます。これでSSHの準備完了です。

3.WiFiの有効化

次にWiFiが使えるように設定します。
上の解凍したraspberry-pi-setup-masterの中にあるwpa_supplicant.confをテキストエディタか何かで開いてください。

ここで、

ssid="ssid"の""で囲まれた部分を使っているWiFiのSSID
psk="pwd"のpwd部分を使っているWiFiのパスワード

に書き換えて、sshファイルと同じくOSを書き込んだSDカードに入れます。これでWiFiの準備も完了です。

これでテキストのp225まで終了です。それではRaspberryPiを起動します。私はMacを使っていますのでテキストではp240のRaspberry Piへのssh接続になります。

4.SSH接続

作成したSDカードをPaspberry Piに挿入してください。バッテリーを繋げるとRaspberry Pi OSが起動します。

a)LANケーブルでのSSH接続
テキストではPCとLANケーブルで接続とありますが、同一ネットワーク上であれば何処でもOKです。
ターミナルを開きssh pi@respberrypi.localを入力します。
パスワードを要求されるのでraspberryと入力します。

下記のように表示されればssh接続でRaspberry Piにログインできました。

b)無線でのSSH接続
先程のLANケーブルを抜いておきます。
はじめにPアドレスを特定する必要があります。ターミナルを開きping raspberrypi.localを入力します。
画面にraspberrypiのIPアドレスが表示されます。今回は192.168.1.8でした。このIPアドレスは接続の度に変わりますので注意が必要です。なこのIPアドレスは、接続の度に変わると厄介なので固定することもできます。
先程のIPアドレスを使って、ターミナルからssh pi@192.168.1.8と入力します。

yes/noを聞いてくることがあるのでyes
下の画面が出てくればRaspberryPiとの接続完了です。
これでテキストp245まで終了です。

あとは、テキストに沿って

RaspberryPiの環境構築
RaspberryPi Cameraの導入
EV3の実行環境構築
JupyterLabの起動確認

を行っていけば環境構築は終了です。
と言いたいところですが、最後のJupyter Labの起動が上手くいきません。
セッティングで何処かにミスがあったのかも知れません。

そこで、VNC接続でRaspberryPiとに接続してJupyter Labを開くことにしました。
VNC接続も先のラズパイ(raspberry pi)の初期設定をするよに解りやすく載っていて簡単にできます。

1.PaspberryPiの設定
  • ターミナル(Macの場合)からping raspberrypi.localと入力しRaspberryPiのIPアドレスを確認します。


    この例では、192.168.1.9でした。

  • 同じくターミナルからssh pi@192.168.1.9と入力し、ssh接続をします。
    IPアドレスはそれぞれの環境で異なります。
    もし、WARNINGが出たら過去に接続した記録が残っているそうです。設定を一度削除します。


    ターミナルからssh-keygen -R 192.168.1.9と入力し、設定を一度消去後に再度ssh pi@192.168.1.9と入力してssh接続を確立します。

  • ターミナルからsudo raspi-configと入力し、RaspberryPiの設定画面を開きます。

  • 3のInternet Optionを選択し、P3のVNC選択、yesと進みます。
  • 1のSystem Optionを選択し、S5のBoot/Auto Login選択、B4のDesktop Autologin選択。この設定をしないとVNC接続ができないとの事。

  • 2のDisplay Optionを選択し、D1のResolution選択、リモート接続した際のRaspberryPiの画面設定を行います。

  • 8のUpdateを選択し、Finishで終了です。

  • ターミナルからsudo rebootと入力しRaspberryPiを再起動します。


2.PCにVNCアプリ「VNC Viewer」をインストール

VNC CONNECT画面で、RaspberryPiのIPアドレス192.168.1.9を入力すれば接続完了です。

Username:pi
Password:raspberry

です。