Мазмуну:

IRobotтун жардамы менен автономдуу баскетбол ойноочу роботту кантип түзүү керек: 7 кадам (сүрөттөр менен)
IRobotтун жардамы менен автономдуу баскетбол ойноочу роботту кантип түзүү керек: 7 кадам (сүрөттөр менен)

Video: IRobotтун жардамы менен автономдуу баскетбол ойноочу роботту кантип түзүү керек: 7 кадам (сүрөттөр менен)

Video: IRobotтун жардамы менен автономдуу баскетбол ойноочу роботту кантип түзүү керек: 7 кадам (сүрөттөр менен)
Video: Каныбек 2024, Ноябрь
Anonim
Негиз катары IRobotту колдонуу менен автономдуу баскетбол ойноочу роботту кантип жасоо керек
Негиз катары IRobotту колдонуу менен автономдуу баскетбол ойноочу роботту кантип жасоо керек

Бул iRobot Create чакырыгына менин киришим. Мен үчүн бул процесстин эң оор бөлүгү - роботтун эмне кылаарын чечүү. Мен Robo жөндөмүн кошуп, Createтин сонун өзгөчөлүктөрүн көрсөткүм келди. Менин бардык ойлорум кызыксыз, бирок пайдалуу, же салкын жана практикалык категорияга кирди окшойт. Акырында салкын жана практикалык жактан утуп, баскетбол ойноочу робот төрөлдү. Бир аз ойлонгондон кийин, бул практикалык болушу мүмкүн экенин түшүндүм. Сиз кызгылт сары түстөгү кагазды колдонуп жатканыңызды жана таштанды челектериңиздин баарында жашыл түстүү тактайлар бар дейли …

1 -кадам: Aquire бөлүктөрү

Сынактын убактысы чектелгендиктен, мен колдонгон бөлүктөрдүн көбү "текчеден" чыгып кеткен. Колдонулган "Сток" робот бөлүктөрү: Түзүү (x1)-iRobot www.irobot.com XBC V.3.0 (x1)-Ботболлуктан www.botball.orgCreate-Roomba кабели (x1)-Ботболдон www.botball.orgServo (x2)-Ботболдон www.botball.orgSharp диапазону (x1)-Ботболлуктан www.botball.org Ассорти LEGO кыштары-LEGO www.lego.comдон 6-32 машина бурамалары (x4)-Макмастерден www.mcmaster.com "Жаратылган" робот тетиктери колдонулган: 3/8 "калың экструзияланган ПВХ барагы - бул сонун, бирок аны кайдан алганым эсимде жок, бирок дал ушул нерсеге окшош https://www.lynxmotion.com/Category.aspx? CategoryID = 62 Башка бөлүктөр: Апельсин "POOF" шары - WalMartBasketball таштанды челегине карап - LowesGreen "backboard" дан - кошумча ПВХ ачык жашыл түскө боёлгон

2 -кадам: уникалдуу бөлүгүн түзүү

Уникалдуу бөлүктү түзүү
Уникалдуу бөлүктү түзүү

Мен ойлоп табышым керек болгон бир гана нерсе, түзүү үчүн бекитилген жана LEGO аралыгын сунуштаган табак болчу. LEGO кыш тешиктеринин аралыгы 8мм аралыкта, бирок мен убакытты үнөмдөө үчүн эки жолу боштук кылдым. Экструдталган ПВХ - бул шамал менен иштөө. Аны пайдалуу бычак менен кессе болот, бирок ал катуу жана бышык. Мен роботту көп учурда ушул табактан алып кетем жана азырынча эч кандай көйгөйүм жок.

1 -кадам: Баракты 3,5 "x 9,5" кылып кесиңиз, муну пайдалуу бычак менен кесип аласыз. 2 -кадам: бурамаларды түзүү үчүн тешиктерди бургулаңыз. Түзүүчү бурамалар 2 жана 5/8 "8 жана 5/8" болгон кутучаны түзөт. 3 -кадам: LEGO кирпичтен жасалган тешиктерди бургулаңыз. 3/16 дюймдук бургуңузду колдонуңуз, мен тешиктерди 16мм аралыкта жайгаштырдым. Кеңеш: Мен баракты CAD программасына коюп, толук көлөмдө басып чыгардым жана баракка скотч менен чаптадым. Андан кийин муну кесүү үчүн көрсөтмө катары колдондум. бургулоо.

3 -кадам: Роботту чогултуу

