«رباتیک، دانشی هست که به بررسی و شناختِ ارتباطِ بین درک و عمل میپردازه». خب حالا این یعنی چی؟ این جمله سه تا کلمه کلیدی داره. یکیش درک هست؛ توی یه ربات یه سری حسگرها هست که به کمکشون میشه محیط اطراف رو و اتفاقاتی که توی اون میفته رو درک کرد. کلمه مهم بعدی عمل هست؛ یه ربات شامل یه سری عملگرها هم هست که حرکت رو براش ایجاد میکنن و کمک میکنن تا ربات بتونه تغییراتی رو توی محیط ایجاد کنه. سومین کلمه کلیدی هم ارتباط هست. رباتیک باید بین این درک و عمل یه رابطه ای هم ایجاد کنه که این شامل همه مباحث برنامه نویسی، کنترل، طراحی مسیر و .... میشه.
ربات های انسان نما نمونه کاملی از یه همچین سیستمی هستند و توی این پست میخوایم یه کوچولو با روندی که به حرکت ربات های انسان نما ختم میشه بیشتر آشنا بشیم. قبل از شروع بحث لازمه که بگم این پست با الهام از این پست آقای دکتر Stephane Caron نوشته شده و بخشی از اون هم اینجا ترجمه شده ولی سعی کردم یکم ساده ترش کنم و تا جایی که میشه خیلی وارد ریاضیاتش نشم (اما بازم مخاطبش کسایی میشن که یکم با دینامیک و کنترل آشنا باشن).
شاید اولین سوالی که با خوندن عنوان متن بشه، این باشه که اصلا چرا باید یه ربات راه بره؟! یکی از پاسخ هایی که به این سوال میشه داد اینه که، محیط های مختلف زندگی ما انسان ها کاملا برای ما طراحی شده. بخش های زیادی از سطح های محل زندگی ما به صورت ناهموار و سنگلاخ، پله، سطوح نرم مثل فرش و موکت و ... هست که حرکت رو برای یک ربات چرخدار سخت میکنن اما انسان میتونه به راحتی در تمام این شرایط راه بره. بنابراین ایده راه رفتن و انطباق با شرایط مثل انسان، اینجاست که میتونه جالب باشه. میشه گفت طراحی چنین ربات هایی از دهه های ۱۹۷۰ و ۱۹۸۰ شروع شده بود ولی جهش عظیم زمانی بود که ربات انسان نما P2 توسط شرکت هوندا در سال ۱۹۹۶ رونمایی شد و این رباتی بود که در ادامه به ربات آسیمو این شرکت تبدیل شد.
خب برای اینکه بتونیم یک ربات انسان نما رو راه ببریم، اول باید یه مدل دینامیکی براش پیدا کنیم. بعدش به کمک این مدل بیایم طراحی مسیر رو براش انجام بدیم یعنی مثلا بیایم بگیم که مرکز جرم ربات باید روی این منحنی حرکت بکنه. همینطور باید برای دو تا پای ربات هم مسیرهایی رو طراحی بکنیم که چجوری ربات قدم هاش رو برداره (البته این مسیرها باید به گونه ای طراحی بشن که ربات رو ناپایدار نکنن، بنابراین باید با یه معیاری از پایداری اون ها اطمینان حاصل کنیم). بعد از این باید این مسیرهای تولید شده رو به کمک سینماتیک معکوس به یه سری زاویه برای موتورهای مفاصل ربات تبدیل کنیم و اون ها رو به عنوان ورودی به موتورها بدیم. اینجوری ربات ما شروع به حرکت میکنه اما این همه ماجرا نیستش، چون در مرحله عمل به خاطر خطاها، نویزها و ماهیت متغیر محیط اطراف، ربات دقیقا همون مسیری که ما طراحی میکنیم نمیره و ممکنه ناپایدار بشه و بیفته. بنابراین لازمه که ربات به کمک سنسورهایی که داره هر لحظه بررسی بشه و کنترلری برای اینکه شبیه مسیر طراحی شده حرکت کنه، بهش اضافه بشه. با طی کردن این مراحل به یه حرکت ساده برای رباتمون میرسیم که در ادامه هر کدوم رو بیشتر بررسی میکنیم.
مدل های دینامیکی متداول در رباتیک، مدل هایی هستند که شامل تعدادی لینک جسم صلب بوده که به کمک تعدادی مفصل به هم متصل شدن. نوشتن چنین معادلاتی برای ربات های انسان نما که شامل تعداد زیادی درجه آزادی هستند، مشکل هست. ولی میشه با چند تا فرض، مسئله رو ساده تر کرد:
با چنین فرض هایی دینامیک ربات رو میشه با دینامیک خطی یک مدل پاندول معکوس سه بعدی تقریب زد.
توی این رابطه امگا فرکانس طبیعی ثابتی هست که با تقسیم شتاب جاذبه بر ارتفاع ثابت ربات به دست میاد. x_c محل مرکز جرم و x_ZMP هم محل نقطه گشتاور صفر ربات هست (Zero Moment Point). در واقع توی این مدل، ما فرض میکنیم که تمام جرم ربات در مرکز جرم اون قرار گرفته و به کمک یک میله بدون جرم به نقطه گشتاور صفر متصل شده. نقطه گشتاور صفر حالا چه نقطه ای هست؟ نیروهای تکیه گاهی وارد بر کف پای ربات به صورت گسترده هستند. از دینامیک میدونیم که میشه نقطه اثر یک نیرو رو از یک جا به جای دیگر انتقال داد و فقط باید گشتاوری رو هم که ایجاد میکنه در نظر گرفت. میشه نقطه ای رو توی کف پا پیدا کرد که اگر همه این نیروهای تکیه گاهی رو به اونجا منتقل کنیم، گشتاورهای سطحیشون با هم خنثی میشن و فقط یک نیرو باقی میمونه. این نقطه همون نقطه گشتاور صفر هست که معادل مفصل توی آونگ معکوس سه بعدی میشه (این نقطه رو مرکز فشار نیروهای تکیه گاهی هم میگن). عکس زیر از کتاب آقای دکتر Kajita میتونه این مفهوم رو بهتر نشون بده.
اینکه میگیم ربات رو با آونگ مدل میکنیم به این معنی هست که وقتی در حین حرکت، پای راست روی زمینه و پای چپ تو هوا مفصل این آونگ میفته توی پای راست و وقتی پای چپ، پای تکیه گاه میشه مفصل این آونگ شیفت پیدا میکنه به پای چپ. حالا که یه مدل دینامیکی داریم میتونیم به طراحی مسیر برای ربات بپردازیم.
هدف طراحی مسیر اینه که ما بیایم و یه مسیری برای مرکز جرم ربات انسان نما پیدا کنیم که اگر ربات از اون پیروی کنه، حرکت پایداری رو داشته باشه. اما چجوری بفهمیم که یه ربات پایدار میمونه یا نه؟ معیاری که برای بررسی این موضوع استفاده میشه اینه که اگر نقطه گشتاور صفر ربات که از رابطه زیر هم میشه بدستش آورد:
توی چند ضلعی تکیه گاهی کف های پا قرار بگیره، حرکت ربات پایدار خواهد موند. این چند ضلعی وقتی فقط یک پای ربات روی زمینه، کف اون پا میشه و زمانی که دو تا پای ربات در ارتباط با زمین هستن به صورت زیر در نظر گرفته میشه:
دو دسته روش کلی برای رسیدن به چنین مسیری وجود داره. توی دسته اول به حرکت انسان توجه میشه و سعی میشه مسیر مرکز جرمی برای ربات با کمک توابع چند جمله ای، سینوسی و ... طراحی بشه که بیشترین شباهت رو به حرکت انسان داشته باشه و در عین حال حرکت پایداری هم باشه. بررسی پایداری این مسیر به بررسی مدل کامل ربات نیاز داره و که کار وقت گیری هست و امکان پیاده سازیش بر روی ربات به صورت آنلاین کمتر هست. دسته دوم به کمک همون مدل ساده شده ای که در بخش قبل به اون پرداخته شد به طراحی مسیر برای مرکز جرم میپردازن که خب از لحاظ محاسباتی ساده ترن و امکان پیاده سازی آنلاین رو میدن.
یکی از مهمترین روش های طراحی مسیر توی دسته دوم، روش طراحی مسیر linear Model Predictive Control (MPC) هست که برای طراحی مسیر ربات های HRP2 و HRP4 از اون استفاده شده.
یکی دیگه از روش های مهم دسته دوم، طراحی مسیر بر اساس نقطه Divergent Component of Motion (DCM) هست. توی این روش معادله آونگ معکوسی که قبلا دیدیم و یه معادله دیفرانسیل از مرتبه دو بود رو به دوتا معادله دیفرانسیل از مرتبه یک تبدیل میکنن:
توی این معادلات متغیر کیسی (xi)، همون DCM هست. دومین معادله از این دو تا یه معادله پایدار هست، یعنی اگر ما یه کیسی ثابت داشته باشیم، مرکز جرم به طور طبیعی اون همگرا میشه. معادله اول اما ناپایدار باقی میمونه و کیسی همواره از ZMP واگرا میشه. بنابراین میشه قسمت دوم که پایدار هست رو در نظر نگرفت و طراحی مسیر رو برای کیسی انجام داد. خب حالا با توجه به این بحث ها برای پیدا کردن مسیر مرکز جرم توی روش DCM، اول جای پاها رو مشخص میکنیم. بعد مرکز هر یک از این جای پاها رو معادل نقطه ZMP فرض میکنیم. حالا به کمک معادله اول، مسیر مناسب برای کیسی رو پیدا میکنیم و بعد هم از روی معادله دوم مسیر مرکز جرم رو بدست میاریم.از این روش برای طراحی مسیر ربات های آسیمو، اطلس و تورو استفاده شده.
بعد از داشتن مسیر حرکت مرکز جرم، باید برای دو تا پا هم، با توجه به جای پاهایی که اول فرض کردیم طراحی مسیر کنیم. طراحی مسیر برای پاها راحتتره و معمولا از یه چند جمله ای ساده برای اون ها استفاده میشه که اول و آخرش و شروع و پایان قدم هست و معمولا هم تا یه ارتفاع مشخصی در میانه قدم بالا میاد.
حالا همه مسیرهای لازم رو داریم اما این کافی نیستش. ربات ما یه سری موتور داره و ما باید زوایای موتورها رو به عنوان ورودی بهش بدیم. اینجا، جایی هست که سینماتیک معکوس به کمک ما میاد و به کمکش میتونیم این مسیرها رو به زوایای موتورها تبدیل کنیم. اما چون ربات ما دارای یه پایه ثابت نیست و پایه محرک (Floating Base) هستش، باید مسیر نسبی بین پاها و مرکز جرم رو به سینماتیک معکوس بدیم و زوایای هر پا رو ازش بدست بیاریم. با داشتن زوایا میشه اونا رو به موتورها داد و حرکت ربات رو به صورت حلقه باز ایجاد کرد.
همونطور که در مقدمه هم گفته شد، ربات معمولا مسیری که ما ایجاد کردیم رو به خاطر فرض های ساده کننده ای که داشتم، خطاها، نویزها و ... نمیره. برای این که از ناپایدار شدن ربات جلوگیری کنیم، ما نیاز به یه کنترلر داریم که از این موضوع جلوگیری کنه. کنترلر های مختلفی هم با توجه به روش طراحی مسیر استفاده شده وجود داره. مثلا توی روش DCM با تخمین مکان و سرعت مرکز جرم ربات، میشه DCM اون رو محاسبه کرد و سپس کنترلی رو برای اون در نظر گرفت، که میتونه یه PID ساده تا کنترلرهای پیشرفته باشه.
خب یکم طولانی شد ولی امیدوارم شمایی که تا اینجا خوندید، مطالب جدیدی یاد گرفته باشید و مشتاق شده باشید که توی این جور حوزه ها شروع به کار کنید (برای شروع هم کتاب آقای دکتر کاجیتا رو بهتون پیشنهاد میکنم). همونطور که اولش هم گفتم این نوشته تلفیقی از پست آقای دکتر Caron و دانسته های خودم بود و سعی میکنم ان شاالله در آینده بخش های مختلفش رو بیشتر شرح بدم. مطمئنا اشتباهات و نقاط ضعفی هم توی متن بود که خوشحال میشم توی نظرات بگید تا در موردش صحبت کنیم و اصلاحش کنیم.