در زیر مروری بر نحوه عملکرد MoveIT است. برای مستندات و جزئیات بیشتر مشخص ، به آموزش ها یا مفاهیم توسعه دهندگان مراجعه کنید.
معماری سیستم
نمودار سطح بالا سریع

گره Move_group
شکل بالا معماری سیستم سطح بالا را برای گره اولیه ارائه شده توسط MoveIT به نام Move_Group نشان می دهد. این گره به عنوان یکپارچه ساز است: کشیدن تمام مؤلفه های جداگانه برای ارائه مجموعه ای از اقدامات و خدمات ROS برای استفاده کاربران.

رابط کاربری
کاربران می توانند به سه روش به اقدامات و خدمات ارائه شده توسط Move_Group دسترسی پیدا کنند:
در C ++ - با استفاده از بسته move_group_interface که یک رابط کاربری C ++ را برای Move_Group آسان می کند
در پایتون - با استفاده از بسته moveit_commander
از طریق GUI - با استفاده از افزونه برنامه ریزی حرکت به RVIZ (Visualizer Ros)
Move_Group را می توان با استفاده از سرور ROS Param از جایی که از آنجا نیز URDF و SRDF را برای ربات دریافت می کند ، پیکربندی کرد.
پیکربندی
Move_group یک گره ROS است. از سرور پارامتر ROS برای به دست آوردن سه نوع اطلاعات استفاده می کند:
URDF - Move_Group به دنبال پارامتر Robot_description در سرور ROS Param برای دریافت URDF برای ربات است.
srdf - move_group به دنبال پارامتر robot_description_semantic در سرور پارامتر ROS برای دریافت SRDF برای ربات است. SRDF به طور معمول توسط یک کاربر با استفاده از دستیار تنظیم MoveIt ایجاد می شود.
پیکربندی MoveIT - Move_Group به سرور پارامتر ROS برای سایر پیکربندی های خاص برای حرکت از جمله محدودیت های مشترک ، سینماتیک ، برنامه ریزی حرکت ، ادراک و سایر اطلاعات نگاه می کند. پرونده های پیکربندی برای این مؤلفه ها به طور خودکار توسط دستیار تنظیم MoveIt تولید می شوند و در فهرست پیکربندی بسته پیکربندی Moveit مربوطه برای ربات ذخیره می شوند.
رابط ربات
Move_group از طریق موضوعات و اقدامات ROS با ربات صحبت می کند. این ارتباط با ربات برای به دست آوردن اطلاعات وضعیت فعلی (موقعیت های اتصالات و غیره) ، برای گرفتن ابرهای نقطه و سایر داده های سنسور از سنسورهای ربات و صحبت با کنترل کننده های موجود در ربات ، ارتباط برقرار می کند.
اطلاعات دولت مشترک
Move_Group برای تعیین اطلاعات وضعیت فعلی در موضوع /joint_states گوش می دهد - یعنی تعیین اینکه هر مفصل ربات کجاست. Move_Group قادر به گوش دادن به ناشران متعدد در مورد این موضوع است حتی اگر آنها فقط اطلاعات جزئی در مورد وضعیت ربات را منتشر کنند (به عنوان مثال ممکن است ناشران جداگانه برای بازو و پایگاه موبایل یک ربات استفاده شوند). توجه داشته باشید که Move_Group ناشر دولتی مشترک خود را تنظیم نمی کند - این چیزی است که باید در هر ربات اجرا شود.
تغییر اطلاعات
مانیتورهای Move_Group با استفاده از کتابخانه ROS TF اطلاعات را تبدیل می کنند. این به گره اجازه می دهد تا اطلاعات جهانی در مورد مطالب روبات (از جمله موارد دیگر) کسب کند. به عنوان مثال ، پشته ناوبری ROS تبدیل بین قاب نقشه و قاب پایه ربات به TF را منتشر می کند. Move_Group می تواند از TF برای تشخیص این تبدیل برای استفاده داخلی استفاده کند. توجه داشته باشید که Move_Group فقط به TF گوش می دهد. برای انتشار اطلاعات TF از ربات خود ، باید یک گره Robot_State_Publisher روی ربات خود داشته باشید.
رابط کنترل کننده
Move_Group با استفاده از رابط OnderJointTrajectoryAction با کنترل کننده های موجود در ربات صحبت می کند. این یک رابط اکشن ROS است. سرور روی ربات باید این عمل را ارائه دهد - این سرور توسط خود Move_Group ارائه نمی شود. Move_Group فقط یک مشتری را فوری می کند تا با این سرور Action Controller روی ربات شما صحبت کند.
صحنه برنامه ریزی
Move_Group از مانیتور صحنه برنامه ریزی برای حفظ صحنه برنامه ریزی استفاده می کند ، که نمایندگی جهان و وضعیت فعلی ربات است. حالت ربات می تواند شامل هرگونه اشیاء متصل به (حمل شده توسط) روبات باشد که به نظر می رسد سفت و سخت به ربات متصل شده است. جزئیات بیشتر در مورد معماری برای حفظ و به روزرسانی صحنه برنامه ریزی در بخش صحنه برنامه ریزی زیر بیان شده است.
قابلیت های گسترده
Move_Group به راحتی قابل گسترش است - قابلیت های فردی مانند انتخاب و مکان ، سینماتیک ، برنامه ریزی حرکت در واقع به عنوان افزونه های جداگانه با یک کلاس پایه مشترک اجرا می شود. افزونه ها با استفاده از ROS از طریق مجموعه ای از پارامترهای ROS YAML و از طریق استفاده از کتابخانه PluginLib ROS قابل تنظیم هستند. بیشتر کاربران مجبور نیستند افزونه های Move_Group را پیکربندی کنند زیرا آنها به طور خودکار در پرونده های پرتاب تولید شده توسط دستیار تنظیم MoveIT پیکربندی می شوند.
برنامه ریزی حرکت
افزونه برنامه ریزی حرکت
Moveit با برنامه ریزان حرکت از طریق رابط افزونه کار می کند. این امر به MoveIT اجازه می دهد تا با برنامه نویسان حرکتی مختلف از کتابخانه های مختلف استفاده کند و Moveit را به راحتی قابل گسترش باشد. رابط برنامه ریزان حرکت از طریق یک عمل یا سرویس ROS (ارائه شده توسط گره Move_Group) است. برنامه ریزان پیش فرض حرکت برای Move_Group با استفاده از OMPL و رابط MoveIT به OMPL توسط دستیار تنظیم MoveIT پیکربندی شده است. سایر برنامه ریزان که به طور پیش فرض در دسترس هستند ، برنامه ریز حرکت صنعتی Pilz و Chomp هستند.
درخواست طرح حرکت
درخواست طرح حرکت مشخص می کند که شما می خواهید برنامه ریز حرکت انجام دهید. به طور معمول ، شما از برنامه ریز حرکت می خواهید که یک بازو را به یک مکان متفاوت (در فضای مشترک) یا اثر نهایی به یک نمایش جدید منتقل کند. تصادفات به طور پیش فرض (از جمله خودمختاری و اشیاء پیوست) بررسی می شود. همچنین می توانید برنامه ریز را از طریق پارامترهای برنامه ریزی_پلین و plaer_id مشخص کنید ، و محدودیت های برنامه ریز حرکت برای بررسی - محدودیت های داخلی ارائه شده توسط MoveIT محدودیت های سینماتیک هستند:
محدودیت های موقعیت - موقعیت پیوند را برای قرار دادن در منطقه ای از فضا محدود کنید
محدودیت های جهت گیری - جهت گیری پیوند به دروغ در محدوده رول ، زمین یا خمیازه مشخص را محدود کنید
محدودیت های دید - یک نقطه را در پیوند محدود کنید تا در مخزن دید برای یک سنسور خاص قرار بگیرد
محدودیت های مشترک - یک مفصل را برای دروغ گفتن بین دو مقدار محدود کنید
محدودیت های مشخص شده توسط کاربر-شما همچنین می توانید محدودیت های خود را با پاسخ به تماس با کاربر مشخص کنید.
نتیجه برنامه حرکت
گره Move_Group در پاسخ به درخواست برنامه حرکت شما یک مسیر مورد نظر ایجاد می کند. این مسیر بازو (یا هر گروه از اتصالات) را به محل مورد نظر منتقل می کند. توجه داشته باشید که نتیجه حاصل از Move_Group یک مسیر است و نه فقط یک مسیر - _move_group* از حداکثر سرعت و شتاب های مورد نظر (در صورت مشخص شدن) استفاده می کند تا مسیری را ایجاد کند که از محدودیت های سرعت و شتاب در سطح مشترک پیروی می کند.
خط لوله برنامه ریزی حرکت: برنامه ریزان حرکت و آداپتورهای درخواست برنامه

