Çarpışma% 100 kaçınma uygulaması


21

Ben oyun geliştirme ile mutlak bir acemi olduğum ve tüm ı çarpışma kaçınma / çözünürlük hakkında biliyorum, bunu öğrendim üzerinde veya aracılığıyla yani ne ben buradan soruyorum ise beni düzeltin çekinmeyin ... geçtiğimiz hafta içinde bu sitede yanlış varsayımlara / yanlış anlamalara dayanarak. Açık olmak için elimden gelenin en iyisini yaptım, ama konu hala benim için yeni.

Araçlar

Oyunumda özerk hareket eden araçlara sahibim. Bir 3B uzaya yerleştirilirler ve hareketleri, her araç için farklı olan bir dizi değişken tarafından yönetilir. Buradaki ilgi çekici olanlardan biri:

  • Sadece ileri hareket.
  • Min ve max arasında değişebilen, ancak min (sıfıra bile yakın olmayan ) bir hız .
  • Hıza bağlı bir direksiyon yarıçapı (daha yüksek hız, daha büyük yarıçap)
  • İki maksimum hızlanma (hızı azaltmak ve artırmak için)

Hedef

Amacım, % 100 doğru bir çarpışmadan kaçınmayı sağlayacak bir tür AI uygulamaktır (yani araçların asla çarpışmayacağından emin olacağım ).

tasarlamak

  • Her ne kadar AI'yı “onboard” (yani “çarpışmadan kaçınmaya sahip olan her araca, sonunda sorgulama ve / veya diğer araçlara mesaj gönderme” olan) her bir araca sahip olma fikrini tercih etsem de CA AI’yi şu anda uygulamak mümkün. merkezi bir seviye (araçlara gönderme komutları).
  • Çoğu durumda, araç herhangi bir yöne birbirinden uzak durmak zorunda kalacak, ancak belirli koşullar altında çarpışmadan kaçınmak ve aynı hedefe doğru ilerlemek zorunda kalacaklar

Şimdiye kadar ne buldum ve nerede kaldım

Bu sitede başka sorularda bulduğum birçok bağlantı içinde, bunları özellikle kullandığımı gördüm:

  1. Havuz topları arasında çarpışma
  2. Sınırsız çarpışmadan kaçınma
  3. Kuyruk

Bu üç bağlantı "gözlerimi" birçok yönden açtı, ancak bu bilginin benim durumumda nasıl kullanılacağı hemen belli değil. Özel olarak # 2 maddesi yalnızca çarpışmayı önlemeye "çalışır" (ancak çarpışmalar zaman zaman olur). Oysa # 3, bazen çarpışmaları önlemek için araçları durdurmalı.

Benim de fark ettiğim, yukarıda bağlanan çarpışmadan kaçınma algoritmalarının , aracın yolunda bir şey olup olmadığını kontrol etmek için doğrusal hızda bir "anlık projeksiyon" kullanmasıdır . Benim durumumda bunun yeterli olup olmadığını merak ediyordum ya da pozisyonumu daha gerçekçi bir şekilde yansıtmak zorunda mıydım (örneğin: 60 ° sağa doğru 90 ° direksiyondaysam, kalanım için pozisyonumu hesaplamalıyım). 30 ° eğri ve ardından doğrusal hareket varsayarak).

Son olarak, özellikle kilitlenmelerden korkuyorum . Başka bir deyişle: dünyadaki araçların yoğunluğu oldukça düşük olsa da, aynı noktaya yaklaşan belirli sayıda araç verildiğinde, çarpışma rotasında olduklarını anladıklarında, kaçış yapan manevraların imkansız olacağından endişeliyim. aracı başkaları ile çarpışma yolunda getireceği gibi.

Soru

"Hedefime" nasıl ulaşabilirim? Derinlemesine bir açıklama elbette çok takdir edilmektedir, ancak dış kaynaklara bağlantılar da çok yardımcı olacaktır (Bu sorunla ilk ben olmadığımdan eminim, ancak muhtemelen web’de arama yapmak için yanlış anahtar kelimeler kullandım? )

Yardımınız için şimdiden teşekkür ederim!


20
Her aracı durdurun. % 100 kaçınma sağlandı.
Martin Sojka

