Sirkuit

Cara Membangun Robot Navigasi Mandiri: 7 Langkah

Rancang Bangun Robot Terbang Penghindar Halangan untuk Navigasi dalam Ruangan Bersekat

Rancang Bangun Robot Terbang Penghindar Halangan untuk Navigasi dalam Ruangan Bersekat

Daftar Isi:

Anonim

Ini adalah tutorial terperinci tentang cara mewujudkan robot mulai dari awal, dan memberikannya kemampuan untuk bernavigasi secara mandiri di lingkungan yang tidak dikenal.
Semua argumen khas yang terlibat dengan robotika akan dibahas: mekanika , elektronik dan pemrograman .
Seluruh robot dirancang untuk dibuat oleh siapa saja di rumah tanpa alat dan peralatan profesional (mahal).
Papan otak (dsNav ) didasarkan pada DSC Microchip dsPIC33 dengan kemampuan encoder dan pengontrol motor. Posisi dihitung oleh odometry (encoder) tanpa referensi eksternal (perhitungan mati).
Dalam versi final beberapa pengendali lain digunakan untuk mengontrol sensor (Arduino) dan untuk mengelola sensor analog (PSoC).

Persediaan:

Langkah 1: Platform Dasar

Contoh bagaimana membangun platform robot yang sangat sederhana dengan komponen dan suku cadang yang mudah ditemukan di mana-mana, tanpa perlu alat atau peralatan profesional, dan tanpa keahlian khusus dalam pekerjaan mekanik.
Ukuran pangkalan memungkinkan penggunaannya dalam berbagai kategori kontes robot: Explorer, Line Follower, Can Collector, dll.

Langkah 2: Apa yang Kami Ingin Dapatkan? dan bagaimana?

