機械学習でロボット制御してみた
python,機械学習、初心者です。間違いなどあるかもしれませんがよろしくお願いします。
動機
部活でマインドストームのEV3を使ってロボット制御しています。そこで、色を検知して制御をしているのですが誤検知したり検知できなかったりするので、そこで今何かと話題の機械学習をすることにしました。
方法
色は線形分離で分けることができるので(多分)、単純パーセプトロンを使って区別をしようと思います。流石にマインドストームで学習するのは厳しいのでMacで学習をします。センサーはハイテクニック社のカラーセンサーを使います。
マインドストームでポジティブとネガティブのデータを100個取る
↓
そのデータをmacに送る
↓
Pythonで学習プログラムを動かす
↓
学習結果をEV3のプログラムに反映させる
というのが大まかなEV3で機械学習を使ったプログラムを実行する流れです。この方法なら、処理速度の心配もないと思います。
プログラム
こちらのサイトを参考にしました。
RGBで分類するので、3次元で考えます。2次元だと線で分類しますが3次元は面で分類するという考え方になります。
結果
Color | Result |
空中 | Black,Blue |
White | White |
Black | Black |
Green | Green |
Red | Red |
Yellow | Yellow |
Blue | Blue |
大体合ってますが空中でBlueが出るのは嫌なので、Negativeデータに空中のRGBを追加します。
Color | Result |
空中 | Black |
White | White |
Black | Black |
Green | Green |
Red | Red |
Yellow | Yellow |
Blue | Blue |
完璧です!
感想
すごい!が一番最初の感想です。ロボットを制御しているとWhiteとRedの間の部分の色とかも検知したい時があるので、機械学習をすればできそうな気がします。また、色だけではなく他の部分でも応用ができそうです。なので、今後は機械学習を使ったライントレースなどに挑戦したいと思います。
参考サイト
パーセプトロンの学習規則をPythonで実装 - Qiita
pythonでcsvを読む方法 - 標準ライブラリ, pandas, numpy - minus9d's diary