DreamerDreamのブログ

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

小学生でもわかる!3Dスキャナーのしくみ

「3Dスキャナー」どうして物体の形状が3Dで取得できるのか不思議ですよね?

構造や理論が何やら難しそうと受け取られる方もあるでしょうけれど、回転テーブルとラインレーザーを使った3Dスキャナーの構造を数字や難しい用語を使わずに、出来るだけ易しく頭でイメージしていただけるように纏めてみました。

このような形式の3Dスキャナーが対象です↓

dreamerdream.hateblo.jp

 

3Dスキャナーに対する子供からの質問に困ったときにご活用ください。

 

図はレーザーポインターの光の通過点を赤色とし、回転テーブルが黒色で表しています。

何も無い状態を真上から見た図と、下段にはカメラを通して見た回転テーブルの図を書いています。

f:id:DreamerDream:20181221132324p:plain

 

 

まず、この回転テーブルにスキャン対象物を置くと、レーザーが対象物に遮られ、対象物のレーザーが当たった点が反射して距離が解るのです。

下段の図では対象物は除外して、レーザーを認識した点のみをデータとして記録しています。

f:id:DreamerDream:20181221132338p:plain

何故距離が解るのかといいますと、何も無い状態であれば青色十字を超えてレーザーが走っていたのに対し、対象物がある場合は十字の手前でレーザーが遮られています。

遮られた点はレーザーの「反射」という型でカメラで認識できるので、ポイントとして記録することが出来ます。テーブルにポイントとして記録しています。

 

 

レーザーポインターは同じ位置のまま、テーブルと、先ほど記録したポイントを半時計回りに少し回転させて同じように点を記録します。

f:id:DreamerDream:20181221132347p:plain

すると、先ほどの点とズレた新しいポイントを記録することが出来ます。

4回、回転させて計5点記録するとこんな感じです。

f:id:DreamerDream:20181221132356p:plain

ポイントがどんどんズレてズラーっと並んでいますね。

 

ドンドン回転させて記録点を残して、半分回転させたぐらいのところで止めてみます。

f:id:DreamerDream:20181221132406p:plain

この記録データの軌跡を見ると「角」のある対象物であることが解りますね。

 

 

このように、レーザーポインターがあれば1点ずつポイントを記録することができ、回転テーブルで回転させることで物体の形状をある程度把握することが出来るということが解りました。

 

 

さて、今まで記録していたのは「平面」です。

これを「立体」にするにはどうすれば良いでしょうか?考えてみましょう。

 

答えは簡単!

レーザーポインターの数を上下に増やせば良いのです!

 

いくつかのレーザーポインター、もしくは1つのレーザーポインターを上下に移動させて平面と同じように一層ずつ記録して、各層を重ねるとこのように記録されます。

どうです?積み重ねられると立体に見えますよね?

f:id:DreamerDream:20181221132416p:plain

実際に、1つの測定ポイントを上下移動させ、平面として記録して3Dスキャナーを作成した人のムービーがあります。


Arduino 3D-Scanner

↑この作品はカメラではなく恐らくToFセンサーを使ったものでしょう。

 

 

レーザーポインターを無数に増やしたのが「ラインレーザー」です。

ラインレーザーは1つのレーザーをレンズにより1つのラインとして照射しているためある意味では無数の上下に積まれたレーザーポインターを照射しているのと同じです。

記録できる層の数はカメラの性能に依存します。大きな画像で取り込めればそれだけ層が細かく記録されます。

f:id:DreamerDream:20181221132426p:plain

回転テーブルとレーザーを使った3Dスキャナーではこのようにラインレーザーを対象物で反射させ、カメラで各反射ポイントをデータとして記録して3Dモデルを作り上げているのです。


Piclop (Raspberry Pi 2 + FreeLSS version of BQ Ciclop) 3d laser scanner in action

 

ですのでカメラとラインレーザーポインターの精度、対象物の反射率や透過率が重要な要素になるのです。

dreamerdream.hateblo.jp

 

kampa.me