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