شاخص شناور آزاد (TEFIX)

ساخت وبلاگ

MultibodyPlant یک نمایش چارچوب سیستم دریک است (به سیستم ها::سیستم مراجعه کنید) برای مدل یک سیستم فیزیکی متشکل از مجموعه ای از اجسام به هم پیوسته.

برای مروری بر مفاهیم/نشان گذاری، به سینماتیک و دینامیک چند تنی مراجعه کنید.

پورت هایی که نام آنها با model_instance_name[i] شروع می شود، گروه هایی از پورت ها را نشان می دهد، یکی برای هر یک از نمونه های مدل، با i ∈ برای نمونه های مدل N. اگر یک نمونه مدل حاوی هیچ داده ای از نوع مشخص شده نباشد، پورت همچنان وجود دارد اما مقدار آن یک بردار با طول صفر خواهد بود.(نمونه های مدل world_model_instance() و default_model_instance() همیشه وجود دارند.)

پورت های نشان داده شده با رنگ سبز برای ارتباط با سیستم SceneGraph Drake برای برخورد با هندسه هستند.

MultibodyPlant یک API کاربر را برای موارد زیر ارائه می دهد:

  • پورت ها: دسترسی به پورت های ورودی و خروجی.
  • ساخت: بدنه ها، اتصالات، قاب ها، عناصر نیرو و محرک ها را اضافه کنید.
  • هندسه: ثبت هندسه ها در یک نمونه SceneGraph ارائه شده.
  • مدل سازی مخاطبین: مدل های مخاطب را انتخاب و پارامترسازی کنید.
  • دسترسی و اصلاح حالت: متغیرهای وضعیت موقعیت و سرعت را بدست آورید و دستکاری کنید.
  • پارامترها کار با پارامترهای سیستم برای عناصر چند بدنه مختلف.
  • بدنه های آزاد: به راحتی با بدنه های آزاد (شناور) کار کنید.
  • سینماتیک و دینامیک: پرس و جوهای سینماتیک و پویا وابسته به زمینه را انجام دهید.
  • ماتریس های سیستم: به طور صریح ماتریس هایی را تشکیل می دهند که در معادلات حرکت ظاهر می شوند.
  • درون نگری: درون نگری را انجام دهید تا بفهمید در MultibodyPlant چه چیزی وجود دارد.

نمونه های مدل

یک MultiBodyPlant ممکن است شامل چندین نمونه مدل باشد. هر نمونه مدل مربوط به مجموعه ای از بدنه ها و اتصالات آنها (مفاصل) است. نمونه های مدل روش هایی را برای دریافت یا تنظیم وضعیت مجموعه بدنه ها (به عنوان مثال، از طریق GetPositionsAndVelocities() و SetPositionsAndVelocities())، اتصال کنترل کننده ها (از طریق get_state_output_port() و get_actuation_input_port()) و سازمان دهی مدل های تکراری (خواندن از طریق یک تجزیه کننده) ارائه می کنند.). در واقع، بسیاری از روش های MultibodyPlant بیش از حد بارگذاری می شوند تا امکان کار بر روی کل کارخانه یا فقط زیر مجموعه مربوط به نمونه مدل را فراهم کنند. برای مثال، یک متد GetPositions() موقعیت های تعمیم یافته را برای کل کارخانه به دست می آورد در حالی که روش دیگر GetPositions() موقعیت های تعمیم یافته را برای نمونه مدل بدست می آورد.

نمونه های مدل غالباً از طریق فایلهای SDFormat (با استفاده از برچسب مدل) تعریف می شوند و هنگامی که پرونده های SDFormat (توسط تجزیه کننده) تجزیه می شوند ، به طور خودکار ایجاد می شوند. دو مقادیر خاص Multibody :: ModelInsticeIndex وجود دارد. بدنه جهان همیشه multibody :: modelinstanceindex 0. multibody :: modelinstanceindex 1 برای همه عناصر بدون نمونه مدل صریح محفوظ است و به طور کلی فقط برای عناصر ایجاد شده به صورت برنامه ای مرتبط است (و فقط وقتی یک نمونه مدل به صراحت مشخص نشده است). توجه داشته باشید که پارسر در صورت نیاز نمونه های مدل (در نتیجه Multixody :: ModelInstanceIndex ≥ 2) ایجاد می کند.

پویایی سیستم

