Satura rādītājs:

Kā izveidot autonomu basketbola spēles robotu, izmantojot IRobot, izveidot kā pamatu: 7 soļi (ar attēliem)
Kā izveidot autonomu basketbola spēles robotu, izmantojot IRobot, izveidot kā pamatu: 7 soļi (ar attēliem)

Video: Kā izveidot autonomu basketbola spēles robotu, izmantojot IRobot, izveidot kā pamatu: 7 soļi (ar attēliem)

Video: Kā izveidot autonomu basketbola spēles robotu, izmantojot IRobot, izveidot kā pamatu: 7 soļi (ar attēliem)
Video: Stories of Hope & Recovery 2020 2024, Novembris
Anonim
Kā izveidot autonomu basketbola spēles robotu, izmantojot IRobot izveidi kā pamatu
Kā izveidot autonomu basketbola spēles robotu, izmantojot IRobot izveidi kā pamatu

Šis ir mans ieraksts izaicinājumam iRobot Create. Visa šī procesa grūtākā daļa man bija izlemt, ko robots darīs. Es gribēju demonstrēt lieliskās Create funkcijas, vienlaikus pievienojot robo noskaņu. Visas manas idejas šķita vai nu garlaicīgas, bet noderīgas, vai arī foršas un nepraktiskas. Beigās uzvarēja forši un nepraktiski, un piedzima basketbola robots. Pēc ilgām pārdomām es sapratu, ka tas varētu būt praktiski. Pieņemsim, ka izmantojat oranžu papīru un visām jūsu atkritumu tvertnēm ir zaļas krāsas dēļi …

1. solis: Aquire Parts

Konkursa laika ierobežojuma dēļ lielākā daļa detaļu, ko izmantoju, bija "no plaukta". Izmantotās robota detaļas: Izveidot (x1)-no iRobot www.irobot.comXBC V.3.0 (x1)-no Botball www.botball.orgCreate-Roomba kabelis (x1)-no Botball www.botball.orgServo (x2)-no Botball www.botball.orgAskais attāluma meklētājs (x1)-no Botball www.botball.org Dažādi LEGO klucīši-no LEGO www.lego.com 6-32 mašīnas skrūves (x4)-no McMaster www.mcmaster.com "Izveidotas" izmantotas robotu detaļas: 3/8 "bieza presēta PVC loksne - šī lieta ir satriecoša, bet es nevaru atcerēties, no kurienes es to ieguvu, bet tas ir tieši tāpat kā šī lieta https://www.lynxmotion.com/Category.aspx? CategoryID = 62Citas detaļas: Oranža "POOF" bumba - no WalMart

2. darbība: izveidojiet unikālo daļu

Izveidojiet unikālo daļu
Izveidojiet unikālo daļu

Vienīgā daļa, kas man bija jāizgatavo, bija plāksne, kas pieskrūvēta izveidei un piedāvāja LEGO atstarpes. Attālums starp LEGO ķieģeļu caurumiem ir 8 mm, bet, lai ietaupītu laiku, es veicu dubultu atstarpi. Ekstrudētais PVC ir viegls darbs. To var sagriezt ar komunālo nazi, bet tas ir stingrs un izturīgs. Es bieži paņemu robotu pie šīs plāksnes, un man vēl nav radušās problēmas.

1. darbība: izgrieziet lapu līdz 3,5 "x 9,5", to varat sagriezt ar nazi. 2. solis: urbiet caurumus izveidošanas skrūvēm. Izveidošanas skrūves veido lodziņu, kura izmērs ir 2 un 5/8 "līdz 8 un 5/8". 3. solis: urbiet LEGO ķieģeļu atstarpes. Izmantojiet 3/16 collu urbi un es ievietoju caurumus 16 mm attālumā viens no otra. Padoms. Es ievietoju lapu CAD programmā, izdrukāju to pilnā izmērā un pielīmēju pie loksnes. Tad es to izmantoju kā norādījumu griešanai un urbšana.

3. darbība: robota salikšana

Robota salikšana
Robota salikšana
Robota salikšana
Robota salikšana
Robota salikšana
Robota salikšana

Man patīk būvēt lietas pēc iespējas vienkāršāk, tādā veidā, kad tās lec no galda, jums nav tik daudz jāpārbūvē!

1. Pieskrūvējiet jaunizveidoto plāksni izveides augšpusē. 2. Izveidojiet roku, lai satvertu bumbu. 3. Izveidojiet roku kameras turēšanai. 4. Izveidojiet stiprinājumu tālmēram.

4. solis: robota programmēšana

