プログラムでカメラにポイントする場所を指示するにはどうすればよいですか?


8

今のところ特定のカメラは考えていませんが、これがプログラム的に/数学的にどのように行われるのか興味があります。

私は3Dスペース、長方形を持ち、1つの角にカメラを上に向けて内向きに見ています。
現在の位置の(x、y、z)座標を送信する長方形に移動オブジェクトがあります。
それらの座標を取得して、カメラにその位置を指すように指示する命令に変換したいと思います。
この翻訳は通常どのように行われますか?


ゲーム開発者がゲーム内カメラをどのように処理するかを確認することもできます。それは同じ原則であり、いわば太陽の下ですべてに対処しなければなりませんでした。
ハラベック2018年

オブジェクトは、座標をリテラル3D空間で送信する必要はなく、カメラのFOV内に存在することで送信できることに注意してください。次に、パターン認識を使用して、オブジェクトが配置されているフレーム内の場所を見つけ、カメラをシフトしてオブジェクトを中央に配置します(または、複数のフレーム間で位置の変化を追跡してその方向に移動することにより、2Dで動きベクトルを識別します)。 。たとえば、ポーチのPTZカメラはポーチをスキャンして、パンの動きによるものではない動きを探し、動きが止まるまでロックして移動するアイテムを追跡します。
dannysauer 2018年

私のユースケースはスポーツ分析システムで、各プレーヤーはピッチ上の現在の位置、速度などを送信するタグを付けています。これで、位置情報はすでに得られています。私は間違いなくパターン認識を見ていきます。便利ですね。
bot_bot

回答:


10

三角法!

私のカメラはDLink 5020-Lで、APIを介して指定できるpan / tiltコマンドがあります。また、設定する位置が事前定義されており、APIを介してトリガーすることもできます

初期化前

  • 参照でカメラの位置を0°パンと0°チルトに定義します=>この位置を呼び出します Position 1

初期化

  • カメラを移動します Position 1
  • カメラのパン/チルトのどこかに、0で初期化された変数またはAPIを介して保存します

オブジェクトを見る

  • X、YおよびY、Z平面の2つの平面にオブジェクトを配置します
  • その後、パン(左/右)角度を取得できます(IoT SEの数学数式を使用!)

$$ \ arctan \ bigg(\ frac {y} {x} \ bigg)$$

  • 次に、チルト(アップ/ダウン)角度を取得できます

$$ \ arctan \ bigg(\ frac {z} {y} \ bigg)$$

  • 相対移動で作業する可能性があるため、新しいパン/チルト値を保存/更新することを忘れないでください...

カメラの配置方法によっては、以前の結果を無効にする場合があります

(時間があれば、回路図を追加します)


2
@hardillbによって打たれ;)そして、彼はよりよく見える式を持っています...
Goufalite 2018年

2
残念ながら、このサイトではLaTeXサポートを利用できません。必要に応じてCodeCogsなどのどこかから、代替として画像にエクスポートできます。(私はあなたのためにこれを行いました。必要に応じて自由に編集するか、必要ない場合は削除してください!)
Aurora0001

ご協力ありがとうございます。これはまさに私が探していたものです。
bot_bot 2018年

傾斜角のアークタントが斜辺上のz成分に関連している必要があるという事実を考慮するのを忘れていたと思います:y成分の上に置くと、カメラが上下するため、カメラを十分に上げたり下げたりすることができますy軸に沿ってではなく、yコンポーネントとxコンポーネントの間の直角三角形の斜辺に沿って指されました。私が間違っていたら訂正してください。:)しかし、素晴らしい答えです。
anonymous2

@ anonymous2も私の考えでした。提示された答えのいずれも実際には正しいとは思えませんが、実際にそれを実際に表示するための帯域幅がありません。変数(パンまたはチルト)を取得するには、2つの三角形と3つすべての座標が必要なようです。これを自分で証明するには、2つの異なる極端な例を視覚化します。1,1,999のx、y、zは、1,1,1とは大きく異なるパンと異なるチルトを与えます。グーファライトの答えは両方に同じ基準を与えます。
dwizum

6

すばらしい答えはすでにあります。考慮すべき他のことをいくつか追加したいと思います。hardlibとGoufaliteがすでに述べたように、これを行う方法は三角法です。カメラとIoTオブジェクトの2次元の描写を引き出しました。

ここに画像の説明を入力してください

ご覧のとおり、カメラの視野はオブジェクトよりも大きくなります。近距離でない場合、オブジェクトが遠ざかると、カメラの視野が大きくなります。

さて、あなたはありカメラが常にオブジェクトを中心にしたいです。その場合、hardlibが参照した計算を単純に実行できます。

ϴ = arctan(y/x)

...慣例により、x軸から反時計回りの角度になります。レベルから離れた角度も必要です。

α = arctan(z / ((y^2+x^2)^1/2))

明らかに、3つの軸すべての原点にあるカメラ位置に基づいて計算する必要があります。

一方、カメラを必要以上に動かさないようにしたい場合があります。つまり、オブジェクトがフレームの外に移動しようとしているように見える場合にのみカメラを動かします。その場合、おそらくオブジェクトがフレームの端にどれだけ近いかに基づいてカメラがその角度を変更する可能性が高くなる「圧力」変数が必要になります。

そのルートをたどる場合は、両方の視野でカメラの視野の角度を知っている必要があります。これにより、オブジェクトがカメラの視野と比較される場所を決定できます。


これは素晴らしい!おかげで、現時点ではカメラの視野の中心にオブジェクトを置いておきたいと思います。
bot_bot 2018年

2
カメラをパン/チルトするとき、各注文の間に待ち時間(〜0.5秒)があります。カメラを移動するときは注意してください
Goufalite

良い点-それは間違いなく考慮すべきことです。
anonymous2

5

これは通常、基本的な三角法で行われます

まず、カメラを原点(0,0)に、オブジェクトを(x、y)に配置して、単一の2D平面を操作します。

xの距離が三角形の隣接する辺であり、yの距離が反対になるとすると、

tan(角度)= y / x

パン角度は

角度= invTan(y / x)

また、カメラとオブジェクト間の直線距離(斜辺)を次のように計算することもできます。

h ^ 2 = x ^ 2 + y ^ 2

与える:

h = sqrt(x ^ 2 + y ^ 2)

これで、h距離とz高さを使用して、同じ方法で傾斜角度を計算できます。

角度を取得したら、これをカメラのパン/チルトを制御しているものにフィードできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.