وضعیت یک سیستم چند جانبه x = [q ؛v] توسط وکتور موقعیت های عمومی آن ، از اندازه nq (به num_positions ()) و با سرعت عمومی آن بردار v ، از اندازه nv (به شماره nv مراجعه کنید) داده می شود (به شماره nv مراجعه کنید (). به عنوان یک سیستم Drake ، MultiPyplant معادلات حاکم را برای یک سیستم دینامیکی چند جانبه در فرم ẋ = F (T ، X ، U) با T زمان و نیروهای فعال سازی پیاده سازی می کند. معادلات حاکم برای دینامیک یک سیستم چند جانبه مدل شده با Multixodyplant [Featherstone 2008 ، Jain 2010] است:

q̇ = n (q) v (1) m (q) v̇ + c (q ، v) v = τ

جایی که m (q) ماتریس جرم سیستم چند جانبه (از جمله خواص جرم بدن سفت و سخت و بی تحرکی منعکس شده) است ، c (q ، v) v حاوی اصطلاحات کوریولیس ، گریز از مرکز و ژیروسکوپی و n (q) ماتریس اتصال سینماتیک است که توصیف می کندرابطه بین Q̇ (مشتقات زمان موقعیت های عمومی) و سرعت تعمیم یافته V ، [ست 2010]. n (q) یک ماتریس NQ X NV است. بردار τ ∈ ℝⁿᵛ در سمت راست Eq.(1) نیروهای عمومی سیستم است. اینها شامل گرانش ، چشمه ها ، نیروهای بیرونی بدن ، نیروهای محدودیت و نیروهای تماسی است.

بارگیری مدل ها از پرونده های sdformat

Drake قابلیت بارگذاری مدل های چند جانبه از پرونده های SDformat و URDF را دارد. نمونه ای را که در زیر یک مدل Acrobot بارگذاری می کند در نظر بگیرید:

چند بدنآکروبات ؛ نماد صحنهScene_graph ؛ پارسر پارسر (& Acrobot ، & Scene_graph) ؛ const std :: string nextion_name = "Drake/multibody/معیار/Acrobot/Acrobot. sdf" ؛ const std :: string full_name = findresourceorthrow (nexation_name) ؛ parser. addmodels (full_name) ؛

همانطور که در مثال بالا ، برای مدلهایی از جمله هندسه بصری ، هندسه برخورد یا هر دو ، کاربر باید یک صحنه صحنه را برای هندسه مشخص کند. می توانید یک مثال کامل از Acrobot کنترل شده LQR را در مثال/multibody/acrobot/run_lqr. cc پیدا کنید.

AddModelfromfile () را می توان چندین بار در همان گیاه فراخوانی کرد تا بتواند چندین نمونه مدل را بارگیری کند. روش های دیگر در تجزیه و تحلیل مانند AddModels () موجود است که امکان ایجاد نمونه های مدل را در هر برچسب موجود در پرونده فراهم می کند. لطفاً برای جزئیات بیشتر به هر یک از مستندات این روشها مراجعه کنید.

کار با Scenegraph

اضافه کردن یک مولتی بدن متصل به یک صحنه صحنه به نمودار شما

احتمالاً ساده ترین راه برای افزودن و سیم کشی یک پلاتر با یک صحنه صحنه در نمودار شما ، استفاده از AddMultibodyPlantsCenegraph () است.

به یک مرجع چند بدن (نادیده گرفتن SceneGraph) اختصاص دهید:

چند بدنو گیاه = plant. dofoo (.) ؛

این عطر و طعم ساده ترین است ، هنگامی که صحنه صحنه به صراحت مورد نیاز نیست.(همیشه می توان بعداً از طریق GetSubsystemByname ("Scene_graph") بازیابی شد.)

به خودکار اختصاص دهید و از زمینه های عمومی نامگذاری شده استفاده کنید:

موارد خودکار = AddMultIbodyPlantsCenegraph (& Builder ، 0. 0 / + time_step + /) ؛ items. plant. dofoo (.) ؛ items. scene_graph. dobar (.) ؛

یا بهره گیری از اتصال ساختاری C ++ 17

AUTO [PLANT ، STANGE_GRAPH] = AddMultibodyPlantsCenegraph (& Builder ، 0. 0) ؛ plant. dofoo (.) ؛ STANDE_GRAPH. DOBAR (.) ؛

این ساده ترین راه برای استفاده از گیاه و صحنه_گراف است.

به متغیرهای اشاره گر در حال حاضر اعلام شده اختصاص دهید:

چند بدن* گیاه<>; نماد صحنه* streng_graph<>; std :: کراوات (گیاه ، صحنه_گراف) = plant>dofoo (.) ؛ scene_graph>دوبار (.) ؛

این عطر و طعم زمانی مفید است که نشانگرها زمینه های عضو کلاس باشند (و بنابراین شاید نتواند منابع باشد).

ثبت هندسه با یک صحنه صحنه

کاربران MultiBodyPlant می توانند هندسه را با یک صحنه صحنه برای اساساً دو هدف ثبت کنند. الف) تجسم و ب) مدل سازی تماس.

قبل از هرگونه ثبت نام هندسه ، کاربر ابتدا باید برای ثبت نام MultiPodyplant به عنوان مشتری از یک نمونه SceneGraph ، با ثبت نام Multipodyplant تماس بگیرد ، نکته ای که در آن گیاه یک هندسه معتبر را اختصاص داده است :: SourceId. در Finalize () ، Multixodyplant درگاه های ورودی/خروجی را در صورت لزوم برای برقراری ارتباط با نمونه SceneGraph که در آن ثبت نام کرده است ، اعلام می کند. تمام ثبت نام هندسه باید از قبل از انتشارات انجام شود.

MultiBodyPlant یک درگاه ورودی را برای نمایش داده های هندسی اعلام می کند ، به get_geometry_query_input_port () مراجعه کنید. اگر MultiBodyPlant هندسه را با یک صحنه از طریق تماس برای ثبت نام CollisionGeomety () ثبت کند ، کاربران ممکن است از این درگاه برای نمایش داده های هندسی استفاده کنند. درگاه باید به همان صحنه صحنه مورد استفاده برای ثبت نام وصل شود. مکانیسم ارجح استفاده از AddMultibodyPlantsCenegraph () همانطور که در بالا مستند شده است.

در شرایط خارق العاده ، این کار را می توان با دست انجام داد و روند تنظیم شامل موارد زیر خواهد بود:

  1. برای RegisterAssourceForsCenegraph () تماس بگیرید.
  2. فراخوانی به RegisterCollisionGeomety () ، به اندازه نیاز.
  3. برای نهایی کردن () تماس بگیرید ، کاربر با مشخص کردن مدل انجام می شود.
  4. اتصال هندسه :: SceneGraph :: get_query_output_port () به get_geometry_query_input_port ().
  5. اتصال get_geometry_poses_output_port () را به هندسه :: صحنه graph :: get_source_pose_port ()

برای جزئیات بیشتر به مستندات ارائه شده در هر یک از روشهای فوق مراجعه کنید.

دسترسی به پارامترهای تماس نقطه

مدل تماس نقطه MultiBodyplant به دنبال پارامترهای مدل ذخیره شده به عنوان هندسه:: مجاورت پروپری ها توسط هندسه :: SceneGraph. این خصوصیات را می توان قبل یا بعد از ایجاد زمینه از طریق هندسه بدست آورد :: API های SceneGraphinSpector همانطور که در زیر بیان شده است. MultiBodyPlant از ویژگی های زیر برای مدل سازی تماس نقطه انتظار دارد:

 

اسم گروه نام ملک ضروری نوع خاصیت شرح دارایی
مادی coulomb_friction بله افشای اصطکاک استاتیک و پویا.
مادی point_contact_stiffness بدون T سفتی روش مجازات.
مادی HUNT_CROSSLEY_DISSIPATION no²⁴ T اتلاف روش مجازات.
مادی زمان استراحت بله - T پارامتر برای یک مدل خطی کلوی ن-وویگ از اتلاف.

