ドローン(UAV)と写真加工(オルソ化・3D化)と使っているソフトの話。

 土木系の仕事を普段しているなかで、国交省の基準も策定されたことで導入に拍車がかかりそうな流れの中、測量だけで無く、工事の説明とかいろいろなプレゼンの際にUAVの可能性を感じていた。

 しかし、どの機種がいいのかとか、いろいろ含めUAVそのものに悩んでいた中、Phantom4 proの操作のしやすさや機体やカメラなどの安定性から、これはかなり使えるのでは無いかと感じ、昔のラジコン小僧のころの気持ちがムクムクとわき出てくるのを感じ、業務で購入してもらい、半分趣味状態でUAVの可能性を探っている。。

 ここでの話は、プレゼン用の話。要はあまり精度が必要なく、説明用としてどう使うかなので、それを前提に、

  •  UAVはPhamtom4 Pro + iPad-mini。アプリはDJI GO 4と、DJI GS Proの2種類、
  •  写真撮影アプリはPix4Dなどフリーで使えるアプリも試しては見たが、やはり純正品が一番しっくりきた。GO 4で鳥瞰写真とか、GS PROで定点撮影やオルソ写真の基図材料撮影などに使う。

何をするか、

  • オルソを作って担当する範囲をGIS管理する。平面図の代わりにオルソを使い、その上に工事図面を載せていくなど・・・
  • 3Dモデルを使って立体化して関係者にプレゼン
  • 定点撮影して移り変わりを記録

などなど、いろいろと考えられる。

そこで必要なのは、

  1. オルソの作成と3Dモデルの作成が出来るソフト、
  2. 3Dモデルを画面上でグルグルしてくれるソフトである。
  3. オルソと図面と重ね合わせられるソフト

まず、オルソを作ってくれるソフト(OpenDroneMap)

とりあえず目についたと言うか、必死に探したのが以下。そのほかにもベンチャー系のソフトがどんどん出てきているが・・・・・・

  • Pix4D 高い!ちょっと使うのにはもったいないどころか買えない。フルセットだと何百万円?
  • photoscan まぁ高い。やはり精度を求めてしっかりやりたいときは選択肢の一つ。でも50万くらい?
  • DroneDeploy 無料だけど、ユーザー登録が必要。webベースのクラウド上で計算。しばらく立って見に行くと出来てるよ~っテな感じ。
    でも、こちらのデータはまるで取られている。相手にとってはビックデータだなこりゃ。仕事上のコンプライアンスからいうとちょっと使えないだろうな。
  • OpenDroneMap 無料のオープンソースLinuxベースで稼働。私はMS-DOS世代の人間(歳がバレる!)なので、真っ黒な画面でコマンドラインは抵抗ないが、最近の人は使えないのでは・・・ちなみにWebベースでUIを担うnode-OpenDroneMapと言うのもある。OpenDroneMapのフロントエンド。コマンドラインよりは今の人には分かり易いかな。
  • おまけ(ImageComposeEditor) マイクロソフトのパノラマ写真作成ツール。試しにドローンのデータを使って加工したらオルソもどきが作れた。ただし出来上がりのデーサイズがでかすぎる。歪みありで精度は無し。貼り合わせは画像データの特徴点から自動的に貼ってくれるので単なるパノラマなら楽ちん。でも隣り合う画像データを順番に指定しないとグチャグチャになった。

結局、有料は高いのと、機能も多く、使い勝手がいろいろと複雑でおっさんには無理。で、OpenDroneMapを使い始めて今に至る。うまいことに3Dモデルも作ってくれたのでこれはいい。

次に3Dモデルをぐるぐるしてくれるソフト(MeshLab1.3.?)

 ずいぶん前の話になるが、これはなかなか日本語対応のものが無く、結局フリーのmeshlabというソフトに行き着く。これが・・・2016.12バージョンが新しいらしいのだが、当方のPCでは動かなかった。も動きました。GeForce 1050Tiのグラボを入れているのが前提。ついでにGeForce社のCUDAをインストールすると良いらしい。