Роботту чогултуу
Роботту чогултуу
Роботту чогултуу
Роботту чогултуу
Роботту чогултуу
Роботту чогултуу

Мен мүмкүн болушунча жөнөкөй нерселерди куруудан ырахат алам, ошентип алар столдон секирип кетишкенде, кайра куруунун кажети жок!

1. Жаңы жасалган пластинканы Түзүүнүн үстүнө сайыңыз 2. Топту кармоо үчүн колуңузду жасаңыз 3. Камераны кармоо үчүн колуңузду куруңуз 4. Аралыктагы аралыкты аныктагычты орнотуңуз 5. XBCди орнотуңуз жана бардык кабелдерди туташтырыңыз.

4 -кадам: Роботту программалоо

Мен XBCди контроллерим катары колдонууну чечтим, анткени анын негизи түстүү көз салуу. Мен XBC менен операциянын мээси катары чечтим, мен роботумду Interactive Cде программаладым, же аны IC деп атайм. IC колдонуу акысыз жана www.botball.org сайтынан жүктөп алса болот. IC C ++ ге абдан окшош, бирок бир нече китепканаларда курулган. Белгилүү болгондой, Оклахома университетинен Дэвид Миллер Create үчүн китепкана жазган, аны https://i-borg.engr.ou.edu/~dmiller/create/ дарегинен көчүрүп алса болот. Ошол ресурстар жана түзүү үчүн колдонмолор менен мен программалоого даяр элем. Бирок кийинки чоң кыйынчылык мен эмне кылгым келди? Мен барып, апельсин түстүү шарларды чогултуп, себетке түшүрө турган роботту кааладым. Менин максатым жөнөкөй көрүндү, жана, балким, жөнөкөй эле болушу мүмкүн, бирок мен жараткан нерсеге канчалык көбүрөөк кирсем, ошончолук көп нерсени кылгым келди. Менин акыркы тизмем мындайча көрүндү: 1. Апельсин шарды табыңыз2. Апельсин шарды алыңыз3. Себетти табуу4. Топту себетке салыңыз1. Объектилерден качуу2. Эч нерседен жыгылбоо (стол сыяктуу) 3. Батарейканын зарядын аныктоо жана lowOh болгондо үй базасына кошулуу жана мунун баары толугу менен автономдуу, башкача айтканда, баары алдын ала программаланган.

5 -кадам: Код