Robot ini, sebagaimana sebagian besar robot yang dibuat oleh hobbysts, didasarkan pada sistem kemudi diferensial, yang memungkinkan kita untuk mengetahui koordinat posisi robot pada saat tertentu, hanya mengetahui ruang yang tertutup oleh setiap roda secara berkala dengan presisi yang cukup.
Sistem navigasi perhitungan mati ini dipengaruhi oleh kesalahan kumulatif; ketelitian pengukuran harus tinggi untuk memastikan lingkaran kesalahan kecil setelah jalan yang panjang. Jadi, setelah beberapa hasil bagus dengan encoders buatan sendiri, saya memutuskan untuk menggunakan sesuatu yang lebih baik: sepasang motor beroda 12V-200 rpm, terhubung ke beberapa encoders Count Per Revolution (cpr) 300, keduanya tersedia di banyak toko robot internet.
Prinsip dasar
Untuk menangkap semua pulsa yang dihasilkan oleh 300 cpr encoder pada motor 3000 rpm dalam metode decoding 4x (120 kHz), kita membutuhkan perangkat keras khusus untuk setiap encoder (QEI = Quadrature Encoder Interface). Setelah beberapa bereksperimen dengan PIC18F2431 ganda, saya memutuskan bahwa peningkatan yang benar adalah ke dsPIC. Pada awalnya mereka adalah dua pengendali motor dsPIC30F4012 untuk mengontrol posisi dan kecepatan roda, untuk melakukan odometri dan untuk menyediakan data dari dua motor ke dsPIC30F3013. Tujuan umum DSC ini cukup kuat untuk mendapatkan data, melakukan beberapa trigonometri untuk menghitung koordinat posisi, dan menyimpan data yang terkait dengan jalur yang dicakup untuk mendapatkan peta lapangan, semuanya dengan kecepatan yang sangat tinggi.
Ketika board dan program hampir selesai, Microchip mengeluarkan SPDIP 28-pin baru yang kuat di seri dsPIC33F untuk versi motor controller (MC) dan general-purpose (GP). Mereka secara signifikan lebih cepat daripada dsPIC30F, mereka memiliki lebih banyak memori program dan RAM (berguna untuk pemetaan lapangan), mereka membutuhkan lebih sedikit daya (baik untuk robot yang dioperasikan dengan baterai), dan kemampuan DMA mereka menyederhanakan banyak operasi I / O.
Yang paling penting, ini adalah pengendali motor Microchip pertama dengan dua QEI pada chip yang sama. Mari kita mulai lagi port baru! Itu diagram blok logis mirip dengan yang ada di papan sebelumnya , tetapi perangkat keras dan lunaknya lebih sederhana sejak itu Saya bisa menggunakan satu DSC hanya insted tiga . Tidak perlu komunikasi berkecepatan tinggi antara pengawas dan pengendali motor untuk bertukar parameter navigasi. Setiap proses mudah disinkronkan karena berada pada chip yang sama. Kemampuan pilih pin periferal dari seri dsPIC33F selanjutnya menyederhanakan PCB, memungkinkan koneksi internal periferal dan fleksibilitas yang lebih besar.
Ini membawa kita ke "papan Kontrol Navigasi berbasis dsPIC" atau dsNavCon Singkatnya. Papan ini dirancang sebagai bagian dari sistem yang lebih kompleks. Dalam robot penjelajah lengkap, papan lain akan mengontrol suara, cahaya, sensor gas, serta bumper dan pencari jarak ultrasonik untuk menemukan target dan menghindari rintangan.
Sebagai papan mandiri, dsNavCon dapat juga digunakan untuk robot “pengikut garis” sederhana, sesuatu yang lebih kompleks seperti robot untuk kontes odometry dan perhitungan mati, atau yang disebut “robot kaleng” (untuk dapat mengumpulkan kompetisi). Masih ada banyak memori program gratis untuk menambahkan kode untuk tugas-tugas tersebut. Dengan perubahan kecil atau tidak ada dalam perangkat lunak, itu juga dapat digunakan mandiri untuk kendaraan yang dikendalikan dari jarak jauh, menggunakan modem RF dua arah dengan semacam remote control pintar. Remote control ini dapat mengirim perintah kompleks seperti "pindahkan FWD 1m," "belok 15 ° ke kiri," "jalankan FWD pada 50 cm / s," "buka X, koordinat Y," atau yang serupa.
Papan dan robot juga, dirancang untuk dibuat oleh siapa saja di rumah tanpa alat dan peralatan profesional.

Langkah 3: Perangkat Keras Sumber Terbuka

Diagram Blok
Subsistem kontrol navigasi terdiri dari dsNav sebagai papan "pintar" dari sistem dan papan H-bridge dual berbasis L298 untuk mengendalikan motor 12V yang diarahkan (Hsiang Neng HN-GH12-1634TR). Umpan balik gerakan berasal dari beberapa 300 cpr encoders (US digital e4p-300-079-ht).
Komunikasi dengan dunia eksternal dilakukan melalui dua antarmuka serial UART; satu untuk telemetri dan yang lainnya untuk mendapatkan data dari papan sensor. Modul XBee dapat dihubungkan ke UART1 atau UART2 melalui jumper JP1 dan JP2. Soket J1 dan J16 tersedia untuk jenis koneksi lainnya. Port COMM1 (J16) juga dapat digunakan untuk komunikasi I2C berkat kemampuan pin pin periferal dari seri dsPIC33F.
Diagram skematik asli dalam format Eagle dapat ditemukan di sini:
http://www.guiott.com/Rino/dsNavCon33/dsNavCon33_Eagle_project/DsPid33sch.zip
Seperti yang Anda lihat, skematisnya sangat sederhana sehingga bisa diimplementasikan pada perfboard seperti yang saya lakukan. Jika Anda tidak ingin menggunakan sistem ini dan tidak ingin membuat PCB Anda sendiri, papan komersial berdasarkan karya asli saya dan sepenuhnya kompatibel dengan perangkat lunak open source saya tersedia di: http: //www.robot-italy .com / product_info.php? products_id = 1564

Langkah 4: Perangkat Lunak Open Source