خط لوله برنامه ریزی کامل یک برنامه ریز حرکت را با سایر مؤلفه ها به نام برنامه ریزی آداپتورهای درخواست برنامه ریزی زنجیره می کند. آداپتورهای درخواست برنامه ریزی امکان درخواست برنامه حرکت پیش پردازش و پاسخ های برنامه حرکت پس از پردازش را فراهم می کنند. پیش پردازش در چندین موقعیت مفید است ، به عنوان مثالهنگامی که حالت شروع برای ربات کمی خارج از محدودیت های مشترک مشخص شده برای ربات است. پس از پردازش برای چندین عملیات دیگر ، به عنوان مثال لازم است. برای تبدیل مسیرهای تولید شده برای یک روبات به مسیرهای پارامتری زمان. MoveIT مجموعه ای از آداپتورهای برنامه ریزی پیش فرض حرکت را ارائه می دهد که هر یک عملکرد بسیار خاص را انجام می دهند.
FixtartStateBounds
آداپتور محدودیت های حالت Fix ، حالت شروع را در محدوده مشترک مشخص شده در URDF برطرف می کند. نیاز به این آداپتور در شرایطی بوجود می آید که محدودیت های مفصل برای ربات فیزیکی به درستی پیکربندی نشده باشد. این روبات ممکن است در پیکربندی به پایان برسد که در آن یک یا چند مفاصل آن کمی خارج از محدوده مشترک خود باشد. در این حالت ، برنامه ریز حرکت قادر به برنامه ریزی نیست زیرا فکر می کند حالت شروع خارج از محدوده مشترک است. آداپتور درخواست برنامه ریزی "FixStartStateBounds" با انتقال آن به حد مشترک ، حالت شروع را برطرف می کند. با این حال ، این بدیهی است که هر بار راه حل مناسب نیست - به عنوان مثالدر جایی که مفصل واقعاً خارج از محدوده مشترک خود است. یک پارامتر برای آداپتور مشخص می کند که چه مقدار مفصل می تواند خارج از حد آن باشد تا "قابل ثابت بودن" باشد.
فیکس های فیکس
آداپتور Fix Workspace Bounds یک فضای کاری پیش فرض برای برنامه ریزی را مشخص می کند: مکعب با اندازه 10 متر x 10 متر x 10 متر. این فضای کاری فقط در صورتی مشخص می شود که درخواست برنامه ریزی به برنامه ریز این زمینه ها را پر نکند.
FixtartStatecollision
آداپتور برخورد حالت Fix Start سعی خواهد کرد با اختلال در مقادیر مشترک با مقدار کمی ، یک پیکربندی بدون برخورد جدید را در نزدیکی یک پیکربندی مشخص (در برخورد) نمونه برداری کند. مبلغی که مقادیر آن را مختل می کند توسط یک پارامتر "jiggle_fraction" مشخص می شود که آشفتگی را به عنوان درصد از کل دامنه حرکت برای مفصل کنترل می کند. پارامتر دیگر این آداپتور مشخص می کند که چه تعداد آشفتگی تصادفی قبل از تسلیم نمونه می شود.
FixtartStatePathConstints
این آداپتور هنگامی اعمال می شود که حالت شروع برای یک طرح حرکت از محدودیت های مسیر مشخص پیروی نمی کند. این تلاش برای برنامه ریزی مسیری بین پیکربندی فعلی ربات به یک مکان جدید که در آن از محدودیت مسیر پیروی می شود ، برنامه ریزی خواهد کرد. مکان جدید به عنوان حالت شروع برای برنامه ریزی خدمت می کند.
افزودنی پارامتری
برنامه ریزان حرکت به طور معمول "مسیرهای سینماتیک" را تولید می کنند ، یعنی مسیرهایی که از هیچ محدودیت سرعت یا شتاب پیروی نمی کنند و پارامتر نمی شوند. این آداپتور با استفاده از محدودیت های سرعت و شتاب ، برنامه های حرکت را "پارامتر می کند".
نهایت
محدودیت های هدف را می توان با استفاده از زیر مجموعه ها تنظیم کرد (به عنوان مثال یک هدف قرار دادن در فنجان/دسته قاب ، که در آن دسته زیر فریم در فنجان شی است). این آداپتور قاب محدودیت ها را به یک شیء یا قاب ربات (به عنوان مثال فنجان) تغییر می دهد.
OMPL (کتابخانه برنامه ریزی حرکت باز) یک کتابخانه برنامه ریزی حرکت منبع باز است که در درجه اول برنامه ریزان حرکت تصادفی را پیاده سازی می کند. MoveIT مستقیماً با OMPL ادغام می شود و از برنامه ریزان حرکت از آن کتابخانه به عنوان مجموعه اصلی/پیش فرض برنامه ریز استفاده می کند. برنامه ریزان در OMPL انتزاعی هستند. یعنی OMPL هیچ مفهومی از ربات ندارد. در عوض ، MoveIT OMPL را پیکربندی می کند و Back-End را برای OMPL فراهم می کند تا با مشکلات موجود در روباتیک کار کند.
صحنه برنامه ریزی