Es nolēmu izmantot XBC kā savu kontrolieri galvenokārt tāpēc, ka tajā ir iebūvēta krāsu izsekošana. Tā kā es nolēmu ar XBC kā operācijas smadzenēm, es ieprogrammēju savu robotu interaktīvajā C vai, kā es to saucu par IC. IC var izmantot bez maksas, un to var lejupielādēt vietnē www.botball.org. IC ir ļoti līdzīgs C ++, taču tajā ir vairākas iebūvētas bibliotēkas. Kā izrādās, Deivids Millers no Oklahomas universitātes ir izveidojis Create bibliotēku, kuru var lejupielādēt no viņa lapas vietnē https://i-borg.engr.ou.edu/~dmiller/create/. Izmantojot šos resursus un izveidošanas rokasgrāmatas, es biju gatavs programmēt. Bet nākamais lielais izaicinājums bija tas, ko es gribēju, lai tas dara? Es gribēju robotu, kurš varētu paņemt oranžas bumbiņas un iemest tās grozā. Mans mērķis izklausījās vienkāršs un, iespējams, varēja būt vienkāršs, taču, jo vairāk es iedziļinājos tajā, ko varēja izveidot, jo vairāk es vēlējos, lai tas tiktu darīts. Mans galīgais saraksts izskatījās šādi: 1. Atrodiet oranžu bumbiņu2. Paņemiet oranžu bumbiņu3. Atrodiet grozu 4. Ievietojiet bumbu grozā Izvairīšanās no objektiem 2. Neko nenokrītot (piemēram, no galda) 3. Akumulatora uzlādes noteikšana un dokstacija ar mājas bāzi, kad zems, un tas viss ir pilnīgi autonoms, kas nozīmē, ka tas viss ir ieprogrammēts.

5. darbība: kods