Perangkat lunak ini dikembangkan dengan MPLAB® IDE gratis dan ditulis dengan kompiler MPLAB® C30 (bahkan dalam versi gratis atau pelajar), keduanya (tentu saja) oleh Microchip:
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=81
Seluruh proyek tersedia sebagai sumber terbuka di Google Code
http://code.google.com/p/dspid33/
Silakan merujuk ke sana untuk versi terbaru, komentar, deskripsi, dll.
Program ini dijelaskan langkah demi langkah di dalam kode. Untuk memiliki tingkat komentar yang tinggi dan kode yang lebih mudah dibaca, pada setiap titik penting terdapat angka dalam tanda kurung (mis: 7) sebagai referensi ke file eksternal (yaitu: descrEng.txt) dalam proyek MPLAB .
Diagram menunjukkan arsitektur keseluruhan dari prosedur kontrol papan dsNav dan strategi navigasi yang diterapkan pada dasar proyek.
Pengontrol motor dapat dilihat sebagai kotak hitam yang menjaga kecepatan roda. Bagian pengawas program mengirimkan kepada mereka kecepatan referensi (VeldDesX: kecepatan yang diinginkan). Modul Input Capture pada mikrokontroler mendapatkan pulsa dari enkoder yang terhubung ke sumbu motor dan memperoleh kecepatan rotasi motor (VelMesX: kecepatan terukur). Menggabungkan setiap 1ms nilai ini dalam kontrol PID "Speed ​​PID" kami memperoleh nilai PWM yang tepat untuk menjaga kecepatan yang diinginkan dari setiap roda tunggal.
Modul QEI (Quadrature Encoder Interface) mendapatkan pulsa A dan B dari encoders dan mengembalikan fungsi pengawas ke arah perjalanan dan jumlah pulsa dalam mode 4x (menghitung tepi naik dan turun dari sinyal A dan sinyal B: 2 x 2 = 4).
Mengalikan jumlah pulsa dengan K yang menunjukkan ruang yang ditempuh untuk setiap pulsa encoder tunggal, kami mendapatkan jarak yang ditempuh oleh roda kanan dan kiri setiap 10ms. Pengawas menggabungkan informasi perjalanan ini dan menerapkan prosedur perhitungan mati untuk mendapatkan koordinat posisi bot yang diukur: Xmes, Ymes, esMes (sudut orientasi).
Pengawas menerima perintah navigasi dari luar melalui antarmuka serial (telemetri).
Berbagai strategi dapat diterapkan:
SEBUAH - bepergian dengan kecepatan yang diberikan dalam arah tertentu (VelDes, θDes).
B - perjalanan menuju titik tertentu dengan koordinat XDes, YDes.
C - bepergian untuk jarak tertentu dalam arah tertentu (DistDes, θDes).
Mode A : dengan "sakelar kendali logis" di posisi 1, hanya kendali PID "Sudut PID" yang digunakan oleh fungsi pengawas. Yang ini menggabungkan sudut yang diinginkan θDes dengan sudut yang diukur θMes dihitung dengan prosedur odometri, untuk mendapatkan nilai kecepatan sudut rotasi ω kendaraan di sekitar sumbu vertikal, diperlukan untuk memperbaiki kesalahan orientasi.
Nilai DeltaV sebanding dengan ω. Ini ditambahkan ke VelDes untuk mendapatkan kecepatan roda kiri dan dikurangkan ke VelDes untuk mendapatkan kecepatan roda kanan, untuk menjaga pos yang sesuai dengan nilai θDes, sementara pusat robot masih bepergian dengan kecepatan VelDes.
Mode B : dengan "sakelar kendali logis" di posisi 2, VelDes kecepatan yang diinginkan dihitung oleh kendali PID "Dist PID" dan digunakan seperti dalam mode A. Input yang diukur untuk PID (DistMes) ini dihitung sebagai fungsi dari koordinat saat ini dan koordinat tujuan. Sudut orientasi yang diinginkan θDes juga berasal dari prosedur yang sama dan digunakan sebagai input referensi untuk "Angle PID". Input referensi untuk "Dist PID" adalah 0, artinya tujuan tercapai. Dengan ω dan VelDes yang tersedia, kontrol kecepatan roda berjalan seperti dalam mode A.
Mode C : dengan "sakelar kontrol logis" di posisi 2, tujuan mengoordinasikan Xdes, Ydes dihitung sekali di awal sebagai fungsi dari parameter input DistDes, θDes. Setelah itu semuanya berjalan seperti dalam mode B

