Isi kandungan:

Cara Membuat Robot Bermain Bola Keranjang Autonomi Menggunakan IRobot Buat Sebagai Pangkalan: 7 Langkah (dengan Gambar)
Cara Membuat Robot Bermain Bola Keranjang Autonomi Menggunakan IRobot Buat Sebagai Pangkalan: 7 Langkah (dengan Gambar)

Video: Cara Membuat Robot Bermain Bola Keranjang Autonomi Menggunakan IRobot Buat Sebagai Pangkalan: 7 Langkah (dengan Gambar)

Video: Cara Membuat Robot Bermain Bola Keranjang Autonomi Menggunakan IRobot Buat Sebagai Pangkalan: 7 Langkah (dengan Gambar)
Video: Michael Levin dan Joscha Bach: Kecerdasan Kolektif 2024, Julai
Anonim
Cara Membuat Robot Bermain Bola Keranjang Autonomi Menggunakan IRobot Buat Sebagai Pangkalan
Cara Membuat Robot Bermain Bola Keranjang Autonomi Menggunakan IRobot Buat Sebagai Pangkalan

Ini adalah entri saya untuk cabaran Buat iRobot. Bahagian paling sukar dari keseluruhan proses ini adalah menentukan apa yang akan dilakukan oleh robot. Saya ingin menunjukkan ciri-ciri hebat dari Buat, sambil juga menambah beberapa ciri robo. Semua idea saya seolah-olah jatuh dalam kategori membosankan tetapi berguna, atau sejuk dan tidak praktikal. Pada akhirnya menang dan tidak praktikal menang dan robot bermain bola keranjang dilahirkan. Setelah berfikir, saya menyedari bahawa itu boleh menjadi praktikal. Katakan anda menggunakan kertas oren, dan semua tong sampah anda mempunyai papan belakang berwarna hijau …

Langkah 1: Bahagian Aquire

Kerana had masa peraduan, sebahagian besar bahagian yang saya gunakan adalah "di luar rak". Bahagian Stok Robot yang Digunakan: Buat (x1) - dari iRobot www.irobot.comXBC V.3.0 (x1) - dari Botball www.botball.orgCreate-Roomba cable (x1) - dari Botball www.botball.orgServo (x2) - dari Botball www.botball.org Sharp rangefinder (x1) - dari Botball www.botball.orgBerbagai batu bata LEGO - dari LEGO www.lego.com6-32 skru mesin (x4) - dari McMaster www.mcmaster.com "Bahagian Dicipta" Robot Digunakan: Lembaran PVC yang diekstrusi tebal 3/8 ".com / Category.aspx? CategoryID = 62 Bahagian lain: Bola oren "POOF" - dari gol bola WalMartBasket mencari tong sampah - dari LowesGreen "backboard" - tambahan PVC dicat hijau terang

Langkah 2: Buat Bahagian Unik

Buat Bahagian Unik
Buat Bahagian Unik

Satu-satunya bahagian yang saya buat ialah piring yang melekat pada Buat dan menawarkan jarak LEGO. Jarak lubang bata LEGO berjarak 8mm, tetapi saya melakukan jarak dua kali untuk menjimatkan masa. PVC yang diekstrusi sangat mudah untuk digunakan. Ia boleh dipotong dengan pisau utiliti, tetapi kaku dan kuat. Saya sering mengambil robot di piring ini dan saya belum menghadapi masalah.

Langkah 1: Potong kepingan menjadi 3.5 "x 9.5", anda boleh memotongnya dengan pisau utiliti. Langkah 2: Bor lubang untuk membuat skru. Skru buat membuat kotak berukuran 2 dan 5/8 "dengan 8 dan 5/8". Langkah 3: Gerudi lubang bata LEGO. Gunakan bit gerudi 3/16 "dan saya menjauhkan lubang sepanjang 16mm. Petua: Saya membentangkan helaian dalam program CAD, mencetaknya dengan ukuran penuh dan menempelkannya ke helaian. Kemudian saya menggunakannya sebagai panduan untuk memotong dan penggerudian.

Langkah 3: Menyusun Robot

Memasang Robot
Memasang Robot
Memasang Robot
Memasang Robot
Memasang Robot
Memasang Robot

Saya seronok membina sesuatu sesederhana mungkin, dengan cara itu ketika mereka melompat dari meja, anda tidak perlu membina semula sebanyak itu!

1. Skru piring yang baru digayakan ke bahagian atas Buat 2. Bangun lengan untuk merebut bola 3. Bentukkan lengan untuk memegang kamera 4. Bangun pelekap untuk pengintai 5. Pasang XBC dan sambungkan semua kabel

Langkah 4: Memprogram Robot

