Raspberry PiとPiカメラによる寸法計測(1)

こんにちは。
今回は「Raspberry PiとPiカメラによる寸法計測」の紹介です。
筆者が「Raspberry Pi」と「Python」に触れたのは、ここ1,2年でまだ初心者の段階ですが、多品種少量生産の工業用途や、中小企業でさえ商業化が難しいニッチな分野に活用できないか、と思い模索しています。また、今回の内容は表題のようなちゃんとした寸法計測の話ではなく、Raspi+Piカメラでどうやれば簡単に寸法計測が出来るかを実験をした初心者の最初の一歩です。当然、もっと出来ることがWeb上で紹介されていることは承知しています、筆者の知識と理解、実験が進んでいないだけです。ただ本人は内心最初にしては良くできたなと自己満足していますが、ご理解を。

PC-8001(筆者の世代以上しか知らない?!)でBASICを動かした世代としては、RaspiでPythonを動かしたとき、懐かしく、親近感を覚えました。機能も能力も雲泥の差がありますが、BASICもPythonもインタプリタで、コンパイラの嫌いな筆者としてはPythonが組込みシステムに普及することを願うばかりです。また、出来ればカスタムで設計した専用のマイコンボードでも動くようになると、産業用途に大いに使えてありがたいのですが。RaspiもSDカード以外のメモリと電源制御がそれなりに解決できれば、工業用途に道が開けると考えています。すでにサードパーティ等で作られて筆者が知らないだけかもしれません。

筆者が30数年前製作した計測器の数字表示を、当時分離した別室からガラス窓越しにカメラで読み取りたいと思いましたが、0.1秒間隔で更新している表示を処理する、安価で簡単に使えるレベルのハードやカメラ、ソフトも無かったため断念しました。その後しばらく画像処理には縁がなく、最近Raspiや画像処理の技術を見ると、安価、簡単に製作出来そうだったので試し始めました。計測値のデータ伝送は無線通信が可能になっているため、データ伝送だけなら画像で表示を読み取る必要もありませんが、画像処理が必要な特殊な用途があるのでは?と考えています。

カメラと画像処理による寸法計測器は多種多様な製品が市場に存在しますが、基本原理のステレオカメラやOCR方式で三角測量するのが一般的と思います。Raspiでも同じステレオカメラと三角測量で出来ることは解っているのですが、筆者は同じ事をするのが好きではない性格なので、最終的に1台のカメラでなるべく簡単に計測することを目標としています。当然現在は出来ないのですが。
今回はRaspi+Piカメラ+Pythonの勉強もかねて、どうゆうことが出来るのか実験した一部を紹介します。使用したのはRaspberry PiⅢBとPiカメラ、Pythonでプログラムを書いたのですが結果的にOpencvも使うことになりました。

Raspiを動かすまではそれなりに苦労しましたが、環境が整えばPythonやOpencvでいろいろ作れそうなので楽しみです。作業場所も無いためVNC接続してパソコンで動かしていますが、SDカードのOSインストールからVNCでパソコン操作するまで、かなりの量の説明(書)をWebで調べて、動作するようになりました。まとまった説明書やガイドがないままWeb検索は結構しんどかったのですが、新しいセンサの開発や今まだなかった機器の開発には、ゼロから原理原則を調べて完成させるわけですから、同じように苦労はしますが、必要な作業(道のり)と思えば技術者としては当たり前と考えます。何も解らないところから苦労して調べて、自分の技術として吸収することを技術者は厭わずやりましょう。それが自分の成長につながります。

それにしてもRaspiは、まだまだマニアの領域(知識のある人が使うもの)と筆者は思っています。この低価格で高機能を実現していることは大変素晴らしく、驚嘆するばかりですが、工業用途の制御系に「簡単に組み込める」ようなハードモジュールタイプのシリーズが出来ることを望みます。消費電流も1/10以下にならないかと思っていますが、専門家や次世代の技術者がいずれ実現してくれるものと期待しています。PythonもRTOSのように使えるものがあるのか、筆者の理解が進んでいないので解りませんが、自作のCPUボードでPythonをRTOSと同じ感覚で動かして、制御系に使えると面白いのではと考えます。言語の種類が違うのは解りますが、詰まる所現在は「0,1」で動いているわけですから、何とか早期の実現を期待したいです。

幅(W)と長さ(L)の測定原理

