Hướng dẫn một Quadrotor hướng tới một mục tiêu


9

Tôi đang làm việc trên một tứ giác. Tôi biết vị trí của nó - , nơi tôi muốn đi - vị trí mục tiêu và từ đó tôi tính toán một vectơ - một vectơ đơn vị sẽ đưa tôi đến mục tiêu của mình:b cabc

c = b - a
c = normalize(c)

Vì một tứ giác có thể di chuyển theo bất kỳ hướng nào mà không quay, điều tôi đã cố gắng làm là

  1. xoay bởi góc ngáp của robotc
  2. chia nó thành của nó thành phầnx,y
  3. chuyển chúng cho robot dưới dạng cuộn và góc nghiêng.

Vấn đề là nếu ngáp là 0 ° ± 5 thì điều này hoạt động, nhưng nếu ngáp gần +90 hoặc -90 thì nó thất bại và lái sai hướng. Câu hỏi của tôi là tôi thiếu một cái gì đó rõ ràng ở đây?


1
Làm thế nào để bạn tính toán góc ngáp? Ngoài ra, bạn đang sử dụng bộ điều khiển nào và làm thế nào để bạn gửi dữ liệu?
DaemonMaker

Câu hỏi thú vị @ Hamza, chào mừng bạn đến với Robotics .
Đánh dấu gian hàng

@ Hamza, bạn đang sử dụng ngôn ngữ và hệ thống nào? Tôi cũng đang làm việc trên một quad quad với ngôn ngữ lập trình Atmega328 và Ada. Nếu bạn có một blog về dự án xin vui lòng chia sẻ.

Bạn đúng @MarkBooth, tôi đã mở hai tab và đang có ý định đánh dấu bài đăng khác là một bản sao. Tôi đã đánh dấu cái này do nhầm lẫn và thấy không có cách nào để hoàn tác nó. Cho rằng phải mất nhiều hơn một phiếu để đóng nó, tôi nghĩ rằng đây sẽ không phải là một vấn đề. Tôi đã không nhận ra tuy nhiên nó đã đăng một bình luận thay cho tôi.
DaemonMaker

Không có vấn đề gì @DaemonMaker những điều này xảy ra. Đóng dưới dạng phiếu bầu trùng lặp bây giờ sẽ tự động đăng bình luận, mà tôi nghĩ là một tính năng hữu ích vì nó nhắc mọi người xem lại câu hỏi khác trước khi tự bỏ phiếu kín.
Gian hàng Mark

Câu trả lời:


6

Thực hiện lại giải pháp của bạn, tôi nhận được điều này:

Góc giữa vectơ

Đầu tiên, bạn muốn góc giữa điểm AB - không cụ thể là vectơ đơn vị. Góc giữa 2 điểm

θ=math.atan2(BxAx,ByAy)

Góc ngáp xe

ψθ

Heading vs Yaw

y

La bàn hoa hồng

x

Đồ thị cực

Sự trùng lặp 90 độ giữa các phép đo này, kết hợp với việc thêm (thay vì trừ) ngáp xe từ ngáp mong muốn, có thể là lý do tại sao mọi thứ hoạt động khi mục tiêu của bạn nằm trong phạm vi ± 5 ° và hoạt động kém ở ± 90 °.

Chuyển đổi thành phần X và Y

(θψ)xy

Điều khiển PID

Bạn có thể được phục vụ tốt nhất bằng cách sử dụng các vòng điều khiển PID cho cuộn và cao độ của xe. Đó là, một khi bạn sửa mã của mình và có thể bắn trúng mục tiêu của mình, tôi đoán là bạn sẽ bắt đầu vượt qua nó thay vào đó - dao động qua lại. Một PID được điều chỉnh chính xác sẽ ngăn điều đó xảy ra trong khi vẫn cho phép bạn tiếp cận mục tiêu một cách nhanh chóng.

xy


Đó là một số chỉnh sửa ở đó, hơn 90% và hoàn toàn thay đổi câu trả lời (từ PID sang ATAN2). Nhưng kỹ năng công thức đồ họa hào nhoáng của bạn là con thú!
Spiked3

Tôi vẫn đề xuất PID (nó ở dưới cùng), tôi chỉ làm việc qua phần đầu của câu hỏi để đảm bảo rằng các giả định của tôi là đúng. Các công thức đồ họa là một phần của định dạng latex, đáng để kiểm tra.
Ian

"Tiêu đề la bàn bắt đầu từ trục y dương và tăng theo chiều kim đồng hồ, trong khi yaw bắt đầu từ trục x dương và tăng ngược chiều kim đồng hồ"? "Chuyển đổi thành phần x của (−) thành cuộn và thành phần y thành cao độ" Tôi hoàn toàn không hiểu điều đó - xin giải thích thêm (tôi đang thiếu một cái gì đó).
Spiked3

Câu hỏi ban đầu đề cập đến việc "chuyển [các thành phần x và y] cho robot dưới dạng góc lăn và góc nghiêng", mà theo tôi chỉ ra rằng quad quad di chuyển sang bên bằng cách thay đổi góc cuộn, tiến và lùi bằng cách thay đổi góc nghiêng. Tôi sẽ thêm một số rõ ràng.
Ian

khéo léo. Tôi chưa bao giờ thấy nó được thực hiện theo cách đó. Tôi đã thấy, và tự làm, chỉ cần lật cos / sin để có kết quả tương tự. Tôi sẽ phải suy nghĩ về việc lăn / ném thêm một số. Vâng, điều đó sẽ gây ra chuyển động, nhưng tôi không chắc điều đó có liên quan gì đến việc bạn đang ở đâu và đi đâu, ngoài tốc độ bạn đến đó. Cảm ơn.
Spiked3

5

Tôi sẽ giả sử bạn đang nói về một vectơ 3D ở đây. Bạn có thể chỉ khái quát normalize()như vậy? Nó có phổ biến không (tôi chưa bao giờ thấy nó như vậy nếu có, sau đó là tin tức với tôi). Mặt khác, các vấn đề bọc la bàn rõ ràng áp dụng cho từng thành phần X và Y. Tại sao không gọi họ là cuộn và / hoặc cao độ và / hoặc ngáp? (trộn danh pháp 3D và 2D gây nhầm lẫn cho câu hỏi).

Bình thường 2D của tôi trông giống như thế này;

int Pilot_QuickestTurnTo(int hdgNow, int hdgNew)
{
    hdgNow = Pilot_Hdg360(hdgNow);
    hdgNew = Pilot_Hdg360(hdgNew);
    if (hdgNow < hdgNew)
        hdgNow += 360;
    int left = hdgNow - hdgNew;
        return (left < 181 ? -left : 360 - left);
}

Nếu nó thực sự là một hình tứ giác, tôi giả sử các thành phần X và Y của bạn thực sự là YAW, Độ cao ((X, Y) & Z). Bạn sẽ cần xử lý YAW(X, Y)2D, và chỉ cần giảm hoặc tăng độ cao cho Z (và một lần nữa đó là lý do tại sao tôi nghi ngờ bình thường hóa nhiều hơn bạn 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.