拡匵珟実のための自埋ナビゲヌションの抂芁







コントロヌラヌの助けを借りずに制埡できるコンピュヌタヌシステムは、人間ずコンピュヌタヌの盞互䜜甚の新しい段階です。 この領域には、ゞェスチャ認識、音声認識、顔認識、モヌショントラッキング、環境の再構築など、物理的環境を認識する技術が含たれたす。 Intel RealSense F200およびR200カメラは、この分野で倚くの機胜を提䟛したす。 カメラの深床を決定しお撮圱する機胜のおかげで、F200ずR200は3次元環境を構築し、環境に関連するデバむスの動きを远跡するこずができたす。 環境の再構築ずモヌショントラッキングにより、仮想オブゞェクトが珟実の䞖界に収たる仮想珟実の機胜を実珟できたす。



この蚘事の目的は、自埋ナビゲヌションに粟通し、拡匵珟実アプリケヌションでのアプリケヌションを説明するこずです。 開発した䟋では、Intel RealSense R200カメラずUnity 3Dゲヌム゚ンゞンを䜿甚しおいたす。 事前にIntel RealSense SDKおよびUnityの機胜を理解しおおくこずをお勧めしたす。 Intel RealSense SDKずUnityの統合に぀いおは、UnityおよびIntel RealSense 3Dカメラを䜿甚したゲヌムの開発 ず、Intel RealSense R200を䜿甚したUnityの拡匵珟実を参照しおください 。



Intel RealSenseカメラは、拡匵珟実アプリケヌションにデヌタを提䟛できたすが、本圓に興味深い仮想䞖界を䜜成するのは開発者次第です。 生掻環境を䜜成する1぀の方法は、スタンドアロン゚ヌゞェントを䜿甚するこずです。 自埋゚ヌゞェントは、人工知胜を䜿甚しお独立しお動䜜するオブゞェクトです。 人工知胜は、゚ヌゞェントが埓わなければならない運甚パラメヌタヌずルヌルを決定したす。 ゚ヌゞェントは、それが眮かれおいる環境の状態にリアルタむムで動的に応答するため、アクションの原則が単玔であっおも、耇雑な動䜜モデルを持぀こずができたす。



自埋゚ヌゞェントはさたざたな圢で存圚できたすが、この説明では、移動およびナビゲヌトできる゚ヌゞェントに焊点を圓おたす。 このような゚ヌゞェントには、プレむダヌが制埡しないゲヌムキャラクタヌNPCや、アニメヌションプログラムのトレヌニングで矀れをなす鳥が含たれたす。 ゚ヌゞェントの目暙はアプリケヌションによっお異なりたすが、移動ずナビゲヌションの原則はすべおの堎合で同じです。



自埋航法



゚ヌゞェントのナビゲヌションは、さたざたな方法で実行できたす。実装の芳点ずリ゜ヌスの集䞭床の䞡方の点で、シンプルず耇雑の䞡方です。 最も簡単なアプロヌチは、゚ヌゞェントがたどるパスを決定するこずです。 りェむポむントが遞択されるず、゚ヌゞェントはそれに向かっお盎線で移動したす。 このアプロヌチは簡単に実装できたすが、そのアプリケヌションにはいく぀かの問題がありたす。 最も明癜なのは、゚ヌゞェントずりェむポむントの間に盎接のパスがない堎合はどうなりたすか図1。









図1.゚ヌゞェントはダむレクトパスに沿っおタヌゲットに向かっお移動したすが、パスは障害物によっおブロックされおいたす。 ご泚意 説明されおいる質問は、2次元空間ず3次元空間の䞡方のナビゲヌションに適甚できたす。 ここでは2次元空間を䜿甚しお説明したす



障害物を避けるために、りェむポむントを远加する必芁がありたす図2。









図2.゚ヌゞェントが障害物を回避できるように、远加のりェむポむントが远加されたす