¹ هندسه برخورد مورد نیاز است که با یک هندسه ثبت شود :: مجاورت پروپروتی که حاوی خاصیت ("ماده" ، "coulomb_friction") است. اگر این ملک از دست رفته باشد ، Multipodyplant استثنائی را به وجود می آورد.

² اگر خاصیت از دست رفته باشد ، Multixodyplant از یک مقدار اکتشافی به عنوان پیش فرض استفاده می کند. برای جزئیات بیشتر به بخش مجازات روش POINT POINT مراجعه کنید.

³ هنگام استفاده از یک مدل خطی کلوی ن-وویگ از اتلاف (به عنوان مثال هنگام انتخاب SAP Solver) ، هندسه برخورد لازم است که با یک هندسه ثبت شود :: مجاورت پروپرتی که حاوی ("ماده" ، "آرامش_ زمان") است. اگر ملک از دست رفته باشد ، یک استثناء پرتاب می شود.

⁴ ما اجازه می دهیم هر دو HUNT_CROSSLEY_DISSIPATION و SEALATION_TIME را برای یک هندسه خاص مشخص کنیم. با این حال ، تنها یکی از این موارد بسته به پیکربندی چند بدن پلانت ، مورد استفاده قرار می گیرد. به عنوان نمونه ، اگر SAP Solver مشخص شده باشد (به SET_DISCRETE_CONTACT_SOLVER () مراجعه کنید) فقط از آرامش_ زمان استفاده می شود در حالی که HUNT_CROSSLEY_DISSIPATION نادیده گرفته می شود. در مقابل ، اگر از حل کننده TAMSI استفاده شود (به SET_DISCRETE_CONTACT_SOLVER () مراجعه کنید) فقط از HUNT_CROSSLEY_DISSIPATION استفاده می شود در حالی که آرامش_ زمان نادیده گرفته می شود. در حال حاضر ، یک مدل چند بدن پیوسته همیشه از مدل Hunt & Crossley استفاده می کند و Relaxation_time نادیده گرفته می شود.

دسترسی و اصلاح خصوصیات تماس نیاز به رابط با هندسه دارد :: بازرس مدل SceneGraph. رابط با یک بازرس مدل به دست آمده از هندسه :: SceneGraph مقادیر ثبت شده پیش فرض را برای یک پارامتر معین ارائه می دهد. این مقادیری هستند که در ابتدا در یک سیستم ظاهر می شوند:: زمینه ایجاد شده توسط ایجاد شده برای createFaultContext (). پس از آن ، به پارامترهای سیستم واقعی می توان از طریق یک سیستم دسترسی پیدا کرد و تغییر کرد :: زمینه یک بار در دسترس است. برای هر دو مورد فوق ، از طریق هندسه :: SceneGraphinspector API به خصوصیات مجاورت دسترسی پیدا می کند.

قبل از ایجاد متن ، یک بازرس می تواند مستقیماً از صحنه های Grate بازیابی شود:

// برای یک صحنه صحنهنمونه ای به نام scene_graph. هندسه const :: Scenegraphinspector& بازرس = STANDE_GRAPH. MODEL_INSPECTOR () ؛

پس از ایجاد زمینه ، یک بازرس را می توان از حالت ذخیره شده در متن توسط درگاه ورودی پرس و جو هندسه گیاه بازیابی کرد:

// برای چند بدننمونه ای به نام MBP و a // متن نوشتهمتن نامیده می شود. هندسه const :: queryObject& query_object = mbp. get_geometry_query_input_port () ارزیابی ارزیابی(متن نوشته)؛& بازرس = query_object. inspector () ؛

هنگامی که یک بازرس در دسترس باشد ، خواص مجاورت می تواند به عنوان:

// برای بدنی با Geometryid به نام GEOMETRY_ID Const Geometry :: مجاورت پروپری ها* props = بازرس. getProximityProperties (GEOMETRY_ID) ؛ افشای& GEOMETRY_FRICTION = props>GetProperty("ماده" ،کار با پارامترهای چند ضلعی

چندین بدن چند مرحله ای پارامترهای را در معرض دید قرار می دهد و به کاربر اجازه می دهد تا برخی از جنبه های مدل گیاه ، سیستم های پست :: ایجاد زمینه را اصلاح کند. برای جزئیات بیشتر ، به مستندات مربوط به multipodyelement که پارامترهای شما در تلاش برای اصلاح/دسترسی هستید (به عنوان مثال Rigidbody ، FixififfsetSframe و غیره) مراجعه کنید.

به عنوان نمونه ، در اینجا نحوه دسترسی و اصلاح پارامترهای توده ای سفت و سخت بدن است:

چند بدنگیاه؛ //کد برای اضافه کردن بدن ، نهایی کردن گیاه و به دست آوردن زمینه. const سفت و سختو بدن = plant. getrigidbodybyname ("نام بدنه") ؛ کنسرت فضاییm_bbo_b = body. getspatialinertiainbodyframe (زمینه) ؛ // .. منطق برای تعیین یک پارامتر جدید فضایی برای بدن. کنسرت فضایی& m_bbo_b_new =. // پارامتر بدن را برای اینرسی فضایی اصلاح کنید. body. setspatialinertiainbodyframe (و متن ، m_bbo_b_new) ؛

مثال دیگر ، کار با تمایز اتوماتیک به منظور گرفتن مشتقات با توجه به یکی از توده های بدن:

چند بدنگیاه؛ //کد برای اضافه کردن اجساد ، نهایی کردن گیاه و به دست آوردن // زمینه و بی تحرک مکانی بدن M_BBO_B. // Scalar گیاه را تبدیل کنید. chear_ptr منحصر به فردplant_autodiff =context_autodiff =CreateFaultContext () ؛ context_autodiff>setTimestateAndParametersfrom (زمینه) ؛ const سفت و سختو بدن = plant_autodiff>getRigidBodyByName ("نام بدنه") ؛ // پارامتر بدن را برای جرم اصلاح کنید. const autodiffxd mass_autodiff (جرم ، وکتور 1d (1)) ؛ body. setMass (context_autodiff. get () ، mass_autodiff) ؛ // m_autodiff (i ، j) . derivatives () (0) ، حاوی مشتقات از // m (i ، j) با توجه به توده بدن. ماتریسM_autodiff(plant_autodiff>num_velocities () ، plant_autodiff>num_velocities ()) ؛ plant_autodiff>calcmassmatrix (*context_autodiff ، & m_autodiff) ؛

