Làm thế nào để tính toán tốc độ phải và trái cho một chiếc xe tăng giống như xe tăng?


7

Tôi đang cố gắng để kiểm soát robot Rover 5 bằng ứng dụng Android với điều khiển cần điều khiển dựa trên cảm ứng trong giao diện người dùng ứng dụng. Tôi muốn tính tốc độ của động cơ bên trái và bên phải trong rover khi cần điều khiển được di chuyển.

Từ cần điều khiển, tôi nhận được hai giá trị, xoay và nghiêng. Tôi chuyển đổi chúng thành hệ tọa độ cực với rtheta. Trong đó r dao động từ 0 đến 100 và theta từ 0 đến 360. Tôi muốn rút ra một phương trình có thể chuyển đổi(r, theta) thành (left_speed, right_speed)cho rover. Các giá trị tốc độ cũng nằm trong phạm vi [0; 100].

Bây giờ, đây là những gì tôi đã tìm ra cho đến bây giờ. Đối với bất kỳ giá trị nào của r,

Nếu theta = 0sau đó left_speed = r, right_speed = -r(rẽ phải tại chỗ)
Nếu theta = 90sau đó left_speed = r, right_speed = r(di chuyển về phía trước ở tốc độ r)
Nếu theta = 180sau đó left_speed = -r, right_speed = r(rẽ trái tại chỗ)
Nếu theta = 270sau đó left_speed = -r, right_speed = -r(di chuyển ngược lại ở tốc độ r)

Đối với các giá trị khác, tôi muốn nó di chuyển và xoay đồng thời. Ví dụ,

Nếu theta = 45sau đó left_speed = alpha*r, right_speed = beta*r(di chuyển về phía trước trong khi rẽ phải)

Vì vậy, về cơ bản (r, theta), tôi có thể đặt tốc độ là,

(left_speed, right_speed) = (alpha*r, beta*r)

Tôi cần thiết lập một phương trình trong đó tôi có thể khái quát tất cả các trường hợp này bằng cách tìm alphabetadựa vào theta.

Tôi có thể làm cái này như thế nào? Có bất kỳ công việc hiện tại tôi có thể tham khảo?


Tôi giả sử bạn có nghĩa là "Nếu theta = 180 thì left_speed = -r ..."
John Wiseman

Vâng, cảm ơn vì đã chỉ ra nó. Chỉnh sửa câu hỏi
Punit Soni

Câu trả lời:


8

Bạn đang cố gắng tìm một công thức để chuyển đổi (r,θ) tỷ lệ lực đẩy trái và phải, trong đó rđại diện cho tỷ lệ phần trăm ga của bạn. Việc triển khai ngây thơ là dựa trên chức năng của bạn dựa trên ga 100%:

  • Tại 0, lực đẩy trái và phải bằng r
  • Tại ±45, một lực đẩy bằng nhau r và các đội khác bằng 0
  • Tại ±90, một lực đẩy bằng nhau r và những người khác bằng -r
  • Tại 180, lực đẩy trái và phải bằng -r

Điều này tạo ra một chức năng như sau:

Tỷ lệ lực đẩy cho ga 100%

Vấn đề với việc thực hiện này là bạn chỉ cung cấp mong muốnr khi nào θ là một bội số chính xác của 90. Tại tất cả các điểm khác, bạn hy sinh tổng tốc độ để kiểm soát. Bạn có thể thấy điều này trong biểu đồ: "Lực đẩy tuyệt đối", lượng lực đẩy được cung cấp bởi cả hai động cơ, không (và không thể) không đổi trong chế độ này. Đơn giản chỉ cần nhân rộng chức năng này là không tối ưu.

Lực đẩy tuyệt đối tối đa có thể được duy trì trên toàn bộ phạm vi θ xảy ra khi r= =50%- đây là những gì chức năng của bạn nên dựa trên .

Tỷ lệ lực đẩy cho ga 100%

Trong thực hiện này, tổng lực đẩy không đổi giữa ±45và lực đẩy tuyệt đối là không đổi cho dù được chọn theo hướng nào - các động cơ đánh đổi lực đẩy của chúng để duy trì mong muốn r. Ở trênr= =50%, phạm vi các góc mà tổng lực đẩy của bạn có thể đáp ứng r bắt đầu thu nhỏ - bạn bắt đầu hy sinh kiểm soát tốc độ.

Điều này tạo ra một hàm python như sau:

# assumes theta in degrees and r = 0 to 100 %
# returns a tuple of percentages: (left_thrust, right_thrust)
def throttle_angle_to_thrust(r, theta):
    theta = ((theta + 180) % 360) - 180  # normalize value to [-180, 180)
    r = min(max(0, r), 100)              # normalize value to [0, 100]
    v_a = r * (45 - theta % 90) / 45          # falloff of main motor
    v_b = min(100, 2 * r + v_a, 2 * r - v_a)  # compensation of other motor
    if theta < -90: return -v_b, -v_a
    if theta < 0:   return -v_a, v_b
    if theta < 90:  return v_b, v_a
    return v_a, -v_b

Kết quả là như sau: chức năng hoạt hình phải / trái


Cảm ơn Ian. Theo như tôi hiểu, bạn đang cố gắng cân bằng tải trên cả hai động cơ, phải không?
Trừng phạt Soni

Không hẳn. Bạn đang cố gắng để làm(trái_speed+đúng_speed)/2= =r, thay vì phải phụ thuộc vào θ. Lưu ý rằng khir>50%, đường màu tím chấm không còn liên tục đối với θ. Bạn muốn giảm thiểu hiệu ứng này.
Ian

2
Làm thế nào bạn thực hiện những mảnh đất ưa thích?
Josh Vander Hook

Tôi đã thực hiện các âm mưu trong Microsoft Excel và tạo ra hình ảnh động trong Gimp.
Ian

Câu trả lời tuyệt vời , cảm ơn. Có một lỗi đánh máy nhỏ, nó nên đọc nếu theta <0: trở về v_a, -v_b và không nếu theta <0: trở về -v_a, v_b (những dấu hiệu bị đảo ngược)
smirkingman

1

Những gì bạn muốn là tốc độ góc tỷ lệ với cosin của góc, dường như, với dương ở bên phải và âm ở bên trái.

Vì vậy, vì chúng ta biết rằng vận tốc góc được cho bởi Vtôi-VrD Ở đâu Dlà đường kính của robot, tất cả chúng ta đã sẵn sàng. Thử cái này:

nếu θ0θ90: VtôirVrrtội(2θ-90)

nếu θ<0θ-90: Vr-rVtôirtội(2θ+90)

Trao đổi vận tốc cho các góc phần tư khác. Lưu ý, điều này sẽ không "cảm thấy" giống như lái xe, vì việc di chuyển cây gậy sang phía dưới bên phải sẽ quay ngược và quay sang phải, trong khi một chiếc xe ngược lại với bánh xe bên phải sẽ di chuyển lùi và rẽ trái. Chỉ là sự kỳ lạ của các ổ đĩa vi sai ... Bạn có thể điều chỉnh điều này bằng cách chỉ áp dụng quy tắc góc phần tư thứ tư cho góc phần tư thứ baθ và visa-ngược lại.

Tôi đã sử dụng θ[-180,+180], mà bạn có thể nhận được bằng cách:

θatan2(tộiθ,cosθ) (xem các đơn vị của bạn mặc dù, atan2 thường là radian.


Cái này nhìn khá tốt. Tôi đi đến giải pháp này suy nghĩ bằng trực giác. Tôi sẽ thử cái này và xem cảm giác thực sự khi lái xe. Cảm ơn.
Trừng phạt Soni
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.