برنامه نویسی ربات سگ نما در آردوینو
در فصل های قبلی، چیزهایی درباره ی آردوینو مگا آموختیم: اینکه چگونه یک سروو موتور را کنترل کنیم و انرژی لازم برای آن را تامین کنیم. همچنین با استفاده از چوب های بستنی شاسی های ربات سگ نما را ایجاد کردیم و یک مدار کوچک ایجاد کردیم تا از برد برد و سیم های اضافی خلاص شویم.
در این فصل می آموزیم که چگونه یک دستگاه مثل ربات سگ نما که ایجاد کرده ایم را برنامه نویسی کنیم و اینکه چگونه با موانعی که با آنها روبه رو شده ایم برخورد کنیم. علت اینکه برنامه نویسی ربات سگ نما سخت است، این است که تمام سروو موتورها نیاز به کنترل و هماهنگی دارند تا تعادل ربات حفظ شود و حرکت های ربات صحیح باشند. این فصل به بخش های زیر تقسیم می شود:
- برنامه نویسی ربات سگ نما
- توسعه ی یک شخصیت
- توسعه ی کنترل با صدا
اکنون اجازه دهید تا بخش سوم از فصل های ربات سگ نما را آغاز کنیم.
برنامه نویسی ربات سگ نما
برنامه نویسی ربات سگ نما، سخت ترین کار در این کتاب است. اینکه کدنویسی کنیم و امیدوار باشیم که کدها به بهترین نحو کار کنند کافی نیست. ما دوباره به طبیعت باز می گردیم تا ببینیم که یک سگ (و یک ربات سگ نما) چگونه راه می روند و تلاش می کنیم تا حرکت او را تقلید کنیم. ما همچنین به طراحی مکانیکی ربات خود نیز توجه می کنیم تا ببینیم که چگونه می توانیم آن را ارتقا دهیم تا کارایی بهتری داشته باشد.
توزیع وزن ربات سگ نما
بهتر بود این بخش در داخل بخش برنامه نویسی قرار گیرد. زیرا توزیع وزن و ایجاد حرکت های راه رفتن به یکدیگر مربوط هستند. قبل از برنامه نویسی ربات، ابتدا باید به آن برق برسانیم. چون که ما مدار خود را در فصل قبل ایجاد کرده ایم، تنها باید آن را در ربات تعبیه کنیم به طوری که وزن باطری و آردوینو مگا به طور مساوی توزیع شوند. ابتدا اجازه دهید تا نگاهی به باطری بزرگ تر بیاندازیم:
این باطری سنگین ترین شیء ای ایت که ربات باید حمل کند. اگر این باطری به درستی در مرکز قرار نگیرد، سختی برنامه نویسی را بسیار زیاد می کند. اگر این باطری را بر بالای سقف(بیس) ربات قرار دهیم به راه حلی منطقی دست یافته ایم، اما ایراد این باطری این است که فضای زیادی اشغال می کند و جای مدارها را می گیرد. زیرا مدارها باید نسبت به باطری بیشتر در دسترس باشند. به همین علت ما می خواهیم آن را در زیر ربات قراردهیم.
در تصویر زیر، مکان قرار گیری باطری نشان داده شده است. به یاد داشته باشید که این، زیر ربات را نشان می دهد:
در حالی که دارید باطری را تعبیه می کنید، سیم های سروو موتورها را مرتب کنید و آنها را در کناره های باطری قرار دهید. شما می توانید با استفاده از یک لایه چسب دوطرفه باطری را به زیر سقف بچسبانید و سپس آن را با نوار چسب بچسبانید و محکم کنید. مطمئن شوید که باطری دقیقا در وسط سقف(بیس) قرار گیرد. سعی کنید باطری را به صورت زیر چسب بزنید:
توجه کنید که چگونه سیم های سروو موتورها به صورت چهار بخش مجزا در دور باطری قرار گرفته اند. این به این خاطر است که فاصله ی بین سروو موتورها و آردوینو مگا کاهش یابد تا از کابل های اضافی سروو موتورها اجتناب شود. اگر فکر می کنید که واقعا به این سیم ها برای سروو موتورهای زانو احتیاج دارید، آنها را آزاد بگذارید تا بتوانید از آنها استفاده کنید. آردوینو مگا مستقیما در بالای سقف به صورت زیر قرار می گیرد:
آردوینو مگا را می توانیم با استفاده از یک تکه چسب دو طرفه به سقف(بیس) بچسبانیم. دوباره مطمئن شوید که سیم های سروو موتورها از کنارهای آردوینو مگا عبور کنند.
تست شماره 1
همان طور که قبلا گفته شد، ما می خواهیم به شما بیاموزیم که چگونه یک ربات ایجاد کنید و این موضوع شامل تست و تکرار دروس نیز می باشد. اکنون ما می خواهیم اولین تست خود را انجام دهیم. این یک تست ساده است که استحکام ربات و توانایی آن در ایستادن در بررسی می کند. پس USB را به آردوینو مگا متصل کنید. اما فعلا باطری را متصل نکنید. حالا فایل robot_dog_basic.ino را در نرم افزار آردوینو باز کنید و سپس این برنامه را آپلود کنید و با دقت باطری ها را به UBEC متصل کنید. با انجام این کار، ربات ما زنده می شود و به شکلی نامناسب می ایستد و یا اینکه اصلا نمی ایستند.
چیزی که می خواهیم به آن دست یابیم به صورت زیر است(نما از پهلو):
تمامی استخوان ها(چوب بستنی ها) مستقیما به سمت پایین قرار گرفته اند. اگر شما به چنین چیزی دست نیافتید، ناراحت نشوید. اجازه دهید به کدها نگاهی بیاندازیم و آنها را اصلاح کنیم:
بخش های علامت زده شده در تصویر بالا بسیار مهم هستند. این اعداد که موقعیت شروع سروو موتورها را مشخص می کنند، در این فصل مورد استفاده قرار می گیرند و اعدادی که شما باید استفاده کنید با اینجا متفاوت خواهند بود. سعی می کنیم یکی از این اعداد را در نظر بگیریم. مثلا F_R_UH_center که نشان دهنده ی سروو موتور ران جلو و سمت راست و بالا(Front Right Upper Hip) است را در نظر بگیرید. حالا کدها را آپلود کنید. و ببینید که چه اتفاقی می افتد. اعداد را طوری تغییر دهید تا ربات شما مانند تصویر بالا بایستد. اینقدر تلاش کنید تا ربات شما به صورت تصویر بالا شود. اکنون ربات در حالت تعادل است اما گاهی همه چیز درست نمی شود. به نظر می رسد که پاهای عقبی اکثر وزن را تحمل می کنند. علتش این است که ما سعی کردیم پاهای عقبی ربات ما شبیه به پاهای یک سگ باشد. یک سگ برای اینکه تعادل خود را حفظ کند عضلات بیشتری(در پاهای عقب) دارد. اما همین انحراف و عدم تعادل جزئی که در اینجا داریم، در آینده برای ما مشکلات زیادی ایجاد می کند.
برای حل این مشکل، باطری و USB را جدا کنید. سپس تمام سیم های سروو موتورهای عقبی که به مدار کوچک وصل شده اند را جدا کنید. سپس تنها سروو موتورهای عقبی ران ها را جدا کنید. حالا پاهای چپ و راست را با یکدیگر تعویض کنید. سپس پاهای تعویض شده را پیچ کنید. سروو موتورها را دوباره برچسب گذاری کنید(یکی از باندهای زرد را از سیم های سروو موتورهای سمت راست قبلی حذف کنید و آنها را به سیم های سروو موتورهای سمت راست کنونی متصل کنید. سپس سیم ها را بر اساس اطلاعات زیر به مدار کوچک متصل کنید:
• B R UH → #7 → D28
• B R LH → #8 → D29
• B R K → #9 → D30
• B L UH → #10 → D31
• B L LH → #11 → D32
• B L K → #12 → D33
مطمئن شوید که اتصالات به درستی متصل شده باشند، سپس USB و باطری را متصل کنید و بررسی کنید که ربات سگ نما به صورت ایستاده باشد. شما ممکن است مجبور شوید که مقادیر ثابت ها را تغییر دهید تا به موقعیت مناسب دست یابید. حالا این فایل آردوینو یا حداقل مقادیر مرکزها(center ها) را save کنید چون بعدا می خواهیم از آنها استفاده کنیم. اکنون ربات سگ نما به خاطر تساوی وزن توزیع شده در میان هر چهار پایش، مستحکم تر است. اکنون می توانیم به گام بعدی برویم و به ربات بیاموزیم که چگونه راه برود. حالا از همین روش قبلی استفاده کنید و ربات را به حالت نشسته در بیاورید. سپس این موقعیت را ذخیره کنید و وقتی که دوباره با حالت نشستن ربات روبه رو می شویم، از این اعداد استفاده کنید.
روش راه رفتن
برنامه نویسی راه رفتن ربات مثل یاد دادن راه رفتن به یک کودک است، با این تفاوت که ربات دارای فهم و آگاهی نیست. روش راه رفتن، در اصل یک سری حرکت است که باعث می شود عمل راه رفتن و حرکت کردن شکل بگیرد. دو روش متداول برای راه رفتن وجود دارد: چهار دست و پا راه رفتن و یورتمه رفتن.حالت چهار دست و پا رفتن وقتی ایجاد می شود که مثلا یک گربه برای طعمه اش کمین می کند:
با مشاهده ی این ویدئو بهتر می توانید این موضوع را مشاهده کنید. اما حتی همان طور که در تصویر بالا مشاهده می کنید، در حین چهار دست و پا راه رفتن، گربه بدن خود را به طور ثابت افقی نگه می دارد. این روش برای صرفه جویی در انرژی بسیار موثر است اما مهندسی این نوع راه رفتن بسیار پیچیده است.
یورتمه رفتن وقتی ایجاد می شود که دو تا از پاهای مخالف همزمان حرکت کنند؛ این موضوع در تصویر زیر نشان داده شده شده است:
این نوع راه رفتن در صرفه جویی انرژی مانند چهار دست و پا راه رفتن خیلی موثر نیست اما ساده تر آن است. همچنین این نوع راه رفتن پایداری استاتیکی بیشتری دارد در حالی که چهار دست و پا راه رفتن پایداری داینامیکی بیشتری دارد. چون که ما برای اولین بار داریم یک ربات چهار پا طراحی می کنیم، بهتر است ساده بگیریم. پس یورتمه راه رفتن را انتخاب می کنیم و کمی حرکت ها را اصلاح می کنیم تا برای ربات ما مناسب باشند.
تست شماره 2
ما می خواهیم ربات خود را با استفاده از روش یورتمه رفتن برنامه نویسی کنیم. بنابراین فایل برنامه ی robot_dog_trot_gait.ino را در نرم افزار آردوینو باز کنید. قبل از آپلود کردن این برنامه، ربات را در جایی قرار دهید که مانعی بر سر راهش نباشد. در اینجا استفاده از یک کابل USB بلند خوب است. حالا مقادیر سروو موتورها را به همان مقادیری که ذخیره کرده اید تغییر دهید. باطری را وصل کنید و برنامه را آپلود کنید. آیا ربات شما حرکت می کند یا اینکه افتاده است؟ اگر ربات شما افتاد و به زمین خورد، علت آن عدم تعادل است. و مشکل از اینجا ناشی می شود که استخوان های ساق(چوب های بستنی ساق) خیلی نازک هستند و نمی توانند آن ناحیه ای که باعث محکم ایستادن و توزیع وزن ربات می شود، را پوشش دهند. برای حل این مشکل می توانیم از درب بطری پلاستیکی استفاده کنیم. همان طور که قبلا نیز گفته شد، این موارد به راحتی و در همه جا در دسترس هستند. دوباره USB و باطری را جدا کنید.
حتما ضروری نیست که برای جدا کردن چوب بستنی ساق پا، پیچ های زانوی ربات را باز کنید. اما اگر این کار راحت تر است، می توانید انجامش دهید. ما به هشت درب بطری احتیاج داریم. اگر فکر می کنید که چهار درب بطری کافی است، می توانید چهار تا درب بطری تهیه کنید و کدها را دوباره اجرا کنید. مرکز درب دو بطری را با پونز فشاری که قبلا استفاده کردیم علامت بزنید و پونز را در آن فشار دهید تا یک حفره در هرکدام ایجاد شود. بخش پایینی چوب بستنی ساق پای ربات را چند بار نوار چسب بزنید تا چیزی شبیه واشر ایجاد شود. حالا یک حفره ی کوچک در فاصله ی یک سانتی متر از پایین ساق پای ربات ایجاد کنید. سپس در دو طرف ساق پای ربات یک درب بطری قرار دهید و یک پیچ را در درون هرسه مورد بپیچید. توصیه می شود که بخش های بیرونی درب های بطری را نوار چسب بزنید. حالا ربات ما به صورت زیر خواهد بود:
این کار را برای هر چهار پا انجام دهید. وقتی که کار تمام شد، ابتدا باطری و سپس کابل USB را متصل کنید. بعنوان یک روش جایگزین می توانیم از باطری LiPo کوچکتر برای نیرو دادن به آردوینو استفاده کنیم. برای انجام این کار باید از کانکتور 2.1 میلی متری در آردوینو مگا استفاده کنیم. این کار راحت تر است زیرا طول کابل USB محدود است. اکنون باید مشاهده کنید که ربات راه می رود و نمی افتد. اگر ربات شما می افتد از مقادیر زیر استفاده کنید:
کاری که این برنامه انجام می دهد به ترتیب به صورت زیر است:
- بالا بردن پای جلو و سمت راست و جلو بردن آن
- بالا بردن پای عقب و سمت چپ و جلو بردن آن
- در وسط قرار دادن سروو موتورهای بالایی، بالا بردن و جلو بردن پای جلو و سمت چپ، هل دادن ربات به جلو
- بلند کردن پای عقب و سمت راست و جلو بردن آن.
- در وسط قرار دادن دیگر سروو موتورها و هل دادن ربات به جلو
این بخش، بزرگترین بخش برنامه نویسی ربات بود.
- نوشته شده توسط احسان عباسی
- بازدید: 3021