2
Birbirlerine göreceli olarak durmaları yeterli. Yani, hepsi tam olarak aynı yönde, tam olarak aynı hızla hareket eder. Daha büyük sorun, (herhalde) her olası konfigürasyon için% 100 oranında yapan herhangi bir algoritmaya ulaşmak KABUL ETMEMEZDİR. Örneğin, minimum mesafede birbirinden sıfıra eşit olmayan, maksimum hızda uçan, çok büyük dönüş yarıçapına sahip iki aracı düşünün.
Martin Sojka

12
@mac - Bu algoritmayı geliştirirken akılda tutulması gereken şeylerden biri, bu bir Oyun. Bu sorunu çözmek için çok zaman harcıyorsanız, belki de yanlış sorunu çözmeye çalışıyorsunuzdur. Özellikle oyuncu göremiyorsa, zor bir durum tespit ederseniz hile yapabilirsiniz - araçları hareket ettirebilir veya kullanım kurallarını ihlal edebilirsiniz. Hangi araç taşıma kurallarının sıkıcı görünmeyeceğinden emin olun, eğlenceli olmak doğru olmaktan daha önemlidir.
çevirin

3
@mac Eh, muhtemelen A * ile küresel bir denetleyici kullanırdım. Bu çözümden uzak durmak istediğinizi biliyorum, ancak araçlar hakkında küresel bir görüşü olduğu ve yolları önceden hesaplayabildiği için daha mantıklı geliyor. Ayrıca araçlara öncelik vermek de isteyebilirsiniz (hedefe en yakın olanı daha yüksek bir öncelik kazanır, bu nedenle yolu değişmeden kalır ve diğerleri de onun etrafında ilerler).
Jonathan Connell

6
@Flip Bir uçuş simülatörü hala bir oyun olarak kabul edilir, ancak 'aldattıysanız', bunu gerçekleştiren herhangi bir oyuncu için oyunu kırar.
Jonathan Connell

Yanıtlar:


5

Sürü algoritmalarına baktınız mı ? Açıklamanıza baktığımda, aklıma gelen bu benim için. Bunun için bir sürü makale var, işte sevdiğim biri . Muhtemelen, uyum gibi akın tüm özelliklerini kullanmayacaksınız. Yönlerin çoğu, her ikisi de çarpışmaların önlenmesine yardımcı olacak olan, hizalama ve ayrılma gibi yapmaya çalıştığınız şey için faydalı olacaktır. Akın etmekten biraz farklı bir şeyle bitirdiniz, ama başlamanıza yardımcı olmalı.

İyi şanslar!


2
Buradaki ilgili arama terimi Boids . Ancak, OP'nin aradığı şeyin bu olduğunu sanmıyorum - arabaların her yöne gitmesini istediği gibi geliyor.
BlueRaja - Danny Pflughoeft

Sürü hala AI ile ilgili olarak birbirleriyle çarpışmayı önlüyor.
Matt Jensen

OP, güvenilir çarpışmadan kaçınma talebinde bulunur. Kuvvet temelli model zorlu kısıtlamalar içermediğinden, akın garantisi yoktur. Akın kesinlikle konuyu ele almak için iyi bir giriş noktası olsa da, cevap böylece yanlış. OP'nin yerine "hız engelleri" aramasını öneriyorum.
Tobias Gurdan

@ TobiasGurdan Daha uygun bir cevabınız varsa (ve sizin de aynı fikirdeyim), bir cevap oluşturmalısınız.
MichaelHouse

3

İşte bir yaklaşım: Her aracın, sonunda aracın yavaşladığı ve bir döngüye girdiği, öngörülen kısa bir yolu vardır, bu yollar üst üste gelmeyebilir. Ne zaman bir araç yavaşlamasının ayarlandığı noktaya geldiğinde, mevcut olanların hiçbiriyle örtüşmeyen yeni bir yol oluşturmaya çalışırsınız. Bunun mümkün olmadığı tespit edilirse araç yola devam eder ve periyodik olarak yeni bir yol açmaya çalışır.

Bu yöntem, döngülere yol açan yolların birbiriyle örtüşmesine izin vererek daha sıkı trafiğe izin verecek şekilde geliştirilebilir ve bunun çarpışmaya neden olmayacağı tespit edilen döngüler.


