UnitVによるライン画像認識
ライントレースってどうやるの?
今回のお題は、RoverCを走行路に書いたラインにそって走らせることです。
そのためにはラインを認識する必要があり、UnitVを使ってラインの画像認識を行います。
僕は、約38年前に一次元イメージセンサやビジコンを使った画像処理システムを開発していましたが、あのころは原始的な言語を使ってプログラムを作っていました。
今回は、Maixpyという開発環境とmicropythonという言語を使ってプログラムを作るので、それらに関するドキュメントをまずはネットで探しました。
まず探したのは、Maixpyに関するドキュメントです。
この中にMachine visionの項があり、LCDへの表示方法、カメラセンサモジュールの使い方、画像認識事例がでています。
また、デモ用スクリプトの情報がgithubに入っています。
下に示すフォルダ内にカメラの設定から顔認証というようなアプリまで、画像処理に必要なデモスクリプトが入っています。
これは大変参考になるものです。
これらのスクリプトを理解しようとしたらmicropythonの関係するクラスの情報も必要になります。
micropythonのクラスに関する情報は下のドキュメントのOpenMVに関するライブラリの中に纏まっています。
この中にある、image - machine visionとsensor - camera sensorのクラスに関する記載内容を参考にしてデモスクリプトの意味を理解していきました。
https://docs.openmv.io/library/omv.image.html#
さて、それではMaixpyを動かしましょう。
Maixpyを使ってUnitVの動作確認ができます。
動作確認ができるということはプログラムを動かして結果の確認ができるということです。
ということで、具体的なライン認識をさせながらUnitVの取り付け位置等ハードの修正やプログラムの修正を進めていきましょう。
まず、UnitVをパソコンに繋ぎMaixpyを起動します。
起動したら下のような画面が出ます。
画面には、左にプログラムコードが、右上にカメラの画像や処理結果を表示するためのウインドウが、その下にR、G、Bのヒストグラムが出ます。
これらの情報を見ながら調整やデバッグを行います。
今回の実験の写真を添付します。
白紙にマジックで黒い線を描いています。
その上にRoverCを載せています。
RoverCには、レゴで足場を組んでその上にUnitVを載っけています。
デバッグなのでUnitVとパソコンをUSBで接続しています。
Maixpyを操作してUnitVとの接続を確立しプログラムをUnitVに送ることでパソコンの画面に処理結果が表示されます。
RoverCとパソコンの画面の両方が入った写真がコレです。
パソコンの画面右上に黒い線が表示されていますが、これが白紙に描いた黒い線の画像です。
処理画面をよく見てみると下のところに黄色いタイヤが写っています。
その影響のためか、黒い線の中心線(画面の白線)が本来の中心線に対して少し傾いているように見えます。
これを改善するためにUnitVの取り付け位置を前方に少し出しました。
その甲斐あって処理結果に表示された白線を変更前に比べて黒い線の中心線に近づけることができました。
何となくですが、うまく認識できていると思います。
これは期待できそうです。
ライン画像認識プログラムについて
今回使用したUnitVのプログラムは、
sensorやimageのようなライブラリの読み込み、
カメラの初期設定、
カメラからの画像入力、
入力した画像の不要領域のマスク処理、
を行った上で、
画像に対して最小二乗法で認識した線分の線形近似を取得
することで黒い線の中心線を求めています。
ステップ数は20ステップ程度です。
凄いですよね。
便利になったものです。
次回は、いよいよUnitVによるライントレースでRoverCを動かします。
では、また。