Implementazione dell'elusione al 100% delle collisioni


21

Sono un principiante assoluto con lo sviluppo del gioco e tutto quello che so sull'evitamento / risoluzione delle collisioni, l'ho imparato su o attraverso questo sito la scorsa settimana ... quindi non esitate a correggermi se quello che sto chiedendo qui è sulla base di ipotesi / incomprensioni errate. Ho cercato del mio meglio per essere chiaro, ma detto questo, l'argomento è ancora nuovo per me.

veicoli

Nel mio gioco, ho veicoli che si muovono autonomamente. Sono posizionati in uno spazio 3D e il loro movimento è regolato da un numero di variabili che sono diverse per ciascun veicolo. Quello di interesse qui sono principalmente:

  • Solo movimento in avanti .
  • Una velocità che può variare tra min e max, ma il cui min non è (anche vicino a) zero.
  • Un raggio di sterzata che dipende dalla velocità (maggiore è la velocità, maggiore è il raggio)
  • Due accelerazioni massime (per diminuire e aumentare la velocità)

Obbiettivo

Il mio obiettivo è implementare una sorta di IA che eviterà accuratamente le collisioni al 100% (cioè sarò sicuro che i veicoli non si scontreranno mai ).

Design

  • Anche se preferirei di più l'idea di avere l'IA "a bordo" (ovvero ogni veicolo con la sua "AI per evitare le collisioni", eventualmente interrogando e / o inviando messaggi ad altri veicoli), è anche possibile per me implementare la CA AI un livello centrale (invio comandi ai veicoli).
  • Nella maggior parte dei casi, il veicolo dovrà semplicemente allontanarsi l'uno dall'altro in qualsiasi direzione, ma in determinate circostanze, dovrà evitare la collisione e andare verso lo stesso obiettivo

Quello che ho trovato finora e dove mi sono bloccato

All'interno dei numerosi link che ho trovato in altre domande su questo stesso sito, ho trovato di particolare utilità questi:

  1. Collisione tra palle da biliardo
  2. Prevenzione delle collisioni non allineata
  3. Fare la fila

Mentre questi tre link "mi hanno aperto gli occhi" in molti modi, non mi è immediatamente chiaro come utilizzare tali informazioni nel mio caso. In particolare l'articolo n. 2 "cerca" solo di prevenire le collisioni (ma le collisioni si verificano di volta in volta). Mentre l'articolo n. 3 ha bisogno di fermare i veicoli a volte per prevenire le collisioni.

Quello che ho anche notato è che gli algoritmi per evitare le collisioni sopra menzionati usano una "proiezione istantanea" della velocità lineare per verificare se qualcosa è sulla strada del veicolo. Mi chiedevo se questo fosse abbastanza nel mio caso o se dovevo proiettare la mia posizione in un modo più realistico (ad esempio: se sono 60 ° in uno sterzo di 90 ° a destra, dovrei calcolare la mia posizione per il resto del 30 ° della curva, quindi assumendo un movimento lineare).

Infine, ho particolarmente paura dei deadlock . In altre parole: sebbene la densità dei veicoli nel mondo sarà abbastanza bassa, sono preoccupato che, dato che un certo numero di veicoli convergono verso lo stesso punto, una volta che si renderanno conto di essere in rotta di collisione, qualsiasi manovra evasiva sarà impossibile poiché porterebbe il veicolo su un percorso di collisione con alcuni altri.

Domanda

Come posso raggiungere il mio "obiettivo"? Una spiegazione approfondita è ovviamente molto apprezzata, ma anche i collegamenti a risorse esterne sarebbero di grande aiuto (sono sicuro di non essere il primo a questo problema, ma probabilmente ho usato parole chiave sbagliate per cercare nel web? )

Grazie in anticipo per il vostro aiuto!


20
Fai fermare ogni veicolo. Evitamento del 100% raggiunto.
Martin Sojka,

2
È sufficiente se si fermano l'uno rispetto all'altro. Cioè, tutti si muovono esattamente nella stessa direzione, esattamente alla stessa velocità. Il problema più grande è che è (dimostrabilmente) IMPOSSIBILE ottenere qualsiasi algoritmo che lo fa al 100% per ogni possibile configurazione. Ad esempio, considerare due veicoli con raggi di sterzata molto grandi alla distanza minima non uguale a zero l'uno dall'altro, volando a vicenda alla massima velocità.
Martin Sojka,

12
@mac - Una cosa da tenere a mente mentre sviluppi questo algoritmo è che è un gioco. Se passi troppo tempo a cercare di risolvere questo problema, forse stai cercando di risolvere il problema sbagliato. Puoi imbrogliare: spostare i veicoli o violare le loro regole di gestione se rilevi una situazione difficile, specialmente se il giocatore non riesce a vederla. Assicurati che le regole di gestione del veicolo che ti vengono in mente non finiscano per sembrare noiose, è più importante essere divertenti che avere ragione.
Capovolgi il

3
@mac Beh, probabilmente userei un controller globale con A *. So che volevi stare lontano da questa soluzione, ma ha più senso in quanto ha una visione globale dei veicoli e può pre-calcolare percorsi. Potresti anche voler assegnare una priorità ai veicoli (quello più vicino al bersaglio ha una priorità più alta, quindi il suo percorso rimane invariato e gli altri si spostano di nuovo attorno ad esso).
Jonathan Connell,

6
@Flip Un simulatore di volo è ancora considerato un gioco, ma se 'ingannassi', si spezzerebbe il gioco per tutti i giocatori che lo hanno realizzato.
Jonathan Connell,

Risposte:


5

