Ok, tôi đã trở lại với kết quả!
Tôi đã thử hai cách tiếp cận:
Sử dụng cơ học chất rắn để rút ra phương trình vi phân điều khiển chuyển động của tâm bánh xe: đầu vào của hệ thống "xe đạp" là mô-men xoắn ở bánh sau và góc của bánh trước, và đầu ra là động học của tâm của các bánh xe. Nhưng tôi đã từ bỏ, thật khó!
Cố gắng đoán những gì xảy ra từ quan điểm hình học khi bánh sau "đẩy" bánh trước về phía trước với bánh trước không thẳng. Phương pháp này trực tiếp mang lại một phương trình gia số vô hạn (xem bên dưới) từ đó bạn có thể nhận được một phương trình vi phân thực tế. Tôi đã không thử thao tác phương trình đầu tiên này để có được ODE nhưng tôi đoán là tôi sẽ có được ODE tương tự bằng cơ học chất rắn. Nó chỉ cảm thấy đúng.
Các ký hiệu và giả thuyết:
Chúng ta đang ở trong mặt phẳng với các vectơ cơ sở ex và ey .
A là tâm của bánh sau. B là tâm của bánh trước. Chiều dài của xe đạp L là khoảng cách giữa A và B . Góc giữa ey và vectơ AB là φ . Góc giữa AB và bánh trước là θ .
Lý do trực quan:
Chúng tôi giả sử rằng, tại một thời điểm t nhất định , A (t) có vận tốc V (t) colinear với AB . Do đó, đối với một dấu thời gian vô hạn dt ,
A (t + dt) = A (t) + V (t) .dt .
Chúng tôi cũng cho rằng, vào thời điểm t , bánh xe phía trước không trôi, tức là tốc độ của B là colinear với sự chỉ đạo của bánh trước, tức là tạo thành một góc θ với AB . Ta gọi Uθ là vectơ đơn vị tạo thành một góc θ với AB , tức là vectơ đơn vị có cùng hướng với bánh trước.
Do đó, tại t + dt ,
B (t + dt) = B (t) + λ.Uθ
cho một thực nhất định, tích cực λ như vậy mà chiều dài của xe đạp L được bảo toàn:
khoảng cách (A (t + dt), B (t + dt)) = L
Tính toán:
Phương trình cuối cùng này chuyển thành
Norm² (B (t) + λ.Uθ - A (t) - V (t) .dt) = L²
nhưng B (t) , theo định nghĩa, là A (t) + L.Uφ , do đó λ phải thỏa mãn phương trình
Norm² (L.Uφ + .Uθ - V (t) .dt) = L² .
Các giải pháp, tất nhiên, là độc lập với φ kể từ khi vấn đề là như nhau khi các điểm xe đạp theo hướng tích cực y . Do đó, nếu chúng ta gọi là R ma trận xoay với góc -φ , λ phải là giải pháp tích cực của
Norm² (L.ey; + λ.Uθ - RV (t) .dt) = L² .
Sau một vài tính toán, nếu chúng ta gọi v là chỉ tiêu của V , bạn sẽ nhận được
= L. (sqrt (1 - (sin (θ). (1-v.dt / L)) ²) - cos (θ)) + v.dt.cos (θ) .
Đây là mã giả tôi đã sử dụng để có được hình ảnh động ở trên (thay vì sử dụng Uθ , tôi sử dụng u = U (+) vì nó đơn giản hơn):
// I start at i=1 because i=0 contains the initial values
for (int i=1; i<=N; i++)
{
// the array in which I stored the successive A points
Aarray[i] = Aarray[i-1] + dt*V;
float lambda = L*( sqrt(1 - (sin(theta)*(1-v*dt/L))**2) - cos(theta) )
+ cos(theta)*v*dt;
// the array in which I stored the successive B points
Barray[i] = Barray[i-1] + lambda*u;
// the AB vector normalized
AiBiUnit = (Barray[i] - Aarray[i])/L;
// Refreshing the velocity of A
V = v*AiBiUnit;
// Refreshing u.
// u is indeed a unit vector separated from AiBiUnit by an angle theta,
// so you get it by rotating the newly computed AiBiUnit by an angle
// of +theta:
u = AiBiUnit.rotate(theta);
}
Nếu bạn lặp lại nhiều và / hoặc tăng góc lái, quỹ đạo là một vòng tròn, đó là mạch lạc, tôi tin.