Saya memutuskan untuk menggunakan XBC sebagai alat kawalan saya terutamanya kerana penjejakan warna bawaannya. Kerana saya memutuskan untuk menggunakan XBC sebagai otak operasi, saya memprogramkan robot saya di Interactive C, atau seperti yang saya namakan sebagai IC. IC bebas digunakan dan boleh dimuat turun di www.botball.org. IC sangat mirip dengan C ++, tetapi mempunyai beberapa perpustakaan yang dibina. Ternyata, David Miller dari University of Oklahoma telah menulis perpustakaan untuk Buat yang boleh dimuat turun dari halamannya di https://i-borg.engr.ou.edu/~dmiller/create/. Dengan sumber-sumber tersebut dan manual untuk membuat saya sudah siap untuk diprogramkan. Tetapi cabaran besar seterusnya adalah apa yang saya mahukan? Saya mahukan robot yang boleh pergi dan mengambil bola oren dan menjaringkannya di dalam bakul. Matlamat saya terdengar sederhana, dan mungkin mungkin sederhana, tetapi semakin saya dapat melakukan apa yang boleh dibuat oleh Creat, semakin saya mahu ia dapat dilakukan. Senarai akhir saya kelihatan seperti ini: 1. Cari bola oren2. Angkat bola oren3. Cari bakul4. Masukkan bola ke dalam bakul Semasa1. Mengelakkan objek2. Tidak jatuh dari apa-apa (seperti meja) 3. Mengesan cas bateri dan menyambungkan ke pangkalan rumah ketika lowOh, dan semua ini benar-benar autonomi, yang bermaksud bahawa semuanya sudah diprogramkan.

Langkah 5: Kod

