کتابخانه tf به منظور ارائه یک روش استاندارد برای دنبال کردن فریم های مختصات و تبدیل داده ها در کل سیستم فراهم شده است. این کتابخانه به گونه ای طراحی شده است که هر شخص بدون داشتن دانش زیاد در زمینه انتقال دادهها در دستگاههای مختصاتی به صورت جداگانه می توانند اطمینان حاصل کنند که داده ها در چارچوب مختصاتی مورد نیازش هستند.کتابخانه tf به عنوان یک پکیج ROS برای ارائه این قابلیت توسعه داده شد. کتابخانه tf دارای دو ماژول استاندارد ، پخش کننده و شنونده (Broadcaster and Listener) است. این دو ماژول برای ادغام با اکوسیستم ROS و ROS طراحی شده اند اما به طور کلی در خارج از ROS نیز مفید هستند در طی توسعه اولیه سیستم عامل ربات (ROS) ، دنبال کردن فریم های مختصات به عنوان یک معضل مشترک برای توسعه دهندگان مشخص شد.
یک سیستم رباتیک معمولاً دارای فریم های مختصات سه بعدی است که با گذشت زمان تغییر می کنند ، مانند فریم جهانی ، فریم پایه ، فریم پنجه، فریم سر و غیره. tf2 با مرور زمان تمام این فریم ها را ردیابی می کند و به شما امکان می دهد که به سوالاتی نظیر سوالات زیر پاسخ دهید:
الف) ۵ ثانیه قبل فریم head نسبت به فریم world کجا بود؟
ب) موقعیت جسم در پنجه ربات من نسبت به پایه من چیست؟
ج) وضعیت فعلی فریم پایه در فریم نقشه چگونه است؟
tf2 می تواند در یک سیستم توزیع شده کار کند. این بدان معناست که تمام اطلاعات مربوط به فریم های مختصات یک ربات در دسترس همه اجزای ROS در هر رایانه ای در سیستم است.
از این رو با توجه به پیچیدگی این بخش بر آن شدیم تا توضیحاتی را در این باره برای شما عزیزان تهیه کنیم. در این آموزش ما سعی می کنیم تا پیچیدگی مسئله را توضیح دهیم و نیاز ما به این کتابخانه را به صورت بخش بخش همراه با شرح مثال و توضیحات مرتبط ارائه نماییم. سپس درباره طراحی کتابخانه tf در رابطه با نیازها بحث خواهیم کرد.
مقدمهای بر کتابخانه tf
فرض کنید رباتی داریم که در محیطی برای انجام کاری در حال حرکت است. برای ربات ضروری است که بداند در چه مختصاتی است و یا اینکه اطراف اون چه چیزاهایی وجود دارد. (توجه شود که ما به دنبال مساله SLAM نیستم !!!).
به عنوان مثال فرض کنید یک ربات دارای بازو در یک اتاق مجهز به سنسور قرار است که یک توب قرمز رنگ را پیدا کند و آن را با کمک پنجههای بازوی رباتیکی خودش بگیرد. خب چالش این مساله این هست که ربات پنجههای خودش رو به سمت جلو ببره و توب رو بردارد. به هرحال برای انجام این کار ارتباط بین توپ و پنجههای ربات باید مشخص شود.
برای مشخص کردن موقعیت توپ به کمک سنسور نیاز است تا محاسباتی انجام شود تا انتقال موقعیت از فریم سنسور به اتاق، به پایه ربات تا بدنه اصلی، تا شانه، به آرنج، به مچ و در نهایت به پنجه ربات انجام شود. سپس آن را با موقعیت توپ مقایسه کنید، زیرا فقط می توانید موقعیت دو جسم را در یک فریم مختصات مشابه مقایسه کنید.
حال فرض کنید که سنسور اعلام می کند که پنجه باید ۳ سانتی متر به سمت چپ در فریم سنسور حرکت کند. از این رو برای اینکه محاسبه کنیم تا ربات باید چه حرکتی انجام دهد، باید تغییر ۳ سانتی متر در فریم سنسور به فریم بدنه اصلی ربات انتقال داده شود. برای این منظور باید به ترتیب انتقالات زیر انجام شود.
محاسبه انتقال از فریم سنسور به فریم اتاق، به پایه، به بدنه اصلی.
خب بعد از محاسبه به کمک این سه انتقال، فرمان حرکت سه سانتی متر به سمت پایین برای بازو صادر می شود.
در واقع، ۳ سانتی متر به سمت چپ در فریم مختصات سنسور، همان ۳ سانتی متر به سمت پایین در فریم بدنه اصلی ربات است.
پیشنهاد می شود که این بخش را چندین بار مطالعه نمایید. تا دقیقا متوجه این مبحث بشوید.
جمعبندی
اگر دقت کرده باشید این یک سیستم رباتیک نسبتاً ساده بود، اما برای انجام این محاسبه نیاز به دانش کل سیستم است. سیستم های رباتیک ، از جمله سنسورها ، موتورها ، محاسبات و ارتباطات ، حتی در صورت ساده بودن به سرعت پیچیده می شوند. و خب نیاز ما به یک چیزی که بتونه این کار رو برای ما ساده تر کند بیشتر احساس می شود. از این رو یک عده از آدم های توسعه دهنده به این فکر فرو رفتند که خیلی خوب بود اگر یک کتابخونه ای به آسونی این کار رو برای ما انجام می داد. مثالا اگر برنامه نویس به سادگی از یک کتابخانه درخواست کند ، بردار مورد نیاز برای حرکت دادن پنجه ربات با توجه به بدنه اصلی به گونه ای است که توپ را بردارد چه چیزی است!!!
با ما همراه باشید تا در ادامه بیشتر با این کتابخانه مهم آشنا شویم.