ARCore Measurment for Android
31.2 MB
ファイルサイズ
- セキュリティ
Everyone
Android 10.0+
Android OS
このARCore Measurment for Androidについて
このアプリケーションは、距離、面積、体積の測定にAR Coreを使用しています。
1. 距離の測定
距離はARにおける最も基本的な測定項目です。ARシーンに配置された2つの3D座標(アンカー)間のユークリッド距離として計算されます。
2. 面積の測定
面積を測定するには、ユーザーは少なくとも3つのアンカーを配置して多角形を形成する必要があります。ほとんどのAR面積測定では、表面が平面(3D空間における2D面)であることを前提としています。
アルゴリズム:
最も一般的な方法は、シューレース式(測量士の公式)です。点は3D空間にあるため、まず2D平面に投影するか(平面の法線を使用)、すべての点が検出されたARコア平面上にあることを確認する必要があります。
3. 体積の測定
体積は奥行きを必要とするため、測定方法はかなり複雑です。主な方法は2つあります。
- ボックス法(押し出し):床面積を測定し(上記参照)、次に垂直距離(高さ)を測定します。
計算式:体積 = 面積 × 高さ
- バウンディングボックス法:対角線上の2つの角点を使用して3Dキューブを定義します。
- 深度API(上級):AR Coreを使用してオブジェクトの点群を作成し、凸包またはボクセル化によって体積を計算します。これは不規則な形状のオブジェクトに対して非常に正確ですが、Time-of-Flightセンサーまたは高品質の深度サポートを備えたデバイスが必要です。
実装に踏み込むと、AR Coreにおける真の課題は計算だけではなく、UXと精度にあることに気づくでしょう。2D画面上で3D空間を測定することは、ユーザーにとって扱いにくい場合があります。
これらの機能のためのJavaロジックの構造化方法を以下に示します。
1. 距離(基礎)
正確な測定を行うには、Session hit Test()を使用してアンカーを配置する必要があります。アンカーを使用することで、カメラがドリフトしても、ポイントは物理世界の座標に「固定」されたままになります。
2. 面積(平面形状)
面積測定では、通常、床や壁の面積を測定したいユーザーを想定しています。測定対象となる点は、単一の平面上に限定する必要があります。点が同一の水平面上にある場合(y座標がほぼ等しい場合)、y軸を無視して2Dポリゴン計算として扱うことができます。
実装のヒント:測定対象点をListに格納します。ユーザーが新しい点を追加するたびに、「現在の面積」プレビューを動的に更新します。シューレース式は、自己交差しない任意のポリゴン(不規則な形状)に適用できるため、ここでは標準的な計算方法です。
3. 体積(「ボックス」方式)
LiDARセンサーがない場合、任意の3Dオブジェクトの体積を計算するのは非常に困難です。標準的なJava AR Coreアプリでは、押し出しポリゴン方式が最も信頼性の高い方法です。
1. 底面の定義:ユーザーが点をクリックして床面積(A)を定義します。
2. 高さの定義:ユーザーが床上の点をクリックして上方向に線を引くか、天井上の点をクリックして高さ(h)を定義します。
3. 計算:V = A * h
精度を高めるためのヒント
深度API:デバイスが対応している場合は、Raw Depth APIを有効にしてください。これにより、標準的な平面検出では見逃してしまう可能性のある「非平面」オブジェクト(ソファやボールなど)に対するヒットテストを実行できます。
スムージング:AR座標は変動する可能性があります。カメラの姿勢またはヒットテストの結果にシンプルな移動平均フィルタを適用することで、測定値が急激に変動するのを防ぐことができます。
推奨アーキテクチャ
計測マネージャー:アクティブなアンカーのリストを格納するシングルトンまたはヘルパークラス。
レンダラー:ARオーバーレイ内の線とテキストラベルの描画を処理します。
単位変換:メートル法(メートル/センチメートル)とヤード・ポンド法(フィート/インチ)を切り替えるユーティリティ。
このアプリケーションには、上記の機能に加えて、英語、スペイン語、フランス語、ブルガリア語、ドイツ語などのローカライズ機能も備わっています。計算された距離、面積、体積はメートル単位で表され、センチメートル、インチ、フィートに変換できます。







