Va chạm 100% tránh thực hiện


21

Tôi là người mới bắt đầu tuyệt đối với phát triển trò chơi và tất cả những gì tôi biết về tránh va chạm / giải quyết va chạm, tôi đã tìm hiểu nó trên hoặc thông qua trang web này trong tuần qua ... vì vậy đừng ngần ngại sửa cho tôi nếu những gì tôi hỏi ở đây là dựa trên những giả định / hiểu lầm sai Tôi đã cố gắng hết sức để rõ ràng, nhưng điều đó nói rằng, chủ đề vẫn là tiểu thuyết đối với tôi.

Xe cộ

Trong trò chơi của tôi, tôi có những chiếc xe di chuyển tự động. Chúng được đặt trong một không gian 3D và chuyển động của chúng bị chi phối bởi một số biến số khác nhau cho mỗi phương tiện. Một trong những quan tâm ở đây chủ yếu là:

  • Chỉ chuyển động về phía trước .
  • Một tốc độ có thể khác nhau giữa các cực tiểu và cực, nhưng mà min là không (thậm chí gần) bằng không.
  • Một bán kính lái mà sẽ phụ thuộc vào tốc độ (tốc độ cao hơn, bán kính lớn hơn)
  • Hai gia tốc tối đa (để giảm tốc độ và tăng tốc)

Mục tiêu

Mục tiêu của tôi là triển khai một số loại AI sẽ tránh va chạm chính xác 100% (tức là tôi sẽ chắc chắn rằng các phương tiện sẽ không bao giờ va chạm).

Thiết kế

  • Mặc dù tôi thích ý tưởng có AI "trên tàu" hơn (nghĩa là mỗi chiếc xe đều có "AI tránh va chạm", cuối cùng truy vấn và / hoặc gửi tin nhắn cho các phương tiện khác) tôi cũng có thể thực hiện CA AI tại một cấp trung ương (gửi lệnh cho các phương tiện).
  • Trong hầu hết các trường hợp, chiếc xe chỉ đơn giản là phải tránh xa nhau theo bất kỳ hướng nào, nhưng trong một số trường hợp nhất định, chúng sẽ phải tránh va chạm và đi về cùng một mục tiêu

Những gì tôi tìm thấy cho đến nay và nơi tôi bị mắc kẹt

Trong rất nhiều liên kết tôi tìm thấy trong các câu hỏi khác trên chính trang web này, tôi thấy đặc biệt sử dụng những liên kết này:

  1. Va chạm giữa bóng bi-a
  2. Tránh va chạm không được chỉ định
  3. Xếp hàng

Mặc dù ba liên kết này "mở mắt" theo nhiều cách, nhưng tôi không rõ ngay cách sử dụng thông tin đó trong trường hợp của mình. Cụ thể, bài viết số 2 chỉ "cố gắng" để ngăn va chạm (nhưng va chạm xảy ra theo thời gian). Trong khi bài viết số 3 cần dừng xe đôi khi để tránh va chạm.

Điều tôi cũng nhận thấy là các thuật toán tránh va chạm được liên kết ở trên sử dụng "phép chiếu tức thời" của tốc độ tuyến tính để kiểm tra xem có thứ gì đó đang trên đường của xe không. Tôi đã tự hỏi liệu điều này là đủ trong trường hợp của tôi hay nếu tôi phải dự đoán vị trí của mình theo cách thực tế hơn (ví dụ: Nếu tôi lái 60 ° sang bên phải 90 °, tôi nên tính toán vị trí của mình cho phần còn lại của 30 ° của đường cong, và sau đó giả sử chuyển động tuyến tính).

Cuối cùng, tôi đặc biệt sợ bế tắc . Nói cách khác: mặc dù mật độ phương tiện trên thế giới sẽ khá thấp, tôi lo lắng rằng với một số lượng phương tiện nhất định hội tụ về cùng một điểm, một khi họ sẽ nhận ra rằng họ đang ở trong một vụ va chạm, bất kỳ thao tác lảng tránh nào cũng sẽ không thể xảy ra vì nó sẽ đưa chiếc xe vào con đường va chạm với một số người khác.

Câu hỏi

Làm thế nào tôi có thể đạt được "mục tiêu" của mình? Một lời giải thích sâu sắc tất nhiên được đánh giá rất cao, nhưng các liên kết đến các nguồn lực bên ngoài cũng sẽ giúp ích rất nhiều (tôi chắc chắn tôi không phải là người đầu tiên gặp vấn đề này, nhưng có lẽ tôi đã sử dụng từ khóa sai để tìm kiếm trên web? )

Cảm ơn rất nhiều về sự trợ giúp của bạn!


20
Có mỗi chiếc xe dừng lại. 100% tránh được.
Martin Sojka

