DreamerDreamのブログ

夢想家の夢です。〜揚げたてのモヤっとしたものをラフレシアと共に〜

3Dスキャナーを自作する ④調整する

前回、とりあえず出来たので動作させましたが結果があまり思わしくありませんでした。

dreamerdream.hateblo.jp

 

まあ何でも一発で完成なんてこたぁ無いですよね^^;

気を取り直して調整出来るとこを調整します。

 

まずはFreeLSSのSettingsメニューからレーザー、カメラの距離をきちんと調整します。

 (記事下の方に設定方法の解りにくかった箇所を記します。)

カメラやレーザーの位置がおかしいと当然出来る図もおかしくなります。

ちなみに、FreeLSSのXYZ軸方向は3Dプリンターのそれとは異なる事に注意です。

3DプリンターのXY軸方向は真上から見下ろした状態で、高さがZ軸ですが、FreeLSSのXY方向はカメラを通して左右がX軸、上下がY軸、奥行きがZ軸です。

原点は回転台の中心と考えます。

f:id:DreamerDream:20181214133443p:plain

 

Settingメニューでこの辺がごっちゃになると軽くパニックですので図示しておきます。

 

その他調整中にいろいろと気付くことがありました。

・取得するファイルを.stlから.plyへ変更しました。

3Dプリンター出力に適した.stlファイルですが色情報が無いので何を取得しているのか解り辛いのです。.ply形式は色情報が反映されるので変なデータであってもどこが壁だとか物体だとかが解ります。

・背景と回転台を黒色である必用があります。

必ず必用という訳ではなさそうですが、その方がレーザー光と外光との判別がうまくいくようです。

 

 

スキャンは左右どちらか一個のレーザー、あるいは両方のレーザーを使った3パターンの検出が可能だそうです。

両方使った方が精度が良いだろう!と踏んで設定していたのですが実験的にレーザーを分けてみたところ、それが仇になってうまくスキャン出来ていなかったことに気が付きました。


FreeLSS実験2

左のレーザーでスキャンした場合

f:id:DreamerDream:20181212161404p:plain

うおっ!それっぽいの出来てるじゃんっ!!(なんか歪んでる気がするけど)

 

右のレーザーでスキャンした場合

f:id:DreamerDream:20181212161417p:plain

新種のキノコかな?

 

左のレーザーのほうが表面が綺麗に検出できています。

が、少し押しつぶされたようにも見えます。

右のレーザーでは凹み部分が上手く認識できていないようです。

全体の型は右の方が合っているように思います。

両方を合わせて比べると

f:id:DreamerDream:20181212161434p:plain

全然違います。んー、これではうまくいかないはずです。

 

ちなみに、両方のレーザーを使ったモードでスキャンしたものがこちら

f:id:DreamerDream:20181212161447p:plain

なんだこれ??

ちなみに、上の輪っかはどうやら壁をスキャンした結果のようです。

 

とりあえず結果の良かった左のレーザーで他のものもスキャン実験することにします。

コーヒーカップのスキャン

FreeLSS実験3

 

そうそう、取手が取れた方が収納は楽だよねー!っておいっ!!

f:id:DreamerDream:20181212161609p:plain

取手が勝手に取れました!

 

いろいろスキャンして調整してみて解った事が1つあります

どうやらカメラの水平がとれていない!

ということです。

 

カメラのマウントを適当なアルミ板にしていたので細かな修正が効きません。

f:id:DreamerDream:20181214101606p:plain

仕方ないので3Dプリンターで微調整の出来る部品を作って改良することにしました。

f:id:DreamerDream:20181214133819p:plain

 

 

各軸の設定の方法です

※注意 (以下、設定項目で日本語表示されているところはGoogleブラウザの自動翻訳によるもので、実際は英語です。)

例えばカメラのY軸(回転台からカメラまでの高さ)を90mmに設定した場合

f:id:DreamerDream:20181213120338p:plain

カメラのガイドを通してみるとこのように見えます。

赤い十字を参考に垂直、水平が調整できます。

しかし、これでは回転台の中心位置が解りません。

f:id:DreamerDream:20181213120315p:plain

 

カメラの高さを75mmに設定してみますと

f:id:DreamerDream:20181213120405p:plain

見えますか?

f:id:DreamerDream:20181213120417p:plain

垂直の赤ラインの下の方にちょこっと水平の赤ラインが出ています。 

ここが回転台の中心になるようにカメラを合わせるようです。

 

f:id:DreamerDream:20181214120147p:plain

綺麗に調整できました。

 

レーザーとカメラ位置の設定はX軸とZ軸で行なうようです。

レーザーとカメラのZ軸は固定、つまり同じ位置に設定する必用があります。どこに合わすのかといいますと↓

https://lh3.googleusercontent.com/-AQEzip0HUfg/VOS27ldH5ZI/AAAAAAAAAAk/MBF1XBgq9xo/w770-h491-no/Locations.png