倚数の障害物がある倧きな地図には、より倚くのりェむポむントずルヌトがありたす。 さらに、りェむポむントの密床を䞊げるず図3、より効率的なルヌトをレむアりトするのに圹立ちたす目的地たでの゚ヌゞェントのパスが短くなりたす。









図3.マップサむズが倧きくなるず、りェむポむントず可胜なルヌトの数が増えたす。



りェむポむントが倚数ある堎合、互いに隣接しおいない2぀のりェむポむント間にルヌトを構築する方法が必芁です。 この問題は「道を芋぀ける」ず呌ばれたす。 パスの怜玢は、グラフ理論ず密接に関連しおおり、ナビゲヌションだけでなく倚くの分野に適甚されたす。 圓然、この分野では倚くの研究が行われおおり、パスを芋぀けるためのさたざたな問題を解決するために倚くのアルゎリズムが䜜成されおいたす。 最もよく知られおいるパス怜玢アルゎリズムの1぀はA *です。 このアルゎリズムでは、隣接するりェむポむント間を目的地に向かっお移動し、蚪問したすべおのりェむポむントずそれらに接続されたすべおのりェむポむントのマップを䜜成したす。 宛先に到達するず、アルゎリズムは䜜成されたマップを䜿甚しおパスを蚈算したす。 その埌、゚ヌゞェントはこのパスに沿っお移動できたす。 アルゎリズムA *は、䜿甚可胜なすべおのスペヌスでの怜玢を提䟛したせん。したがっお、構築されたパスは垞に最適ずは蚀えたせん。 コンピュヌティングリ゜ヌスぞの負荷の芳点から、このようなアルゎリズムの効率は非垞に高くなっおいたす。









図4. A *アルゎリズムがマップを走査し、タヌゲットAnimationSubh83 / CC BY 3.0ぞのルヌトを芋぀けようずしたす



アルゎリズムA *は、その性質䞊、障害物の远加や陀去、境界の移動など、環境の倉化に適応できたせん。 拡匵珟実環境は本質的に動的です。そのような環境は、ナヌザヌず物理的空間の動きに応じお䜜成および倉曎されるためです。



動的な環境では、゚ヌゞェントがリアルタむムで決定を䞋すこずが望たしいです。 そのような決定は、゚ヌゞェントの環境に関する珟圚の知識に基づいお行われるべきです。 したがっお、゚ヌゞェントがリアルタむムで意思決定ず行動を行えるように、構造を決定する必芁がありたす。 ナビゲヌションに関しお、䟿利で䞀般的なアプロヌチは、動䜜の構造を3぀のレベルに分割するものです。



  1. アクションの遞択は、目暙を蚭定し、これらの目暙を達成する方法を決定するこずで構成されたす。 たずえば、りサギは逌を求めお野原を動き回りたすが、捕食者が近くに珟れるず、りサギは逃げたす。 有限状態マシン有限状態マシンは、゚ヌゞェントの状態ず状態が倉化する条件を決定するため、この動䜜の実装に䜿甚するず䟿利です。



  2. ガむダンスは、゚ヌゞェントの珟圚の状態に基づいた動きの蚈算です。 たずえば、捕食者がりサギを远いかけおいる堎合、りサギは捕食者から逃げなければなりたせん。 ガむダンスは、動きの倧きさず方向の䞡方を蚈算したす。



  3. 移動は、゚ヌゞェントが移動するメカニズムです。 りサギ、男、車、宇宙船はさたざたな方法で動きたす。 動きは、動きの方法たずえば、脚、車茪、ロケット゚ンゞンの助けを借りおず、この動きのパラメヌタヌたずえば、質量、最倧速床、最倧力などの䞡方を決定したす。


これらのレベルが䞀緒になっお、゚ヌゞェントの人工知胜を圢成したす。 次のセクションでは、これら3぀のレベルの実装を瀺すUnityアプリケヌションの䟋を瀺したす。 次に、R200カメラを䜿甚しお、拡匵珟実アプリケヌションに自埋ナビゲヌションを埋め蟌みたす。



オフラむンナビゲヌションの実装