2
Thế là đủ nếu họ dừng lại tương đối với nhau. Đó là, tất cả chúng đều di chuyển theo cùng một hướng, với tốc độ chính xác như nhau. Vấn đề lớn hơn là nó (chắc chắn) không thể đạt được bất kỳ thuật toán nào đạt được tỷ lệ 100% cho mọi cấu hình có thể. Ví dụ, hãy xem xét hai phương tiện có bán kính quay rất lớn ở khoảng cách tối thiểu không bằng 0 với nhau, bay với nhau với tốc độ tối đa.
Martin Sojka

12
@mac - Một điều cần lưu ý khi bạn phát triển thuật toán này là Đó là Trò chơi. Nếu bạn đang dành quá nhiều thời gian để cố gắng giải quyết vấn đề này, có thể bạn đang cố gắng giải quyết vấn đề sai. Bạn có thể gian lận - di chuyển phương tiện hoặc vi phạm quy tắc xử lý của họ nếu bạn phát hiện ra tình huống khó khăn, đặc biệt là nếu người chơi không thể nhìn thấy. Hãy chắc chắn rằng bất kỳ quy tắc xử lý xe nào bạn đưa ra không có vẻ nhàm chán, điều quan trọng là giải trí hơn là đúng.
Lật

3
@mac Vâng, tôi có thể sử dụng bộ điều khiển toàn cầu với A *. Tôi biết bạn muốn tránh xa giải pháp này, nhưng nó có ý nghĩa hơn vì nó có cái nhìn toàn cầu về các phương tiện và nó có thể tính toán trước các con đường. Bạn cũng có thể muốn đặt ưu tiên cho các phương tiện (mục tiêu gần nhất với mục tiêu được ưu tiên cao hơn, vì vậy đường đi của nó vẫn không thay đổi và các tuyến khác sẽ định tuyến lại xung quanh nó).
Jonathan Connell

6
@Flip Trình mô phỏng chuyến bay vẫn được coi là một trò chơi, tuy nhiên nếu bạn 'lừa dối', nó sẽ phá vỡ trò chơi cho bất kỳ người chơi nào nhận ra điều này.
Jonathan Connell

Câu trả lời:


5

Bạn đã xem xét các thuật toán đổ xô ? Khi tôi nhìn vào mô tả của bạn đó là những gì tôi nghĩ đến. Có rất nhiều bài viết xung quanh vấn đề này, đây là một bài tôi thích . Có khả năng bạn sẽ không sử dụng tất cả các khía cạnh của việc đổ xô, như sự gắn kết. Hầu hết các khía cạnh sẽ hữu ích cho những gì bạn đang cố gắng thực hiện, như căn chỉnh và tách biệt, cả hai khía cạnh này sẽ giúp tránh va chạm. Bạn sẽ kết thúc với một cái gì đó khác một chút so với đổ xô, nhưng nó sẽ giúp bạn bắt đầu.

Chúc may mắn!


2
Thuật ngữ tìm kiếm có liên quan ở đây là Boids . Tuy nhiên, tôi không nghĩ rằng đây là thứ mà OP đang tìm kiếm - có vẻ như anh ấy muốn xe hơi đi mọi hướng.
BlueRaja - Daniel Pflughoeft

Flocking vẫn là về AI tránh va chạm với nhau.
Matt Jensen

OP yêu cầu tránh va chạm đáng tin cậy. Flocking đặt ra không đảm bảo, vì mô hình dựa trên lực lượng không kết hợp các ràng buộc cứng. Mặc dù đổ xô chắc chắn là một điểm vào tốt để đi vào chủ đề, nhưng câu trả lời là không đúng chỗ. Tôi đề nghị OP tìm kiếm "chướng ngại vật vận tốc" thay vào đó.
Tobias Gurdan

@TobiasGurdan Nếu bạn có câu trả lời phù hợp hơn (và tôi đồng ý rằng bạn làm như vậy), bạn nên tạo câu trả lời.
MichaelHouse

3

Đây là một cách tiếp cận: Mỗi chiếc xe đều có một con đường được chiếu ngắn, trong đó chiếc xe cuối cùng chậm lại và đi vào một vòng lặp, những con đường này có thể không trùng nhau. Bất cứ khi nào một chiếc xe đến điểm được đặt để giảm tốc độ, bạn sẽ cố gắng tạo ra một đường dẫn mới không trùng với bất kỳ điểm nào hiện có. Nếu điều đó là không thể, chiếc xe sẽ tiếp tục đi trên con đường đã cho và thử lại một con đường mới theo định kỳ.

Phương pháp có thể được cải thiện để cho phép lưu lượng truy cập chặt chẽ hơn bằng cách cho phép các đường dẫn dẫn đến các vòng lặp chồng chéo lên nhau và các vòng lặp có thể xác định rằng điều này sẽ không gây ra va chạm.


0

Có một phương pháp trong mỗi chiếc xe mà nó thực hiện tìm kiếm xuyên tâm xung quanh chính nó, nếu có bất kỳ phương tiện nào khác trong bán kính này, di chuyển đi theo cách phù hợp với ý thích của bạn: 1) Di chuyển theo vectơ ngược lại, 2) giảm tốc độ, 3) tăng tốc, v.v.

Bạn thậm chí có thể thực hiện các kết hợp: Nếu vectơ của xe kia không thẳng về phía trước hoặc ngay phía sau: di chuyển ra xa; khác nếu nó là thẳng về phía trước: chậm lại; khác: tăng tốc.


0

Mục tiêu của tôi là triển khai một số loại AI sẽ tránh va chạm chính xác 100% (tức là tôi sẽ chắc chắn rằng các phương tiện sẽ không bao giờ va chạm).

Nếu điều này là có thể, thì bây giờ nó đã được đưa vào tất cả các máy bay của thế giới.

Tôi đề nghị thư giãn khía cạnh 'tự trị' và có chức năng giải quyết các va chạm được dự đoán giữa 2 (hoặc nhiều hơn) xe. Nó có thể ngây thơ như chọn các hướng mới ngẫu nhiên để đi vào và xem liệu điều đó có giải quyết được vấn đề không, nhưng điều quan trọng là chức năng chỉ trở lại khi đạt được thỏa thuận phù hợp với cả hai phương tiện.

Tôi cũng đề nghị rằng bất kỳ chiếc xe nào được dự đoán sẽ va chạm trong tương lai gần sẽ làm giảm tốc độ của nó trong khi duy trì cùng khoảng cách nhìn về phía trước - điều này sẽ giúp phương tiện của bạn có nhiều cơ hội hơn để tránh va chạm, giống như trong đời thực.


Vì anh ta thiết kế các quy tắc của vũ trụ, nên hoàn toàn có thể. Thế giới thực rõ ràng phức tạp hơn, nhưng tôi chắc rằng máy bay trong thế giới thực sử dụng rất nhiều kỹ thuật tránh va chạm ...
BlueRaja - Danny Pflughoeft

0

Tôi nghe có vẻ như mô phỏng đám đông có thể là chủ đề phù hợp nhất với những gì bạn đang cố gắng đạt được. Nhóm GAMMA tại UNC có khối lượng công việc lớn về chủ đề có thể đáng xem qua. Mô tả của họ:

Mô phỏng đám đông và đa tác nhân là quá trình mô phỏng số lượng lớn người, sinh vật hoặc các nhân vật khác, mỗi người tương tác trong một môi trường. Những diễn viên này dự kiến ​​sẽ chuyển đến mục tiêu của họ, tương tác với môi trường của họ và phản hồi lại với nhau. Mô phỏng đám đông có nhiều ứng dụng, bao gồm cải thiện quy hoạch kiến ​​trúc, tăng cường môi trường đào tạo và thực tế ảo và điều khiển các nhân vật thông minh nhân tạo (AI) trong các trò chơi và phim ảnh. Nhóm của chúng tôi đã nghiên cứu nhiều vấn đề trong mô phỏng đám đông, bao gồm nhanh chóng, được bảo đảm, tránh va chạm, đường đi trong thời gian thực và lập kế hoạch chuyển động, dòng chảy đám đông và hành vi được định hướng.

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


-1

Tôi không nghĩ có một phương pháp tránh 100%, nhưng nếu xe của bạn có thông tin đầy đủ về thế giới, bạn có thể nhét từng chiếc xe vào một hộp có chiều dài phụ thuộc vào tốc độ của nó và thực hiện kiểm tra va chạm trên các hộp đó. Nếu thực sự có va chạm, hãy tránh xa, với cường độ tùy thuộc vào sắp xảy ra va chạm (hoặc khu vực va chạm giữa hai hộp) và giảm tốc độ chậm (nhưng giữ cho hộp của bạn có cùng độ dài trong quá trình tránh hoạt động).

Rõ ràng điều này sẽ không hoạt động nếu các phương tiện không có thông tin đầy đủ, nhưng trong trường hợp này sẽ không có gì tránh được 100% tránh (ngoại trừ, như đã nói, chuyển động song song)

Một số phương pháp được mô tả ở đây có lẽ sẽ hữu ích, đáng chú ý là phương pháp này: Hành vi điều khiển tránh va chạm không được phân bổ

Trân trọng


1
Bạn đã đọc câu hỏi ban đầu? Liên kết mà bạn đề xuất đã có trong câu hỏi ...
bummzack
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.