از صحنه برنامه ریزی برای نشان دادن دنیای اطراف ربات استفاده می شود و همچنین وضعیت خود ربات را ذخیره می کند. این توسط مانیتور صحنه برنامه ریزی در داخل گره Move Group حفظ می شود. مانیتور صحنه برنامه ریزی گوش می دهد:
اطلاعات دولت: در موضوع joint_states
اطلاعات سنسور: با استفاده از مانیتور هندسه جهانی که در زیر شرح داده شده است
اطلاعات هندسه جهانی: از ورودی کاربر در موضوع برنامه ریزی_ scene (به عنوان یک صحنه برنامه ریزی متفاوت است).
مانیتور هندسه جهانی
مانیتور هندسه جهانی هندسه جهانی را با استفاده از اطلاعات سنسورهای موجود در ربات و از ورودی کاربر می سازد. این برنامه از مانیتور نقشه اشغال شرح داده شده در زیر برای ساختن یک نمایش سه بعدی از محیط اطراف ربات و تقویت هایی که با اطلاعات مربوط به موضوع برنامه ریزی_scene برای افزودن اطلاعات شی استفاده می کند ، استفاده می کند.
ادراک سه بعدی

درک سه بعدی در MoveIT توسط مانیتور نقشه اشغال انجام می شود. مانیتور نقشه اشغال از معماری افزونه برای کنترل انواع مختلف ورودی سنسور همانطور که در شکل بالا نشان داده شده است استفاده می کند. به طور خاص ، MoveIT برای دستیابی به دو نوع ورودی از پشتیبانی داخلی برخوردار است:
ابرهای نقطه: با استفاده از افزونه به روزرسانی نقشه Cloud Cloud Cloud
تصاویر عمق: با استفاده از افزونه به روزرسانی نقشه اشغال عمق تصویر
توجه داشته باشید که می توانید انواع بروزرسانی های خود را به عنوان افزونه به مانیتور نقشه اشغال اضافه کنید.
هشتاد
مانیتور نقشه اشغال از یک اکتمپ برای حفظ نقشه اشغال محیط استفاده می کند. Octomap در واقع می تواند اطلاعات احتمالی را در مورد سلولهای فردی رمزگذاری کند اگرچه این اطلاعات در حال حاضر در MoveIT استفاده نمی شود. Octomap را می توان مستقیماً به FCL منتقل کرد ، کتابخانه بررسی برخورد که از آن استفاده می کند استفاده می کند.
تصویر عمق به روزرسانی نقشه اشغال
به روزرسانی نقشه اشغال عمق تصویر شامل خود فیلتر خود است ، یعنی قسمتهای قابل مشاهده ربات را از نقشه عمق حذف می کند. برای انجام این عملیات از اطلاعات فعلی در مورد ربات (حالت ربات) استفاده می کند.
سینماتیک
افزونه سینماتیک
Moveit از زیرساخت های افزونه ای استفاده می کند ، به ویژه هدف قرار دادن کاربران برای نوشتن الگوریتم های سینماتیک معکوس خود. سینماتیک رو به جلو و پیدا کردن ژاکوبیان در خود کلاس ربات استات ادغام شده است. افزونه پیش فرض kinematics معکوس برای MoveIT با استفاده از حل کننده عددی مبتنی بر Jacobian KDL پیکربندی شده است. این افزونه به طور خودکار توسط دستیار راه اندازی MoveIt تنظیم می شود.
افزونه ikfast
غالباً ، کاربران ممکن است تصمیم بگیرند که حلال های سینماتیک خود را به عنوان مثال پیاده سازی کنند. PR2 حلال های سینماتیک خاص خود را دارد. یک رویکرد محبوب برای اجرای چنین حل کننده استفاده از بسته IKFast برای تولید کد C ++ مورد نیاز برای کار با ربات خاص شما است.
بررسی برخورد
بررسی برخورد در MoveIT در یک صحنه برنامه ریزی با استفاده از شیء CollisionWorld پیکربندی شده است. خوشبختانه ، MoveIT تنظیم شده است به گونه ای که کاربران هرگز نگران این نیستند که چگونه بررسی تصادف رخ می دهد. بررسی برخورد در MoveIT عمدتاً با استفاده از بسته FCL - کتابخانه اصلی CC Moveit انجام می شود.
اشیاء برخورد
MoveIT از بررسی برخورد برای انواع مختلف اشیاء پشتیبانی می کند از جمله:
اشکال ابتدایی - به عنوان مثالجعبه ها ، سیلندرها ، مخروط ها ، کره ها و هواپیماها
Octomap - از شیء Octomap می توان مستقیماً برای بررسی برخورد استفاده کرد
ماتریس برخورد مجاز (ACM)
بررسی برخورد یک عمل بسیار گران است که اغلب نزدیک به 90 ٪ از هزینه محاسباتی در هنگام برنامه ریزی حرکت را تشکیل می دهد. ماتریس برخورد مجاز یا ACM مقدار باینری را مطابق با نیاز به بررسی برخورد بین جفت اجسام (که می تواند در ربات یا جهان باشد) رمزگذاری می کند. اگر مقدار مربوط به دو بدن در ACM 1 بر روی 1 تنظیم شود ، این مشخص می کند که یک بررسی برخورد بین دو بدن لازم نیست. این اتفاق می افتد اگر ، به عنوان مثال ، این دو بدن همیشه تا آنجا باشند که هرگز با یکدیگر برخورد نخواهند کرد.
پردازش مسیر
پارامتر زمان
برنامه ریزان حرکت به طور معمول فقط "مسیرها" را تولید می کنند ، یعنی هیچ اطلاعات زمانبندی در ارتباط با مسیرها وجود ندارد. MoveIT شامل یک روال پردازش مسیر است که می تواند در این مسیرها کار کند و مسیرهایی را ایجاد کند که به طور مناسب برای حداکثر سرعت و محدودیت شتاب تحمیل شده در اتصالات فردی حسابداری داشته باشد. این محدودیت ها از یک فایل ویژه intial_limits. yaml که برای هر ربات مشخص شده است خوانده می شود.
فارکس پرشین...
ما را در سایت فارکس پرشین دنبال می کنید
برچسب :
نویسنده : الیزابت امینی
بازدید : <-PostHit->
تاريخ : شنبه
16 ارديبهشت
1402 ساعت: 17:25