Obsah:
- Krok 1: Díly Aquire
- Krok 2: Vytvořte jedinečnou část
- Krok 3: Sestavení robota
- Krok 4: Programování robota
- Krok 5: Kód
- Krok 6: Stálo to za to?
- Krok 7: Závěr
Video: Jak vytvořit autonomního robota hrajícího basketbal pomocí IRobota Vytvořit jako základ: 7 kroků (s obrázky)
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:24
Toto je můj příspěvek k výzvě iRobot Create. Nejtěžší na celém tomto procesu pro mě bylo rozhodnout, co bude robot dělat. Chtěl jsem předvést skvělé funkce Create a zároveň přidat trochu robo vkusu. Zdálo se, že všechny mé nápady buď spadají do kategorie nudných, ale užitečných, nebo chladných a nepraktických. Nakonec zvítězilo chladné a nepraktické a narodil se robot na hraní basketbalu. Po nějaké úvaze jsem si uvědomil, že by to mohlo být praktické. Předpokládejme, že používáte oranžový papír a že všechny vaše popelnice mají zelené zadní desky…
Krok 1: Díly Aquire
Vzhledem k časovému limitu soutěže byla většina dílů, které jsem použil, „mimo regál“. Použité části „zásoby“robota: Vytvořit (x1)-z iRobot www.irobot.comXBC V.3.0 (x1)-z Botball www.botball.orgVytvořit kabel Roomba (x1)-z Botball www.botball.orgServo (x2)-od společnosti Botball www.botball.org Sharp rangefinder (x1)-od Botball www.botball.org Rozmanité kostky LEGO-od LEGO www.lego.com6-32 šrouby stroje (x4)-od McMaster www.mcmaster.com Použité díly robota "vytvořené": extrudovaný PVC plech o tloušťce 3/8 " - tyhle věci jsou úžasné, ale nevzpomínám si, odkud jsem je vzal, ale jsou stejné jako tyhle věci https://www.lynxmotion.com/Category.aspx? CategoryID = 62Ostatní díly: Oranžový míč „POOF“- od koše na koš WalMartBasketball - ze „zadní desky“LowesGreen - extra PVC natřené jasně zelenou barvou
Krok 2: Vytvořte jedinečnou část
Jediná část, kterou jsem musel vyrobit, byla deska, která byla přišroubována k Create a nabídla rozestupy LEGO. Rozteč otvorů v kostkách LEGO je od sebe vzdálena 8 mm, ale pro úsporu času jsem udělal dvojité rozteče. Extrudované PVC je hračka pro práci. Lze jej řezat nožem, ale je pevný a pevný. U této desky často vyzvedávám robota a zatím jsem neměl problém.
Krok 1: Odřízněte list na 3,5 "x 9,5", můžete jej rozříznout nástrojovým nožem. Krok 2: Vyvrtejte otvory pro šrouby pro vytvoření. Vytvořené šrouby vytvoří krabici o rozměrech 2 a 5/8 "o 8 a 5/8". Krok 3: Vyvrtejte díry od sebe od LEGO kostek. Použijte vrták 3/16 "a otvory jsem rozmístil 16 mm od sebe. Tip: List jsem rozložil do programu CAD, vytiskl jej v plné velikosti a nalepil na pásku. Pak jsem to použil jako vodítko pro řezání a vrtání.
Krok 3: Sestavení robota
Baví mě stavět věci co nejjednodušeji, takže když seskočí ze stolu, nemusíte tolik přestavovat!
1. Přišroubujte nově vytvořenou desku k horní části přístroje Create 2. Postavte rameno, abyste chytili míč 3. Postavte rameno pro držení fotoaparátu 4. Vytvořte držák pro dálkoměr 5. Namontujte XBC a připojte všechny kabely
Krok 4: Programování robota
Rozhodl jsem se použít XBC jako svůj ovladač hlavně kvůli jeho vestavěnému sledování barev. Protože jsem se rozhodl s XBC jako mozkem operace, naprogramoval jsem svého robota v Interactive C, nebo jak tomu říkám IC. IC je zdarma k použití a lze jej stáhnout na www.botball.org. IC je velmi podobný C ++, ale má několik vestavěných knihoven. Jak se ukázalo, David Miller z University of Oklahoma napsal knihovnu pro Create, kterou lze stáhnout z jeho stránky na adrese https://i-borg.engr.ou.edu/~dmiller/create/. S těmito prostředky a manuály pro vytvoření jsem byl připraven k programování. Ale další velkou výzvou bylo, co jsem chtěl, aby to udělalo? Chtěl jsem robota, který by mohl jít a sebrat oranžové koule a dát je do koše. Můj cíl zněl jednoduše a pravděpodobně mohl být jednoduchý, ale čím víc jsem se zabýval tím, co stvoření dokázalo, tím víc jsem to chtěl dělat. Můj konečný seznam vypadal takto: 1. Najděte oranžovou kouli 2. Seberte oranžovou kouli 3. Najděte koš 4. Vložte míč do koše, zatímco 1. Vyhýbání se předmětům 2. Nespadnout z ničeho (jako ze stolu) 3. Detekce nabití baterie a dokování s domácí základnou, když je nízká, a to vše je zcela autonomní, což znamená, že je vše předprogramováno.
Krok 5: Kód
Může to být nepořádek, ale funguje to.#Použijte "createlib.ic" #use "xbccamlib.ic" #define cam 0 // port servopohonu kamery#definujte rameno 3 // port servopohonu#definujte et (analogový (0)) // et port/*Je také nutné zapojit kabel pro vytvoření. Napájecí konektor, 3kolíkovou zástrčku do portu 8 a zásuvku označenou UX do JP 28 (vedle portu USB) s U směrem k fotoaparátu*/ #define c_down 5 // vypnutí serva kamery#definovat a_down 17 // vypnutí servopohonu#definovat hold 50 // servo hold ball#definovat chycený 27 // poloha servopohonu, aby se nezachytil o stůl#definovat střílet 150 // servo házet míčem#definovat track_c 25 // poloha serva kamery zavřít pozici#definovat track_f 45 // poloha kamery servo sledovat vzdálenou pozici#definovat střed 120 // střed vidění kamery#definovat uspořádání 30 // track_y souřadnice, když je míč v drápu#definovat míč 0 // kanál oranžové koule#definujte ball_x (track_x (ball, 0)) // x souřadnice míče#definujte ball_y (track_y (ball, 0)) // y souřadnice míče#definujte pomalu 100 // rychlost pomalu motor#definujte rychle 175 // rychlost rychlého motoru#definujte vymazání 0,2 // s leep couvnout z překážek#definovat čas 0,5 //1,0 je otočení doprava o 90 stupňů#definovat odpočinek 0,05 // čas spát při sledování blobů#definovat speeda 175 // rychlost vyhýbání se zatáčce#definovat back_s -200 // rychlost couvejte od naraženého objektu#definujte rovně 32767 // jeďte rovně#definujte backb 2 // kanál hlavní barvy backboardu#definujte čtverec 1 // kanál akcentové barvy backboardu#definujte track_d 250 // pozice kamery pro sledování cíle# definovat track_find 70 // pozice kamery pro dlouhé sledování#definovat couvání 2,25 // doba spánku pro 180#definovat back_f -150 // zpět vysokou rychlost#definovat back_sl -125 // zpět pomalou rychlost#definovat center_x 178 // true x center z kamery#definovat center_y 146 // true y centrum camint pida; // vyhnout se processint pidb; // sledovat processint pidc; // skóre processint have_ball = 0; // říká, jaké funkci se vyhýbáme main () {long ch; enable_servos (); // povolit serva init_camera (); // spustit kameru cconnect (); // připojit k vytvoření s plným ovládáním start_a (); // spustit funkci vyhýbání se start_b (); // spustit funkci sledování míče během (1) {if (r_button () || gc_ldrop || gc_rdrop) {// při vyzvednutí nebo r ramenní tlačítko zabít (pida); zabít (pidb); zabít (pidc); disable_servos (); odpojit(); break;} create_battery_charge (); display_clear (); printf ("poplatek = %l / n", gc_battery_charge); if (gc_battery_charge <1200l || b_button ()) {kill (pida); zabít (pidb); zabít (pidc); házet(); have_ball = 0; create_demo (1); while (b_button ()); while (gc_battery_charge <2800l &&! b_button ()) {create_battery_charge (); display_clear (); printf ("poplatek = %l / n", gc_battery_charge); spánek (1.0);} cconnect (); zadní(); spánek (2,0); start_a (); start_b ();}}} void avoid () {while (1) {// navždy opakovat create_sensor_update (); // aktualizace všech hodnot senzoru // create_drive (speeda, straight); if (gc_lbump == 1) {// levá nerovnost avoid_right ();} // otočí se doprava, aby se vyhnula else if (gc_rbump == 1) {// pravá boule avoid_left ();}} // // otočí doleva, aby se vyhla jinému, pokud (gc_lfcliff == 1) {// levý přední útes avoid_right ();} else if (gc_rfcliff == 1) {// pravý přední útes avoid_left ();} else if (gc_lcliff == 1) {// levý útes avoid_right ();} else if (gc_rcliff == 1) {// pravý útes avoid_left ();}}}} neplatný track_ball () {kill (pidc); while (! have_ball) {// opakujte, dokud nezískáte míč track_update (); far (); // nastaví kameru připravenou (); // nastaví rameno, zatímco (et <255) {// dokud nedojde k maximální hodnotě, když je míč chycen track_update (); // aktualizace obrázku kamery, pokud (ball_x <= (střed-5)) {// pokud je míč ponechán track_update (); create_drive_direct (pomalý, rychlý); // odbočte doleva do spánku (odpočinek);} else if (ball_x> = (center+5)) {// pokud je míč vpravo track_update (); create_drive_direct (rychlý, pomalý); // odbočit vpravo spánek (odpočinek);} else if (ball_x (center-5)) {// pokud je míč vycentrován track_update (); create_drive_straight (fast); // jděte rovnou spát (odpočinek);}} grab (); // pípnutí míče (); // vypněte hluk (); // zastavte jízdu have_ball = 1; // poznamenejte si, že I have ball} start_c (); // find the basket sleep (1.0); // sleep so that I don't doing nothing when I are asked} void find_basket () {kill (pidb); // kill ball tracking tracking find (); // umístit kameru track_set_minarea (1000); // zadní deska je velká, takže hledejte pouze velké objekty bloby while (have_ball) {// zatímco já mám míč track_update (); while (track_x (backb, 0) = (center_x+20)) {// když není vystředěno track_update (); if (track_x (backb, 0)> = (center_x+20)) {// if the backboard is left track_update (); create_spin_CCW (100);} // odbočte doleva if (track_x (backb, 0) <= (center_x-20)) {// pokud je backboard vpravo track_update (); create_spin_CW (300-center_x);} // odbočení vpravo zpomalení, když se blíží střed} stop (); while (track_size (backb, 0) <= (6000)) {// while the target is less than 6000 pixels in size track_update (); if (track_x (backb, 0) <= (center_x-5)) {// pokud je cíl ponechán track_update (); create_drive_direct (pomalý, rychlý); // odbočte doleva do režimu spánku (odpočinek);} else if (track_x (backb, 0)> = (center_x+5)) {// pokud je cíl správný track_update (); create_drive_direct (rychlý, pomalý); // odbočit vpravo spánek (odpočinek);} else if (track_x (backb, 0) (center_x-5)) {// pokud je cíl vycentrován track_update (); create_drive_straight (fast); // jděte rovnou spát (odpočívat);}} stop (); // create_drive_straight (fast); // trochu se přiblížit //sleep(1.0); //stop(); spánek (1,0); create_spin_CW (speeda); // spánek pravý spánek (zpět); // spánek dostatečně dlouhý na zastavení o 180 otáček (); down (); // odloží kameru, aby sledovala režim spánku (1.0); track_set_minarea (200); // použijte menší min. velikost, protože jsme na ni zaměřeni a přiblížíme se while (track_y (backb, 0)> = (center_y-140)) {// zatímco cíl je menší než y souřadnice track_update (); if (track_x (backb, 0) <= (center_x-5)) {// pokud je cíl ponechán track_update (); back_right (); // odbočit doleva (odpočinek);} else if (track_x (backb, 0)> = (center_x+5)) {// pokud je cíl správný track_update (); back_left (); // odbočit vpravo spánek (odpočinek);} else if (track_x (backb, 0) (center_x-5)) {// pokud je cíl vycentrován track_update (); zpět (); // jít rovnou spát (odpočívat);}} stop (); pípnutí(); throw (); // střílet spánek (1.0); have_ball = 0; // připomenutí Hodil jsem míč a nemám ho} start_b (); // zpět do režimu spánku sledování míče (1.0); // nedělejte nic, dokud tento proces nezemře} neplatné cconnect () {create_connect (); create_full (); // pro plnou kontrolu senzorů římsy create_power_led (0, 255);} // zelená kontrolka napájení vyhnout se odpojení () {stop (); // zastavení pohybu create_disconnect ();} neplatné back_away () {zpět (); spánek (čistý); stop ();} void rotate_l () {create_spin_CCW (speeda); Čas spát); stop ();} void rotate_r () {create_spin_CW (speeda); Čas spát); 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 (arm, catch);} void throw () {int a; for (a = 50; a> = 30; a- = 1) {// připravte se set_servo_position (arm, a);} set_servo_position (arm, shoot);} void grab () {int a; for (a = 0; a <= hold; a+= 1) {// zvedněte rameno hladce set_servo_position (arm, a);}} void down () {set_servo_position (cam, track_d);} void find () {set_servo_position (cam, track_find);} void start_a () {pida = start_process (avoid ());} void start_b () {pidb = start_process (track_ball ());} void start_c () {pidc = start_process (find_basket ());} void kill (int pid) {CREATE_BUSY; // počkejte na dokončení aktuálního procesu vytváření a vezměte prioritu kill_process (pid); CREATE_FREE; // jsem hotový stop ();} void avoid_left () {kill (pidb); // zastavit vše ostatní kill (pidc); římsa (); // zvedněte dráp, aby se nezachytil o stůl back_away (); // couvejte rotate_l (); // otočte pryč od překážky ready (); // vložte dráp zpět dolů, pokud (have_ball) {// pokud mám míč start_c ();} // spustit sledování cíle jinak if (! have_ball) {// pokud nemám míč start_b ();} // spustit sledování míče} neplatné avoid_right () {kill (pidb); zabít (pidc); římsa(); vycouvat(); rotate_r (); připraven (); 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);}
Krok 6: Stálo to za to?
Náklady byly: Vytvořit + baterie + dokument = $ 260XBC startovací sada (xbc, kamera, LEGO kostky, senzory) = 579 $ PVC + barva + šrouby = asi 20 $ Celkové náklady = 859 $ Už jsem měl startovací sadu XBC od Botball, takže náklady pro mě byly náklady na Create. Myslím, že to stálo za to, a nejlepší na tom je, že všechny části, které jsem použil, jsou opakovaně použitelné, kdybych se mohl rozloučit s tímto robotem. Toto video ukazuje rutinu vyhýbání se, na desce stolu. Toto video ukazuje robota, který vstřelil 5 oranžových míčků v cíli. Pomohl jsem pouze zrychlit proces, nakonec by našel míč 5 sám.
Krok 7: Závěr
Konečným výsledkem je robot, který dokáže sám sebrat a vstřelit oranžové míče v cíli.
Rád jsem pracoval na tomto projektu. Čím více jsem na tomto robotu pracoval, tím více jsem se k němu připojoval. Teď s tím mluvím, jako by to byl domácí mazlíček. Doufám, že vám to pomohlo při dalším projektu. Je spousta lidí, kterým musím poděkovat, ale je jich příliš mnoho. Stejně jako Bernard z Chartres tak elegantně prohlásil: „Jsme jako trpaslíci na ramenou obrů, abychom viděli více než oni, a věci na větší vzdálenost, a to nikoli z důvodu ostrosti z naší strany, nebo z jakéhokoli fyzického hlediska. rozdíl, ale protože jsme neseni vysoko a zvedáni jejich obří velikostí. “
Doporučuje:
Visuino Jak používat tlačítko jako vstup k ovládání věcí, jako je LED: 6 kroků
Visuino Jak používat tlačítko jako vstup pro ovládání věcí jako LED: V tomto tutoriálu se naučíme, jak zapnout a vypnout LED pomocí jednoduchého tlačítka a Visuina. Podívejte se na ukázkové video
Robot Arduino se vzdáleností, směrem a stupněm otáčení (východ, západ, sever, jih) ovládaný hlasem pomocí modulu Bluetooth a autonomního pohybu robota .: 6 kroků
Robot Arduino se vzdáleností, směrem a stupněm otáčení (východ, západ, sever, jih) ovládaný hlasem pomocí modulu Bluetooth a pohybu autonomního robota: Tento návod vysvětluje, jak vyrobit robota Arduino, který lze přesouvat v požadovaném směru (vpřed, vzad (Vlevo, Vpravo, Východ, Západ, Sever, Jih) požadovaná vzdálenost v centimetrech pomocí hlasového příkazu. Robota lze také pohybovat autonomně
Jak používat Wiimote jako počítačovou myš pomocí svíček jako senzoru !!: 3 kroky
Jak používat Wiimote jako počítačovou myš pomocí svíček jako senzoru !!: Tato příručka vám ukáže, jak připojit Wii Remote (Wiimote) k počítači a používat jej jako myš
STARÝ TVRDÝ DISK JAKO PÁJECÍ ZÁKLAD: 3 kroky
STARÝ TVRDÝ DISK JAKO PÁJECÍ ZÁKLAD: Myšlenkou je mít pevnou a těžkou základnu pro soledring se vším, co při práci potřebujeme. Potřebujeme starý a nefunkční 3,5 'pevný disk. Také potřebujeme speciální šroubovák ve tvaru hvězdy pro šrouby pevného disku. Tady v Řecku jsem našel TB X 50, ale nemám
Jak vyrobit robota hrajícího na kytaru RockBand!: 15 kroků (s obrázky)
How To Make a RockBand Guitar Playing Robot !: Pro svůj první instruktabilní … Co mohu říci, miluji bubnování na setu rockbandu, ale jen zřídka mám někoho, kdo by se mnou hrál; možná potřebuji více přátel, ale z mého zdánlivě osamělého života (jk) vychází docela cool neřešitelné. Mám design