要はレーザー角度の問題なので実際にはカメラ手前でも奥でも問題無いようです。

カメラの中心軸から見てレーザーの延長線上の点をレーザーの距離Xとして設定します。

注意点として、右レーザーは「160mm」等と設定しますが、左レーザーは「-160mm」と、マイナス値になるということです。(僕はここの設定ミスしてきちんと像が作れずに悩みました。)

 

 

レーザー光はレーザーモジュールの適切な位置を指定した後、キャリブレーション設定することで適切なラインを読むことができるようです。

f:id:DreamerDream:20181213120501p:plain

方法ですが、公開されているデータの中のキャリブレーション用柄を印刷して垂直に立てます。

回転台の中心軸に置き、キャリブレーションボタンを押すだけです。

f:id:DreamerDream:20181213120519p:plain

成功です。

f:id:DreamerDream:20181213120448p:plain

 

とりあえず調整後のスキャン実行をしてみます。

左レーザーでスキャンした結果

f:id:DreamerDream:20181213125601p:plain

前のものと比べてみるとカメラの水平が取れたからでしょうか?しっかりと垂直になっています。

f:id:DreamerDream:20181213125633p:plain

右レーザーも、前よりは良い感じです。

f:id:DreamerDream:20181213125657p:plain

 さて、この切れ目は?

ひょっとしたら回転がうまくいっていないのかも?

 

立方体スキャンで実験してみます。

f:id:DreamerDream:20181214085914p:plain

 

ありゃりゃ。

f:id:DreamerDream:20181214085818p:plain

これは、物理的に360°回転していないにも係らず360°スキャンした結果ですね。

確認してみます。0°時点

f:id:DreamerDream:20181214085914p:plain

360°回転後

f:id:DreamerDream:20181214085926p:plain

ソフトウェア的な問題なのか物理的な問題なのかの切り分けが必用そうです。

 

モーター軸を確認してみますと

f:id:DreamerDream:20181214101527p:plain

オイルが染みてきています。

もしかしたらこれがプーリーを滑らしてしまったのかもしれません。

実験的にプーリーに傷を入れてみます。

f:id:DreamerDream:20181214101539p:plain

0°時点

f:id:DreamerDream:20181214101323p:plain

360°回転後

f:id:DreamerDream:20181214101332p:plain

ありゃ、今度は行き過ぎてしまってる?

とりあえずこのままスキャン

f:id:DreamerDream:20181214104854p:plain

あんれー?マシにはなってるけど完全じゃありません。360°回転し切れていません。

もしかしたら他にも原因があるかも、、360°回転で問題が無く、スキャン中に問題が出るということから、物理的な要因としてはプーリーにダイレクトに回転が伝わっていない可能性が考えられます。伝達が輪ゴムですから各ステップごとにイチイチ伸縮しているのかも?

ソフト的な要因としてはラズパイからモータードライバへ適切な信号が送られていないのかもしれません。

とりあえず物理的な方から攻めてみます。
輪ゴムプーリー式のものを

f:id:DreamerDream:20181215095932p:plain

ギア式に変えて

f:id:DreamerDream:20181215095943p:plain

ギアに換えると回転方向が逆になるのでモーターも逆回転が必用です。ステッピングモーターのDIR信号のLi/Loを切り替えると出来るのですが、そのような設定項目が無かったので物理的に切り替えます。

ステッピングモーターの場合、どちらかの層の一方の配線を入れ替えるだけです。

f:id:DreamerDream:20181215095955p:plain

写真の方向が違いますが、このようにすれば逆回転ができます。

f:id:DreamerDream:20181215100006p:plain

ステップモードも1/4モードから1/8モードへ変更

ステップ反応速度も脱調しないよう変更。

f:id:DreamerDream:20181215100240p:plain

テストで360°回転も無事に成功!

ギア式にして振動が大きくなったので検出物にも両面テープを貼付けました!

これで物理的要因は排除した!カンペキ!

いざ!スキャンしてみた結果

 

!!?

f:id:DreamerDream:20181215100359p:plain

見事な三角!!!
なんでやねんっ!!

 


そういえば、スキャン中に時々ステップの振動が飛んでる気がしました。
もしかしたらソフト側の問題でしょうか?

以下のようにいろいろと実験してみました。

 

実験1:とりあえず、ステッピングモーターのフルステップモード できちんと360°回転(120stepモーターをギア駆動、ギア比1:5なので600step)できるか試しました。

結果:問題無し!

 

実験2:フルステップのままスキャン実行しました。

結果:動かない!(うんともすんとも)

 

実験3:フルステップモードのまま倍の1200step指定で360°か回転するか試しました。

結果:当然2回転しました。

 

実験4:2回転すると予想しながら1200step指定のままスキャン実行しました。

結果:360°回転でキチンとスキャンできました!(???)

 

実験5:モータードライバ1/2ステップモードにして2400step指定でスキャンしました。

結果:4面体が6面体になりました。

 