اضافه کردن عناصر مدل سازی

عناصر چند جانبه را با روش هایی مانند: اضافه کنید:

  • بدن: addrigidbody ()
  • اتصالات: AddJoint ()
  • برای اطلاعات بیشتر به ساخت و ساز مراجعه کنید.

تمام عناصر مدل سازی باید قبل از نهایی شدن () اضافه شوند. مرحله نهایی را برای بحث مشاهده کنید.

مدل سازی تماس

لطفاً برای جزئیات بیشتر در مورد تقریب ، تنظیم و ملاحظات مربوط به شبیه سازی چند جانبه با تماس اصطکاک ، به مدل سازی تماس با Drake مراجعه کنید.

انرژی و قدرت

MultiBodyplant با برخی محدودیت ها ، روش های انرژی و انرژی سیستم را پیاده سازی می کند.

  • انرژی جنبشی: کاملاً اجرا شده است.
  • انرژی بالقوه و قدرت محافظه کارانه: در حال حاضر فقط گرانش و مشارکت اشیاء نیرو را شامل می شود. انرژی بالقوه از تماس سازگار و محدودیت های مشترک گنجانده نشده است.
  • قدرت غیر محافظه کار: در حال حاضر فقط مشارکتهای اشیاء نیرو را شامل می شود. نیروهای پورت فعال و ورودی ، میرایی مشترک و اتلاف از حد مشترک ، اصطکاک و اتلاف تماس گنجانده نشده است.

برای بحث بیشتر به شماره شماره 12942 مراجعه کنید.

مرحله نهایی ()

