機械学習でロボット制御してみた

 

python,機械学習、初心者です。間違いなどあるかもしれませんがよろしくお願いします。

 

動機

部活でマインドストームのEV3を使ってロボット制御しています。そこで、色を検知して制御をしているのですが誤検知したり検知できなかったりするので、そこで今何かと話題の機械学習をすることにしました。

 

方法

色は線形分離で分けることができるので(多分)、単純パーセプトロンを使って区別をしようと思います。流石にマインドストームで学習するのは厳しいのでMacで学習をします。センサーはハイテクニック社のカラーセンサーを使います。

 

マインドストームでポジティブとネガティブのデータを100個取る

              

そのデータをmacに送る

              

Pythonで学習プログラムを動かす

                                                 

学習結果をEV3のプログラムに反映させる

 

というのが大まかなEV3で機械学習を使ったプログラムを実行する流れです。この方法なら、処理速度の心配もないと思います。

 

プログラム

こちらのサイトを参考にしました。

qiita.com

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