Imaginez un mouvement semblable à une voiture où les entités ne peuvent pas allumer un sou. Disons, pour les besoins de la discussion, que lorsqu'ils sont à grande vitesse, ils peuvent tourner à 90 degrés par seconde. Dans de nombreux cas, cela modifierait le chemin optimal et donc la recherche de chemin. Cela peut même rendre les chemins «habituels» entièrement impossibles à parcourir.
Existe-t-il des algorithmes d'orientation de cheminement ou des algorithmes de planification de mouvement qui peuvent garder cela à l'esprit, ou existe-t-il des moyens simples d'adapter les plus populaires?
path-finding
car
Weckar E.
la source
la source
Réponses:
Bienvenue dans le monde merveilleux de la planification de mouvements non holonomiques . Je recommande de le faire en utilisant un planificateur de chemin de grille en treillis . D'autres alternatives incluent le RRT cinodynamique et l' optimisation de la trajectoire . Les systèmes non holonomiques incluent les voitures, les bateaux, les monocycles ou tout ce qui ne permet pas au véhicule de se déplacer dans la direction souhaitée. La planification de ces systèmes est beaucoup plus difficile que les systèmes holonomiques et jusqu'en 2000 était à la pointe de la recherche universitaire. De nos jours, il existe de nombreux algorithmes à choisir, qui fonctionnent décemment.
Voici comment ça fonctionne.
Etat
La configuration q de votre voiture est en fait un état 3D contenant la position x, y de la voiture et son orientation t . Les nœuds de votre algorithme A * sont en fait des vecteurs 3D.
Actions
Et les bords?
C'est un peu plus difficile, car votre voiture pourrait en fait choisir un nombre infini de façons de tourner la roue. Ainsi , nous pouvons la rendre accessible à un planificateur de réseau de réseau en limitant le nombre d'actions que la voiture peut prendre pour un ensemble discret, A . Par souci de simplicité, supposons que la voiture n'accélère pas, mais qu'elle peut plutôt changer sa vitesse instantanément. Dans notre cas, A peut être comme suit:
Maintenant, nous pouvons créer un ensemble discret d'actions que la voiture peut entreprendre à tout moment. Par exemple, une droite dure tout en appuyant à fond sur le gaz pendant 0,5 seconde ressemblerait à ceci:
Mettre la voiture en marche arrière et reculer ressemblerait à ceci:
Et votre liste d'actions ressemblerait à ceci:
Vous avez également besoin d'un moyen de définir comment une action effectuée sur un nœud entraîne un nouveau nœud. C'est ce qu'on appelle la dynamique vers l' avant du système.
Cellules de grille discrètes
Maintenant, pour construire la grille en treillis, tout ce que nous devons faire est de hacher les états de la voiture en cellules de grille discrètes. Cela les transforme en nœuds discrets qui peuvent être suivis de A *. Ceci est super important car sinon A * n'aurait aucun moyen de savoir si deux états de voiture sont réellement les mêmes pour les comparer. En hachant des valeurs de cellules de grille entières, cela devient trivial.
Maintenant, nous pouvons faire un plan A * où les GridCells sont les nœuds, les Actions sont les bords entre les nœuds et le Début et le But sont exprimés en termes de GridCells. L'heuristique entre deux GridCells est la distance en x et y plus la distance angulaire en thêta.
Suivre le chemin
Maintenant que nous avons un chemin en termes de GridCells et d'actions entre eux, nous pouvons écrire un suiveur de chemin pour la voiture. Étant donné que les cellules de la grille sont discrètes, la voiture sauterait entre les cellules. Nous devrons donc lisser le mouvement de la voiture le long du chemin. Si votre jeu utilise un moteur physique, cela peut être accompli en écrivant un contrôleur de direction qui essaie de garder la voiture aussi près que possible du chemin. Sinon, vous pouvez animer le chemin à l'aide de courbes de Bézier ou simplement en faisant la moyenne des quelques points les plus proches du chemin.
la source
La plupart des algorithmes de recherche de chemin fonctionnent sur un graphe arbitraire sans restriction de géométrie.
Donc, ce que vous devez faire est d'ajouter l'orientation de la voiture à chaque nœud exploré et de restreindre les nœuds réellement connectés.
la source
Mes pensées, je ne les ai pas testées!
Vous devriez également pouvoir le faire sans avoir à terminer d'abord le chemin, ergo: gérer les virages pendant A *, qui sera probablement beaucoup mieux optimisé, mais cela pourrait également s'avérer problématique et glitchy, je ne le saurais vraiment pas et malheureusement je je n'ai pas le temps de le tester moi-même.
la source
Si votre agent a le plein contrôle de la voiture, faites-le dans l'autre sens. Connectez une ligne du début à la fin en premier, puis déterminez à quelle vitesse vous pouvez naviguer à chaque tour, similaire à la réponse de Dennis.
Ne dessinez pas les courbes de Bézier à partir de points fixes. Pour minimiser la perte de vitesse, vous devez déplacer toute la ligne, alors commencez par insérer des nœuds supplémentaires à une distance plus ou moins égale, puis déplacez-vous ensuite pour minimiser l'énergie ou des stratégies similaires. Pour plus de détails, vous devez vous pencher sur la génération de lignes AI dans (de préférence sur sim ou semi-sim) les jeux de course.
Une fois que le système de ligne AI est en cours d'exécution, lancez votre recherche A * et pour chaque chemin, avancez d'au moins un coin, puis calculez la ligne AI qui vous donne une estimation du temps. Ce serait votre fonction de coût.
la source