پس از اتمام کاربر اضافه کردن عناصر مدل سازی و ثبت هندسه ، باید یک تماس برای نهایی کردن () انجام شود. این تماس خواهد بود:

  • ساختار درخت زیرین مدل چند بدن را بسازید ،
  • وضعیت گیاه را اعلام کنید ،
  • درگاه های ورودی و خروجی گیاه را اعلام کنید ،
  • فیلترهای برخورد را برای نادیده گرفتن برخورد اعلام کنید:
    • بین اجسام متصل توسط یک مفصل ،
    • در زیرگرافهای اجساد جوش داده شده.

    منابع

    • [Featherstone 2008] Featherstone ، R. ، 2008. الگوریتم های دینامیک بدنه سفت و سخت. اسپرینگر
    • [Jain 2010] Jain ، A. ، 2010. Robot and Multixody Dynamics: تجزیه و تحلیل و الگوریتم ها. رسانه های علمی و تجاری Springer.
    • [ست 2010] Seth ، A. ، Sherman ، M. ، Eastman ، P. and Delp ، S. ، 2010. فرمول حداقل حرکت مشترک برای بیومکانیسم. دینامیک غیرخطی ، 62 (1) ، ص . 291-303.

    توابع عضو عمومی

    اجازه کپی ، حرکت یا واگذاری را نمی دهد درگاه های ورودی و خروجی

    این روشها دسترسی به درگاه های ورودی و خروجی سیستم Drake را همانطور که در مستندات کلاس چند بدن نشان داده شده است ، فراهم می کند.

    مقادیر فعال سازی را می توان از طریق یک درگاه ورودی واحد ارائه داد که کل گیاه را توصیف می کند ، یا از طریق پورت های ورودی چندگانه که هر یک مقادیر فعال سازی را برای یک نمونه مدل خاص ارائه می دهند. به AddJointActuator () و num_actuators () مراجعه کنید.

    درگاه های خروجی اطلاعاتی در مورد کل چند بدن یا نمونه های مدل فردی آن ارائه می دهند.

    ساخت و ساز

    برای افزودن عناصر مدل سازی مانند بدن ، اتصالات ، عناصر نیرو ، محدودیت ها و غیره به یک مولتی بدن ، از یکی از روشهای ساخت زیر استفاده کنید. پس از افزودن تمام عناصر مدل سازی ، باید روش نهایی () نامید. تماس با هر روش ساخت و ساز پس از تماس برای نهایی کردن () باعث می شود یک استثناء پرتاب شود. پس از فراخوانی نهایی () ، ممکن است از روشهای چند بدنه استفاده کنید که محاسبات را انجام می دهند. برای جزئیات بیشتر به نهایی () مراجعه کنید.

    محدودیت ها

    مجموعه ای از API ها برای تعریف محدودیت ها. برای ذکر چند نمونه مهم ، می توان از محدودیت ها برای جفت شدن حرکت مفاصل ، ایجاد حلقه های سینماتیک یا جوش دادن اجسام در کنار هم استفاده کرد.

    در حال حاضر محدودیت ها فقط برای مدل های چند بدن گسسته و نه برای همه حل کننده های گسسته پشتیبانی می شوند ، به SET_DISCRETE_CONTACT_SOLVER () مراجعه کنید. اگر این مدل شامل محدودیت هایی باشد که توسط حل کننده گسسته پشتیبانی نمی شود ، گیاه در زمان نهایی () استثنائی می کند. در این مرحله کاربر این گزینه را دارد که حل کننده تماس را با SET_DISCRETE_CONTACT_SOLVER () یا در MultiBodyPlantConfig تغییر دهد ، یا دوباره مدل را تعریف کند تا چنین محدودیتی لازم نباشد.

    هندسه

    روش های هندسه زیر وسیله ای مناسب برای ارتباط هندسه با بدن است. در نهایت ، هندسه ها متعلق به SceneGraph هستند. این روشها کار ثبت نام هندسه های درخواستی را با SceneGraph و حفظ نقشه برداری بین بدن و داده های ثبت شده انجام می دهند. به ویژه ، SceneGraph هیچ چیزی در مورد مفاهیم ذاتی در چند بدن پلات نمی داند. این روشها برای آن اختلافات همانطور که در زیر ثبت شده است ، به حساب می آید.

    ثبت نام هندسه با نقش ها

    هندسه ها می توانند از طریق خانواده روشهای ثبت نام از طریق بدن با اجسام همراه باشند. در صحنه گراف ، هندسه ها نقش هایی دارند. روشهای ثبت نام () روشهای ثبت نام هندسه را با SceneGraph ثبت می کنند و نقش نزدیکی را به آن اختصاص می دهند. روشهای RegisterVisualGeometry () همین کار را انجام می دهند ، اما نقش تصویر را اختصاص می دهند.

    تمام روشهای ثبت نام هندسه یک هندسه را برمی گرداند :: GeometryId Geometryid. اینگونه است که SceneGraph به هندسه ها اشاره دارد. خواص یک هندسه فردی را می توان با شناسه و هندسه آن دسترسی پیدا کرد :: Scenegraphinspector و Geometry :: queryObject (برای نمایش وابسته به دولت در جهان).

    قاب های بدن و قاب های صحنه ای

    اولین باری که یک روش ثبت نام هندسه در بدنه خاصی فراخوانی می شود ، قاب بدنه B در SceneGraph ثبت می شود. همانطور که Scenegraph هیچ چیز در مورد بدن ها نمی داند ، در حوزه Scenegraph ، این قاب به سادگی به عنوان F ذکر شده است. این صرفاً نام مستعار برای قاب بدن است. بنابراین ، موقعیت هندسه G در قاب صحنه F F همانند موقعیت هندسه در قاب بدنه B است. x_fg = x_bg.

    شاخص نمونه مدل بدنه به عنوان "گروه فریم" آن به قاب Scenegraph منتقل می شود. این را می توان از هندسه بازیابی کرد :: SceneGraphinspector :: روش GetFrameGroup (FrameID).

    با توجه به یک GeometerYID ، SceneGraph نمی تواند گزارش دهد که به چه بدنی در آن ضمیمه شده است. این تنها می تواند SceneGraph Alias Frame F. را گزارش دهد. اما اصطلاح زیر می تواند بدن را گزارش کند:

    مولتی بدن& گیاه =.؛ Const Scenegraphinspector& بازرس =.؛ const geometryid g_id = id_from_some_query ؛ const frameid f_id = inspector. getframeid (g_id) ؛ بدنه* body = plant. getbodyfromframeid (f_id) ؛

    به مستندات هندسه مراجعه کنید :: SceneGraphinSpector در مورد اینکه یک بازرس را دریافت کنید.

    در Multixodyplant ، نام فریم فقط باید در یک نمونه مدل منحصر به فرد باشد. با این حال ، Scenegraph هیچ چیز از نمونه های مدل نمی داند. بنابراین ، برای تولید نام های منحصر به فرد برای فریم های مربوطه در SceneGraph ، هنگامی که Multixodyplant قاب صحنه مربوط به صحنه را ثبت می کند ، با "نام scoped" نامگذاری می شود. این یک جمع بندی [نام نمونه مدل] :: [نام بدن] است. جستجوی یک قاب فقط با نام بدنه شکست خواهد خورد.(به بدن :: name () و getModelInstanCename () برای این مقادیر مراجعه کنید.)

    دسترسی ها و جهش های دولتی

    روش های حالت زیر امکان دریافت و تنظیم متغیرهای حالت سینماتیک را فراهم می کند [q ؛v] ، جایی که q بردار موقعیت های عمومی است و v بردار سرعت عمومی است. دولت در زمینه ای قرار دارد که به عنوان اولین استدلال برای هر روش ارائه می شود.

    توجه داشته باشید که بردارهای دولتی برای سیستم کامل به عنوان منابع زنده به متن بازگردانده می شوند ، نه نسخه های مستقل. در مقابل ، بردارهای ایالتی برای نمونه های مدل فردی به عنوان نسخه بازگردانده می شوند زیرا وضعیت مرتبط با یک نمونه مدل به طور کلی در یک زمینه متناقض نیست.

    همچنین برنامه هایی برای دسترسی و جهش بخش هایی از آرایه های دولتی یا فعال سازی متناسب با یک نمونه مدل واحد وجود دارد.

    کار با اجساد رایگان

    یک کاربر چند بدن مجموعه ای از اشیاء بدن و مفصل را به این گیاه اضافه می کند تا یک نمایش فیزیکی از یک مدل مکانیکی بسازد. در نهایی () ، Multixodyplant یک نمایش ریاضی از چنین سیستمی را تشکیل می دهد که از یک نمایش درخت تشکیل شده است. در این نمایندگی به هر بدن یک بسیج اختصاص داده می شود که تعداد مشخصی از درجه آزادی را مطابق با مشخصات فیزیکی اعطا می کند. در این راستا ، بازنمایی مدل سازی را می توان به عنوان جنگلی از ساختارهای درختی مشاهده کرد که هر یک از آنها حاوی یک بدن واحد در ریشه درخت است. اگر بدن ریشه با توجه به جهان شش درجه آزادی داشته باشد ، به آن "بدن آزاد" گفته می شود (که گاهی اوقات "بدن شناور" نامیده می شود). کاربر می تواند مجموعه ای از کلیه بدنهای رایگان را با تماس با GetFloatingBaseBodies () درخواست کند. از طرف دیگر ، یک کاربر می تواند پرس و جو کند که آیا یک بدن آزاد است (شناور) یا نه با بدن :: is_floating (). برای بسیاری از برنامه ها ، ممکن است کاربر نیاز به کار با شاخص ها در بردار حالت چند جانبه داشته باشد. برای چنین برنامه هایی ، Body :: floating_positions_start () و بدن :: floating_velocities_start () سطح اضافی از درون گرایی مورد نیاز را ارائه می دهند.

    گاهی اوقات برای کاربران راحت است که از طریق API های کلاس مشترک ، به طور همه جا انجام دهند. به همین دلیل ما به طور ضمنی یک مفصل 6-DOF ، quateionfloatingjoint را برای همه اجسام آزاد در زمان نهایی سازی () می سازیم. استفاده از API های مشترک برای تأثیرگذاری بر یک بدن آزاد (تنظیم ، تغییر پارامترها و غیره) همان تأثیر استفاده از API های بدن آزاد را در زیر دارد. هر مفصل به طور ضمنی ایجاد شده "$ world_" که "در آن" نام بدن آزاد است ، که توسط بدن :: نام () داده شده است.

    محاسبات سینمایی و پویا

    این روشها نتایج سینماتیک را برای وضعیت ارائه شده در متن داده شده باز می گرداند. روش هایی که نام آنها با EVAL است ، یک مرجع را به حافظه نهان زمینه باز می گرداند ، و ابتدا محاسبات را انجام می دهد فقط در صورت تغییر وضعیت مربوطه. روشهای شروع شده با کالک محاسبات را بدون قید و شرط انجام می دهند و بدون به روزرسانی حافظه نهان نتیجه را برمی گردانند.

    محاسبات ماتریس سیستم

    روشهای موجود در این بخش ماتریس های مختلفی را که در معادلات سیستم حرکت ظاهر می شوند محاسبه و باز می گردند. برای عملکرد بهتر ، ترجیح می دهید از محاسبات مستقیم در صورت موجود بودن به جای کار با ماتریس های صریح استفاده کنید. برای محاسبات موجود به محاسبات سینماتیک و دینامیک مراجعه کنید. به عنوان مثال ، می توانید اصطلاحات "تعصب" ماتریس ، کوریولیس ، گریز از مرکز و ژیروسکوپی و انواع ماتریس های ژاکوبیایی و فعال را بدست آورید.

    درون گرایی

    این روشها به کاربر اجازه می دهد تا پرس و جو کند که آیا یک عنصر چند جانبه معین بخشی از مدل این گیاه است. این نمایش داده ها می تواند در هر زمان در طول زندگی یک مدل چند بدن انجام شود ، یعنی هیچ محدودیتی در مورد اینکه آیا آنها باید قبل یا بعد از نهایی () فراخوانی شوند () وجود ندارد. این نمایش داده ها می توانند در حالی که عناصر چند جانبه جدید به مدل اضافه می شوند ، انجام شود. این روشها به کاربر اجازه می دهد تا مرجع یک عنصر چند جانبه با نام خود را بازیابی کند. اگر هیچ عنصری با نام درخواست شده وجود نداشته باشد ، یک استثنا پرتاب می شود.

    اگر عنصر نامگذاری شده در بیش از یک نمونه مدل وجود داشته باشد و یک نمونه مدل به صراحت مشخص نشده باشد ، std :: logic_error پرتاب می شود.

    دوستان

    توابع مرتبط

    (توجه داشته باشید که اینها کارکردهای عضو نیستند.)

    مدل سازی تماس با ما

    برای انتخاب مدل تماس و ارائه پارامترهای مربوط به آن مدل از روشهای موجود در این بخش استفاده کنید. در حال حاضر Drake از یک مدل تماس با سازگار پیشرفته پشتیبانی می کند که ما با ما تماس هیدرولاستیک و یک مدل تماس نقطه ای مبتنی بر پنالتی را به عنوان یک برگشتی قابل اعتماد می نامیم.

    تماس هیدروالاستیک

    برای درک چگونگی ورود خصوصیات مواد در مدل سازی کشش تماس در مدل هیدرولاستیک ، کاربر به [R. مراجعه می کندElandt 2019] برای جزئیات. برای کوتاه بودن ، در اینجا ما خود را محدود می کنیم تا رابطه بین خصوصیات ماده و محاسبه کشش طبیعی یا "فشار" P (x) را در هر نقطه X در وصله تماس بیان کنیم. با توجه به دو بدن A و B ، به ترتیب با ماژول های هیدرولاستیک Eᵃ و Eᵇ به ترتیب و اتلاف Dᵃ و Dᵇ ، ما خواص ماده مؤثر این جفت را مطابق با: تعریف می کنیم:

    e = eᵃ⋅Eᵇ/(eᵃ + eᵇ) ، d = e/eᵃαdᵃ + e/eᵇαdᵇ = eᵇ/(eᵃ + eᵇ) ⋅dᵃ + eᵃ/(eᵃ + eᵇ) ⋅dᵇ

    محاسبه مدول هیدرولاستیک مؤثر بر اساس آن از مدول الاستیک مؤثر در تئوری تماس هرتز است. اتلاف مطابق با این واقعیت که ماده نرم تر تغییر شکل بیشتر و سریعتر می شود ، وزن می شود و بنابراین به اتلاف مواد نرم تر اهمیت بیشتری داده می شود. مدول هیدرولاستیک دارای واحدهای فشار ، یعنی PA (n/m²) است. مدول هیدروئلاستیک اغلب بر اساس مدول جوان ماده برآورد می شود ، هرچند در مدل هیدروئلاستیک این یک خاصیت الاستیک مؤثر است. به عنوان مثال ، [R. Elandt 2019] تصمیم به استفاده از e = g ، با g مدول الاستیک p-موج g = (1-ν)/(1+ν)/(1-2ν) E ، با نسبت پواسون ، سازگار با تئوریمواد جامد لایه ای که در آن بخش های هواپیما پس از فشرده سازی مسطح باقی می مانند. احتمال دیگر مشخص کردن e = e* ، با e* مدول الاستیک مؤثر داده شده توسط تئوری تماس هرتز ، e* = e/(1-ν²) است. در همه این موارد ، تخمین صوتی از hydroelastic_modulus با مدول جوان مواد شروع می شود.

    توجه داشته باشید Hydroelastic_modulus دارای واحدهای استرس/کرنش است که در Pascal یا N/m² اندازه گیری می شود مانند ماژول های الاستیک تر آشناتر که در بالا مورد بحث قرار گرفت. با این حال ، از نظر کمی متفاوت است و ممکن است برای مطابقت با رفتار تجربی نیاز به آزمایش داشته باشد.

    ما از یک مدل اتلاف Hunt & Crossley پارامتری شده توسط ثابت اتلاف با واحدهای معکوس سرعت ، یعنی S/M استفاده می کنیم. برای جزئیات بیشتر به اتلاف مدل سازی مراجعه کنید.

    اتلاف را می توان از یکی از دو روش مشخص کرد:

    • آن را در نمونه ای از هندسه تعریف کنید :: مجاورت پروپری ها با استفاده از هندسه عملکرد :: addContactMaterial () ، یا
    • آن را در یک پرونده urdf/sdformat ورودی به شرح زیر تعریف کنید: دریک: hunt_crossley_dissipation.

    مدول هیدرولاستیک را می توان از یکی از دو روش مشخص کرد:

    • آن را در نمونه ای از هندسه تعریف کنید:: مجاورت پروپری ها با استفاده از هندسه عملکرد :: addcomplianthydroelasticproperties () و هندسه :: addComplianThyDroeLasticPropertiesForHalfSpace () یا یا
    • آن را در یک پرونده URDF/SDFormat ورودی به شرح زیر تعریف کنید: Drake: Hydroelastic_Modulus.

    با خصوصیات مؤثر جفت تعریف شده در بالا ، میدان فشار مدل هیدرولاستیک مطابق با: محاسبه می شود:

    P (x) = e⋅ε (x) ⋅ (1 - d⋅vₙ (x)) ₊

    جایی که ما فشار مؤثر را تعریف کردیم:

    ε (x) = εᵃ (x) + εᵇ (x)

    که مربوط به میدان فشار شبه استاتیک P₀ (x) (یعنی وقتی سرعت مورد غفلت قرار می گیرد) توسط:

    p₀ (x) = e⋅ε (x) = eᵃ⋅εᵃ (x) = eᵇ⋅εᵇ (x)

    یعنی مدل هیدروئلاستیک با فرض تعادل شبه استاتیک ، وصله تماس را محاسبه می کند. سرعت جداسازی Vₙ (x) به عنوان مؤلفه در جهت NORMAL NORMAL NORMATE سطح تماس (X) از سرعت نسبی بین AX و BX در نقطه X محاسبه می شود و در نقطه X به ترتیب با قاب های بدن A و B حرکت می کند ، یعنی Vₙ (X) = ᴬˣVᴮˣ⋅N̂ (x) ، جایی که NOM NOT (X) از بدن A به بدن B می رود.

    [Elandt 2019] R. Elandt ، E. Drumwright ، M. Sherman و A. Ruina. یک مدل میدان فشار برای تقریب سریع و قوی نیروی تماس خالص و لحظه ای بین اشیاء سفت و سخت. پروکIEEE/RSJ Intl. کنفرانسدر مورد روبات ها و سیستم های هوشمند (IROS) ، 2019.

    تماس با روش مجازات

    در حال حاضر MultiBodyPlant از یک مدل تماس سفت و سخت استفاده می کند که بدن در مدل بی نهایت سخت یا بدنهای سفت و سخت است. بنابراین ، توضیحات ریاضی مدل تماس سفت و سخت نیاز به محدودیت های غیر ثبت در بدن در فرمولاسیون دارد. چندین روش عددی برای تحمیل و حل این محدودیت ها وجود دارد. در یک روش پنالتی ، ما مقدار مشخصی از تعامل را امکان پذیر می کنیم و نیروهای تماسی را با توجه به یک قانون ساده فرم محاسبه می کنیم:

    fₙ = k (1+dẋ) x

    where the normal contact force fₙ is made a continuous function of the penetration distance x between the bodies (defined to be positive when the bodies are in contact) and the penetration distance rate ẋ (with ẋ>0 به این معنی که فاصله نفوذ در حال افزایش است و بنابراین تعامل بین اجسام نیز در حال افزایش است). با توجه به یک جفت هندسه برخورد ، K و D ضرایب روش پنالتی ترکیبی برای سفتی و اتلاف است. اتلاف با استفاده از یک مدل Hunt & Crossley از اتلاف مدل سازی شده است ، برای جزئیات بیشتر به مدل سازی اتلاف مراجعه کنید. برای انعطاف پذیری پارامتری ، سختی و اتلاف بر اساس هر ژامع سنجی تنظیم می شود (دسترسی به_ contact_properties). با توجه به دو هندسه با سختی و پارامترهای اتلاف فردی (K₁ ، D₁) و (K₂ ، D₂) ، ما قانون را برای سختی ترکیبی (K) و اتلاف (D) تعریف می کنیم:

    k = (k1⋅k2)/(k1+k2) d = (k2/(k1+k2))⋅d1 + (k1/(k1+k2))⋅d2

    این پارامترها برای هر هندسه اختیاری هستند. برای هر هندسه ای که این پارامترها توسط کاربر Pre-Finalize اختصاص داده نشده است، MultibodyPlant مقادیر پیش فرضی را به گونه ای اختصاص می دهد که پارامترهای ترکیبی دو هندسه با مقادیر پیش فرض با پارامترهای برآورد شده با استفاده از "مجوز نفوذ" ارائه شده توسط کاربر مطابقت داشته باشند، همانطور که در زیر توضیح داده شده است.

    اینها پارامترهای موقتی هستند که باید به عنوان یک مبادله بین:

    • دقت تقریب عددی به تماس صلب، که به سختی نزدیک به بی نهایت نیاز دارد، و
    • هزینه محاسباتی ادغام عددی، که برای سیستم های سفت تر به مراحل زمانی کمتری نیاز دارد.

    هیچ روش دقیقی برای انتخاب این ضرایب وجود ندارد و تخمین دستی آنها می تواند دشوار باشد زیرا به طور کلی به مقیاس مشکل از جمله جرم، سرعت و حتی اندازه بدن بستگی دارد. با این حال، MultibodyPlant به تخمین این ضرایب با استفاده از یک تابع اکتشافی مبتنی بر "مجوز نفوذ" ارائه شده توسط کاربر کمک می کند، به set_penetration_allowance() مراجعه کنید. مجاز نفوذ عددی بر حسب متر است که مرتبه بزرگی میانگین نفوذ بین اجسام در سیستم را مشخص می کند که کاربر مایل است آن را به عنوان منطقی برای مشکل حل شده بپذیرد. به عنوان مثال، در دستکاری رباتیک اشیاء معمولی روزانه، کاربر ممکن است این عدد را روی 1 میلی متر تنظیم کند. با این حال، کاربر ممکن است بخواهد آن را برای شبیه سازی ربات های پیاده روی سنگین افزایش دهد که با استفاده از یک میلی متر، یک سیستم بسیار سفت ایجاد می شود.

    در مورد ضریب اتلاف در قانون ساده بالا، MultibodyPlant ضریب اتلاف d را برای مدل سازی برخوردهای غیرالاستیک انتخاب می کند و بنابراین آن را طوری تنظیم می کند که فاصله نفوذ x مانند یک نوسان گر میرا شده بحرانی رفتار کند. یعنی در حد تماس صلب ایده آل (ضریب جریمه بسیار سفت k یا معادل آن میزان نفوذ به صفر می رسد)، این روش به عنوان یک محدودیت یک طرفه در فاصله نفوذ عمل می کند که یک برخورد غیرکشسان کامل را مدل می کند. برای اکثر کاربردها، مانند دستکاری و راه رفتن، این رفتار مطلوب است.

    هنگامی که set_penetration_allowance () خوانده می شود ، Multixodyplant ضرایب روش مجازات معقول را به عنوان تابعی از کمک هزینه نفوذ ورودی تخمین می زند. کاربران می خواهند چندین بار شبیه سازی خود را اجرا کنند و ارزیابی کنند که از سطح بین نفوذ در واقع در شبیه سازی راضی هستند. اگر نفوذ مشاهده شده خیلی بزرگ باشد ، کاربر می خواهد کمک هزینه نفوذ کمتری را تعیین کند. اگر سیستم خیلی سفت باشد و ادغام زمان نیاز به مراحل زمان بسیار کمی دارد در حالی که در عین حال کاربر می تواند از بین برداشت های بیشتری برخوردار باشد ، کاربر می خواهد کمک هزینه نفوذ را افزایش دهد. به طور معمول ، نفوذ مشاهده شده متناسب با کمک هزینه نفوذ خواهد بود. بنابراین مقیاس کمک به نفوذ با گفتن یک عامل 0. 5 ، به طور معمول منجر به کاهش بین نفوذ با همان عامل 0. 5 می شود. به طور خلاصه ، کاربران باید بزرگترین کمک هزینه نفوذ را انتخاب کنند که منجر به سطح بین نفوذ می شود که برای کاربرد خاص قابل قبول است (حتی در صورت تئوری این نفوذ باید برای بدنهای کاملاً سفت و سخت صفر باشد.)

    برای کمک هزینه نفوذ معین ، تعامل تماس که دو بدن را با سرعت نزدیک به صفر به سرعت نزدیک می کند ، در مدت زمان محدودی انجام می شود (برای تماس سفت و سخت ایده آل این بار صفر است.) تخمین خوبی از این زماندوره با یک تماس به get_contact_penalty_method_time_scale () داده می شود. کاربران ممکن است بخواهند این مقدار را برای تنظیم حداکثر مرحله زمان ادغام زمان کنترل خطا یا تنظیم مرحله زمان برای ادغام مرحله زمان ثابت تنظیم کنند. به عنوان یک راهنمایی ، یکپارچه سازنده های مرحله ثابت معمولی برای مراحل زمانی بزرگتر از حدود دهم این مقیاس زمانی ناپایدار می شوند.

    برای اطلاعات بیشتر در مورد مدل سازی تماس در Drake ، لطفاً به بخش Modeling Contact در Drake از مستندات ما مراجعه کنید.

    مدل سازی اتلاف

    ما از یک مدل اتلاف با الهام از مدل در [Hunt and Crossley ، 1975] استفاده می کنیم ، که توسط یک ثابت اتلاف با واحدهای معکوس سرعت ، یعنی S/M پارامتر می شود.

    به طور دقیق تر ، نیروهای تماس با نقطه سازگار به عنوان تابعی از حالت X مدل می شوند:

    f (x) = f₀ (x) سیا (1 - d⋅vₙ (x)) ₊

    در اینجا f₀ (x) نیروهای الاستیک را نشان می دهد ، Vₙ (x) سرعت تماس در جهت عادی است (با نزدیک شدن به اشیاء منفی) و (الف) ₊ "قسمت مثبت A" را نشان می دهد. پارامتر مدل D ثابت اتلاف Hunt & Crossley در S/M است. اصطلاح Hunt & Crossley (1 - D⋅Vₙ (x)) ₊ تأثیر اتلاف را به دلیل تغییر شکل مدل می کند.

    به طور مشابه ، مدل تماس هیدروئلاستیک دریک به جای نیروها ، از بین رفتن در سطح استرس برخوردار است. یعنی فشار p (x) در یک نقطه خاص روی سطح تماس ، جایگزین نیروی f (x) در مدل تماس نقطه است:

    P (x) = P₀ (x) ⋅ (1 - d⋅vₙ (x)) ₊

    جایی که p₀ (x) فشار هیدرولاستیک (الاستیک) و یک بار دیگر اصطلاح (1 - d⋅vₙ (x)) است.

    [هانت و کرالی 1975] هانت ، KH و کراسلی ، Fre ، 1975. ضریب بازگرداندن به عنوان میرایی در VibroiMpact تعبیر می شود. مجله مکانیک کاربردی ، جلد. 42 ، صص 440-445.< SPAN> در اینجا F₀ (x) نیروهای الاستیک را نشان می دهد ، Vₙ (x) سرعت تماس در جهت عادی است (با نزدیک شدن به اشیاء منفی) و (الف) ₊ "قسمت مثبت A" را نشان می دهد. پارامتر مدل D ثابت اتلاف Hunt & Crossley در S/M است. اصطلاح Hunt & Crossley (1 - D⋅Vₙ (x)) ₊ تأثیر اتلاف را به دلیل تغییر شکل مدل می کند.

سیگنال های تجاری...
ما را در سایت سیگنال های تجاری دنبال می کنید

برچسب : نویسنده : عبدالله بوتیمار بازدید : <-PostHit-> تاريخ : پنجشنبه 26 مرداد 1402 ساعت: 13:18