0

Her araca kendi etrafında radyal bir arama yapan bir yöntem uygulayın, bu yarıçapın içinde başka araçlar varsa, istediğiniz şekilde uygun şekilde hareket ettirin: 1) Karşı vektörde hareket edin, 2) yavaşlayın, 3) hızlandırmak, vb.

Kombinasyonları bile yapabilirsiniz: Eğer diğer aracın vektörü dümdüz ileride veya doğrudan geride değilse: uzaklaşın; dümdüz ileri ise: yavaşlayın; başka: hızlandırmak.


0

Amacım,% 100 doğru bir çarpışmadan kaçınmayı sağlayacak bir tür AI uygulamaktır (yani araçların asla çarpışmayacağından emin olacağım).

Bu mümkün olsaydı, şimdiye kadar dünyadaki tüm uçaklara konurdu.

'Özerk' yönünü gevşetmeyi ve 2 (veya daha fazla) araç arasındaki öngörülen çarpışmaları gideren bir işlevi olmasını öneriyorum. Seyahat etmek için rastgele yeni yönler seçmek ve sorunun çözülüp çözülmediğini görmek kadar saf olabilir, ancak önemli olan, işlevin yalnızca her iki araca da uygun bir anlaşmaya varıldığında geri dönmesidir.

Ayrıca yakın gelecekte çarpışması öngörülen herhangi bir aracın, aynı ileri görüş mesafesini korurken hızını düşürdüğünü de öneriyorum - bu, araçlarınıza gerçek hayatta olduğu gibi çarpışmaları önlemek için daha fazla fırsat verecektir.


Evrenin kurallarını tasarladığından, kesinlikle mümkün. Gerçek dünya açıkça daha karmaşık, ama gerçek dünya uçaklarının bir ton çarpışmadan kaçınma teknikleri
kullandığından eminim

0

Bana göre kalabalık simülasyonu , elde etmeye çalıştığınız şeyle en alakalı konu olabilir. UNC’deki GAMMA grubu, araştırılmaya değer olabilecek konuyla ilgili geniş bir çalışma grubuna sahiptir. Onların açıklaması:

Kalabalık ve çok ajanlı simülasyon, her biri bir ortamda etkileşime giren çok sayıda insanı, yaratığı veya diğer karakterleri simüle etme işlemidir. Bu aktörlerin amaçlarına geçmeleri, çevreleriyle etkileşime girmeleri ve birbirlerine cevap vermeleri beklenir. Kalabalık simülasyonlarının mimari planlamayı geliştirmek, eğitim ortamlarını ve sanal gerçeklikleri arttırmak ve oyunlarda ve filmlerde yapay olarak akıllı (AI) karakterleri kullanmak da dahil olmak üzere birçok kullanımı var . Grubumuz kalabalık simülasyonunda hızlı, garantili, çarpışmadan kaçınma, gerçek zamanlı yol ve hareket planlama, kalabalık akışları ve yönlendirilmiş davranışlar gibi birçok problem üzerinde çalıştı .

http://gamma.cs.unc.edu/research/crowds/


-1

% 100 kaçınma yöntemi olduğunu sanmıyorum, ancak araçların tam dünya bilgilerine sahip olması durumunda, her aracı uzunluğu hızına bağlı olan bir kutuya yerleştirebilir ve bu kutulara çarpışma kontrolü uygulayabilirsiniz. Gerçekten bir çarpışma varsa, çarpma (veya iki kutu arasındaki çarpışma alanının) yakınlığına bağlı olarak kuvvetli bir şekilde uzaklaşın ve yavaş bırakma yapın (ancak kaçınma işlemi sırasında kutunuzu aynı uzunlukta tutun).

Açıkçası, eğer araçlar tam bilgiye sahip değilse bu işe yaramaz, ancak bu durumda hiçbir şey% 100 kaçınma garantisi vermez (zaten belirtildiği gibi paralel hareket hariç)

Burada tarif edilen bazı yöntemler muhtemelen, bu yöntemle faydalı olacaktır: Atamayan Çarpışma Önleme yönlendirme davranışı

Saygılarımızla


1
Orijinal soruyu okudun mu? Tavsiye ettiğin link zaten soruda ...
bummzack
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.