このセクションでは、移動から始めお、自埋ナビゲヌションのためのUnityシヌンの動䜜プラットフォヌムに぀いお説明したす。



ove動き



゚ヌゞェントの動きは、 ニュヌトン力孊の法則に基づいおいたす。質量に力が加えられるず、加速が発生したす。 私たちは、あらゆる方向から力を加えるこずができる、均䞀に分垃した䜓重を持぀単玔化されたモデルを䜿甚したす。 動きを制限するために、最倧力ず最倧速床が蚭定されたすコヌドフラグメント1。



public float mass = 1f; // Mass (kg) public float maxSpeed = 0.5f; // Maximum speed (m/s) public float maxForce = 1f; // "Maximum force (N)
      
      





スニペット1.゚ヌゞェントの移動モデル



゚ヌゞェントには、起動時に初期化されるrigidbodyおよびcolliderコンポヌネントが必芁ですコヌドスニペット2を参照。 モデルを単玔にするために、重力は陀倖されおいたすが、オンにするこずができたす。



 private void Start () { // Initialize the rigidbody this.rb = GetComponent<rigidbody> (); this.rb.mass = this.mass; this.rb.useGravity = false; // Initialize the collider this.col = GetComponent<collider> (); }
      
      





コヌドスニペット2。rigidbodyおよびcolliderコンポヌネントはStartで初期化されたす。



゚ヌゞェントは、 FixedUpdateステップでリゞッドボディに力を加えるこずで移動したすコヌドスニペット3を参照。 FixedUpdateはUpdateず同様に機胜したすが、 Updateずは異なり、同じ間隔で実行されるこずが保蚌されおいたす。 Unity゚ンゞンは、 FixedUpdateステップの完了埌に物理孊゜リッドを䜿甚した操䜜を蚈算したす。



 private void FixedUpdate () { Vector3 force = Vector3.forward; // Upper bound on force if (force.magnitude > this.maxForce) { force = force.normalized * this.maxForce; } // Apply the force rb.AddForce (force, ForceMode.Force); // Upper bound on speed if (rb.velocity.magnitude > this.maxSpeed) { rb.velocity = rb.velocity.normalized * this.maxSpeed; } }
      
      





コヌドスニペット3。力はFixedUpdateステップで剛䜓に適甚されたす。 この䟋では、゚ヌゞェントはZ軞に沿っお移動したす



力の倧きさが゚ヌゞェントの最倧匷床を超える堎合、倧きさの匷床が最倧力に等しくなるように調敎されたす方向は維持されたす。 AddForce関数は、 数倀積分により力を適甚したす。









匏1.速床の数倀積分。 AddForce関数がこの蚈算を実行したす。



ここで、 Îœ1は新しい速床、 Îœ0は叀い速床、 fは力、 mは質量、 Δtは曎新間の時間間隔ですデフォルトでは、Unityの固定時間ステップは0.02 sです。 速床倀が最倧゚ヌゞェント速床を超える堎合、最倧速床ず䞀臎するように調敎されたす。



ガむダンス



ガむダンスは、運動モデルに䞎えられる力を蚈算したす。 障害物の探玢、到着、回避の3぀のガむダンスアルゎリズムが適甚されたす。



怜玢する



「怜玢」動䜜は、オブゞェクトをできるだけ早くタヌゲットに向かっお移動しようずしたす。 この動䜜の望たしい速床は、最倧速床でタヌゲットに盎接移動するこずです。 誘導力は、垌望の゚ヌゞェント速床ず珟圚の゚ヌゞェント速床の差ずしお蚈算されたす図5。





図5.「怜玢」ビヘむビアヌはホバヌパワヌを適甚しお、珟圚の速床を垌望の速床に倉曎したす



実装コヌドスニペット4は、最初に゚ヌゞェントずタヌゲット間のバむアスを正芏化し、それに最倧速床を掛けるこずにより、目的のベクトルを蚈算したす。 戻り指瀺力は、目的の速床から珟圚の剛䜓速床を匕いたものです。



 private Vector3 Seek () { Vector3 desiredVelocity = (this.seekTarget.position - this.transform.position).normalized * this.maxSpeed; return desiredVelocity - this.rb.velocity; }
      
      





コヌドスニペット4.動䜜「怜玢」



゚ヌゞェントは「怜玢」アルゎリズムを䜿甚し、 FixedUpdateで力を蚈算するずきにSeekを呌び出したすコヌドスニペット5。



 private void FixedUpdate () { Vector3 force = Seek (); ...
      
      





コヌドスニペット5. FixedUpdateのSeekを呌び出す



動䜜䞭の「怜玢」アルゎリズムの䟋をビデオ1に瀺したす。゚ヌゞェントには、剛䜓の珟圚の速床を瀺す青い矢印ず、この時間間隔でガむダンスが適甚されるこずを瀺す赀い矢印が装備されおいたす。





ビデオ1.最初は、゚ヌゞェントの速床はタヌゲットの方向に垂盎であるため、゚ヌゞェントは曲線に沿っお移動したす



到着



「怜玢」アルゎリズムを䜿甚するず、゚ヌゞェントは可胜な限り最高速床で移動しおいたため、タヌゲットを逃しお移動したす。 到着アルゎリズムは怜玢アルゎリズムに䌌おいたすが、違いはタヌゲットで完党に停止しようずするこずです。 パラメヌタヌ「スロヌむング半埄」は、゚ヌゞェントがスロヌダりンし始めるタヌゲットに到達する距離を決定したす。 ゚ヌゞェントが枛速半埄内にある堎合、望たしい速床ぱヌゞェントずタヌゲット間の距離に反比䟋したす。 最倧力、最倧速床、および枛速半埄によっおは、この動䜜が完党に停止しない堎合がありたす。



到着動䜜コヌドスニペット6は、最初に゚ヌゞェントずタヌゲット間の距離を蚈算したす。 枛速速床は、枛速半埄で割った距離たで枛速した最倧速床ずしお蚈算されたす。 目的の速床は、指定された速床ず最倧速床の間で最小です。 したがっお、タヌゲットたでの距離が枛速半埄より小さい堎合、望たしい速床は枛速速床です。 それ以倖の堎合、目的の速床は最倧速床です。 この関数の残りの郚分は、目的の速床で「怜玢」ずたったく同じように機胜したす。



 // Arrive deceleration radius (m) public float decelerationRadius = 1f; private Vector3 Arrive () { // Calculate the desired speed Vector3 targetOffset = this.seekTarget.position - this.transform.position; float distance = targetOffset.magnitude; float scaledSpeed = (distance / this.decelerationRadius) * this.maxSpeed; float desiredSpeed = Mathf.Min (scaledSpeed, this.maxSpeed); // Compute the steering force Vector3 desiredVelocity = targetOffset.normalized * desiredSpeed; return desiredVelocity - this.rb.velocity; }
      
      





スニペット6.動䜜「到着」





ビデオ2.「到着」アルゎリズムは、目暙に到達するず速床を䜎䞋させたす



障害物回避



到着および怜玢アルゎリズムは目的地に到着するのに最適ですが、障害に察凊するこずはできたせん。 動的な環境では、゚ヌゞェントは新たに出珟する障害を回避できる必芁がありたす。 障害物回避アルゎリズムは、提案されたルヌトに沿っお゚ヌゞェントの前のパスを分析し、回避すべき障害物があるかどうかを刀断したす。 障害物が怜出されるず、アルゎリズムぱヌゞェントが障害物ず衝突しないように゚ヌゞェントの経路を倉曎する力を蚈算したす図6。



図6.珟圚の軌道䞊で障害物が怜出された堎合、衝突回避力が返されたす

障害物回避アルゎリズムの実装コヌドフラグメント7は、スフィアキャストを䜿甚しお衝突を怜出したす。 この堎合、球䜓は珟圚の剛䜓速床ベクトルに沿っおリリヌスされ、衝突ごずにRaycastHitが返されたす。 球䜓ぱヌゞェントの䞭心から移動したす。その半埄は、オブゞェクトの衝突半埄ずパラメヌタヌ「回避半埄」の倀の合蚈に等しくなりたす。 回避半埄を䜿甚しお、ナヌザヌぱヌゞェントの呚りの空きスペヌスを特定できたす。 球䜓の動きの範囲は、「前方怜出」パラメヌタヌによっお制限されたす。



 // Avoidance radius (m). The desired amount of space between the agent and obstacles. public float avoidanceRadius = 0.03f; // Forward detection radius (m). The distance in front of the agent that is checked for obstacles. public float forwardDetection = 0.5f; private Vector3 ObstacleAvoidance () { Vector3 steeringForce = Vector3.zero; // Cast a sphere, that bounds the avoidance zone of the agent, to detect obstacles RaycastHit[] hits = Physics.SphereCastAll(this.transform.position, this.col.bounds.extents.x + this.avoidanceRadius, this.rb.velocity, this.forwardDetection); // Compute and sum the forces across all hits for(int i = 0; i < hits.Length; i++) { // Ensure that the collidier is on a different object if (hits[i].collider.gameObject.GetInstanceID () != this.gameObject.GetInstanceID ()) { if (hits[i].distance > 0) { // Scale the force inversely proportional to the distance to the target float scaledForce = ((this.forwardDetection - hits[i].distance) / this.forwardDetection) * this.maxForce; float desiredForce = Mathf.Min (scaledForce, this.maxForce); // Compute the steering force steeringForce += hits[i].normal * desiredForce; } } } return steeringForce; }
      
      





コヌド7のスニペット。動䜜「障害物からの回避」



spherecastを䜿甚するず、 RaycastHitオブゞェクトの配列が返されたす。 RaycastHitオブゞェクトには、衝突たでの距離や、衝突が発生したサヌフェスの平面の法線などの衝突情報が含たれおいたす。 法線は、平面に垂盎なベクトルです。 これを䜿甚しお、゚ヌゞェントを衝突点から遠ざけるこずができたす。 力の倧きさは、最倧力を衝突たでの距離に反比䟋させるこずによっお決定されたす。 各衝突の力が合蚈され、結果は1぀の時間間隔での合蚈回避力になりたす。



より耇雑な動䜜を取埗するには、䞀床に耇数のアルゎリズムを䜿甚できたすコヌドフラグメント8。 障害物回避アルゎリズムは、他のアルゎリズムずずもに䜿甚する堎合にのみ圹立ちたす。 この䟋ビデオ3では、「障害物の回避」が到着アルゎリズムず共に䜿甚されおいたす。 行動のアルゎリズムは、単玔に力を加算するこずで結合されたす。 ヒュヌリスティックなメカニズムを䜿甚しお匷制優先床の重み係数を決定する、より耇雑なスキヌムも可胜です。



 private void FixedUpdate () { // Calculate the total steering force by summing the active steering behaviors Vector3 force = Arrive () + ObstacleAvoidance(); ...
      
      





コヌド8のスニペット。アルゎリズム「到着」ず「障害物からの回避」は、力を远加するこずにより同時に䜿甚されたす。





ビデオ3.゚ヌゞェントは、「到着」ず「障害の回避」の2皮類の動䜜を同時に䜿甚したす。



action行動の遞択



アクションの遞択は、゚ヌゞェントによる共通の目暙ず意思決定の蚭定です。 ゚ヌゞェントの実装には、「到着」アルゎリズムず「障害の回避」アルゎリズムの組み合わせの圢でアクションを遞択するための単玔なモデルがすでに含たれおいたす。 ゚ヌゞェントはタヌゲットに到達しようずしたすが、障害物が怜出されるず、そのパスが倉曎されたす。 障害物回避アルゎリズムの回避半埄ず前方怜出パラメヌタヌは、実行されるアクションを決定したす。



R200カメラの統合



これで、゚ヌゞェントは独立しお移動できるようになり、拡匵珟実アプリケヌションに含めるこずができたす。

次の䟋は、Intel RealSense SDKの䞀郚であるScene Perceptionの䟋に基づいおいたす。 このアプリケヌションはScene Perceptionを䜿甚しお3次元モデルを䜜成し、ナヌザヌは3次元空間でタヌゲットを蚭定および移動できたす。 その埌、゚ヌゞェントは䜜成された3次元モデルを移動しお目暙を達成できたす。



▍シヌンマネヌゞャヌ



スクリプトシヌンマネヌゞャヌは、シヌンを初期化し、ナヌザヌコントロヌルを凊理したす。 唯䞀のコントロヌルはタッチたたはデバむスがタッチをサポヌトしおいない堎合はマりスクリックです。 タッチポむントからのレむトレヌシングにより、䜜成された3次元モデルにタッチするかどうかが決たりたす。 最初のタッチで3次元モデルにタヌゲットが䜜成され、2番目のタッチで゚ヌゞェントが䜜成され、その埌の各タッチでタヌゲットの䜍眮が移動したす。 制埡ロゞックは、ステヌトマシンコヌドフラグメント9によっお凊理されたす。



 // State machine that controls the scene: // Start => SceneInitialized -> TargetInitialized -> AgentInitialized private enum SceneState {SceneInitialized, TargetInitialized, AgentInitialized}; private SceneState state = SceneState.SceneInitialized; // Initial scene state. private void Update () { // Trigger when the user "clicks" with either the mouse or a touch up gesture. if(Input.GetMouseButtonUp (0)) { TouchHandler (); } } private void TouchHandler () { RaycastHit hit; // Raycast from the point touched on the screen if (Physics.Raycast (Camera.main.ScreenPointToRay (Input.mousePosition), out hit)) { // Only register if the touch was on the generated mesh if (hit.collider.gameObject.name == "meshPrefab(Clone)") { switch (this.state) { case SceneState.SceneInitialized: SpawnTarget (hit); this.state = SceneState.TargetInitialized; break; case SceneState.TargetInitialized: SpawnAgent (hit); this.state = SceneState.AgentInitialized; break; case SceneState.AgentInitialized: MoveTarget (hit); break; default: Debug.LogError("Invalid scene state."); break; } } } }
      
      





コヌドスニペット9.サンプルアプリケヌションのタッチハンドラヌずステヌトマシン



Scene Perceptionコンポヌネントは、倚くの小さな3次元モデルを圢成したす。 このようなモデルには、通垞、30個以䞋の頂点がありたす。 頂点の䜍眮は異なる堎合があり、その結果、䞀郚のモデルは、それらが配眮されおいるサヌフェスに察しおわずかに傟いおいたす。 オブゞェクトがモデルの䞊郚にある堎合たずえば、タヌゲットたたはオブゞェクト、オブゞェクトの向きは正しくありたせん。 この問題を回避するには、3次元モデルの平均法線を䜿甚したすコヌドスニペット10。



 private Vector3 AverageMeshNormal(Mesh mesh) { Vector3 sum = Vector3.zero; // Sum all the normals in the mesh for (int i = 0; i < mesh.normals.Length; i++){ sum += mesh.normals[i]; } // Return the average return sum / mesh.normals.Length; }
      
      





コヌドの䞀郚10. 3次元モデルの平均法線の蚈算



▍アセンブリアセンブリ



この䟋のために開発されたすべおのコヌドは、Github Webサむトで入手できたす。

次の手順では、Scene Managerず゚ヌゞェントの実装をIntel RealSenseアプリケヌションに統合したす。



  1. Intel RealSense SDK RSSDK \ framework \ UnityフォルダヌでRF_ScenePerceptionの䟋を開きたす。
  2. AutoNavAR Unityパッケヌゞをダりンロヌドしおむンポヌトしたす。
  3. Assets / AutoNavAR / Scenes /フォルダヌでRealSenseExampleSceneを開きたす。
  4. Intel RealSense R200カメラを搭茉した互換性のあるデバむスでアプリケヌションをビルドしお実行したす。




ビデオ4. Intel RealSense R200カメラずの統合



自埋航法のさらなる開発



R200カメラを備えた拡匵珟実アプリケヌションでのスタンドアロン゚ヌゞェントを瀺す䟋を開発したした。 この䜜業を開発し、゚ヌゞェントの「合理性」ずリアリズムを高めるには、いく぀かの方法がありたす。



゚ヌゞェントずしお、単玔化された機械モデルが、質量の均䞀な分垃ずずもに、方向の動きの制限なしで䜿甚されたした。 質量が䞍均䞀に分散され、身䜓にかかる力が制限される、より完党なモデルを開発できたすたずえば、異なる加速力ず制動力を持぀車、メむン゚ンゞンずサむドシャント゚ンゞンを持぀宇宙船。 機械モデルがより正確に実行されるほど、動きはよりリアルになりたす。



クレむグレむノルズは、アニメヌションずゲヌムのコンテキストで行動ガむダンスアルゎリズムを詳现に説明した最初の人物です。 この䟋で瀺したアルゎリズム「怜玢」、「到着」および「障害物の回避」は、 圌の研究に基づいお䜜成されおいたす。 レむノルズは、飛行、ストヌキング、攟浪、調査、障害物の回避、経路の远跡など、他の行動アルゎリズムに぀いお説明したした。 考慮されるグルヌプ行動アルゎリズムには、「分離」、「統合」、および「構築」が含たれたす。 別の有甚なリ゜ヌスは、Mat Bucklandの「ゲヌム甚の人工知胜のプログラミング」です。 動䜜アルゎリズムの実装ず、ステヌトマシンやパス怜玢など、その他の倚くの問題に぀いお説明しおいたす。



この䟋では、「到着」および「障害の回避」ガむダンスアルゎリズムが゚ヌゞェントに同時に適甚されたす。 したがっお、任意の数の動䜜アルゎリズムを組み合わせお、より耇雑なモデルを取埗できたす。 たずえば、ビヘむビアアルゎリズムは、分離、マヌゞ、および構築に基づいおいたす。 異なる動䜜アルゎリズムの組み合わせにより、䞍自然な結果が生じる堎合がありたす。 このようなアルゎリズムのさたざたなタむプを詊しお、新しい機胜を特定するこずをお勧めしたす。



さらに、䞀郚のパス怜玢手法は、動的環境で䜿甚するために蚭蚈されおいたす。 D *アルゎリズムはA *に近いですが、新しい芳枬に基づいおパスを曎新できたす぀たり、障害物を远加および削陀したす。 D * LiteアルゎリズムはD *ず同じように機胜し、実装が簡単です。 パスファむンディングをガむダンスずずもに䜿甚できたす。りェむポむントを蚭定しおから、ガむダンスを䜿甚しおそれらを迂回できたす。



アクションの遞択に぀いおは、この蚘事では説明しおいたせんが、ゲヌム理論で広く研究されおいたす。 ゲヌム理論では、戊略ず意思決定の数孊的基瀎が調査されたす。 ゲヌム理論は、経枈孊、政治孊、心理孊を含む倚くの分野に適甚されたす。 自埋的な゚ヌゞェントの堎合、ゲヌム理論は、決定が行われる方法ずタむミングを制埡できたす。 ゲヌム理論101りィリアムスパニ゚ルによる完党なリファレンスは、 YouTubeビデオのシリヌズの優れた開始リ゜ヌスです。



おわりに



゚ヌゞェントの動き、行動、行動を調敎するためのツヌルがありたす。 オフラむンナビゲヌションは、拡匵珟実アプリケヌションで䜜成されたIntel RealSenseカメラのような動的環境に最適です。 動きずガむダンスの単玔なモデルでさえ、環境に関する予備知識がなくおも耇雑な動䜜を圢成できたす。 豊富な利甚可胜なモデルずアルゎリズムにより、あらゆるアプリケヌションにスタンドアロン゜リュヌションを柔軟に実装できたす。



All Articles