Мазмұны:

IRobot көмегімен автономды баскетбол ойнайтын роботты қалай жасауға болады: 7 қадам (суреттермен)
IRobot көмегімен автономды баскетбол ойнайтын роботты қалай жасауға болады: 7 қадам (суреттермен)

Бейне: IRobot көмегімен автономды баскетбол ойнайтын роботты қалай жасауға болады: 7 қадам (суреттермен)

Бейне: IRobot көмегімен автономды баскетбол ойнайтын роботты қалай жасауға болады: 7 қадам (суреттермен)
Бейне: Лайфхак для Xiaomi робот пылесос замена щетки Roomba, влажная уборка HEPA фильтр 2024, Шілде
Anonim
IRobot негізі ретінде автономды баскетбол ойнайтын роботты қалай жасауға болады
IRobot негізі ретінде автономды баскетбол ойнайтын роботты қалай жасауға болады

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

1 -қадам: Aquire бөлшектері

Байқаудың уақыты шектеулі болғандықтан, мен қолданған бөлшектердің көпшілігі «сөреден» шықты. Қолданылатын «қор» робот бөлшектері: Жасаңыз (x1)-iRobot сайтынан www.irobot.comXBC 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)-McMaster www.mcmaster.com «Жасалған» робот бөлшектері: 3/8 дюймдік қалың поливинилхлоридті парақ - бұл керемет, бірақ мен оны қайдан алғаным есімде жоқ, бірақ дәл осы зат сияқты https://www.lynxmotion.com/Category.aspx? CategoryID = 62 Басқа бөліктер: Қызғылт сары «POOF» доп - WalMartBasketball допты қоқыс жәшігінен - LowesGreen «тақтасынан» - қосымша ПВХ боялған ашық жасыл түске боялған

2 -қадам: Бірегей бөлікті жасаңыз

Бірегей бөлікті жасаңыз
Бірегей бөлікті жасаңыз

Мен жасауым керек жалғыз нәрсе - бұл LEGO аралығын құруға бекітілген пластина. LEGO кірпіштен жасалған тесіктердің арасы 8 мм қашықтықта, бірақ мен уақытты үнемдеу үшін екі рет аралық жасадым. Экструдталған ПВХ - бұл желмен жұмыс істеу. Оны қызметтік пышақпен кесуге болады, бірақ ол берік және берік. Мен роботты осы тақтайшадан жиі аламын, менде әлі проблема болған жоқ.

1 -қадам: парақты 3,5 «x 9,5» етіп кесіңіз, оны қызметтік пышақпен кесуге болады. 2 -қадам: бұрандалар үшін тесіктерді бұрғылаңыз. Жасайтын бұрандалар 2 және 5/8 дюйм 8 және 5/8 дюймдік қорап жасайды. 3 -қадам: LEGO кірпіш аралық тесіктерді бұрғылаңыз. 3/16 дюймдік бұрғылауды қолданыңыз, мен тесіктерді бір -бірінен 16 мм қашықтықта орналастырдым. Кеңес: Мен парақты САПР бағдарламасында орналастырдым, оны толық көлемде басып шығардым және параққа жапсырдым. Содан кейін мен мұны кесу үшін нұсқаулық ретінде қолдандым. бұрғылау.

3 -қадам: роботты құрастыру

Роботты құрастыру
Роботты құрастыру
Роботты құрастыру
Роботты құрастыру
Роботты құрастыру
Роботты құрастыру

Мен заттарды мүмкіндігінше қарапайым түрде салғанды ұнатамын, осылайша олар үстелден секіргенде сізге көп нәрсені қалпына келтірудің қажеті жоқ!

1. Жаңадан жасалған пластинаны Жасаудың жоғарғы жағына бұраңыз 2. Допты алу үшін қолды жасаңыз 3. Камераны ұстайтын қолды жасаңыз 4. Қашықтықты анықтайтын қондырғы жасаңыз 5. XBC орнатыңыз және барлық кабельдерді қосыңыз.

4 -қадам: роботты бағдарламалау