Intel HDシリーズだけだと、データを読み込むと落ちてしまう。グラフィックドライバの相性の問題らしいが・・・そういう人は旧バージョンを使えとのことなので、そういう方向けに ver1.3.4 があるのでインストールしてみたところ、ばっちり動きました。

ただし、両者ではグラフィックの表現力が全然違う。(このブログの別記事を参照してください。)

 なかなかの高機能データの編集も出来るようだが、とりあえずグルグル出来ればいいので、デモ用にぐるぐるしている。

オルソ画面と図面を重ね合わせられるソフト(QGIS2.8)

 公共事業の発注元などでは、土地の権利関係調整のため、一筆管理にArcGISを利用していることがあった。まずはその地図レイヤーの上に重ねて完成後の図面やオルソを重ねて表現力を上げ、利用したいと言うのがあった。

 それに、レイヤーのベースとなる地図などが、今までは25000分の一の地理院地図だったり、地理院のオルソ写真だったりしたので、1/500~1/1000ベースに拡大するとえらくぼやけてしまう。

 次に、ArcGISは高い!職場のPCに何台も導入していたのでは、予算が持たない。そこら中にArcGISを入れてしまうと元データをみんな勝手に改変してどれが本物だかわからなくなる。等々

 と、いうことで、QGISの導入をした。まずフリーソフトであること。ArcGISのシェイプファイルがそのまま使えること。言語系もUTF8とSJISもOK。日本測地系もWGSも平面直角座標系も使える。既にVer3.xが出ているが、個人的には2.8のほうが印刷関係の動きが軽やかなので、2.8を使用している。日々アップデートされているので、そのうち3.xが改良されれば移行する手はある。

 図面と重ね合わせるときはいい加減に設定された平面図を、座標系場所に合わせて変換する必要があったりします。これは、設計時点からたとえば東京ならⅨ系平面座標で設計してもらうとかの工夫をすれば、なんの追加作業もなくQGISに移行出来るのは素晴らしい。

 まぁ、更に言うと、レイヤー毎に分解してQGISに読ませないと、一枚のレイヤーにいろいろなパーツがごちゃごちゃと入ってしまうので、autocad(DXF)ファイルなどで、1ファイル1シート=1レイヤーとしておかないと、後から大変かも。

 ・・・まぁ、ODM+MeshLab+QGISの組み合わせが一番安いですね!

NodeODMからのOpenDroneMap

githubのOpenDroneMapのスクリプトやらconfファイルやらを一つ一つ読んでみてなんとなくわかってきたことのメモ

node-OpenDroneMap/config.jsに

config.odm_path = argv.odm_path || fromConfigFile("odm_path", '/code');

の記述を発見・・・・そうか・・・ODMは'/code'に入れておくと起動時にパスを指定しなくても勝手に動くのだな・・・

 

次に

WorkingDirectory=/wwwの記述あり。つまり最初から/wwwに入れておけば設定ファイルの変更はいらず、サービスとして登録すればいいことになる。
おそらく、WebODMの際もこのあたりは引き継がれるだろうと・・・
 

結果、

OpenDroneMapは/code配下にインストール

node-OpenDroneMapは/www配下にインストール

この2つを守ると何の設定もなく、Node-ODMからOpenDroneMapが起動できる。

 

と、いうことで、

