【コンバーターファイターⅡ】MacOSでPotreeConverterの使用はできるのか?
アドベントカレンダー12月22日 森田浩徳
2013年9月8日
皆さんは何の日付かわかりますでしょうか?正確に言えば9月7日(現地時間)ですが、当時中学生だった僕は珍しく早朝からテレビの前でこの瞬間を見てました。そう、それは、「お・も・て・な・し」でお馴染み、第125次IOC総会で『東京オリンピック』の開催が決定した日になります。この瞬間にアジアでは初の同一都市複数回の開催が決まりました。日本では1964年が初めての開催となっておりますが、こちらもアジア初のオリンピックになっております。しかしあまり知られていないのですが、1940年に東京オリンピックの開催は予定されていたのです。残念ながら、日中戦争によって開催には至りませんでしたが。そう考えると、アジア初の同一都市複数回開催は1964年に決まっていたということになりますね。日本は高度経済成長による発展のイメージがありますが、1940年にはオリンピックが開催されるほどの都市になっていたことも感慨深いですね。
話が少し脱線したのですが、開催が決定した瞬間に、2020年の世界はどのようなものになっているのかということを考えました。僕はオリンピックでボランティアをやっているのか、何かの選手になっているのか、日本はメダルをいくつ獲得するのか、様々なことを考えていました。実際の世界ではコロナウイルスがパンデミックとなり、2020年に開催することができない結果となってしまいました。当時はそんな予想もすることはありませんでしたが、、、当時の都知事が猪瀬さんだったことも、時代の流れを感じますね。
2020年にはオリンピックが開催されると決定してから7年が経ち、7年前に特別な年になるであろうと思っていた2020年も、残り10日を切ってしまいました。2020年は何もすることができませんでしたが、、、唯一できたことといえば、それは「引っ越し」になります。先月中旬から今月初にかけて引っ越しを行い、10日にやっと光回線の工事が終わりました。つまり僕のゼミ論は10日ほどしか活動期間がなかったので、進捗は大目に見ていただけると助かります、、、
本題に入りまして、前回の構想発表で「ポイントクラウドデータを用いた三人称視点ドローンの検討」について記載させていただきました。詳しくは以下のリンクをご参照ください。
ポイントクラウドデータを使用する際に、サードパーティアプリケーションが不要であるPotreeを使用することになりました。
Potreeは無事に使用することができましたが、使用されるLASファイルをPotreeで活用できるようにコンバートをかける作業に梃子摺っていました。
Potree用にLASファイルを変換するには、Potree Converterを使用することになるのですが、このPotree Converterに関してはwindows版のみしか公開されていませんでした。そこでwindowsを活用し、コンバートを試みたのですが、以下のエラーが発生してしまいました。
まずこの問題を解決していくために、Potree Converterがどのような仕組みになっているのかを調べることにしました。
## Potree Converterとは
PotreeConverterは、大規模な点群のストリーミングおよびリアルタイムレンダリング用のオクツリーLOD構造を生成します。生成された結果は、Potreeを使ってWebブラウザで表示したり、PotreeDesktopを使ってデスクトップアプリケーションとして表示することができます。
バージョン2.0は完全に書き換えられており、前バージョン1.7との違いは以下の通りです。
SSD上でのPotreeConverter 1.7と比較して約10~50倍の高速化。
数千から数千万個のファイルではなく、合計3個のファイルを生成します。ファイル数の削減により、コピー、削除、サーバーへのアップロードなどのファイルシステム操作が数時間から数日から数秒から数分に改善されました。
標準のLAS属性と任意の追加属性のサポートが向上しました。開発中のフルサポート(int64やuint64など)。
オプションの圧縮は、新しいコンバータではまだ利用できませんが、将来のアップデートのためのロードマップ上にあります。
コンバータはバージョン2.0へと大きく進化しましたが、生成されるフォーマットはPotree 1.7でもサポートされています。Potreeビューアは、2021年にWebGPUの書き換えでバージョン2.0への大きなステップを踏む予定です。(原文を翻訳)
Potree Converterを紐解いていくと、最終的に実行する際のコマンドが、
PotreeConverter.exe <input> -o <outputDir>
とEXEファイル形式になっております。EXEファイルは所謂実行ファイル、つまりコンパイラ言語であるため、テキストエディタでは活用できません。初心者による初心者のためのまとめを公開しておりますので、詳しくはそちらを!
勘がいい方はすでにお気づきかもしれませんが、C言語でまとめた理由は、PotreeConverterもC言語系統で作られているからです。実際の言語は、C++が使われています。
途中コンパイルを行う際のコマンドキーが、
cmake ../
となっているため、CMakeを使用することがわかります。実際のビルドにおいては、C言語のGNU make、macOS用のXcode、MicrosoftのVisual Studioのようなネイティブのビルド環境が利用されます。CMakeでビルドするにはC++コンパイラのみが利用されます。そのため、CとC++のビルド環境は整える必要があります。
しかし僕はwindowsの方でなぜか動作が途中で停止するという問題から抜け出せないため、他の方法を模索しておりました。
そこで発見したのが、macOSでPotree Converterを起動させる方法です。
## MacOS PotreeConverter
Potreeから提供されているソースは、windowsのみになっておりましたが、GeospatialPythonさんがMacOSでも使えるように公開してくれていますので、そちらを利用していこうと思います。
まずこのMacOS PotreeConverterの流れとして、
- GCCのインストール
- PotreeConverterの実行
の二つに大きく別れてます。
### GCCインストール
- 対応のOSのXcodeをMacPortsからインストール
2. GCC(GNU Compiler Collection)をインストール
3. シンボリックリンクのPortをmp-gcc8に選択
4. https://github.com/m-schuetz/LAStoolsをクローンする
5. CMakeでビルドする
sudo port install gcc8
sudo port select — set gcc mp-gcc8
cd ~/Downloads
mkdir lastools
cd lastools
git clone https://github.com/m-schuetz/LAStools.git master
cd master/LASzip
mkdir build
cd build
/opt/local/bin/cmake -DCMAKE_BUILD_TYPE=Release ..
make
### PotreeConverterの実行
- PotreeConverterファイルの作成
- https://github.com/potree/PotreeConverter.gitをクローン
- CMakeでビルド
cd ~/Downloads
mkdir PotreeConverter
cd PotreeConverter
git clone https://github.com/potree/PotreeConverter.git master
cd master
mkdir build
cd build
/opt/local/bin/cmake -DCMAKE_BUILD_TYPE=Release -DLASZIP_INCLUDE_DIRS=/Users/<username>/Downloads/lastools/master/LASzip/dll/ -DLASZIP_LIBRARY=/Users/<username>/Downloads/lastools/master/LASzip/build/src/liblaszip.dylib -DCMAKE_C_COMPILER=/opt/local/bin/gcc -DCMAKE_CXX_COMPILER=/opt/local/bin/g++ ..
make
## 問題発生?
### GCCインストール
何をどうしたらいいかわからず、色々と調べまくった結果、GCCのインストールまではできました。しかしCMakeでビルドを行う際にCMakeLists.txtが正式な位置に反映されておらず、ビルドができていない状態であります。
まず最初に迎えた問題は、GCCをインストールする際に、以下のように表示がされて、インストールが強制ストップがかかる現象が発生しました。
Error: Permission denied @ apply2files — /usr/local/lib/node_modules/gulp/node_modules/extglob/lib/.DS_Store
この場合は、sudo chown -R $(whoami) $(brew --prefix)/*
を入力すれば、解決ができます。
コマンドでの指定先は/opt/local/bin/cmake
となっているため、バイナリをチェックするとcmakelists.txtは見つかりませんでした。Lastools内にできているcmakelists.txtをバイナリ内に移動させてみたのですが、それでもビルドはできない状態になっております。
CMakeでは、/usr/local/bin/
に実行ファイルを設置するのが標準的であるとされているため、記憶が正しければデフォルトもそうなっていた気が?します。
今回の場合は/opt/local/bin/
に実行ファイルを設置するため、その辺りでうまく反映されていないのかもしれません。
### PotreeConverterの実行
そもそもCMakeでのビルドができていないので、実行もできるわけがないのはわかっていたのですが、とりあえず手をつけてみることにしました。
こちらも最終的にCMakeでビルドを行うことになるのですが、GCCの方で実行前に拒絶されるわけではなく、ある程度進めた後にエラーログが発生する形になりました。
collect2: error: ld returned 1 exit status
make[1]: *** [cmTC_82cb0] Error 1
make: *** [cmTC_82cb0/fast] Error 2
[cmTC_82cb0]とはなんなのでしょうか、、、 Googleに検索かけると、古橋研究室OBの武末さんのGitMemoryのみが出てきました。
なにかヒントもらえるかなと思いのぞいてみたのですが、
、、、僕のやないかーい。
ってことで、いまだに謎に包まれているエラーです。
## 今後
- Potree ConverterでLASファイルをPotree用にコンバートさせる
- 静岡市のポイントクラウドデータを可視化
- ドローン操縦画面へのユーザーインターフェース構築
- TPVドローン完成
前回の構想発表から全く進んでいないことがわかりますね、、
早くPotreeConveter が使えるようにします!
グラレコ