3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

UAVMVSを試してみる

Last updated at Posted at 2019-12-03

UAVMVSとは

Unmanned Auto Vehicle の略。
空路プランニング(Aerial Path Planning)の手法の一つで、趣旨はフォトグラメトリを作成するサンプル画像を撮影しに行く空路の最短経路を割り出す事が目的。

現状のドローンは、産業用でも持って1時間前後。一般用だと40~20分程がせいぜいなため、このバッテリーで一度にどれだけ取れるかということには焦点があたる。また、効率的なフォトグラメトリ用の画像サンプルの収集経路探索も求められる。
次の論文は、そこの探求や解決を目的としたもの。

Aerial Path Planning for Urban Scene Reconstruction:A Continuous Optimization Method and Benchmark

ステップとしては、

  1. MVEパイプラインを利用して、点群とメッシュ情報を作成する
  2. UAVMVSフローを利用して、経路情報を作成する
    の2ステップを踏むことで、最終的な撮影経路作成ができる。

MVEとは

Multi-View Environmentの略で、多視点の視差を利用して点群情報を推定するアプリケーション。
UAVMVSでは、まずこのツールを介して点群情報を作成し、クリーンナップして、メッシュ情報に落とし込んでいる。

この部分に関して言えば、Meshroomなどのその他のMulti-View系のフォトグラメトリ点群・メッシュ生成ツールを選択することによって、パラメーターの取り回しなどや速度・精度の面で向上が期待できそう。

MVEサンプルシーン

UAV Pathplanning Dataset & Benchmark
Housing

サンプルPly

サンプルシーンに含まれているPlyファイルの例。
以下のサンプルデータが得られるように手順を踏まなければならない。

gesox-mesh.ply

Screenshot from 2019-02-13 07-14-04.png

airspace.ply

Screenshot from 2019-02-13 07-12-42.png

MVEの代替

MVEは、かなり重いので、もっと軽量かつ、使い勝手の良いMulti-View系ツールがないかも見ていく。

Meshroom

オープンソースでフリーのツール。
ノードベースのUIが特徴で、それぞれのノードが別ライブラリ管理として独立している。
そのため、自分で拡張したりなんかもノード単位(機能単位)で行える。

Screenshot from 2019-02-16 06-39-21.png

Reality Capture

企業でも仕様例がたくさんあるツール。
エラーとなるような、評価の低い画像は自動で計算処理に含めないなどの振り分けを自動でやってくれたりする。
HoudiniのGameDevToolsetでも使えるので、そこで一連のワークフローも作れる。
後で試す予定。

Metashape

これも企業での仕様例がたくさんあるツール。
もともとはPhotoScanという名前で売られていた。

MVEパイプライン

一連のコマンドの流れ。(MVEではこれを順に叩けばいいよというやつ)

MVE.sh
makescene -i <image-dir> <scene-dir>
sfmrecon <scene-dir>
dmrecon -s2 <scene-dir>
scene2pset -F2 <scene-dir> <scene-dir>/pset-L2.ply
fssrecon <scene-dir>/pset-L2.ply <scene-dir>/surface-L2.ply
meshclean -t10 <scene-dir>/surface-L2.ply <scene-dir>/surface-L2-clean.ply

PLY化する

デフォルトの値だと、ものすごい数の頂点を生成する。かなり重たいファイルになるので注意。

scene2pset -F2 <scene-dir> <scene-dir>/pset-L2.ply

Screenshot from 2019-02-13 07-08-01.png

メッシュ化再構築する

これを通すと大幅に頂点数が削減される。

fssrecon <scene-dir>/pset-L2.ply <scene-dir>/surface-L2.ply

Screenshot from 2019-02-13 07-11-30.png

メッシュをクリーンナップする

meshclean -t10 <scene-dir>/surface-L2.ply <scene-dir>/surface-L2-clean.ply

UAVMVSフロー

一連のコマンドの流れ。

UAVMVS.sh
# !/bin/bash
set -e
# Focal: 15/17.3=0.867
aspect=0.66 #4000/6000 camera resolution
focal=0.867
maxD=30
maxDR=35
minD=5
alt=15
elev=-15
f=80
s=80

# Prepare Directory Structure ==============================

# Set proper directories for your build!
binaries=/home/work/DHR/uavmvs/build/release
scripts=$(cd ~/projects/traject/uavplanning/scripts; pwd)
mveapps=/home/work/DHR/mve/apps
export PATH=/bin:/usr/bin:$binaries:$scripts

root=$(pwd)
host=$(hostname)

# Create project name of experiment
project=/home/work/DHR/

meshes=$project/meshes
models=$project/models
scenes=$project/scenes

mkdir -p $project
mkdir -p $meshes    
mkdir -p $models
mkdir -p $scenes
mkdir -p $scenes/nadir
mkdir -p $scenes/recon



# Setup folder structure
overlap_dir=$scenes/overlap-${f}-${s}
plan_dir=$overlap_dir/plan
nadir_dir=$overlap_dir/nadir
oblique_dir=$overlap_dir/oblique
nadir_opti_dir=$overlap_dir/nadir-opti
oblique_opti_dir=$overlap_dir/oblique-opti
oblique_view=oblique

mkdir -p $overlap_dir
mkdir -p $plan_dir


# ==================================================

# This takes as input the point cloud representing the proxy model
# Note: if you only have a mesh or it has many holes first convert to point cloud using this command:
generate_proxy_cloud gesox-mesh.ply gesox-cloud.ply --samples=25

generate_proxy_mesh $root/$scenes/recon/gesox-cloud.ply $root/$scenes/recon/gesox-mesh.ply

generate_proxy_mesh $root/$scenes/recon/gesox-cloud.ply $root/$scenes/recon/airspace.ply \
    --min-distance=5.0

generate-trajectory $root/$scenes/recon/gesox-mesh.ply oblique.traj \
    --altitude=$alt --elevation=$elev --angles=0 \
    --forward-overlap=$f --side-overlap=$s

optimize_trajectory oblique.traj $root/$scenes/recon/gesox-mesh.ply $root/$scenes/recon/gesox-cloud.ply \
    $root/$scenes/recon/airspace.ply oblique-opti.traj \
    -m 10000 --max-distance=$maxD --min-distance=$minD
       
shorten-trajectory oblique-opti.traj oblique-opti.traj

# This will visualize how good the reconstruction is estimated to be
evaluate_trajectory oblique-opti.traj $root/$meshes/mesh.ply $root/$scenes/recon/gesox-cloud.ply \
    --max-distance=$maxDR -r recon.ply

# This converts trajectory views to spline trajectory in csv format
interpolate-trajectory oblique-opti.traj oblique_spline.csv

プロキシメッシュを作成する

generate_proxy_mesh $root/$scenes/recon/gesox-cloud.ply $root/$scenes/recon/gesox-mesh.ply
generate_proxy_mesh $root/$scenes/recon/gesox-cloud.ply $root/$scenes/recon/airspace.ply \
    --min-distance=5.0

経路生成を行う

generate-trajectory $root/$scenes/recon/gesox-mesh.ply oblique.traj \
    --altitude=$alt --elevation=$elev --angles=0 \
    --forward-overlap=$f --side-overlap=$s

経路情報の補正を行う

MVEで生成したgesox-mesh.plyと

optimize_trajectory oblique.traj $root/$scenes/recon/gesox-mesh.ply $root/$scenes/recon/gesox-cloud.ply \
    $root/$scenes/recon/airspace.ply oblique-opti.traj \
    -m 10000 --max-distance=$maxD --min-distance=$minD

最短経路順の割り出し

ここでセールスマン問題を利用して最短経路を割り出している。
撮影ポイント数が増えれば、処理も重くなるか?

shorten-trajectory oblique-opti.traj oblique-opti.traj

経路情報の間の補完

経路情報が記載されたcsvファイルが作成される。
Droneのオートパイロットプログラム(Waypoint系)は、このcsv情報を流し込むことによって実装が完了する。

interpolate-trajectory oblique-opti.traj oblique_spline.csv

評価

まだ前工程がちゃんとかきだされていないため、保留中。

検証

pset-L2.ply => airspace.ply

1億3千万頂点のものから直接arispaceのproxy_meshを作成してみたもの。

$ generate_proxy_mesh Ply/pset-L2.ply Proxy/airspace.ply

image.png

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?