Windows Sybsystem on Linux 上の  UBUNTU 16.04 からの手順メモ

 

  1. # お約束
  2. sudo apt-get update
  3. sudo apt-get upgrade
  4. cd /
  5. # git は標準でinstallされている。
  6. sudo git clone --depth 1 https://github.com/OpenDroneMap/OpenDroneMap.git code
  7. sudo git clone --depth 1 https://github.com/OpenDroneMap/node-OpenDroneMap.git www
  8. #このままでは、root権限で生成されてしまい権限が制約されてしまうので、自分自身がオーナーになる。
  9. sudo [自分自身のログオンユーザー名] -R /www /code
  10. #ODMのインストール 結構長い。
  11. cd /code
  12. sudo bash configure.sh install
  13. # 次にnode-ODMのインストール
  14. #ぶっちゃけgithubに載っているスクリプトは結構ヨーロッパ(アメリカ)系外人のいい加減さが丸出しのような気がする。
  15. apt-get install -y libboost-dev libboost-program-options-dev
  16. #ホンとはODMも含めてルート下に作るのはいやなんだけど、・・・
  17. #stagingは作業用フォルダみたいなので、mkdir /stagingをmkdir /~stagingに変更します。
  18. #最終的にはstagingフォルダ削除してもいいのかなぁ・・・
  19. cd ~
  20. mkdir /~staging
  21. git clone https://github.com/pierotofy/LAStools ~/staging/LAStools
  22. # cd LAStools/LASzipって、いやいやChange Dir出来んでしょう。
  23. cd ~/staging/LAStools/LASzip
  24. mkdir build
  25. cd build
  26. cmake -DCMAKE_BUILD_TYPE=Release ..
  27. make
  28. git clone https://github.com/pierotofy/PotreeConverter ~/staging/PotreeConverter
  29. cd ~/staging/PotreeConverter
  30. mkdir build
  31. cd build
  32. # ここはすごく長いのでコピペで・・・
    cmake -DCMAKE_BUILD_TYPE=Release -DLASZIP_INCLUDE_DIRS=~/staging/LAStools/LASzip/dll -DLASZIP_LIBRARY=~/staging/LAStools/LASzip/build/src/liblaszip.a ..
  33. make && sudo make install
  34. # nodeは以下のパスを見るとsetup_11.xまであるんだけど、動かないのもいやなので、とりあえずデフォルトの6.xでインストール
  35. sudo curl --silent --location https://deb.nodesource.com/setup_6.x | sudo bash -
  36. sudo apt-get install  nodejs python-gdal
  37. cd /www
  38. npm install

 出来た!!~~~からの

node index.js

からの~ブラウザ立ち上げ http://localhost:3000 で、

f:id:chiikiseibi:20181027174436p:plain

おおっ、動いた!これでオプション指定がちょっと楽に・・・

後はサービス登録すればいいんだけど、wsl の場合はsystemctlでサービス登録できないはず・・・

まぁ、dos窓みたいなubuntu から、いちいち起動すればいいのでその辺はよしとしよう。

ついでにいうと、ODMではsettings.yamlに記述できなかった--force-ccdがnode-ODMでは設定可能。これでまた一つ楽になった・・・

Windows10+WSL+Ubuntu16.04 で動かす OpenDronaMapの設定ファイルと実行

前回に引き続き、OpenDronaMapのお話。

タイトルの通り、Windows10上でほぼネイティブ状態で動かしているODMの設定ファイルの話設定ファイルは、settings.yaml というファイル名です。

windows10上からコマンドプロンプトかパワーシェルを起動します。

  • mkdir c:\temp
  • mkdir c:\temp\odm

で準備OK。わざわざ手打ちしなくてもエクスプローラ上からフォルダの新規作成で、適当なフォルダを作ればいいんです。フォルダ名は別に何でも良くて、c:\opendronemapとか、自分でわかる名前で。以下の設定ファイルに反映すれば良いだけです。

ubuntu16.04を起動します。

いつもの真っ黒い画面で順に

  • cd OpenDroneMap
  • vim settings.yaml

で設定ファイルを編集します。あっ、ちなみに私の場合はエディターはvimを使用しています。以下赤いところが編集箇所

[settings.yaml]を編集します

最初の頃の行

  • project_path: '/mnt/c/temp/odm'   # Example: '/home/user/ODMProjects

終わりの頃の行

  • orthophoto_resolution: 10.0 # Pixels/meter

で、編集箇所がたった2カ所!です。

なお、これは私の場合です。たとえばorthophoto-resolutionはメートルあたりの解像度を10ドットに設定しています。10センチメートル程度の解像度と言うことになりますが、カメラの性能と処理能力と出力される画像ファイルのサイズなどの見合いで経験的に10にしています。 