今回の寸法計測は筆者が初めて使うRaspiやPiカメラ、Python、Opencvのため、条件を下記のようにしました。
1. 寸法の基準は、既知のスケールを計測物と同時に読み込み基準値とする。今回は150mmの寸法を一緒に撮影し、カメラのピクセル数から絶対値を求めた。
2. 高さ(H)は別の距離センサ(ToFセンサ)で測定する。又は既知の寸法としておく。今回はToFセンサがうまく動作しなかったので、計測物の高さを固定値として入力した。
3. カメラの高さ位置は既知の寸法(固定値)とする。
以上を条件に、カメラの画素数から幅(W)と長さ(L)を以下の計算式(図中)で求めました。

計算式の詳細は別回で解説したいと思います。簡単に言えば、基準長さとして撮影した画像から一画素が何mmに相当するかを求めておき、計測物の影(画像)と高さ(H)からWとLを計算します。今後はカメラの高さを固定(既知)し、カメラの画素が何mmに相当するかを製作時に校正し、計測対象の貨物高さをToFセンサなり距離センサで測れば、簡単に寸法を計測できることになります。今回は基準寸法として150mmのスケールを計測物と同時に撮影し絶対値を計算しましたが、カメラの分解能とカメラの高さ位置を固定すれば〇〇mm/画素が解りますので、基準寸法は読まなくても良くなるはずと考えています。

今回は何もかも最初から動かしたため、机上の実験で以下のような条件で計測しました。

計測画像と寸法計測の計算結果を下記します。

カメラの分解能(ピクセル数)に対して、計測物の寸法や撮影範囲が狭いこともありますが、予想に反してかなり精度よく計測できたと考えています。ラフな条件の実験でもこれだけの精度で計測出来るのはカメラの高性能化や処理系の進歩なのでしょうか。もっとも読者においては当たり前の話で、もっといろいろなことが出来ると、歯がゆい思いをしているかもしれません。ただ、最近始めた初心者の筆者としては最初に作ってこれだけの結果が出たのは予想外でした。
カメラによる貨物の寸法計測装置は市場に多数存在します。大型の機器や逆に小型で高分解能な機器等など、外形を高精度で3D計測するために高度で最先端の技術が使われています。しかし、高価で高性能でも大型で物流倉庫などの広い設置場所が必要であったり、高価で高分解能でも計測範囲が狭かったりなので、コンビニなど安価な機器でかつ、スペースのない場所に設置しなければならない用途には向きませんでした。宅配便などは大半が4,50cm2程度以内で各辺0.5cmの精度があれば十分サイズ分けが可能と思っています。安価で小型の計測機器が望まれます。

今後の実験予定

今回は初めて使い、どんなことが出来るかを試す実験でもあったため、プログラムもぐちゃぐちゃでもっと解りやすく整理できたら、掲載して行きたいと思います。PythonやOpencvのコマンドは参考書とWebを参考に動作を確認しながら作っていましたが、ひとつのコマンドの機能が多すぎて、良し悪しと思えました(BASICでも同じようなところはありましたが)。拡張子で出来るのでしょうが、動作やリストを解りやすくするためコマンドは単機能にして、2,3行に分割して作りました。コマンドの理解不足もありますが、どちらを使うかは好みのように思います。行数が増えても動作とプログラムが解りやすいリストにしたいと思います。ToFセンサもRaspi用ではなくパソコン向けのボートだったため、うまく動かすことが出来ませんでした。今後はRaspiと相性の良いセンサを入手して実験したいと思います。

今後の実験予定としては、
1. カメラ位置を2m程度の実用的な高さにして、Piカメラの視野角と分解能を確認する。Piカメラの視野角は広そうなのでもう少し狭いカメラを入手するか、レンズ等で絞れないかを考え実験する。分解能も2mの高さでは不足しているように思えるので、USBタイプも調査する予定。
2. Raspiに相性の良いToF距離センサを入手して評価する。
3. 寸法の絶対値の基準を作り出す実用的で簡単な方法を考える。〇〇mm/画素の校正方法を確立する。
4. 計測結果の画面表示を3Dぽくお洒落な表示画面にする。
以上のようなことを考えています。
Raspi、Python、Opencv、画像処理等も始めたばかりで初心者ですが、少しずつ勉強しながら進めて行きたいと思います。流行りの「AI」を活用すると良いのかもしれませんが、将来の課題として一歩ずつ地道に取り組みたいと思います。

今回はあまり参考にならなかったかもしれません。始めたばかりなので実績もノウハウもありませんが、試してみたいことは山ほどあります。どんな技術革新も初めは小さな一歩から始まりました。地道に取り組んでゆきましょう。次回以降、詳細や実験の進捗を紹介して行きます。

ご意見、ご要望、ご質問をお待ちしております。

 

参考文献:
「Python」、「OpenCV」、「Raspberry Pi」の各書籍。
Web資料多数:Web資料がなければRaspiは動作させられなかったかも?ホンマに感謝ですわ!。