Мен XBC -ді контроллер ретінде пайдалануды шештім, себебі оның түс бақылауында. Мен XBC -ті операцияның миы ретінде шештім, мен роботты Интерактивті С -те немесе оны IC деп атаймын. IC пайдалану тегін және оны www.botball.org сайтынан жүктеуге болады. IC C ++ тіліне өте ұқсас, бірақ бірнеше кітапханаларда салынған. Белгілі болғандай, Оклахома Университетінің қызметкері Дэвид Миллер «https://i-borg.engr.ou.edu/~dmiller/create/» бетінде жүктеуге болатын «Create» кітапханасын жазды. Осы ресурстар мен құру бойынша нұсқаулықтармен мен бағдарламалауға дайын болдым. Бірақ келесі үлкен сынақ мен не істегім келді? Маған робот керек еді, ол қызғылт сары шарларды алып, оларды себетке салады. Менің мақсатым қарапайым болып көрінді, мүмкін қарапайым болар еді, бірақ мен жасай алатын нәрсеге қаншалықты көп үңілген сайын, мен соншалықты көп нәрсені қалаймын. Менің соңғы тізімім келесідей болды: 1. Қызғылт сары допты табыңыз2. Қызғылт сары допты алыңыз 3. Себетті табыңыз4. Допты себетке салыңыз1. Объектілерден аулақ болу2. Ештеңеден түспеу (үстел сияқты) 3. Аккумулятордың зарядын анықтау және төмен жұмыс кезінде үй базасына қондыру, және мұның бәрі толығымен автономды, яғни бәрі алдын ала бағдарламаланған.

5 -қадам: код

