Diferansiyel tahrik robotunun konumunu hesapla


14

Artımlı sensörlü diferansiyel tahrik robotunun konumunu nasıl hesaplar veya güncellersiniz?

İki diferansiyel tekerleğin her birine bir adet artımlı sensör eklenmiştir. Her iki sensör de resp. tekerlekleri bilinen bir zamanda yuvarlandı .Δ r i g h t Δ tΔleftΔrbenghtΔt

İlk olarak, her iki tekerlek arasındaki merkezin robotun konumunu işaretlediğini varsayalım. Bu durumda, konum şu şekilde hesaplanabilir:

x=xleft+xrbenght2y=yleft+yrbenght2

Her iki tekerleğin de düz bir çizgide yuvarlandığı (bu küçük mesafeler için yaklaşık olarak doğru olması gerekir) varsayımıyla bu denklemleri "türetmek":

ΔxΔt=12(ΔleftΔt+ΔrbenghtΔt)cÖs(θ)ΔyΔt=12(ΔleftΔt+ΔrbenghtΔt)sbenn(θ)

Burada robotun yönlendirme açısıdır. Bu açının değişmesi için denklemi buldumθ

ΔθΔt=1w(ΔleftΔt-ΔrbenghtΔt)

Burada w , her iki tekerlek arasındaki mesafedir.

Çünkü ve bağlıdır , ben ilk yeni hesaplamak gerekip gerekmediğini merakΔ y θ θΔxΔyθθ ekleyerek ya da ben doğrusu "eski" kullanmalısınız eğer ? Birini diğerinin üzerinde kullanmak için herhangi bir neden var mı?θΔθθ

Sonra, şimdi her iki tekerlekler arasındaki merkez yapar varsayalım değil robotun konumunu işaretleyin. Bunun yerine robotun sınırlayıcı kutusunun geometrik merkezini işaretleyen bir nokta kullanmak istiyorum. Sonra ve değişir:xy

x=xleft+xrbenght2+lcÖs(θ)y=yleft+yrbenght2+lsbenn(θ)

İlki "türetmek":

ΔxΔt=12(ΔleftΔt+ΔrbenghtΔt)cÖs(θ)-lsbenn(θ)ΔθΔt

Şimdi üzerinde bir bağımlılık var . Bu "yeni" kullanmak için bir neden mi?Δθθ

Konum ve yönelimin aynı anda güncellenmesini sağlamak için daha iyi bir yöntem var mı? Karmaşık sayılar (3B'deki kuaterniyonlarla aynı yaklaşım) veya homojen koordinatlar kullanıyor olabilir mi?

Yanıtlar:


8

İlk sorunuzu cevaplamak için: eğer gerçekten diferansiyel tahrik için gerçek kinematik denklemleri bulmak istiyorsanız, her bir tekerleğin düz bir çizgide hareket ettiğini varsayarak yaklaşmaya başlamam. Bunun yerine, dönüş yarıçapını bulun, yayın merkez noktasını hesaplayın ve ardından robotun bir sonraki noktasını hesaplayın. Robot düz hareket ederse dönüş yarıçapı sonsuz olacaktır, ancak düz durumda matematik basittir.

Bu nedenle, her zaman adımında veya artımlı sensörlerde her değişikliği hesapladığınızda, robotun A noktasından B noktasına aşağıdaki gibi bir yay üzerinde seyahat ettiğini düşünün: resim açıklamasını buraya girin İşte matematik basitleştirilmiş bazı örnek kodlar:

// leftDelta and rightDelta = distance that the left and right wheel have moved along
//  the ground

if (fabs(leftDelta - rightDelta) < 1.0e-6) { // basically going straight
    new_x = x + leftDelta * cos(heading);
    new_y = y + rightDelta * sin(heading);
    new_heading = heading;
} else {
    float R = unitsAxisWidth * (leftDelta + rightDelta) / (2 * (rightDelta - leftDelta)),
          wd = (rightDelta - leftDelta) / unitsAxisWidth;

    new_x = x + R * sin(wd + heading) - R * sin(heading);
    new_y = y - R * cos(wd + heading) + R * cos(heading);
    new_heading = boundAngle(heading + wd);
}

Benzeri bir simülatörde farklı direksiyon yollarını göstermek için kullandım: http://www.cs.utexas.edu/~rjnevels/RobotSimulator4/demos/SteeringDemo/


1
Yukarıdaki kod snippet'inde kullanılan denklemler burada türetilmiştir: rossum.sourceforge.net/papers/DiffSteer
kamek

Harika bir açıklama! Simülatör bağlantısı bozuldu
smirkingman

2

ΔθθΔx,Δy hesaplama. Her zaman bir konum ve yön hesaplaması arasında geçiş yapacaksınız.

ΔθΔx,Δyθ .

Δt0


"Diferansiyel tahrikli araçların ileri kinematiği" araması, bu soruya daha matematiksel bir yaklaşımla bir sürü makale sağlamalıdır.
Ian
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.