Tôi có thể sử dụng tứ phương để điều khiển một máy bay trực thăng không?


9

Tôi đang cố gắng tạo ra một máy bay trực thăng đơn giản hóa (hiện tại, đó là một khối lập phương) mô phỏng 3D và tôi đang gặp một số vấn đề với việc quay. Một máy bay trực thăng có thể xoay dọc theo ba trục:

  • tự xoay bằng chân vịt phía sau: xoay trục y
  • nghiêng trái và phải để sang trái hoặc phải: xoay trục z
  • nghiêng lên và xuống để đi lùi hoặc tiến: xoay trục x

Tôi cần có khả năng kiểm soát từng trục riêng lẻ. Cho đến nay tôi đã thử sử dụng các góc euler, nhưng bất kể thứ tự xoay nào tôi sử dụng, hoặc tôi chạy vào một khóa gimbal hoặc một số "vị trí chuyển đổi" trục.

Tôi dường như cần sử dụng tứ phân vị, nhưng tôi không biết cách kiểm soát từng trục riêng lẻ, vì các bậc bốn sử dụng một hướng và một góc. Tôi có nên tạo ba bậc bốn và nhân chúng lại với nhau không? Tôi sẽ không kết thúc với những vấn đề tương tự?

Điều kỳ lạ là, nếu tôi sử dụng ngón tay của mình để đại diện cho ba trục của máy bay trực thăng của tôi (ngón tay cái lên = y, index = z, middle = x), tôi dường như không gặp phải những vấn đề đó. Tại sao?


Nếu bạn có quyền truy cập vào biểu đồ cảnh, một giải pháp thay thế khả thi sẽ là các thùng chứa lồng nhau cho mỗi trục mà sau đó bạn xoay riêng lẻ.
bummzack

@bummzack, vâng, tôi đã nghĩ về điều này. Tuy nhiên, không phải nó giống như ghép ba ma trận xoay theo một thứ tự cụ thể sao?
subb

Bạn đúng @Subb, cố gắng không lưu trữ các phép quay cho từng trục một cách riêng biệt, nó sẽ có cùng các vấn đề như Euler Angles, bất kể bạn sử dụng gì cho điều đó, cả Ma trận và Đệ tứ cũng sẽ bị khóa Gimbal.
Maik

@Maik Semder, làm thế nào tôi có thể cung cấp quyền kiểm soát cho sân / ngáp / cuộn của máy bay trực thăng của tôi?
subb

@Subb @ Flip's và câu trả lời của tôi về cơ bản đã cho bạn biết cách thực hiện.
Maik

Câu trả lời:


4

Bạn sẽ có thể sử dụng ma trận hoặc tứ phương để lưu trữ hướng hiện tại của máy bay trực thăng của bạn. Vấn đề bạn gặp phải là cách bạn áp dụng thay đổi độ cao / ngáp / cuộn cho máy bay trực thăng.

Tôi nghĩ rằng bạn muốn áp dụng pitch / yaw / roll cho máy bay trực thăng trong không gian địa phương mỗi khung hình. Bạn có thể làm điều này bằng cách thay đổi cao độ / ngáp / cuộn cho khung đó và xây dựng ma trận xoay (bạn có thể làm điều này với các góc euler). Sau đó, bạn xoay hướng trước của máy bay trực thăng theo ma trận này (với hướng trước đó được biểu thị dưới dạng ma trận hoặc dưới dạng bậc bốn). Nó sẽ cung cấp cho bạn định hướng cho khung mới.

Đại diện cho định hướng của máy bay trực thăng như là một tứ phương có lợi thế là nội suy giữa các bậc bốn dễ dàng hơn nhiều so với nội suy giữa các ma trận. Vì vậy, nếu trong tương lai bạn có một định hướng hiện tại và bạn muốn tìm ra vòng quay trên mỗi khung hình sẽ đưa bạn đến một hướng mới vào thời điểm mong muốn, đại diện bậc bốn có thể thân thiện hơn với bạn.


Đó là cách tôi đã thực hiện, áp dụng các cập nhật gia tăng cho ma trận đại diện cho biến đổi cục bộ -> thế giới. Hãy nhớ bình thường hóa ma trận, sau vài trăm khung hình, nó sẽ hiển thị các tạo tác làm tròn nếu bạn không.
Patrick Hughes