Tas var būt netīrs, bet tas darbojas.#Izmantojiet "createlib.ic" #use "xbccamlib.ic" #define cam 0 // kameras servo ports#definējiet roku 3 // roku servo portu#define et (analog (0)) // et port/*Jāizveido arī izveides kabelis. Strāvas ligzda, trīsdakšu spraudnis 8. pieslēgvietā un UX ar iezīmi JP 28 (blakus USB portam) ar U pret kameru*/ #define c_down 5 // kameras servo uz leju#define a_down 17 // roku servo uz leju#definēt turēšanu 50 // servo turēšanas bumbu#definēt noķerto 27 // roku servo pozīciju, lai izvairītos no iekļūšanas galdā#define shoot 150 // servo mest bumbu#definēt trasi_c 25 // kameras servo celiņš aizvērt pozīciju#definēt celiņu_f 45 // kameras servo celiņu tālu pozīciju#definēt centru 120 // kameras redzes centru 0 // oranžas bumbiņas kanāls#definēt bumbu_x (trase_x (bumba, 0)) // x bumbas koordināta#definēt bumbu_y (celiņš_y (bumba, 0)) // bumbiņas y koordināta#definēt lēnu 100 // ātrums lēni motors#definē ātru 175 // ātra motora ātrums#definē skaidru 0,2 // s atkāpties no šķēršļiem#definēt laiku 0.5 //1.0 ir 90 grādu pagrieziens pa labi#noteikt atpūtu 0.05 // laiks gulēt, izsekojot lāses#definēt speeda 175 // izvairīšanās ātrums#definēt atpakaļ_s -200 // ātrums līdz atkāpties no sasistā objekta#definēt taisni 32767 // braukt taisnā līnijā#define backb 2 // kanāla pamatnes galvenā krāsa#definēt kvadrātu 1 // aizmugurējās daļas akcenta krāsas kanāls#define track_d 250 // kameras pozīcija izsekošanas mērķim# define track_find 70 // kameras pozīcija ilgstošai izsekošanai#define reverse 2.25 // miega laiks 180#define back_f -150 // atpakaļ ātrs ātrums#define back_sl -125 // atpakaļ lēns ātrums#define center_x 178 // true x center of cam#define center_y 146 // true y camint pida; // izvairīties no processint pidb; // izsekot processint pidc; // score processint have_ball = 0; // stāsta, kurai funkcijai mēs esam rēķins main () {long ch; enable_servos (); // enable servos init_camera (); // start camera cconnect (); // connect to create with full control start_a (); // start izvairīties funkcija start_b (); // start ball_tracking function while (1) {if (r_button () || gc_ldrop || gc_rdrop) {// ja pacelts vai r pleca poga nogalina (pida); nogalināt (pidb); nogalināt (pidc); atspējot_servos (); atvienot (); break;} create_battery_charge (); display_clear (); printf ("maksa = %l / n", gc_battery_charge); if (gc_battery_charge <1200l || b_button ()) {kill (pida); nogalināt (pidb); nogalināt (pidc); mest (); have_ball = 0; create_demo (1); kamēr (b_button ()); while (gc_battery_charge <2800l &&! b_button ()) {create_battery_charge (); display_clear (); printf ("maksa = %l / n", gc_battery_charge); miega režīms (1.0);} cconnect (); atpakaļ (); gulēt (2,0); start_a (); start_b ();}}} void izvairīties () {while (1) {// atkārtot uz visiem laikiem create_sensor_update (); // atjaunināt visas sensora vērtības // create_drive (speeda, straight); if (gc_lbump == 1) {// kreisais trieciens izvairīties_pareizi ();} // pagriežas pa labi, lai izvairītos no cita, ja (gc_rbump == 1) {// labais trieciens vältīties_pa kreisi ();} // pagriežas pa kreisi, lai izvairītos no cita, ja (gc_lfcliff == 1) {// kreisā priekšējā klints izvairīšanās_taisnība ();} cits if (gc_rfcliff == 1) {// labā priekšējā klints izvairīšanās_pa kreisi ();} cits if (gc_lcliff == 1) {// kreisā klints izvairīšanās_taisnība ();} cits if (gc_rcliff == 1) {// labā klints izvairīšanās_pa kreisi ();}}} void track_ball () {nogalināt (pidc); while (! have_ball) {// atkārtojiet, līdz iegūstat bumbu track_update (); far (); // sagatavo kameru gatavam (); // nosaka roku, kamēr (et <255) {// līdz maksimālā vērtība notiek, kad bumba tiek noķerta track_update (); // atjauniniet kameras attēlu, ja (ball_x <= (centrs-5)) {// ja bumba tiek atstāta track_update (); create_drive_direct (lēns, ātrs); // pagriezieties pa kreisi gulēt (atpūsties);} else if (ball_x> = (centrs+5)) {// ja bumba ir pareiza track_update (); create_drive_direct (ātri, lēni); // pagriezties pa labi (atpūsties);} else if (ball_x (center-5)) {// ja bumba ir centrēta track_update (); create_drive_straight (ātri); // iet taisni gulēt (atpūsties);}} paķert (); // paķert bumbas pīkstienu (); // padarīt troksni stop (); // pārtraukt braukšanu have_ball = 1; // atzīmēt Man ir bumba} start_c (); // atrast grozu gulēt (1.0); // gulēt tā, lai es neko nedarītu, kad mani nogalina} void find_basket () {kill (pidb); // nogalināt bumbas izsekošanas procesu atrast (); // ievietot kameru track_set_minarea (1000); // aizmugurējais dēlis ir liels, tāpēc meklējiet tikai lielas lāses, kamēr (have_ball) {// kamēr man ir bumba track_update (); while (track_x (backb, 0) = (center_x+20)) {// kamēr nav centrēts track_update (); if (track_x (backb, 0)> = (center_x+20)) {// ja aizmugurējais dēlis ir atstāts track_update (); create_spin_CCW (100);} // pagriezieties pa kreisi, ja (track_x (backb, 0) <= (center_x-20)) {// ja aizmugurējais dēlis ir pareizs track_update (); create_spin_CW (300-center_x);} // nogriezieties pa labi, palēninot, tuvojoties centram} stop (); while (track_size (backb, 0) <= (6000)) {// kamēr mērķis ir mazāks par 6000 pikseļiem track_update (); if (track_x (backb, 0) <= (center_x-5)) {// ja mērķis ir atstāts track_update (); create_drive_direct (lēns, ātrs); // pagriezieties pa kreisi gulēt (atpūsties);} else if (track_x (backb, 0)> = (center_x+5)) {// ja mērķis ir pareizs track_update (); create_drive_direct (ātri, lēni); // pagriezties pa labi (atpūsties);} else if (track_x (backb, 0) (center_x-5)) {// ja mērķis ir centrā track_update (); create_drive_straight (ātri); // iet taisni gulēt (atpūsties);}} stop (); // create_drive_straight (ātri); // mazliet pietuvojies // aizmigt (1.0); // stop (); gulēt (1,0); create_spin_CW (speeda); // spin right sleep (reverse); // pietiekami ilgi gulēt, lai apstātos par 180 pagriezieniem (); uz leju (); // nolieciet kameru, lai izsekotu aizmugurējo gulēšanu (1.0); track_set_minarea (200); // izmantojiet mazāku minimālo izmēru, jo mēs esam uz to norādīti un tuvosimies, kamēr (track_y (backb, 0)> = (center_y-140)) {// kamēr mērķis ir mazāks par y koordināta track_update (); if (track_x (backb, 0) <= (center_x-5)) {// ja mērķis ir atstāts track_update (); back_right (); // pagriezieties pa kreisi gulēt (atpūsties);} cits if (track_x (backb, 0)> = (center_x+5)) {// ja mērķis ir pareizais track_update (); back_left (); // pagriezties pa labi gulēt (atpūsties);} else if (track_x (backb, 0) (center_x-5)) {// ja mērķis ir centrā track_update (); atpakaļ (); // iet taisni gulēt (atpūsties);}} apstāties (); pīkstiens (); mest (); // šaut miegu (1.0); have_ball = 0; // atgādinājums Es iemetu bumbu un man tās nav} start_b (); // atpakaļ uz bumbas izsekošanas miegu (1.0); // nedariet neko, kamēr šis process nenomirst} void cconnect () {create_connect (); create_full (); // lai pilnībā kontrolētu dzegas sensorus create_power_led (0, 255);} // zaļās strāvas ledvoid atvienot () {stop (); // pārtraukt kustību create_disconnect ();} void back_away () {back (); gulēt (skaidrs); stop ();} void rotate_l () {create_spin_CCW (speeda); miega laiks); stop ();} void rotate_r () {create_spin_CW (speeda); miega laiks); stop ();} void stop () {create_drive (0, straight);} void back () {create_drive (back_s, straight);} void ready () {set_servo_position (arm, a_down);} void check () {set_servo_position (cam, track_c);} void far () {set_servo_position (cam, track_f);} void ledge () {set_servo_position (roka, noķerts);} void throws () {int a; par (a = 50; a> = 30; a- = 1) {// sagatavojieties set_servo_position (roka, a);} set_servo_position (roka, šaut);} void grab () {int a; par (a = 0; a <= turēt; a+= 1) {// vienmērīgi pacelt roku set_servo_position (roka, a);}} void down () {set_servo_position (cam, track_d);} void find () {set_servo_position (cam, track_find);} void start_a () {pida = start_process (izvairīties ());} void start_b () {pidb = start_process (track_ball ());} void start_c () {pidc = start_process (find_basket ());} void kill (int pid) {CREATE_BUSY; // pagaidiet pašreizējā izveides procesa pabeigšanu un dodiet prioritāti kill_process (pid); CREATE_FREE; // es esmu beidzis stop ();} void izvairieties_left () {nogalināt (pidb); // apturēt visu pārējo nogalināt (pidc); dzega (); // paņem nagu, lai tas netiktu aizķerts uz galda back_away (); // atkāpies rotate_l (); // pagriežas prom no šķēršļa gatavs (); // noliec nagu atpakaļ, ja (have_ball) {// ja man ir bumba start_c ();} // sākt vārtu izsekošanu citādi, ja (! have_ball) {// ja man nav bumbas start_b ();} // sākt bumbas izsekošanu} void izvairieties_pareizi () {nogalināt (pidb); nogalināt (pidc); dzega (); back_away (); rotēt_r (); gatavs (); if (have_ball) {start_c ();} else if (! have_ball) {start_b ();}} void back_left () {create_drive_direct (back_f, back_sl);} void back_right () {create_drive_direct (back_sl, back_f);}