※ちなみに、phantom4を航空法上限の150m上空で飛ばした場合、解像度は4.1cm/pxのようです。(DJI GS PROの画面で出てくる。)

 おおよそ25dpm(dot per meter)と想定すれば、最大でも20と設定すれば良いのでしょうが100ha(?)規模の撮影だと500メガ程度の画像ファイルなので処理するにはちょっと重たいです。 (10の設定で150メガくらい)

 

WSL上のubuntuの場合Windows10とのファイルのやりとりは/mnt/内に各ドライブが配置されています。(/と\は違うのでご注意を。ちなみに\はwindowsでは¥と表記されます)

ちなみに--force-ccdはオプションとしては設定ファイルで記述出来ないんですね。

これは、ドローンに乗っているカメラのサイズです。Phantom4 Proは横13.2mmなので

--force-ccd 13.2 と記述します。

 

さて、いよいよ実行です。

まず、Windows10上からエクスプローラーでc:\temp\odm内にプロジェクト用のフォルダを作成します。(ここから下はすべてアルファベットで指定した方が良さそうです。親フォルダも日本語を使わないでおいた方がエラーの要素を減らすことが出来て、まず無難です。)

  • c:\temp\odm\[ProjectName]

[ProjectName]は、地域の名前でも撮影日でもわかりやすく適当につけます。

次にイメージ格納用フォルダを作成します。

  • c:\temp\odm\[ProjectName]\images

imagesはODMが使用する固定の名前です。この中に撮影した画像ファイルをすべてコピーします。

いよいよ実行です。

OpenDronaMapフォルダ内にいれば

  • sh run.sh --force-ccd 13.2 [ProjectName]

です、後はできあがりを待ちましょう。

run.pyを直接起動するよりは、run.shは環境変数やら、パスを通してくれるので、事前に設定をする必要がありません。こちらをよく使います。

しつこいようですが、13.2はPhantom4 pro のカメラ固有の数値ですので各自飛ばすドローンによって調べてください。

OpenDroneMap を Windwos 10 で使う。(WSL+Ubuntu20.04編)

いやいや、もう使えてますよという声が聞こえそうだが、

はご存じだろう。ここではWindows10 nativeで使う方法のメモである。

とはいえ、そんなの必要あるのと思われるだろうが、メモリ管理の問題でDockerを利用する方法があまり融通が利かない。

結局DockerはHyper-V

 なんだよね。メモリ割り当ても排他的に必要だし、それなりにCPU能力も要求する。

個人的にだが、だいたい30haの正方形エリアで8GBytes以上のメモリを占用する。

そうなると、Windows上でDockerを走らせるとメインメモリは16GBytesは必要となるだろう。

Windows10で8GBytes、Dockerで8GBytesくらい。でも経験上これではOpenDroneMap(以下ODM)は小エリアでしか動かない。16GBytesのメモリが入っているなら目一杯使いたいじゃないですか・・・

Linux(UBUNTU)上で動かすと・・・

ネイティブのUbuntuで動かせば30ha程度なら8GBytesのメモリ容量でもそこそこ動かせる。

じゃあUbuntu(xx.xxLTS)で動かせばいいじゃん的な思想になりがちだが、まず100%Windowsのソフトしか利用しない。OSをubuntuに変えてもなぁ・・じゃあどうするの?

そうなんです。WSLWindows Subsystem for Linux)機能を使う(win10限定)

そう、Windows10には素晴らしい機能がついている。使い方は[Windows10 wsl]などでググってほしい。OpenDroneMapに限定して言えば、Hyper-Vなんかより断然使い勝手がいい。でも、コマンドラインだけど・・・私はMS-DOS世代なので、コマンドラインはちっとも面倒ではないので、これについて順を追ってインストール方法を書いていく。

 

まず、Windows10の設定。詳細は書かないけど、順に

  1. 設定-アプリと機能-プログラムと機能
  2. Windows機能の有効化または無効化-Windows Subsystem for Linux にチェックOkで再起動
  3. Windows ストアから、ubuntu 20.04を検索してインストール(※この記事を書いた頃は16.04だったけど、今じゃ20.04ですよ・・・)