Mungkin tidak kemas, tetapi berfungsi. # Gunakan "createlib.ic" #use "xbccamlib.ic" #define cam 0 // port servo kamera # tentukan arm 3 // port servo arm # define et (analog (0)) // et port / * Kabel buat juga perlu dipasang. Soket kuasa, palam 3 serong ke port 8 dan yang berlabel UX ke dalam JP 28 (di sebelah port USB) dengan U ke arah kamera * / #define c_down 5 // servo down down #efinisikan a_down 17 // arm servo down #efinisikan tahan 50 // servo tahan bola # tentukan ditangkap 27 // lengan servo posisi untuk tidak terjebak di meja # tentukan shoot 150 // servo baling bola # tentukan track_c 25 // kedudukan servo track kamera dekat # tentukan track_f 45 // track servo kamera kedudukan jauh # tentukan pusat 120 // pusat penglihatan kamera # tentukan inrange 30 // track_y koordinat ketika bola berada di cakar # tentukan bola 0 // saluran bola oren # tentukan bola_x (trek_x (bola, 0)) // x koordinat bola # tentukan bola_y (trek_y (bola, 0)) // koordinat bola # tentukan perlahan 100 // kelajuan perlahan motor # tentukan pantas 175 // kelajuan motor laju # tentukan jelas 0.2 // s lompat untuk mundur dari rintangan # tentukan masa 0.5 //1.0 adalah putaran kanan 90 darjah # tentukan rehat 0.05 // masa untuk tidur sambil mengesan gumpalan # tentukan speeda 175 // kelajuan putar hindari # tentukan belakang_s -200 // laju ke mundur dari objek bercabang # tentukan lurus 32767 // pandu dalam garis lurus # tentukan backb 2 // saluran warna utama papan belakang # tentukan persegi 1 // saluran warna aksen papan belakang # tentukan track_d 250 // kedudukan kamera untuk tujuan penjejakan # tentukan track_find 70 // kedudukan kamera untuk penjejakan panjang # tentukan mundur 2.25 // masa tidur untuk 180 # tentukan belakang_f -150 // kelajuan pantas belakang # tentukan belakang_sl -125 // kelajuan perlahan belakang # tentukan pusat_x 178 // pusat x benar daripada cam # define center_y 146 // true y center of camint pida; // mengelakkan prosesint pidb; // track processint pidc; // skor processint has_ball = 0; // memberitahu fungsi mana yang kita utamakan utama () {long ch; enable_servos (); // aktifkan servos init_camera (); // start cconnect kamera (); // sambungkan untuk membuat dengan kawalan penuh start_a (); // mulakan fungsi mengelakkan start_b (); // mulakan fungsi ball_tracking sementara (1) {if (r_button () || gc_ldrop || gc_rdrop) {// jika dijemput atau butang bahu bunuh (pida); bunuh (pidb); bunuh (pidc); lumpuhkan_servos (); putuskan sambungan (); rehat;} create_battery_charge (); display_clear (); printf ("caj =% l / n", gc_battery_charge); jika (gc_battery_charge <1200l || b_button ()) {kill (pida); bunuh (pidb); bunuh (pidc); baling (); mempunyai_ bola = 0; buat_demo (1); semasa (butang b_ ()); sementara (gc_battery_charge <2800l &&! b_button ()) {create_battery_charge (); display_clear (); printf ("caj =% l / n", gc_battery_charge); tidur (1.0);} sambung (); belakang (); tidur (2.0); mula_a (); start_b ();}}} batal mengelakkan () {sementara (1) {// ulangi selamanya create_sensor_update (); // kemas kini semua nilai sensor // create_drive (speeda, straight); if (gc_lbump == 1) {// kiri kiri menghindari_kanan ();} // membelok ke kanan untuk mengelakkan orang lain jika (gc_rbump == 1) {// bongkol kanan menghindari_kiri ();} // belok kiri untuk mengelakkan orang lain jika (gc_lfcliff == 1) {// tebing depan kiri menghindari_kanan ();} lain jika (gc_rfcliff == 1) {// tebing depan kanan mengelakkan_kiri ();} lain jika (gc_lcliff == 1) {// tebing kiri menghindari_kanan ();} lain jika (gc_rcliff == 1) {// tebing kanan menghindari_left ();}}} batal track_ball () {kill (pidc); sementara (! has_ball) {// ulangi sehingga mendapat bola track_update (); jauh (); // tetapkan kamera siap (); // tetapkan lengan sementara (et <255) {// sehingga nilai maksimum berlaku apabila bola ditangkap track_update (); // kemas kini gambar kamera jika (ball_x <= (tengah-5)) {// jika bola dibiarkan track_update (); create_drive_direct (perlahan, pantas); // putar tidur kiri (rehat);} lain jika (bola_x> = (tengah + 5)) {// jika bola betul-betul track_update (); create_drive_direct (cepat, lambat); // belok kanan tidur (rehat);} lain jika (ball_x (tengah-5)) {// jika bola berpusat pada track_update (); create_drive_straight (cepat); // terus tidur (rehat);}} ambil (); // ambil beep bola (); // buat bunyi henti (); // berhenti memandu has_ball = 1; // buat catatan bahawa Saya mempunyai bola} start_c (); // cari bakul tidur (1.0); // tidur sehingga saya tidak melakukan apa-apa ketika saya terbunuh} batal cari_basket () {kill (pidb); // proses penjejakan bola bunuh cari (); // pasang kamera track_set_minarea (1000); // papan belakangnya besar, jadi hanya cari gumpalan besar semasa (have_ball) {// sementara saya mempunyai track_update bola (); while (track_x (backb, 0) = (center_x + 20)) {// sementara tidak berpusat track_update (); if (track_x (backb, 0)> = (center_x + 20)) {// jika papan belakang dibiarkan track_update (); create_spin_CCW (100);} // belok kiri lain jika (track_x (backb, 0) <= (center_x-20)) {// jika papan belakang betul track_update (); create_spin_CW (300-center_x);} // belok kanan perlahan ketika pusat menghampiri} berhenti (); while (track_size (backb, 0) <= (6000)) {// sementara sasarannya kurang dari 6000 piksel dalam ukuran track_update (); if (track_x (backb, 0) <= (center_x-5)) {// jika sasaran dibiarkan track_update (); create_drive_direct (perlahan, pantas); // putar tidur kiri (rehat);} lain jika (track_x (backb, 0)> = (center_x + 5)) {// jika sasarannya betul track_update (); create_drive_direct (cepat, perlahan); // belok kanan tidur (rehat);} lain jika (track_x (backb, 0) (center_x-5)) {// jika sasaran berpusat track_update (); create_drive_straight (pantas); // terus tidur (rehat);}} berhenti (); // create_drive_straight (pantas); // semakin dekat //sleep(1.0); // berhenti (); tidur (1.0); create_spin_CW (speeda); // putar tidur kanan (terbalik); // tidur cukup lama untuk berhenti 180 putaran (); bawah (); // letakkan kamera ke bawah untuk mengesan tidur papan belakang (1.0); track_set_minarea (200); // gunakan ukuran min yang lebih kecil, kerana kita menunjuk ke arah itu dan akan semakin dekat sementara (track_y (backb, 0)> = (center_y-140)) {// sementara sasarannya kurang dari y koordinat track_update (); if (track_x (backb, 0) <= (center_x-5)) {// jika sasaran dibiarkan track_update (); back_right (); // putar tidur kiri (rehat);} lain jika (track_x (backb, 0)> = (center_x + 5)) {// jika sasarannya betul track_update (); back_left (); // belok kanan tidur (rehat);} lain jika (track_x (backb, 0) (center_x-5)) {// jika sasaran berpusat track_update (); kembali (); // tidur terus (rehat);}} berhenti (); bip (); baling (); // tembak tidur (1.0); has_ball = 0; // peringatan saya melemparkan bola dan tidak memilikinya} start_b (); // kembali ke bola pelacakan tidur (1.0); // jangan buat apa-apa sehingga proses ini mati} batal cconnect () {create_connect (); create_full (); // untuk kawalan penuh sensor langkan create_power_led (0, 255);} // daya hijau ledvoid terputus () {berhenti (); // berhenti bergerak create_disconnect ();} batal back_away () {belakang (); tidur (jelas); berhenti ();} batal rotate_l () {create_spin_CCW (speeda); masa tidur); berhenti ();} kekosongan rotate_r () {create_spin_CW (speeda); masa tidur); stop ();} stop void () {create_drive (0, straight);} kekosongan belakang () {create_drive (back_s, straight);} siap kosong () {set_servo_position (lengan, a_down);} semak kekosongan () {set_servo_position (cam, track_c);} kekosongan jauh () {set_servo_position (cam, track_f);} langkan kosong () {set_servo_position (lengan, tertangkap);} balingan batal () {int a; untuk (a = 50; a> = 30; a- = 1) {// bersiaplah set_servo_position (lengan, a);} set_servo_position (lengan, pukulan);} batal ambil () {int a; untuk (a = 0; a <= tahan; a + = 1) {// angkat lengan dengan lancar set_servo_position (lengan, a);}} batal ke bawah () {set_servo_position (cam, track_d);} batal cari () {set_servo_position (cam, track_find);} batal start_a () {pida = start_process (menghindari ());} batal start_b () {pidb = start_process (track_ball ());} batal start_c () {pidc = start_process (find_basket ());} batal kill (int pid) {CREATE_BUSY; // tunggu proses membuat semasa selesai, dan ambil prioriti kill_process (pid); CREATE_FREE; // saya sudah selesai berhenti ();} batal mengelakkan_kiri () {kill (pidb); // hentikan semua yang lain membunuh (pidc); ledge (); // angkat cakar supaya tidak terperangkap di meja back_away (); // undur rotate_l (); // putar jauh dari rintangan siap (); // letakkan cakar kembali ke bawah jika (have_ball) {// jika saya mempunyai bola start_c ();} // mulakan penjejakan gol yang lain jika (! have_ball) {// jika saya tidak mempunyai bola start_b ();} // mulakan bola pelacakan} batal menghindari_kanan () {bunuh (pidb); bunuh (pidc); langkan (); jangan dekat(); putar_r (); siap (); if (has_ball) {start_c ();} lain jika (! have_ball) {start_b ();}} batal back_left () {create_drive_direct (back_f, back_sl);} void back_right () {create_drive_direct (back_sl, back_f);}