Бул баш аламан болушу мүмкүн, бирок ал иштейт.#Use "createlib.ic" #use "xbccamlib.ic" #define cam 0 // камера серво порту#arm 3 аныктоо // arm servo port#define et (analog (0)) // et port/*Жаратуу кабелин да туташтырыш керек. Кубаттоочу уячаны, 8 -порттогу 3 тиштүү сайгычты жана UX деп белгиленген JP 28ге (USB порттун жанында) U менен камерага карай*/ #аныктоо c_down 5 // камера сервосу ылдый#a_down 17 аныктоо // кол сервосу ылдый#50 кармоо аныктоо // servo hold ball#кармоо 27 аныктоо // столго кармалып калбоо үчүн armo servo абалы#150 атып түшүрүү топту ыргытыңыз#track_c 25ти аныктаңыз // камеранын серво трегин жабыңыз#тректи_ф 45 // камеранын серво трегин алыскы абалды#борборду аныктаңыз 120 // камеранын көрүнүшүнүн борборун#аралыкты 30да аныктаңыз // топту тырмакта болгондо координатыңызды#топту аныктаңыз 0 // апельсин шарынын каналы#шарды аныктоо_x (трек_х (топ, 0)) // х топтун координаты#шарды аныктоо_y (трек_y (топ, 0)) // y шардын координаты#жай аныктоо 100 // жай ылдамдык мотор#тез аныктоо 175 // тез кыймылдаткычтын ылдамдыгы#анык 0.2 // с тоскоолдуктардан артка чегинүү#убакытты аныктоо 0.5 //1.0 -90 градус оңго бурулуш#эс алууну аныктоо 0.05 // уктоо убактысын белгилөө урунган нерседен артка кайтуу#түз 32767 аныктоо // түз сызыкта айдоо#белги аныктоо 2 // такта негизги түсүнүн каналы#квадрат 1 аныктоо // такта акцент түсүнүн каналы#тректи аныктоо_d 250 // максатка жетүү үчүн камеранын орду# track_find 70ти аныктоо // камеранын позициясын аныктоо#тескери 2.25 // 180 үчүн уктоо убактысы#back_f -150 // арткы ылдамдыкты аныктоо#back_sl -125 // арткы жай ылдамдык#center_x 178ди аныктоо // чыныгы x борбору of cam#define center_y 146 // true y center of camint pida; // качуу processint pidb; // track processint pidc; // score processint have_ball = 0; // кайсы функцияны колдонбой турганыбызды айтат main () {long ch; enable_servos (); // servos init_camera иштетүү (); // камераны баштоо cconnect (); // толук көзөмөл менен түзүү үчүн туташуу start_a (); // баштоо функциясынан баштоо start_b (); {if (r_button () || gc_ldrop || gc_rdrop) {// if picked or r ийн баскычы өлтүрүү (pida); өлтүрүү (pidb); өлтүрүү (pidc); disable_servos (); ажыратуу (); break;} create_battery_charge (); display_clear (); printf ("заряд = %l / n", gc_battery_charge); if (gc_battery_charge <1200l || b_button ()) {kill (pida); өлтүрүү (pidb); өлтүрүү (pidc); ыргытуу (); have_ball = 0; create_demo (1); while (b_button ()); while (gc_battery_charge <2800l &&! b_button ()) {create_battery_charge (); display_clear (); printf ("заряд = %l / n", gc_battery_charge); уйку (1.0);} cconnect (); артка (); уйку (2.0); баштоо(); start_b ();}}} void qoch () {while (1) {// түбөлүк кайталоо create_sensor_update (); // бардык сенсор маанилерин жаңыртуу // create_drive (speeda, straight); if (gc_lbump == 1) {// сол дөмпөк качуу_жөнүндө ();} // башкага жол бербөө үчүн оңго бурулат gc_lfcliff == 1) {// сол алдыңкы жардан качуу_берүү ();} башка, эгерде (gc_rfcliff == 1) {// оң алдыңкы жардан качуу_солдон ();} башка болсо (gc_lcliff == 1) {// сол жардан качуу_дан оң ();} else if (gc_rcliff == 1) {// оң жардан качуу_солдон ();}}} void track_ball () {kill (pidc); while (! have_ball) {// ball track_update () алынганга чейин кайталаңыз; far (); // камераны даяр кылат) (//; center-5)) {// эгер топ калды track_update (); create_drive_direct (жай, тез); // солго уйку (эс алуу);} башка if (ball_x> = (борбору+5)) {// топ туура болсо track_update (); create_drive_direct (тез, жай); // оңго уйку (эс алуу);} if if (ball_x (борбору-5)) {// эгер топ борборлоштурулган болсо track_update (); create_drive_straight (тез); // түз уктоо (эс алуу);}} кармоо (); // топтун бипин алуу (); // ызы -чууну токтотуу (); // машинаны токтотуу have_ball = 1; // Менде топ} start_c (); // себеттин уйкусун тап (1.0); // уктап ал, мен өлгөндө эч нерсе кылбайм} void find_basket () {өлтүрүү (pidb); // топту көзөмөлдөө процессин өлтүрүү find (); // камераны орнотуу track_set_minarea (1000); // арткы такта чоң, андыктан чоң барактарды издеп жатканда (have_ball) {// менде track_update (); while (track_x (backb, 0) = (center_x+20)) {// while centered track_update (); if (track_x (backb, 0)> = (center_x+20)) {// backboard track_update калганда (); create_spin_CCW (100);} // эгер солго бурулса (track_x (backb, 0) <= (center_x-20)) {// backboard туура track_update () болсо; create_spin_CW (300-center_x);} // борборго жакындаганда жайлап жай оңго буру} stop (); while (track_size (backb, 0) <= (6000)) {// максат 6_000 пикселден аз track_update (); if (track_x (backb, 0) <= (center_x-5)) {// эгер максат track_update калтырылса (); create_drive_direct (жай, тез); // солго уйку (эс алуу);} else if (track_x (backb, 0)> = (center_x+5)) {// эгер максат туура болсо track_update (); create_drive_direct (тез, жай); // оңго уйку (эс алуу);} башка болсо (track_x (backb, 0) (center_x-5)) {// эгер максат максаттуу болсо track_update (); create_drive_straight (тез); // түз уйку (эс алуу);}} токтоо (); // create_drive_straight (тез); // бир аз жакындагыла // уйку (1.0); // токтотуу (); уйку (1.0); create_spin_CW (speeda); // туура уйку (артка); // 180 бурулуш үчүн жетиштүү көп уктоо (); down (); // backboard уйкусун көзөмөлдөө үчүн камераны коюңуз (1.0); track_set_minarea (200); // кичине кичине өлчөмдү колдонуңуз, анткени биз аны көрсөтүп жатабыз жана жакыныраак болобуз (track_y (backb, 0)> = (center_y-140)) {// бутага караганда азыраак y координаты track_update (); if (track_x (backb, 0) <= (center_x-5)) {// эгер максат track_update калтырылса (); back_right (); // солго уйку (эс алуу);} else if (track_x (backb, 0)> = (center_x+5)) {// эгер максат туура болсо track_update (); back_left (); // оңго уйку (эс алуу);} if if (track_x (backb, 0) (center_x-5)) {// эгер максат максаттуу болсо track_update (); кайра (); // түз уйку (эс алуу);}} токтотуу (); бип (); ыргыт (); // атуу уйку (1.0); have_ball = 0; // эскертүү мен топту ыргыттым жана ал жок} start_b (); // топту көзөмөлдөө уйкусуна кайтуу (1.0); // бул процесс өлмөйүнчө эч нерсе кылбоо} void cconnect () {create_connect (); create_full (); // чыканак сенсорлорун толук көзөмөлдөө үчүн create_power_led (0, 255);} // жашыл энергия ledvoid ажыратуу () {токтотуу (); // жылууну токтотуу create_disconnect ();} void back_away () {артка (); уйку (тунук); stop ();} void rotate_l () {create_spin_CCW (speeda); уйку (убакыт); stop ();} void rotate_r () {create_spin_CW (speeda); уйку (убакыт); stop ();} void stop () {create_drive (0, түз);} void back () {create_drive (back_s, straight);} void ready () {set_servo_position (arm, a_down);} жараксыз текшерүү () {set_servo_position; for (a = 50; a> = 30; a- = 1) {// set_servo_position (arm, a);} set_servo_position (кол, атуу);} void grab () {int a; үчүн (a = 0; а <= кармоо; а+= 1) {// колду көтөрүү 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 (качуу ());} void start_b () {pidb = start_process (track_ball ());} void start_c () {pidc = start_process (find_basket ());} void kill (int pid) {CREATE_BUSY; // учурдагы түзүү процессинин бүтүшүн күтүп, kill_process (pid) приоритетин алуу; CREATE_FREE; // мен бүттүм токтотуу ();} void качуу_башка () {өлтүрүү (pidb); // башка бардык нерсени токтотуу (pidc); карма {// эгер менде топ бар болсо start_c ();} // башкага көз салууну башта {өлтүрүү (pidb); өлтүрүү (pidc); карыш (); back_away (); rotate_r (); даяр (); 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 -кадам: Бул татыктуу беле?

