Hitung posisi robot penggerak diferensial

14

Bagaimana Anda menghitung atau memperbarui posisi robot penggerak diferensial dengan sensor tambahan?

Ada satu sensor tambahan yang dipasang pada masing-masing dari dua roda diferensial. Kedua sensor menentukan jarak resp. roda mereka telah bergulir selama waktu yang dikenal .Δ r aku g h t Δ tΔleftΔrsayaghtΔt

Pertama, mari kita asumsikan pusat antara kedua roda menandai posisi robot. Dalam hal ini, seseorang dapat menghitung posisi sebagai:

x=xleft+xrsayaght2y=yleft+yrsayaght2

"Turunkan" persamaan itu dengan asumsi bahwa kedua roda digulung dalam garis lurus (yang seharusnya kira-kira benar untuk jarak kecil) saya dapatkan:

ΔxΔt=12(ΔleftΔt+ΔrsayaghtΔt)cHais(θ)ΔyΔt=12(ΔleftΔt+ΔrsayaghtΔt)ssayan(θ)

Di mana adalah sudut orientasi robot. Untuk perubahan sudut ini saya menemukan persamaanθ

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

Di mana w adalah jarak antara kedua roda.

Karena Δx dan Δy bergantung pada θ , saya bertanya-tanya apakah saya harus terlebih dahulu menghitung θ dengan menambahkan Δθ atau jika saya lebih suka menggunakan "lama" θ ? Apakah ada alasan untuk menggunakan salah satunya?

Lalu, sekarang mari kita asumsikan bahwa pusat antara kedua roda tidak menandai posisi robot. Alih-alih, saya ingin menggunakan titik yang menandai pusat geometris kotak pembatas robot. Kemudian x dan y berubah menjadi:

x=xleft+xrsayaght2+lcHais(θ)y=yleft+yrsayaght2+lssayan(θ)

"Turun" yang pertama memberi:

ΔxΔt=12(ΔleftΔt+ΔrsayaghtΔt)cHais(θ)-lssayan(θ)ΔθΔt

Sekarang ada ketergantungan pada . Apakah ini alasan untuk menggunakan "baru" ?Δθθ

Apakah ada metode yang lebih baik untuk melakukan pembaruan posisi dan orientasi secara simultan? Mungkin menggunakan bilangan kompleks (pendekatan yang sama dengan angka empat dalam 3D?) Atau koordinat homogen?

Daniel Jour
sumber

Jawaban:

8

Untuk menjawab pertanyaan pertama Anda: jika Anda benar-benar ingin menemukan persamaan kinematik sejati untuk penggerak diferensial, saya tidak akan mulai mendekati dengan mengasumsikan bahwa setiap roda telah bergerak dalam garis lurus. Alih-alih, cari jari-jari belok, hitung titik pusat busur, dan kemudian hitung titik robot berikutnya. Radius belok akan menjadi tak terbatas jika robot bergerak lurus, tetapi dalam kasus lurus matematika sederhana.

Jadi, bayangkan saja setiap langkah waktu, atau setiap kali Anda menghitung perubahan sensor tambahan, robot bergerak dari titik A ke titik B pada busur seperti ini: masukkan deskripsi gambar di sini Berikut ini beberapa contoh kode dengan matematika yang disederhanakan:

// 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);
}

Saya menggunakan matematika yang sama di simulator untuk menunjukkan cara kemudi yang berbeda: http://www.cs.utexas.edu/~rjnevels/RobotSimulator4/demos/SteeringDemo/

Robz
sumber
1
Persamaan yang digunakan dalam cuplikan kode di atas diturunkan di sini: rossum.sourceforge.net/papers/DiffSteer
kamek
Penjelasan hebat! Tautan simulator rusak
smirkingman
2

ΔθθΔx,Δy

ΔθΔx,Δyθ

Δt0

Ian
sumber
Pencarian untuk "kinematika maju dari kendaraan penggerak diferensial" harus menyediakan banyak artikel dengan pendekatan yang lebih matematis untuk pertanyaan ini.
Ian