Hai esaminato gli algoritmi di floccaggio ? Quando guardo la tua descrizione è quello che mi viene in mente. Ci sono molti articoli in giro per questo, eccone uno che mi piace . Probabilmente non userete tutti gli aspetti del floccaggio, come la coesione. La maggior parte degli aspetti sarebbe utile per quello che stai cercando di fare, come l'allineamento e la separazione, che aiuterebbero entrambi ad evitare le collisioni. Finiresti con qualcosa di un po 'diverso dal floccaggio, ma dovrebbe aiutarti a iniziare.

In bocca al lupo!


2
Il termine di ricerca pertinente qui è Boids . Tuttavia, non penso che questo sia ciò che OP stava cercando - sembra più che voglia che le auto vadano in ogni direzione.
BlueRaja - Danny Pflughoeft,

Il floccaggio riguarda ancora l'IA, evitando collisioni tra di loro.
Matt Jensen,

OP richiede una prevenzione affidabile delle collisioni. Il floccaggio non offre garanzie, poiché il modello basato sulla forza non incorpora vincoli forti. Sebbene il floccaggio sia sicuramente un buon punto di accesso per entrare nell'argomento, la risposta è quindi fuori posto. Suggerisco invece all'OP di cercare "ostacoli di velocità".
Tobias Gurdan,

@TobiasGurdan Se hai una risposta più appropriata (e sono d'accordo che lo fai), dovresti creare una risposta.
MichaelHouse

3

Ecco un approccio: ogni veicolo ha un breve percorso proiettato in cui il veicolo alla fine rallenta ed entra in un circuito, questi percorsi potrebbero non sovrapporsi. Ogni volta che un veicolo arriva al punto in cui è impostato per rallentare, si tenta di generare un nuovo percorso che non si sovrappone a quello esistente. Se ciò non è possibile, il veicolo prosegue sul suo percorso e riprova periodicamente a fare un nuovo percorso.

Il metodo potrebbe essere migliorato per consentire un traffico più stretto lasciando che i percorsi che conducono ai loop si sovrappongano e si ripetano laddove è possibile determinare che ciò non causerà una collisione.


0

Avere un metodo in ogni veicolo in cui esegue una ricerca radiale attorno a sé, se ci sono altri veicoli all'interno di questo raggio, allontanarsi in un modo adatto a proprio piacimento: 1) Muoversi nel vettore opposto, 2) Rallentare, 3) accelerare, ecc.

Puoi anche fare combinazioni: se il vettore dell'altro veicolo non è dritto o direttamente dietro: allontanati; altrimenti se è dritto: rallenta; altro: accelerare.


0

Il mio obiettivo è implementare una sorta di IA che eviterà accuratamente le collisioni al 100% (cioè sarò sicuro che i veicoli non si scontreranno mai).

Se ciò fosse possibile, ormai sarebbe stato messo su tutti gli aerei del mondo.

Suggerisco di rilassare l'aspetto "autonomo" e di avere una funzione che risolva le collisioni previste tra 2 (o più) veicoli. Può essere ingenuo come scegliere nuove direzioni casuali in cui viaggiare e vedere se ciò risolve il problema, ma l'importante è che la funzione ritorni solo quando viene raggiunto un accordo adatto a entrambi i veicoli.

Suggerisco anche che qualsiasi veicolo che si prevede si scontrerà nel prossimo futuro riduce la sua velocità mantenendo la stessa distanza prospettica - questo darà ai tuoi veicoli maggiori opportunità di evitare le collisioni, proprio come nella vita reale.


Dal momento che sta progettando le regole dell'universo, è assolutamente possibile. Il mondo reale è ovviamente più complicato, ma sono sicuro che gli aerei del mondo reale usano un sacco di tecniche per evitare le collisioni ...
BlueRaja - Danny Pflughoeft

0

Mi sembra che la simulazione della folla possa essere l'argomento più rilevante per ciò che stai cercando di ottenere. Il gruppo GAMMA dell'UNC ha una vasta mole di lavoro sull'argomento che potrebbe valere la pena di esaminare. La loro descrizione:

La simulazione di folla e multi-agente è il processo di simulazione di un gran numero di persone, creature o altri personaggi, ognuno dei quali interagisce in un unico ambiente. Ci si aspetta che questi attori si muovano verso i loro obiettivi, interagiscano con il loro ambiente e rispondano l'un l'altro. Le simulazioni della folla hanno molti usi, incluso il miglioramento della pianificazione architettonica, il miglioramento degli ambienti di allenamento e delle realtà virtuali e la guida di personaggi con intelligenza artificiale (AI) in giochi e film. Il nostro gruppo ha lavorato su molti problemi nella simulazione della folla, tra cui veloce, garantito, prevenzione delle collisioni, pianificazione del percorso e del movimento in tempo reale, flussi di folla e comportamenti diretti.

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


-1

Non credo che esista un metodo di evitamento al 100%, ma se i tuoi veicoli possiedono informazioni complete sul mondo, potresti racchiudere ogni veicolo in una scatola la cui lunghezza dipende dalla sua velocità ed eseguire il controllo delle collisioni su quelle scatole. Se c'è davvero una collisione, allontanati, con una forza che dipende dall'imminenza dell'impatto (o dall'area della collisione tra le due scatole) e rallenta il tiro (ma tieni la scatola della stessa lunghezza durante l'operazione di evitamento).

Ovviamente questo non funzionerà se i veicoli non dispongono di informazioni complete, ma in questo caso nulla garantirà un elusione del 100% (tranne, come già detto, movimento parallelo)

alcuni metodi qui descritti sarebbero probabilmente utili, in particolare questo: comportamento dello sterzo contro le collisioni non allineato

Saluti


1
Hai letto la domanda originale? Quel link che hai raccomandato è già nella domanda ...
bummzack,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.