Ngoài ra, để trả lời câu hỏi cuối cùng về lý do tại sao không nhìn thấy vấn đề khóa gimbal bằng tay của bạn để biểu diễn các trục x / y / z, bởi vì có lẽ bạn đang áp dụng các giá trị cao độ, ngáp và cuộn cho khung cục bộ của tay tài liệu tham khảo. Xây dựng một ma trận xoay với các góc euler bắt đầu bằng cách xoay quanh x thế giới, sau đó theo kết quả y và sau đó là z (thứ tự thực tế của x / y / z có thể khác nhau theo thứ tự). Hãy thử áp dụng các phép quay theo cách này và bạn có thể bắt đầu xem khóa gimbal xuất hiện như thế nào.
Lật

3

Về cơ bản, bạn có thể sử dụng mọi đại diện khác của phép quay, nhưng Euler Angles. Ma trận, Đệ tứ thậm chí Trục góc sẽ làm những gì bạn muốn.

Should I create three quaternions and multiply them together? Wouldn't I end up with the same problems?

Bạn đã đúng, bạn sẽ kết thúc với những vấn đề tương tự. Chìa khóa là lưu trữ hướng hiện tại (ma trận, bậc bốn) của đối tượng của bạn và chỉ áp dụng một delta khi thay đổi hướng.

Khi bạn muốn xoay 10 độ quanh y, chỉ cần tạo một delta ma trận / bậc bốn cho điều đó và đăng nó nhân với hướng hiện tại của bạn (nếu bạn sử dụng phép nhân bài cho ma trận). Nếu bạn nhân nó theo cách khác, nó sẽ xoay hệ thống quanh trục y của thế giới chứ không phải quanh trục y của đối tượng.

Tôi thấy tài nguyên này rất hữu ích, nó cũng đi kèm với mã nguồn và giải thích lý thuyết rất tốt.


-1

Rắc rối tôi nghĩ bạn có thể thấy là sự khác biệt về vectơ trục và vận tốc (và cũng là bạn đang thiếu một hướng). Khi một máy bay trực thăng nghiêng về phía trước để di chuyển về phía trước, lực đẩy của cánh quạt máy bay trực thăng đẩy không khí xuống và lùi theo góc vuông góc với cái mà bạn đã gắn nhãn trục X.

Bạn có một mức độ tự do thứ tư mà bạn đã bỏ lỡ: tốc độ của cánh quạt kiểm soát lượng không khí được đẩy, điều này cũng kiểm soát lượng lực nâng của máy bay trực thăng tạo ra.

Nhưng ngay cả như vậy, "nghiêng trái và phải" và "nghiêng lên xuống" của bạn thường điều khiển máy bay trực thăng trên một mặt phẳng nhất định. Điều đó có nghĩa là, một máy bay trực thăng không nên bay xuống khi nó nghiêng về phía trước, lùi hoặc sang một bên - nhưng lượng nâng có thể phải thay đổi và tốc độ sẽ được điều khiển bởi phía "đối diện" của tam giác vuông được hình thành bởi nối trực thăng với mặt đất bằng một đường thẳng xuống (trọng lực) và cạnh huyền (thang máy). Điều đó sẽ cung cấp cho vector vận tốc của bạn để sử dụng.

Bạn có thể sử dụng các bậc bốn để làm điều này, nhưng đừng dựa vào các giá trị bậc bốn của bạn trên độ nghiêng của trực thăng - thay vào đó hãy thử sử dụng các lực chuyển động mà trực thăng tạo ra.


Điều đó không thực sự trả lời câu hỏi mặc dù. Chỉ cần thêm nhiều thực phẩm cho suy nghĩ.
bummzack

Hiện tại, tôi đang sử dụng vòng quay của máy bay trực thăng để biến đổi vectơ lực nâng, hướng lên trên trong không gian máy bay trực thăng. Bạn có nghĩa là tôi nên làm ngược lại, tức là sửa đổi trực tiếp vectơ và sau đó xoay máy bay trực thăng?
subb

Tôi nghĩ bạn nên làm cả hai, những gì bạn đang làm bây giờ, sau đó thực hiện bất kỳ KẾT QUẢ thay đổi nào khi quay sang trực thăng dựa trên bình thường của lưỡi kiếm. Tức là bạn có 2 vòng quay; một áp dụng cho các lưỡi dao và một giây đại diện cho vòng quay thực tế của máy bay trực thăng. Rõ ràng tất cả được lưu trữ trong Đệ tứ.
giảm tốc
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.