で準備オッケー

何がいいかというと

  • メモリ管理がWindwosネイティブ。お互いにメモリを融通しながらつかえる。独占的使用ではないのでメモリ割り当てとか心配する必要はないのだ。
  • そうはいっても計算中は相当メモリを使うので、できるだけ増設した方がいいに決まっている。
  • Hyper-Vだと作業用フォルダがLinuxの共有フォルダ的なテクニックがいるが、WSLだと、適当な内蔵ドライブが直接指定できる。
  • ubuntu の /mnt/ 配下にc,d,e,fなどと割り当てられていて何も考えずに直接指定が可能
  • ネットワークドライブ使うときは若干の作業が必要ですけどね。

OpenDroneMapをインストールする。

ここからは、ある程度Ubuntuの知識の元で、コマンドラインで手打ちしなければいけないので、Linux系の多少の基礎知識が必要。ど素人向けではないので、ごくごく簡単に説明します。

  1. ubuntu20.04を起動する。f:id:chiikiseibi:20210419133819p:plain

  2. インストール直後は初期設定で若干の時間がかかります。その後、新しいユーザー名とパスワードを入れます。これが後々のデフォルト・・Windwosと同じでもいいけど、たとえばUID:odm,P:odmとか設定しちゃう。
  3. お約束のコマンドをたたく(カレントユーザーディレクトリ内にいることが前提です。)
    • sudo apt-get update
    • sudo apt-get upgrade
    • sudo apt-get install unzip
  4. OpenDroneMapのインストール、ここから
  5. Native Install (Ubuntu 20.04) の項目通りに実行する

    • sudo ln -s /home/[ユーザーフォルダ]/ODM /code (これをしておくと後々いいことがあるかも。エラーを出さないおまじないみたいなもの。)
    • cd ./ODM (上記コマンドをたたいていれば、 cd /code でもOK)
    • bash configure.sh install
     で、コピーとかコンパイルとかいろいろやって、一時間くらい待つと出来上がり。
  6. vim settings.yaml で設定ファイルの編集をします。
    • プロジェクトファイルの位置と解像度のデフォルトを決定します。
    • エディタの使い方は自分で・・・
    • project のところに /mnt/d/ODM/Projects とリンク先を記載するとデータをDドライブの指定のフォルダに入れることができてubuntuフォルダを探さなくてすみます。
    • さらに、orthophoto-resolution を10にします。これは、私の扱う範囲が50ha位の範囲なので、デフォルトの5のままだと、300-500メガのオルソ写真になってしまうため、QGISなどで読み込むのに時間がかかるためです。
  7. sh run.sh [project folder name] でGo!!!

ですね。

この次のレベルで、node-OpenDroneMapが、そしてWebODMがあるのですが、これはコマンドラインを必要としないツールで何かと便利。でもインストールは大変。

これについては、またあとで・・・!!

 

WSL上のUbuntuも20.04と新しくなったので、ちょっと内容のアップデートをしました。

 

 

 

 

 

UAV(ドローン使ってます)

UAV(ドローン)使ってます。

仕事で(ドローン)を使ったりしている。DJI Phantom4 Pro

f:id:chiikiseibi:20180901170309p:plainこんなやつです。

なかなか優秀で使い勝手もいい。

4K動画や静止が撮れて静止画は位置情報もしっかりと入っている。

このドローンいわゆるお利口さんモード(Pモード)で動かすと、まず失敗しない。

いわゆるラジコンだが、操作性もいい。。

航空法などに気をつけて、必要に応じて飛行許可を取ればいい。

このブログのメインはこのUAVで撮影した静止画ということで、詳細省略。

シリーズでOpenDroneMapの話をしていきたいと思っています。

 

 

技術系おっさんのブログです。

土木関係のおしごとと、趣味の電子工作と自転車。

久しぶりの単身赴任、たぶん最後の単身赴任。身の回りの気づきなどをつらつらと書いていきます。

ネタはぼちぼちあるんですが、生来の筆無精ゆえ・・・・