Чыгымдар: + Батарея + doc = $ 260XBC баштоочу комплект (xbc, cam, LEGO кыштары, сенсорлор) = $ 579PVC + боёк + бурамалар = болжол менен 20 $ Жалпы наркы = 859 $ Мен буга чейин Ботболлдон XBC старт -комплектине ээ болчумун мен үчүн бул чыгымдын баасы эле. Менимче, бул татыктуу болчу, жана эң жакшы жери, мен колдонгон бөлүктөрдүн баары кайра колдонулушу мүмкүн, эгерде мен өзүмдү ушул боттон ажыратып алсам., столдун үстүндө. Бул видеодо робот дарбазага 5 апельсин топ киргизгени көрсөтүлгөн. Мен процессти тездетүүгө гана жардам бергем, ал 5 -топту акыры өз алдынча табмак.

7 -кадам: Жыйынтык

Акыркы жыйынтык - робот, апельсин топторду терип, гол киргизе алат.

Мага бул долбоордун үстүндө иштөө жакты. Бул роботтун үстүндө канчалык көп иштесем, ошончолук ага байланып калдым. Мен азыр аны үй жаныбары сыяктуу сүйлөшөм. Бул сизге кийинки долбооруңузга жардам берди деп үмүттөнөм. Мен ыраазычылык билдиришим керек болгон адамдар көп, бирок өтө көп. Бернард Чартрес сыяктуу абдан жарашыктуу түрдө мындай деп айткан: "Биз дөөлөрдүн ийиндериндеги карликтерге окшошпуз, ошондуктан биз алардан да, нерселерди дагы алысыраакта көрө алабыз, биздин көзүбүздүн же физикалык нерселерибиздин кесепетинен эмес. айырмачылык, бирок биз бийик көтөрүлүп, алардын чоң өлчөмү менен көтөрүлгөндүктөн ".

Сунушталууда: