天体モデリング - 小惑星イトカワを可視化する
本投稿の目的
本投稿では、筆者が大学時代に感じていた、「天体は実際にはどんな形状をしているのか?」の疑問に対して、一例として日本の探査機「はやぶさ」が目指し、サンプルリターンを果たした小惑星イトカワをモデリングし、可視化することで解決する。また、任意の天体についても、公開されている点群データさえあれば可視化することができることを紹介しようと思う。
可視化に用いたツール
本投稿で紹介する可視化結果を得るために使用したツールは以下である。本投稿の目的に即して、下記に記載の点群データは小惑星イトカワの点群データに対応する。
・公開されている天体の点群データ (https://data.darts.isas.jaxa.jp/pub/hayabusa/shape/gaskell/)
・点群データの変換プログラム (後述)
・可視化( Blender, https://www.blender.org/download/)
公開されている天体の点群データ
まずは自分が可視化したい天体の点群データを探すところから始まる。これらは探査機に搭載された光学航法カメラやLiDARから得られる情報を用いて復元されたデータであり、JAXAの宇宙科学ミッションで得られた微小重力データを集めたデータベース (Data ARchives and Transmission System =DARTS, https://darts.isas.jaxa.jp/)が参考になる。
イトカワの場合は、先に記載の
にアクセスすることで点群データ(itokawa_xxxx.stl)をダウンロードすることができた。この.stlというファイルには3次元形状を構成する三角形メッシュに関する情報が格納されている。例えば下記のように、ある三角形メッシュの法線ベクトルの情報と、その三角形を構成する3つの頂点の座標が単調に並べられている。
#itokawa_f0049152.stl
facet normal -0.263465 0.317827 0.910809
outer loop
vertex -0.151440 0.081760 0.074960
vertex -0.151080 0.079250 0.075940
vertex -0.147100 0.082320 0.076020
endloop
endfacet
ただし、.stlファイルの場合、ある頂点を複数の三角形で共有していてもそれを認識せず、重複して「頂点が二つあると思って」記述されている。つまり、三角形メッシュごとに情報が格納されているというわけである。これでも情報としては不足はないが、モデリングすることを考えると、無駄のある情報の整理の仕方ということになっている。
点群データの変換プログラム
そこで三角形メッシュごとの情報をもつ.stlから頂点の情報へ整理した.objファイルへ変換する。変換プログラムはpythonによれば以下の通りである。事前にtrimesh(三角形メッシュを扱うライブラリ)をimportしておけば処理は一、二行で書ける。meshには.stlファイルで重複して書かれていた頂点の情報を一つにして面の情報と、頂点の情報を独立に数え上げている。
import trimesh
mesh = trimesh.load("itokawa_f0049152.stl")
mesh.export("itokawa.obj")
Blenderによる可視化結果
.objファイルを得ると、あとは3Dモデリングアプリケーション上で可視化すれば良い。今回はBlenderを用いた。.objファイルをimportすると、目的通り、下記のようなイトカワの姿をモデリングすることができた。どこかでみたことのあるイトカワの姿と、おおよそ一致する。(実際にはこの点群データの方が、我々の記憶よりも真値に近い。。)

最後に
今回は小惑星イトカワを例に、天体の点群データをもとにモデリングを行った。イトカワに限らず、点群データさえあれば、それを引っ張ってきて、必要に応じてデータ系列を変換すればモデリングできると考える。ご興味があれば、試してみて欲しい。
Discussion