実験6:実験5の結果を踏まえて1800step指定でスキャンしました。

結果:きちんと四角になりました!

f:id:DreamerDream:20181217143459p:plain

よくわかりませんが、原因はソフトウェア側の問題というか、勝手なモーターに変えたこちらのせいですがよく解らないなりに解決しました。

フルステップモードで1200step/360°か、1/2ステップモード1800step/360°指定でとりあえずスキャンできるようにはなりました。

最初のに比べると精度もすごくよくなっています。

f:id:DreamerDream:20181217145038p:plain

初っぱなでグチャグチャデータだった置き時計のスキャン

f:id:DreamerDream:20181217161142p:plain

ぐちゃぐちゃですが時計?らしきものは取得できているようです。

反射する材質+透明ガラス+黒色材質というスキャンには悪条件の揃ったテストには辛いオブジェでした。

 

まだまだ改善の余地はありますが今回は大まかな形状が取得できたので今回はこれでOKとします。

 

ちなみに、スキャン中にプビューすると黒い回転台にモデルが形成されていくのが見えます。これは地味に楽しいです。

f:id:DreamerDream:20181217143440p:plain

 

両方のレーザースキャンモードで左右のレーザーの位置の設定がおかしいと、このようにズレてスキャンされます。

f:id:DreamerDream:20181219153920p:plain

スキャンをプレビューで確認しながら微調整しましょう。

f:id:DreamerDream:20181219153931p:plain


 

実験の途中、ギア歯をヘリカルギアにアップデートしました。15mm+75mm

f:id:DreamerDream:20181217143807p:plain

こういうのをサクッと作れるのが3Dプリンターの良いところですよね。

dreamerdream.hateblo.jp

 

面倒なギアの作成はこちらのサイト↓を利用させていただきました。

Gear Model For 3D Printer

 

レーザーはレンズの精度が悪いのか、広がる傾向にあったため複数段のレンズをテープで塞ぎ1つに絞りました。レーザーは細い方が良さそうです。

安物のレーザーだからなのか、どうも最初から左右のレーザーの広がりが違うようで綺麗にスキャン出来る方だけ使うことにしました。

f:id:DreamerDream:20181217151457p:plain

 

 

 

 

今回は長くなりましたが、とりあえず無事に動いたので今のところ調子の良い設定値を備忘録として残します。

f:id:DreamerDream:20181219162431p:plain

f:id:DreamerDream:20181219162443p:plain

f:id:DreamerDream:20181219162453p:plain





 

動作の様子


FreeLSS実験4

 

マシン全体は電源含めこのような感じでまとまりました。

f:id:DreamerDream:20181219161945p:plain

<今後の課題>もっと精度を良くするために

・レーザーをもっと質の良い物(広がりの少ないもの)に変える。

・フルステップモードのままギアを足してステップ数を増やしてみる。 

・光沢のあるオブジェの検出が難しいので乱反射を防ぐ為に偏光板を利用してフィルターをかける。

・外光の影響も関係しそうなので暗室にしてLED照明を付ける。

・レーザー以外の赤色光線を除外する(カメラとラズパイの動作赤LED隠蔽、照明を青緑光のみにする)。

 

長くなりましたが・・・

<まとめ>今回の設定や実験で解ったこと。

・カメラレビューモードの360°回転が成功したからといって実スキャンで360°回転できるとは限らない!

・フルステップモードが一番精度良い。

・左レーザーのX軸設定は「−(マイナス)」値の指定をしましょう。

・レーザーは精度が良ければ1つで作れる。

・レーザーは精度の良い細いラインのものが望ましい。

・レーザー2つのモードだと互いのレーザー距離設定がシビア。

・レーザーは不検出エリアが増えるのでカメラからあまり離しすぎない方が良い。

・ギアードモーターは煩い。

・回転は一方向(半時計回りのみ)なのでギアードモーターでもバックラッシュの問題は起こらない。

・ラズパイ2でも3でもスキャンスピード自体はそんなに変わらない。

・レーザーのキャリブレーションはSettingsで指定したスキャンに使う側のレーザーのみに対して行なわれる。

・スキャン対象物は白色マット調の物が望ましい。

・黒色、反射する白色や金属、透明のものはスキャン困難。

・僕みたいにテキトーな材料で作ると後で調整が大変(あたりまえ)。

 

とりあえず今回取得したようなそのままでは使えないようなデータでも、例えば機械のパーツやスマホのケースを作る時には位置決めの参考になります。

3Dデータ取得後にソフトを使って表面処理をするともっと綺麗な3Dデータになります。

次回は、取得したデータの表面処理について触れます。

dreamerdream.hateblo.jp

 

https://cdn.profile-image.st-hatena.com/users/DreamerDream/profile.png私、(PONさん (@o_n_pon) | Twitter)を応援してくださるお優しいかたは15円から投げ銭可能ですので↓よりカンパをお願いしますm(_ _)m

kampa.me