Langkah 5: Detail Perangkat Lunak: Kontrol Kecepatan dan Fungsi Dasar Lainnya

Program sudah penuh didorong interrupt . Pada startup, setelah inisialisasi, program masuk dalam loop utama yang sangat sederhana, bertindak sebagai mesin negara. Dalam loop utama, program memeriksa tanda yang diaktifkan oleh peristiwa eksternal, dan masuk ke kondisi relatif sesuai dengan nilainya.
Karena ini semacam koperasi yang sangat sederhana "Sistem Operasi Waktu Nyata , "setiap rutin harus dijalankan dalam waktu sesingkat mungkin, membebaskan sistem untuk menangani interupsi yang sangat sering.
Tidak ada "tunggu sampai" dan tidak ada keterlambatan dalam kode. Kapan saja interupsi yang mungkin digunakan, khususnya untuk operasi lambat seperti transmisi atau penerimaan string karakter. Komunikasi UART mengambil keuntungan dari kemampuan DMA dsPIC33F untuk menghemat waktu CPU melakukan semua pekerjaan "kotor" dalam perangkat keras.
Periferal yang digunakan pada dsPIC33FJ128MC802:
- QEI untuk menghitung jalur yang ditempuh.
- Input Capture (IC) untuk menghitung kecepatan.
- Konverter A / D untuk membaca arus motor.
- PWM yang disempurnakan untuk menggerakkan motor.
- UART untuk berkomunikasi dengan dunia luar
Modul QEI digunakan untuk mengetahui berapa banyak roda telah bepergian dan ke arah mana. Nilai ini diakumulasikan secara aljabar dalam variabel setiap 1 ms dan dikirim ke fungsi penyelia atas permintaannya. Setelah nilai dikirim, variabel diatur ulang.
Kecepatan diukur pada setiap pulsa encoder seperti dijelaskan di bawah ini. Setiap 1ms ia menghitung kecepatan rata-rata dengan rata-rata sampel, mengeksekusi algoritma PID, dan mengoreksi kecepatan motor sesuai dengan hasilnya, mengubah siklus tugas PWM. Untuk keterangan terperinci tentang aplikasi perpustakaan C30 PID, lihat Contoh Kode Microchip: CE019 - Menggunakan pengontrol Proportional Integral Derivative (PID) di Sistem Kontrol Loop Tertutup. http://ww1.microchip.com/downloads/en/DeviceDoc/CE019_PID.zip
Variasi kecepatan motor dieksekusi dengan lancar, berakselerasi atau melambat dengan tanjakan miring yang naik atau turun, untuk menghindari tekanan mekanis yang berat dan selip roda yang dapat menyebabkan kesalahan dalam odometri. Deselerasi lebih cepat daripada akselerasi untuk menghindari benturan dengan rintangan saat pengereman.
IC , modul input capture digunakan untuk mengukur waktu yang berlalu antara dua pulsa yang dihasilkan oleh enkoder, artinya ketika roda melakukan perjalanan untuk ruang tetap yang dikenal luas (konstan SPACE_ENC ). Terhubung secara paralel ke QEA (secara internal ke DSC berkat kemampuan Pin Select Peripheral dari dsPIC33F), mereka menangkap waktu yang telah berlalu di sisi sinyal Enkoder yang meningkat. TIMER2 digunakan dalam mode bebas berjalan. Pada setiap interupsi IC, nilai TMR2 saat ini disimpan dan nilai sebelumnya dikurangi darinya; ini adalah periode nadi. Kemudian nilai saat ini menjadi nilai sebelumnya, menunggu interupsi berikutnya. Bendera TMR2 harus diperiksa untuk mengetahui apakah terjadi overflow dalam register 16-bit. Jika ya, perbedaan antara 0xFFFF dan sampel sebelumnya harus ditambahkan ke nilai saat ini. Sampel ditambahkan secara aljabar IcPeriod variabel menurut _UPDN bit, untuk menentukan juga arah kecepatan. Ini adalah salah satu metode yang disarankan di Catatan aplikasi microchip AN545 .
Variabel IcIndx berisi jumlah sampel yang ditambahkan IcPeriod .
Setiap 1ms kecepatan rata-rata dihitung sebagai V = Spasi / Waktu
dimana Spasi = SPACE_ENC • IcIndx
(= ruang yang tercakup dalam satu pulsa encoder • jumlah pulsa)
dan Waktu = TCY • IcPeriod
(= periode TMR tunggal • penjumlahan periode terjadi).
Single_TMR_ Period = TCY = 1 / FCY (frekuensi jam).
Begitu V = Kvel • (IcIndx / IcPeriod)
dimana Kvel = SPACE_ENC • FCY untuk memiliki kecepatan dalam m / s.
Bergeser ke kiri 15 bit Kvel const ( KvelLong = Kvel << 15 ) kecepatan dihitung sudah dalam format fraksional (juga jika hanya variabel integer digunakan) siap digunakan dalam rutin PID. Lihat file “descrEng.txt” di proyek MPLAB untuk deskripsi yang lebih terperinci.
Konverter A / D terus mengukur arus motor, menyimpan nilai dalam 16 posisi buffer ADCBUF. Ketika buffer penuh, interupsi terjadi dan nilai rata-rata dihitung kira-kira setiap 1 ms.
UARTs digunakan untuk menerima perintah dari luar dan mengirim kembali hasil pengukuran. Bagian komunikasi dari program ini berjalan sebagai mesin negara. Variabel status digunakan untuk menjalankan tindakan secara berurutan. Interrupt Service Routines (ISR) yang sangat sederhana dan cepat mendapatkan atau menempatkan setiap byte dari atau ke buffer, dan mengatur flag yang tepat untuk membiarkan fungsi yang tepat untuk dieksekusi.
Jika segala jenis kesalahan terjadi selama penerimaan (UART, checksum, kesalahan parsing), variabel status diatur ke angka negatif dan led merah dinyalakan untuk berkomunikasi secara eksternal dengan kondisi kesalahan ini. Lihat file “descrEng.txt” di proyek MPLAB untuk daftar lengkap kemungkinan kesalahan.
Protokol yang digunakan untuk jabat tangan adalah lapisan fisik independen , dan dapat digunakan dengan bus I2C atau RS485 juga untuk berkomunikasi.
Itu lapisan pertama dikendalikan oleh antarmuka periferal dsPIC. Frame atau overrun error (UART) atau collisions (I2C) terdeteksi oleh perangkat keras, mengatur flag yang sesuai.
Itu lapisan kedua ditangani oleh rutinitas ISR. Mereka mengisi buffer RX dengan byte yang diterima dari antarmuka. Mereka juga mendeteksi buffer overflow dan perintah overrun.
Fungsi UartRx atau UartRx2 mengelola lapisan ketiga . Seperti yang sudah dijelaskan (lihat juga diagram alur) rutinitas ini bertindak sebagai mesin negara, mendapatkan byte dari buffer dan decoding string perintah.
Bytes dipertukarkan antara lapisan kedua dan ketiga (fungsi ISR ​​dan UartRx) melalui buffer lingkaran. ISR menerima byte, menyimpannya dalam array dan menambahkan pointer ke array, jika pointer mencapai akhir array itu dimulai kembali ke awal. Fungsi UartRx memiliki pointer sendiri untuk membaca array yang sama, bertambah (dengan cara melingkar juga) segera setelah byte diterjemahkan dalam status RX saat ini. Loop utama memanggil fungsi UartRx setiap kali pointer "in" berbeda dari pointer "out".
Setiap paket perintah terdiri dari:
0 - Header @
1 - ID 0-9 ASCII
2 - Cmd A-Z ASCII
3 - CmdLen N = 1-MAX_RX_BUFF # byte berikut (checksum termasuk)
4 - Data …

N-1 - Data
N - Checksum 0-255 diperoleh dengan hanya menambahkan dalam variabel 8 bit, semua byte yang menyusun pesan (checksum itu sendiri dikecualikan).
Lapisan ini mengontrol batas waktu dan kesalahan checksum, serta konsistensi paket (header yang benar, panjang yang benar). Jika semuanya ok itu memungkinkan Parser rutin (lapisan keempat ) untuk memecahkan kode pesan dan untuk mengeksekusi tindakan yang diperlukan. Rutin ini menetapkan flag kesalahan yang sesuai jika kode pesan yang diterima tidak diketahui.
TMR1 menghasilkan jam waktu 1000 Hz - detak jantung program. Pada setiap interupsi TMR1, penghitung waktu internal diperbarui, pengawas dihapus, dan sebuah bendera diatur untuk mengaktifkan fungsi yang meminta nilai ruang yang ditempuh. Setiap 10ms fungsi “All_Parameters_Ask” (kecepatan, posisi, saat ini) diaktifkan.

Langkah 6: Detail Perangkat Lunak: Odometri dan Pemetaan Lapangan = Di Mana Saya?

Optimalisasi algoritma umum untuk penggunaan dalam sistem berbasis DSC atau MCU
Setelah kami memiliki informasi tentang jarak yang ditempuh oleh setiap roda dalam pembaruan waktu diskrit (odometri), kami dapat memperkirakan koordinat posisi robot dengan periodisitas yang sama tanpa referensi eksternal (perhitungan mati).
Beberapa latar belakang teoritis tentang perhitungan mati oleh odometri dapat ditemukan dalam buku oleh Johann Borenstein:
"Di Mana Saya? - Sensor Dan Metode Untuk Posisi Robot Seluler"
dan di halaman web berikut:
http://www.seattlerobotics.org/encoder/200010/dead_reckoning_article.html
Latar belakang matematika dan penjelasan mendalam tentang metode umum yang digunakan, dapat ditemukan di G.W. Kertas Lucas, Tutorial dan Model Lintasan Dasar untuk Sistem Pengarah Diferensial dari Aktuator Roda Robot, tersedia di Internet:
http://rossum.sourceforge.net/papers/DiffSteer/DiffSteer.html
Beberapa algoritma yang disederhanakan dapat ditemukan dalam dokumentasi yang sama juga, sehingga dimungkinkan untuk mendapatkan kompromi yang benar antara presisi dan kecepatan elaborasi, menggunakan kemampuan matematika (trigonometrik) seri dsPIC33F.
Deskripsi matematika yang digunakan untuk menghitung posisi dapat ditemukan dalam gambar yang terlampir pada langkah ini. Yang pertama menunjukkan makna simbol, yang kedua menunjukkan formula yang digunakan dengan simbol-simbol itu. Mengklik kotak di sebelah setiap langkah komputasi deskripsi singkat ditampilkan.
Pada akhirnya kita tahu berapa banyak robot bergerak dalam interval waktu itu sebagai delta orientasi, delta pada sumbu X dan delta pada sumbu Y dalam bidang referensi karthesian.
Dengan mengumpulkan setiap nilai-delta dalam variabelnya sendiri, kita tahu koordinat saat ini (posisi dan orientasi) platform.
Untuk menghindari kesalahan komputasi (bagi dengan nol) dan buang waktu pengontrol, pemeriksaan harus dilakukan sebelumnya pada kedua variabel Sr dan Sl. Menentukan nilai kuasi-nol yang menangani pendekatan mekanis dan komputasi minimal kita dapat menyederhanakan rumus jika robot bepergian dalam garis lurus (ruang yang tertutup oleh roda kanan hampir sama dengan ruang yang ditempuh oleh roda kiri) atau jika berputar di sekitar sumbu vertikal (ruang yang ditutupi oleh roda kanan hampir sama dengan ruang yang dilalui oleh roda kiri tetapi dalam arah yang berlawanan), seperti yang dijelaskan dalam bagan alir yang ditunjukkan pada gambar terakhir.

Video ini menunjukkan contoh ketepatan yang dapat kita peroleh:
http://www.youtube.com/watch?v=d7KZDPJW5n8


Pemetaan lapangan
Dengan data yang dihitung oleh fungsi sebelumnya, pemetaan bidang dilakukan.
Setiap Xms, setelah elaborasi posisi saat ini, pemetaan bidang dilakukan untuk membagi bidang yang tidak diketahui dalam kisi sel 10 x 10 cm. Mendefinisikan dimensi bidang maksimum 5 x 5m, kami mendapatkan 50 x 50 = 2500 sel matriks. Setiap sel didefinisikan dengan nibble, dengan pendudukan memori total 1250 Bytes. Enam belas nilai yang berbeda dapat ditugaskan untuk setiap sel:
n = 00 sel tidak dikenal
n = 01 - 10 sel dikunjungi n kali
n = 11 kendala ditemukan
n = 12 target gas ditemukan
n = 13 target cahaya ditemukan
n = 14 target suara ditemukan
Robot dapat mulai dari posisi apa pun di lapangan; ini akan menjadi koordinat referensi (0,0) dalam sistem referensi.
Pemetaan lapangan berguna untuk menemukan strategi eksplorasi terbaik di bidang yang tidak dikenal. Robot dapat mengarahkan dirinya sendiri ke bagian lapangan yang kurang dieksplorasi (nilai “n” lebih rendah), dapat menghemat waktu dengan tidak berhenti dua kali dalam target yang sudah ditemukan, dapat menemukan jalur terbaik untuk mencapai koordinat yang diberikan, dan banyak lagi.

Langkah 7: Remote Console

Ini adalah aplikasi yang mengontrol papan dsNavCon dari jarak jauh dari Mac / PC melalui komunikasi serial melalui beberapa perangkat XBee seperti yang dijelaskan dalam diagram blok.
Agar mudah dikembangkan dan bagus untuk dijalankan di sistem operasi apa pun, ini ditulis dengan Pengolahan bahasa:
http://www.processing.org/
Kode sumber untuk program ini juga tersedia sebagai sumber terbuka di Google Code:
http://code.google.com/p/dsnavconconsole/
Dengan panel utama (gambar pertama) kita dapat melakukan telemetri dengan melihat pada grid path diikuti oleh robot (seperti yang diperkirakan oleh odometry) dalam bidang ukuran yang dapat dikonfigurasi dan beberapa nilai penting lainnya dibaca pada dsNav .
Pengukur menunjukkan nilai yang diukur:
- MesSpeed ​​dalam kisaran +/- 500 mm / s, nilai rata-rata kecepatan roda dua (kecepatan pusat platform).
- Arus Terukur dalam mA (jumlah arus dari dua motor).
- Sudut Terukur, karena diperparah oleh odometri.
Panel lain digunakan untuk mengkonfigurasi parameter robot dan untuk menyimpan ke dalam robot jalur yang ditentukan untuk diikuti (jika perlu). Panel penting, setidaknya selama pengembangan robot, adalah panel detail (gambar kedua) yang menunjukkan kecepatan setiap roda secara real time, sangat berguna untuk kalibrasi semua parameter.
Tampilan kotak pusat dapat diaktifkan dengan tampilan webcam untuk mengontrol, bahkan dengan melihat, jalan robot mengikuti.
Contoh praktis penggunaan untuk konsol ini ditunjukkan dalam video ini:
http://www.youtube.com/watch?v=OPiaMkCJ-r0