Бұл тәртіпсіз болуы мүмкін, бірақ ол жұмыс істейді.#«» Createlib.ic «пайдаланыңыз // et port/*Жасалатын кабельді де қосу керек. Қуат ұясы, 8 -ші портқа 3 бұрандалы штепсель және UP деп белгіленген JP 28 -ге (USB портының жанында) U -мен камераға бағытталған*/ #c_down 5 анықтаңыз // камера серво төмен#a_down 17 анықтаңыз // қол серво төмен#50 ұстап тұру анықтаңыз // серво ұстау доп#ұсталған 27 27 анықтаңыз // үстелге түсіп қалмау үшін қол серво позициясы#150 түсірілім анықтаңыз доп лақтыру#трек_c 25 анықтау // камера серво трек жабық позиция#трек_f 45 // камера серво трек алыс орналасу#орталық анықтау 120 // камера көру ортасы#диапазон 30 анықтау 0 // апельсин шарының арнасы#шарды анықтау_x (трек_x (доп, 0)) // x шардың координаты#допты анықтау_y (трек_y (доп, 0)) // y шардың координаты#баяу анықтау 100 // баяу жылдамдық мотор#жылдам анықтау 175 // жылдам қозғалтқыштың жылдамдығы#анық анық 0.2 // с кедергілерден шегіну#уақытты анықтау 0.5 //1.0 -90 градус оңға бұрылыс#тынығуды анықтау 0,05 // бөртпелерді қадағалау кезінде ұйықтау уақыты#жылдамдықты анықтау 175 // бұрылу жылдамдығы#арқа_с -200 // жылдамдыққа дейін соқтығысқан объектіден қайту#түзу 32767 анықтау // түзу жолда жетектеу#арқа анықтау 2 // негізгі тақтаның арнасы#квадрат 1 анықтау // артқы түс екпіні түсі арнасы#жолды анықтау_d 250 // мақсатқа жету үшін камера позициясы# track_find 70 // ұзақ бақылауға арналған камера позициясын анықтаңыз#кері 2.25 анықтаңыз // 180 үшін ұйқы уақыты#артқа_f -150 // кері жылдамдықты анықтаңыз#back_sl -125 // артқа баяу жылдамдықты анықтаңыз#center_x 178 анықтаңыз // true x center of cam#define center_y 146 // true y camint pida орталығы; // processint pidb болдырмау; // track processint pidc; // процесс процессинті have_ball = 0; // біз қай функцияға қосылмағандығымызды айтады main () {long ch; enable_servos (); // servos init_camera қосу (); // камераның қосылуы cconnect (); // толық бақылау арқылы құру үшін қосылу start_a (); // бастау функциясын болдырмау start_b (); // допты бақылау функциясын бастау кезінде (1) {if (r_button () || gc_ldrop || gc_rdrop) {// егер алынса немесе r иық түймесін өлтіру (pida); өлтіру (pidb); өлтіру (pidc); disable_servos (); ажырату (); үзіліс;} аккумуляторлық_зарядтау (); 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_a (); start_b ();}}} void зайлсхий () {while (1) {// мәңгі қайталау create_sensor_update (); // сенсордың барлық мәндерін жаңарту // create_drive (speeda, straight); if (gc_lbump == 1) {// солға соққыдан аулақ болу_құқықтық ();} // басқаға жол бермеу үшін оңға бұрылады, егер (gc_rbump == 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 (); // камераны дайын күйге қояды (); // қолды орнатады (et <255) {// доп ұсталған кезде максималды мәнге жеткенше track_update (); // камераның суретін жаңартыңыз, егер (ball_x <= (center-5)) {// егер доп track_update қалдырылса (); create_drive_direct (баяу, жылдам); // ұйқыны солға бұру (демалу);} if 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 () {kill (pidb); // допты бақылау процесін өлтіру find (); // camera up up track_set_minarea (1000); // артқы тақта үлкен, сондықтан track_update () допым болған кезде (have_ball) {// үлкен блоктарды іздеңіз; while (track_x (backb, 0) = (center_x+20)) {// орталықтандырылмаған track_update (); if (track_x (backb, 0)> = (center_x+20)) {// егер тақта track_update () қалса; create_spin_CCW (100);} // егер солға бұрылса (track_x (backb, 0) <= (center_x-20)) {// егер тақта track_update дұрыс болса (); create_spin_CW (300-center_x);} // орталық жақындағанда баяулау оңға бұрылады} stop (); while (track_size (backb, 0) <= (6000)) {// ал мақсат track_update өлшеміндегі 6000 пиксельден аз болса; if (track_x (backb, 0) <= (center_x-5)) {// егер мақсат track_update қалдырылса (); create_drive_direct (баяу, жылдам); // ұйқыны солға бұру (демалу);} if if (track_x (backb, 0)> = (center_x+5)) {// егер мақсат дұрыс болса, track_update (); create_drive_direct (жылдам, баяу); // оңға ұйықтау (демалу);} if if (track_x (backb, 0) (center_x-5)) {// егер мақсат орталықтандырылған болса track_update (); create_drive_straight (жылдам); // тікелей ұйықтауға (демалу);}} тоқтауға (); // create_drive_straight (жылдам); // сәл жақындатыңыз // ұйықтаңыз (1.0); //Тоқта(); ұйықтау (1.0); create_spin_CW; down (); // артқы жағындағы ұйқыны бақылау үшін камераны қойыңыз (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 (); // солға ұйқыға бұрылу (демалу);} if 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);} // жасыл қуат светодиодты ажырату () {тоқтату (); // қозғалуды тоқтату 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 (қол, a_down);} жарамсыз тексеру () {set_servo_position (cam, track_c);} void far; for (a = 50; a> = 30; a- = 1) {// set_servo_position (қол, a);} set_servo_position (қол, ату);} void grab () {int a; for (a = 0; a <= hold; a+= 1) {// қолды жоғары көтеру set_servo_position (қол, a);}} төмен түсіру () {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; // мен біттім stop ();} void аулақ_тұту () {kill (pidb); // қалғандарының барлығын тоқтату (pidc); ledge (); // тырнақты алыңыз, сонда ол үстелге ілінбейді back_away (); // артқа бұру_l (); // кедергілерден алыс айналу дайын (); // егер (have_ball) {// егер менде доп бар болса 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 доллар Менде Xbox стартерлік жинағын Ботболдан алғанмын, сондықтан құны Мен үшін бұл жасаудың бағасы болды. Менің ойымша, бұл тұрарлық деп ойлаймын, ал ең жақсы жағы - егер мен өзімді осы боттан бөлуге тырысатын болсам, мен қолданған барлық бөлшектерді қайта пайдалануға болады., үстелдің үстінде. Бұл бейнеде роботтың 5 қызғылт сары допты қақпаға соғуы көрсетілген. Мен процесті тездетуге көмектестім, ол 5 -допты ақырында өздігінен табар еді.

7 -қадам: Қорытынды

Соңғы нәтиже - апельсин доптарды өз бетінше ала алатын және соғатын робот.

Маған бұл жобада жұмыс істеу ұнады. Мен бұл роботта неғұрлым көп жұмыс істесем, соғұрлым оған байландым. Мен қазір онымен үй жануарындай сөйлесемін. Бұл сізге келесі жобаңызға көмектесті деп үміттенемін. Мен алғыс айтатын адамдар өте көп, бірақ олар өте көп. Бернард Чартрес сияқты талғампаз түрде: «Біз гиганттардың иығындағы ергежейлілерге ұқсаймыз, сондықтан біз оларды көре аламыз, немесе біз оларды көре аламыз, не физикалық тұрғыдан қарағанда неғұрлым үлкен қашықтықта. айырмашылығы, бірақ бізді алып алып және олардың үлкен көлемімен көтергендіктен ».

Ұсынылған: