Sedikit latar belakang tujuan saya
Saya sedang dalam proses membangun robot otonom seluler yang harus menavigasi di sekitar area yang tidak diketahui, harus menghindari rintangan dan menerima input ucapan untuk melakukan berbagai tugas. Ia juga harus mengenali wajah, benda, dll. Saya menggunakan Kinect Sensor dan data roda odometri sebagai sensornya. Saya memilih C # sebagai bahasa utama saya karena driver dan sdk resmi sudah tersedia. Saya telah menyelesaikan modul Visi dan NLP dan sedang mengerjakan bagian Navigasi.
Robot saya saat ini menggunakan Arduino sebagai modul untuk komunikasi dan prosesor Intel i7 x64 bit pada laptop sebagai CPU.
Ini adalah gambaran umum robot dan elektroniknya:
Masalah
Saya menerapkan algoritma SLAM sederhana yang mendapatkan posisi robot dari encoders dan menambahkan apa pun yang dilihatnya menggunakan kinect (sebagai irisan 2D awan titik 3D) ke peta.
Seperti inilah tampilan peta kamar saya saat ini:
Ini adalah gambaran kasar dari kamar saya yang sebenarnya:
Seperti yang Anda lihat, mereka sangat berbeda dan peta yang sangat buruk.
- Apakah ini diharapkan dari menggunakan perhitungan mati?
- Saya menyadari adanya filter partikel yang memperbaikinya dan siap untuk diimplementasikan, tetapi bagaimana cara saya dapat meningkatkan hasil ini?
Memperbarui
Saya lupa menyebutkan pendekatan saya saat ini (yang sebelumnya saya harus tetapi lupa). Program saya kira-kira melakukan ini: (Saya menggunakan hashtable untuk menyimpan peta dinamis)
- Ambil cloud point dari Kinect
- Tunggu data odometri seri yang masuk
- Sinkronisasi menggunakan metode berbasis-waktu
- Perkirakan pose robot (x, y, theta) menggunakan persamaan di Wikipedia dan data enkoder
- Dapatkan "irisan" titik cloud
- Irisan saya pada dasarnya adalah array dari parameter X dan Z
- Kemudian plot titik-titik ini berdasarkan pose robot dan X dan Z params
- Ulang
Saya sarankan Anda mencoba filter partikel / EKF.
Apa yang Anda lakukan saat ini:
-> Dead Reckoning: Anda melihat posisi Anda saat ini tanpa referensi.
-> Lokalisasi Berkelanjutan: Secara kasar Anda tahu di mana Anda berada di peta.
Jika Anda tidak memiliki referensi dan tidak tahu di mana Anda berada di peta, apa pun tindakan yang Anda lakukan, Anda akan merasa sulit untuk mendapatkan peta yang sempurna.
Misalnya: Anda berada di ruangan melingkar. Anda terus bergerak maju. Anda tahu apa langkah terakhir Anda. Peta yang Anda dapatkan akan berupa kotak seperti struktur. Ini akan terjadi kecuali dan sampai Anda memiliki cara untuk melokalkan atau mengetahui di mana Anda berada di peta, terus menerus.
Pelokalan dapat dilakukan melalui Filter EKF / Partikel jika Anda memiliki titik referensi awal. Namun, titik referensi awal adalah suatu keharusan.
sumber
Karena Anda menggunakan perhitungan mati kesalahan dalam memperkirakan pose robot menumpuk dalam waktu. Dari pengalaman saya, setelah beberapa saat, estimasi pose mati menjadi tidak berguna. Jika Anda menggunakan sensor tambahan, seperti Giroskop atau Accelerometer, estimasi pose akan meningkat tetapi karena Anda tidak memiliki umpan balik pada beberapa titik, itu akan berbeda seperti sebelumnya. Akibatnya, bahkan jika Anda memiliki data yang baik dari Kinect, membangun peta yang akurat sulit karena estimasi pose Anda tidak valid.
Anda perlu melokalkan robot Anda bersamaan dengan upaya Anda membangun peta (SLAM!). Jadi saat peta sedang dibuat, peta yang sama juga digunakan untuk melokalkan robot. Ini memastikan bahwa estimasi pose Anda tidak akan menyimpang dan kualitas peta Anda akan lebih baik. Oleh karena itu saya akan menyarankan untuk mempelajari beberapa algoritma SLAM (yaitu FastSLAM) dan mencoba mengimplementasikan versi Anda sendiri.
sumber