Langkah 6: Adakah Layak?

Kosnya ialah: Buat + bateri + dokumen = $ 260X starter kit (xbc, cam, bata LEGO, sensor) = $ 579PVC + cat + skru = kira-kira $ 20Jumlah kos = $ 859Saya sudah mempunyai kit pemula XBC dari Botball, jadi harganya bagi saya adalah kos Buat. Saya fikir ia berbaloi, dan yang terbaik adalah semua bahagian yang saya gunakan boleh digunakan semula, jika saya dapat membawa diri untuk berpisah dari bot ini. Video ini menunjukkan mengelakkan rutin, di atas meja. Video ini menunjukkan robot menjaringkan 5 bola oren dalam satu gol. Saya hanya membantu mempercepat prosesnya, ia akan menjumpai bola 5 akhirnya dengan sendirinya.

Langkah 7: Kesimpulannya

Hasil akhirnya adalah robot yang dapat mengambil dan menjaringkan bola oren dalam satu gol dengan sendirinya.

Saya gemar mengusahakan projek ini. Semakin saya mengusahakan robot ini, saya semakin terpikat dengannya. Saya sekarang bercakap dengannya seolah-olah binatang peliharaan. Saya harap ini dapat membantu anda dalam projek seterusnya. Ada banyak orang yang perlu saya ucapkan terima kasih, tetapi terlalu banyak orang. Seperti Bernard dari Chartres dengan begitu elegan menyatakan: "kita seperti kerdil di bahu raksasa, sehingga kita dapat melihat lebih banyak daripada mereka, dan benda-benda pada jarak yang lebih jauh, bukan berdasarkan ketajaman penglihatan di pihak kita, atau fizikal apa pun perbezaan, tetapi kerana kita terbawa tinggi dan dibesarkan oleh ukuran raksasa mereka."

Disyorkan: