Ini menyangkut perangkat keras yang sedikit berbobot, karena robot berjalan (berukuran kucing gemuk, 6 kaki dengan 3 DOF) harus membawanya berkeliling. Karena itu berjalan itu perlu melakukan banyak trigonometri (menggunakan matriks matematika atau belum saya belum yakin) dan ini adalah dari mana pertanyaan ini berasal.
PIC, Arduino, atau AVR murah tidak cukup cepat untuk menghitung semuanya 100 / detik dan menjaga hal-hal seperti inersia dan penghindaran kendala dalam pikiran, atau bahkan jalur / alat bruteforce.
Rencana A adalah membawa otak pada robot. Baik itu mikroprosesor, mikro ITX, nettop atau lainnya; apa perangkat keras yang efisien untuk melakukan trigonometri / matriks matematika dengan cepat?
Saya mencari secara online dan diharapkan untuk mengetahui tentang AVR, x86, atau mikrokontroler ARM yang terspesialisasi dalam hal ini tetapi tidak berhasil di sana.
Plan B adalah memiliki mesin x86 yang terhubung melalui WiFi untuk melakukan pengangkatan berat. Sangat bagus untuk membuat prototipe, tetapi saya ingin ini bermigrasi ke rencana A pada akhirnya ketika perangkat kerasnya mini. Tetapi meskipun begitu, apa yang dapat dilakukan CPU desktop paling cepat trigonometri?
Plan C adalah mendistribusikan beban dan memiliki satu mikrokontroler / inti efisien daya untuk setiap kaki, walaupun itu bukan solusi terbaik karena berbagai alasan, saya suka memperluas kemampuannya.
Saya belum memutuskan bahasa dan / atau perpustakaan yang digunakan, tetapi lebih suka Pascal dan C ++.
(saran untuk menyambut tag yang lebih cocok, saya baru di sini)
sumber
Jawaban:
Itu tidak terdengar seperti aplikasi Anda benar-benar semua yang intensif komputasi. Sebuah dsPIC, misalnya, dapat mengeksekusi instruksi 400 k untuk masing-masing iterasi Anda. Itu banyak. Akan bermanfaat jika memiliki kemampuan I / O tingkat rendah yang baik, generator PWM, timer, dan sejenisnya.
Sinus dan cosinus sebenarnya tidak terlalu sulit untuk dilakukan dalam mesin integer seperti dsPIC. Saya telah melakukannya sendiri beberapa kali. Caranya adalah dengan memilih representasi yang tepat untuk sudut. Radian mungkin baik dari sudut pandang teoretis, tetapi tidak nyaman secara komputasi. Degress adalah buatan dan konyol. Gunakan rentang penuh apa pun bilangan bulat berukuran mesin Anda untuk mewakili satu putaran penuh. Misalnya, pada dsPIC, yang merupakan prosesor 16 bit, satu putaran penuh adalah jumlah 65536, yang jauh lebih akurat dan resolusi daripada yang Anda butuhkan untuk mengendalikan robot atau Anda dapat mengukur pula.
Satu keuntungan dari representasi ini adalah bahwa semua pembungkus terjadi secara otomatis hanya karena cara bilangan bulat unsigned menambah dan mengurangi kerja. Keuntungan signifikan lainnya adalah bahwa representasi ini cocok untuk menggunakan tabel pencarian untuk sinus dan cosinus. Anda hanya perlu menyimpan 1/4 siklus. Dua bit teratas sudut memberi tahu Anda kuadran mana Anda berada, yang memberi tahu Anda apakah akan mengindeks ke dalam tabel ke depan atau ke belakang, dan apakah akan meniadakan hasil atau tidak. N bit yang lebih rendah berikutnya digunakan untuk mengindeks ke dalam tabel, dengan tabel yang memiliki 2 segmen N (2 N +1 poin). Perhatikan bahwa pengindeksan ke tabel mundur kemudian hanya melengkapi bit indeks tabel.
Anda bisa memberikan tabel cukup poin sehingga memilih jawaban terdekat cukup baik. Misalnya, jika tabel memiliki 1024 segmen, maka sinus dan kosinus akan dihitung ke 1/4096 terdekat dari sebuah lingkaran. Itu akan banyak untuk mengendalikan robot. Jika Anda ingin lebih akurat, Anda bisa membuat tabel lebih besar atau menggunakan bit sudut yang tersisa untuk menginterpolasi secara linear antara entri tabel yang berdekatan.
Pokoknya, intinya adalah tampaknya persyaratan Anda untuk prosesor ini tidak cocok dengan masalah yang disebutkan. Saya mungkin akan menggunakan dsPIC33F. Ini tentu kecil, ringan, dan jauh lebih efisien daya daripada proses komputasi tujuan umum penuh seperti x86 pada komputer papan tunggal.
sumber
Anda akan berurusan dengan banyak sinyal input. Anda tidak perlu membutuhkan CPU dengan throughput tinggi; banyak sinyal dapat diproses secara paralel. Ini adalah wilayah khas DSP. Tentu saja, Anda juga menginginkan fungsionalitas CPU umum. Ini bukan masalah. Ada banyak CPU dengan DSP terintegrasi.
Desain chip yang khas untuk aplikasi tersebut adalah Cortex-M4. Ini dilengkapi dengan DSP terintegrasi, dan versi -M4F juga memiliki FPU. Ini mungkin tidak perlu, trigonometri dapat dengan mudah dilakukan dalam matematika titik tetap.
sumber
Beberapa komentar:
Anda tidak perlu memproses operasi trigonometri pada CPU yang sama yang mengeksekusi penghalang rintangan. Anda dapat membagi tugas antara dua mikrokontroler dan menggunakan protokol komunikasi untuk membuat mereka berbicara.
Untuk percobaan saya telah menerapkan algoritma AHRS dengan filter Kalman dalam mikrokontroler ARM Cortex M0 (itu adalah STM32, tidak ingat persis sisanya tetapi saya pikir itu 32 MHz), dan menggunakan matematika titik tetap saya bisa menjalankan sekitar 40 sampel / detik. Dengan pengontrol yang lebih cepat Anda harus dapat membawanya dengan mudah, dan tentu saja Anda dapat mencoba cara FPGA atau DSP.
Saya akan mengatakan bahwa kontrol tungkai tidak intensif-CPU dan Anda dapat mengontrol semua tungkai secara bersamaan, mungkin terpisah dari operasi trigonometri dan penghindaran rintangan (lihat 1)
sumber
Trigonometri rumit, tetapi ada pintasan. Jika Anda lemah dalam memproses daya, pertimbangkan algoritma CORDIC.
Ini pada dasarnya adalah tabel nilai untuk [misalnya] sinus. Sudut bisa dalam derajat, radian, apa pun yang Anda suka. Intinya adalah, SINE dari nilai-nilai ini adalah 1/2 (0,5), 1/4 (0,25), 1/8, 1/16 ..... hingga fraksi apa pun dari tingkat yang dapat digunakan robot Anda.
Masukkan sudut Anda, kurangi nilai tabel pertama, atur hasil Anda ke hasil pertama (0,5). Jika, dengan menyuburkan, sudut Anda menjadi negatif, lalu TAMBAH nilai berikutnya (dan kurangi 0,25). Jika tidak, lanjutkan kurangi sudut dan tambahkan hasil.
Ketika Anda sampai di ujung tabel, yang telah Anda lakukan adalah menambah & mengurangi namun Anda sudah sangat dekat. Ada "faktor biola" terakhir untuk dikalikan.
Keakuratan [dan kecepatan] dari hasil tergantung pada ukuran [dan resolusi] dari tabel pencarian.
sumber
Anda dapat mempertimbangkan menggunakan papan Raspberry Pi yang menjalankan sistem tujuan umum GNU / Linux. Raspberry Pi memiliki beberapa pin GPIO yang dapat digunakan untuk menghubungkan robot servos atau papan ekstensi.
http://www.youtube.com/watch?v=RuYLTudcOaM
Model A Raspberry Pi dapat melakukan hingga 24 GFLOP untuk komputasi titik tujuan umum menggunakan GPU menggunakan OpenGL ES 2 sambil tetap di bawah anggaran daya 2,5W.
http://elinux.org/RPi_Hardware
Contoh: pengaturan robot bertenaga baterai diimplementasikan menggunakan Raspberry Pi.
http://www.homofaciens.de/technics-robots-R3-construction_en_navion.htm
Contoh 2: robot berkaki 6 yang dikendalikan oleh pi raspberry:
http://www.youtube.com/watch?v=Yhv43H5Omfc
Contoh 3: robot pendulum terbalik 2 roda penyeimbang diri dikendalikan oleh pi raspberry:
http://www.youtube.com/watch?v=n-noFwc23y0
sumber
Untuk robot berkaki, Anda dapat membuat beberapa urutan gerakan kaki yang telah ditentukan dan "memainkannya". Penghindaran kendala waktu nyata dapat dilakukan dengan
fuzzy logic
implementasi ringan di mana semuanya lagi dalam format tabel dan yang perlu Anda lakukan adalah memilih nilai yang tepat dari itu dan menggunakannya untukdefuzzyfication
proses.Semuanya dapat dilakukan dalam C pada prosesor yang lebih cepat seperti
ARM7
. Saya sudah mencobanyaAVR
dan gagal, setelah menghabiskan banyak waktu untuk mengubah segalanyafixed point arithmetics
.sumber
Platform Texas Instruments Stellaris memiliki unit floating point di papan secara default. Tidak yakin apakah pengontrol ARM clock 80MHz cukup cepat untuk aplikasi Anda, tetapi papan pengembangan LaunchPad cukup murah: http://www.ti.com/ww/en/launchpad/stellaris_head.html
Dapat diprogram melalui USB, toolchains gratis tersedia untuk setidaknya Windows dan Linux, berukuran sekitar 4 × 6 cm dan memiliki 30+ pin GPIO (jika saya hitung dengan benar).
sumber
Anda dapat menanamkan papan daya CPU x86 ke dalam aplikasi robot Anda dengan bantuan AVR untuk mengontrol drive robot sebagai kartu penghubung. Solusi tercepat dan termurah untuk masalah Anda. Tapi ya Anda harus mengacaukan banyak pengkodean ke arsitektur x86, tetapi untungnya Anda dapat memahami banyak pengkodean dari kode OS open source. (Jika konstruksi mekanik Anda dapat menanggung berat ini)
sumber