6. solis: Vai tas bija tā vērts?

Izmaksas bija šādas: Izveidot + akumulatoru + doc = 260 ASV dolāri XBC sākuma komplekts (xbc, cam, LEGO klucīši, sensori) = 579 USD. PVC + krāsa + skrūves = aptuveni 20 USD Kopējās izmaksas = 859 USD. Man jau bija XBC sākuma komplekts no Botball, tāpēc izmaksas man bija Izveides izmaksas. Es domāju, ka tas bija tā vērts, un labākais ir tas, ka visas manis izmantotās detaļas ir atkārtoti izmantojamas, ja es varētu atteikties no šī robota. Šis video parāda, kā izvairīties no parastās rutīnas, uz galda virsmas. Šajā video redzams, kā robots gūst 5 oranžas bumbiņas vārtos. Es tikai palīdzēju paātrināt procesu, galu galā tā pati būtu atradusi bumbu 5.

7. solis. Secinājums

Gala rezultāts ir robots, kurš pats var uzņemt un iemest oranžas bumbiņas vārtos.

Man patika strādāt pie šī projekta. Jo vairāk strādāju pie šī robota, jo vairāk pieķēros tam. Tagad es ar to runāju tā, it kā tas būtu mājdzīvnieks. Es ceru, ka tas jums palīdzēja nākamajā projektā. Ir daudz cilvēku, par kuriem man jāpateicas, bet ir pārāk daudz. Tāpat kā Bernards no Šartras tik eleganti paziņoja: "Mēs esam kā rūķi uz milžu pleciem, lai mēs varētu redzēt vairāk nekā viņi, un lietas lielākā attālumā, nevis pateicoties mūsu redzes asumam vai jebkuram fiziskam atšķirība, bet tāpēc, ka mūs nes augstu un paceļ viņu milzīgais izmērs."

Ieteicams: