• اولین مرجع آموزش رآس در ایران
  • info@iranros.com
wikiros-minwikiros-minwikiros-minwikiros-min
  • ایران رآس
  • ROS
    • پیش نیازهای شروع ROS
      • بررسی مفاهیم، اطلاعات فنی
      • نصب ROS برای تمام توزیع‌ها
      • برای آموزش ROS از کجا شروع کنیم؟
      • آموزش ROS
      • واژه‌نامه ROS
    • آموزش گام به گام
      • پیش‌نیازهای ROS
      • آموزش مقدماتی ROS
      • آموزش سطح متوسط
    • .
    • .
  • Software
    • نمایشگر سه‌بعدی (Rviz)
    • شبیه‌ساز گزبو Gazebo
    • نرم افزار moveit
  • Robots
    • Robots
      • ربات‌های پرکاربرد در ROS
        • ربات‌های زمینی
      • حسگرهای پرکاربرد در ROS
      • موتورهای پرکاربرد در ROS
  • publications
  • ایران رآس
  • ROS
    • پیش نیازهای شروع ROS
    • آموزش گام به گام
    • .
    • .
  • Software
    • نمایشگر سه‌بعدی (Rviz)
    • شبیه‌ساز گزبو Gazebo
    • نرم افزار moveit
  • Robots
    • Robots
  • publications
ربات متحرک TIAGo
ربات TIAGo
نوامبر 1, 2019
حسگر Velodyne LIDAR
دسامبر 3, 2019

مدلسازی سه بعدی ربات در ROS

Categories
  • آموزش جامع ROS
  • آموزش سطح متوسط ROS
Tags
  • gazebo
  • joint
  • link
  • modeling in ros
  • ros
  • urdf
  • xacro
  • xacro macro
  • شبیه سازی ربات
  • مدلسازی در راس
  • مدلسازی ربات

مدلسازی سه بعدی ربات در ROS

اولین گام برای ساخت یک ربات واقعی طراحی و مدلسازی آن است. برای مدلسازی سه بعدی یک ربات می‌توانیم از نرم‌افزارهای CAD نظیر CATIA ،SolidWorks، AutoCAD و امثال آن استفاده کنیم.  یکی از اهداف مدلسازی یک ربات، استفاده از آن برای شبیه‌سازی است. در شبیه‌سازی است که می‌توان بدون صرف وقت و هزینه، عیوب و مشکلات طراحی را شناسایی و آن‌ها را قبل از ساخت برطرف کرد.

مدلی که برای شبیه‌سازی استفاده می‌شود بایستی تمامی خواص فیزیکی ربات واقعی را داشته باشد، البته شکل ظاهری ربات می‌تواند ساده‌تر از مدل واقعی باشد.

در ROS از شبیه ساز قدرتمند Gazebo برای شبیه‌سازی رفتار ربات در شرایط گوناگون و بررسی عملکرد کنترل‌کننده‌ها و … استفاده می‌شود، اما لازمه استفاده از این شبیه‌ساز این است که ربات طبق استانداردهای ROS تعریف شده باشد. برای طراحی و ساخت مدل سه‌بعدی ربات، رآس بسته متایی به نام robot_model در اختیار دارد که شامل بسته‌هایی نظیر urdf، kdl_parser، robot_state_publisher، collada_urdf و امثال آن است که به ما کمک می‌کنند تا یک مدل سه‌بعدی از ربات را با تطبیق خوبی با واقعیت ایجاد کنیم.همچنین رآس این امکان را به ما می‌دهد تا فایل CAD طراحی شده برای اجزای ربات خودمان را نیز به آن بدهیم تا در نمایش گرافیکی شبیه‌سازی از آن استفاده کند.

در ادامه نحوه ایجاد یک ربات در رآس را به صورت گام به گام آموزش می‌دهیم.

بسته‌های ROS برای مدلسازی ربات

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

  • متا-بسته robot_model: این متا-بسته شامل بسته‌های مهمی برای مدلسازی است که از جمله مهمترین آنها به شرح زیر است:
  • urdf: یکی از مهمترین بسته‌های موجود در متا-بسته robot_model، بسته urdf است. این بسته حاوی یک تجزیه‌‌کننده (پارسر) C++ برای فرمت یکپارچه تعریف ربات (URDF)، به صورت یک فایل xml برای بیان مدل ربات است.
  • joint_state_publisher : این ابزار زمانی که مدل ربات را با استفاده از urdf طراحی می‌کنیم بسیار به ما کمک می‌کند. این بسته حاوی نودی به نام joint_state_publisher است که مدل تعریف شده برای ربات را می‌خواند سپس مفاصل آن را شناسایی کرده و مقادیر ارسالی از کاربر را بر روی مفاصل اعمال می‌کند. امکان تغییر مقادیر هر کدام از مفاصل توسط جابجایی اسلایدر و نمایش گرافیکی حرکت ربات توسط Rviz قابل انجام است. در اینصورت کاربر در هنگام طراحی urdf این امکان را دارد تا دوران و انتقال هر مفصل را با استفاده از این ابزار به خوبی تشخیص بدهد.
  • kdl_parser : کتابخانه سینماتیک و دینامیک(KDL) بسته‌ای در ROS است که می‌تواند با استفاده از اطلاعات فایل urdf یک زنجیره سینماتیکی از ربات ایجاد کند. از این زنجیره سینماتیکی برای انتشار حالت مفاصل و همچنین برای سینماتیک مستقیم و معکوس ربات استفاده می‌شود.
  • robot_state_publisher : این بسته وضعیت فعلی مفاصل ربات را خوانده و سپس با توجه به روابط سینماتیکی ربات که در urdf تعیین شده است، موقعیت فضایی هر کدام از لینک‌ها را محاسبه می‌کند. لازم به ذکر است که موقعیت فضایی ربات در ROS به صورت ماتریس‌ انتقال(tf) که بیانگر ارتباط بین دستگاه‌ها مختصات ربات است، منتشر می‌شود.

به کمک urdf ما این امکان را داریم که مدل یک ربات، سنسورها، و محیط کاری پیرامون آن را تعریف کنیم. در urdf  ما تنها می‌توانیم ربات را به صورت ساختار درختی در اتصال لینک‌ها تعریف کنیم که در آن ربات دارای لینک‌های صلب بوده که توسط مفاصل به یکدیگر متصل شده‌اند. بنابراین لینک‌های انعطاف‌پذیر در urdf قابل تعریف نیستند.

استفاده از xacro-macro در URDF

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

برای اطلاعات بیشتر در رابطه با xacro به مقاله مدلسازی ربات به کمک Xacro مراجعه کنید.

بررسی ساختار URDF

در بخش قبل با urdf آشنا شدید. در این قسمت قصد داریم تا مدلسازی ربات با استفاده از urdf را آموزش دهیم.

برای مدلسازی یک ربات لازم است تا ارتباط بین لینک‌ها و مفاصل آن در فایلی با پسوند .urdf مشخص شود.

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

تذکر: برای درک بهتر ساختار تگ‌ها لازم است تا مقداری با xml آشنایی داشته باشید.

در urdf برای هر تگ خواص و المانهایی تعریف شده است که بنابر نیاز می‌توان از آنها استفاده کرد، البته بعضی از آنها اجباری هستند. در شکل زیر این المان‎‌های به صورت کلی آورده شده‌اند.

robot model

بررسی تگ link

در ادامه به توضیح هر کدام از این بخش های می‌پردازیم

۱-تگ Link:

تگ link معرف یک لینک یا عضو مجزا از ربات می‌باشد. با استفاده از این تگ ما می‌توانیم یک لینک از ربات را به همراه خصوصیات هندسی( نظیر اندازه، شکل، رنگ و حتی مدل CAD سه بعدی) و همچنین خصوصیات فیزیکی ( نظیر جرم، اینرسی و خواص برخورد)، مدل کنیم.

ساختار کلی این تگ به صورت زیر است:

<link name="my_link">
   <inertial>
     <origin xyz="0 0 0.5" rpy="0 0 0"/>
     <mass value="1"/>
     <inertia ixx="100"  ixy="0"  ixz="0" iyy="100" iyz="0" izz="100" />
   </inertial>

   <visual>
     <origin xyz="0 0 0" rpy="0 0 0" />
     <geometry>
       <box size="1 1 1" />
     </geometry>
     <material name="Cyan">
       <color rgba="0 1.0 1.0 1.0"/>
     </material>
   </visual>

   <collision>
     <origin xyz="0 0 0" rpy="0 0 0"/>
     <geometry>
       <cylinder radius="1" length="0.5"/>
     </geometry>
   </collision>
 </link>

همانطور که در مثال بالا مشاهده می‌کنید تگ link از سه المان اصلی زیر تشکیل شده است:

<link	name="<name of the link>">
 <inertial>...........</inertial>
 <visual> ............</visual>
 <collision>..........</collision>
</link>

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

که هر کدام از این المان‌ها نیز دارای المان‌ها و خواصی می‌باشند.

۱- تگ Inertial

تگ inertial برای تعیین خصوصیات دینامیکی لینک مورد نظر می‌باشد به این ترتیب شما می‌توانید با استفاده از پارامترهای زیر خصوصیات دینامیکی لینک مورد نظر خودتان را مشخص کنید.

  • <origin>

xyz بیانگر مختصات مرکز جرم لینک و مرکز دستگاه مختصات اینرسی(inertial)، نسبت به دستگاه مرجع لینک(link origin) بوده و همچنینrpy نیز دوران دستگاه مختصات اینرسی نسبت به دستگاه مرجع لینک را بیان می‌کند.(به شکل زیر نگاه کنید) .

  • <mass>

در این تگ جرم لینک بر اساس کیلوگرم تعیین می‌شود.

  • <inertia>

در این قسمت ماتریس اینرسی دورانی لینک موردنظر حول محورهای تعیین شده در تگ origine بیان می‌شود. از آنجایی که ماتریس اینرسی دورانی متقارن است با تعیین ۶ پارامتر مستقل ixx, ixy, ixz, iyy, iyz, izz. این ماتریس توصیف می‌شود. دقت داشته باشید که مقادیر این ماتریس باید بر اساس قرارگیری محورهای دستگاه اینرسی در مرکزجرم لینک محاسبه شده باشند. برای استخراج این مقادیر برای لینکهای دارای پیچیدگی هندسی می‌توانید از نرم‌افزارهای CAD استفاده کنید.

۲-تگ های <visual> و <collision>

مدل  <visual> بیانگر ناحیه واقعی لینک با شکل ظاهری احتمالاً پیچیده است و مدل <collision> بیانگر ناحیه دربرگیرنده مدل واقعی لینک، با ظاهری ساده است که از آن برای محاسبات برخورد در شبیه‌سازی استفاده می‌شود.

در المان های <visual> و <collision> تگ <origin> بیانگر وضعیت این المانها نسبت به دستگاه مرجع لینک می‌باشد.

در تگ <geometry> می‌توان شکل هندسی مدل را در هر دو حالت <visual> و <collision> تعیین کرد. برای این کار دو روش موجود است:

  1. استفاده از المانهای استاندارد مکعب، استوانه و کره

  • <box> : شامل سه ضلع یک مکعب به صورت( size=”1 1 1″ )و مبدأ مختصات در مرکز
  • <cylinder> : شامل شعاع و طول استوانه به صورت (radius=”1″ length=”0.5″) و مبدأ مختصات در مرکز با جهت گیری به صورت زیر :
  • <sphere> : شامل شعاع به صورت (radius=”1″) و مبدأ مختصات در مرکز
  1. ارجاع به یک فایل CAD با استفاده از تگ <mesh>

در این حالت باید فایل CAD مربوط به لینک مورد نظر را با پسوندهای.dae و یا .stl در پوشه محلی پکیج مورد نظر قرار داد و آدرس آن را در این تگ به صورت زیر وارد کرد.

<mesh filename="package://package_name/meshes/link.dae" scale="1 1 1" />

در تگ <color> نیز می‌توانید رنگ دلخواه را برای هر لینک انتخاب کنید.

بررسی تگ joint

۲-تگ Joint :

تگ joint مشخص کننده مفاصل ربات است. در این تگ نیز ما می‌توانیم ویژگی‌های سینماتیکی و دینامیکی مفاصل را تعیین کنیم. همچنین می‌توانیم محدوده‌های مجاز برای جابجایی و سرعت مفاصل را مشخص کنیم. تگ joint انواع مختلف مفاصل نظیر دورانی(revolute)، کشویی(prismatic)، پیوسته(continuous )، ثابت(fixed)، شناور(floating ) و صفحه‌ای(planar) را پشتیبانی می‌کند.

ساختار کلی المان‌ها و خواص این تگ به صورت زیر است:

<joint name="my_joint" type="floating">
    <origin xyz="0 0 1" rpy="0 0 3.1416"/>
    <parent link="link1"/>
    <child link="link2"/>

    <calibration rising="0.0"/>
    <dynamics damping="0.0" friction="0.0"/>
    <limit effort="30" velocity="1.0" lower="-2.2" upper="0.7" />
    <safety_controller k_velocity="10" k_position="15" soft_lower_limit="-2.0" soft_upper_limit="0.5" />
 </joint>

یک مفصل در urdf از اتصال بین دو لینک تشکیل می‌شود، به این صورت که لینک اول Parent و لینک دوم Child نامیده می‌شود. در شکل زیر یک مفصل به همراه لینک‌های آن مشاهده می‌شود.

المان‎‌ها و خواص تگ joint

 

ابتدا اجازه بدهید تا تعریفی از هر کدام از انواع این مفاصل ارائه دهیم.

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

تگ joint دارای ویژگی‌های زیر است:

  • name : مشخص کردن نام مفصل
  • type : مشخص کردن نوع مفصل

المان‌ها

  • Origin

در این تگ، فاصله محل قرارگیری مبدأ لینک  child از مبدأ دستگاه parent که به عنوان مفصل این دو لینک شناخته خواهد شد، تعیین می‌شود. برای درک بیشتر تصویر بالا را نگاه کنید. به صورت پیشفرض اگر این مقدار تنظیم نشود، مبدأ دو لینک روی هم قرار می‌گیرد.

  • Parent

در این قسمت نام لینک parent آورده می‌شود.

  • Child

در این قسمت نام لینک child آورده می‌شود.

  • Axis  (optional)

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

  • Calibration  (optional)

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

  • Dynamics  (optional)

این گزینه هم، آپشنال بوده و توسط آن می‌توان خواص فیزیکی مفصل را مشخص کرد، این داده‌ها برای قسمت شبیه‌سازی مفید است. این خواص شامل damping و friction است.

  • Limit

این گزینه تنها برای مفاصل دورانی و کشویی ضروری است و محدودیت های مفاصل در آن تعیین می‌شود و شامل موارد زیر است.

  • Lower : حد پایین حرکت مفصل(مقادیر بر حسب رادیان برای مفاصل دورانی و متر برای مفاصل کشویی، درصورتی که مفصل پیوسته باشد این پارامتر نباید مقداردهی شود.)
  • Upper : حد بالای حرکت مفصل.
  • Effort : این گزینه برای تعیین کردن حداکثر نیرو یا گشتاور مجاز اعمالی به مفصل می‌باشد.
  • velocity  : این گزینه برای تعیین کردن حداکثر سرعت مجاز مفصل می‌باشد.
  • Mimic  (optional)

از این تگ زمانی استفاده می‌شود که بخواهیم بین دو مفصل قید حرکتی ایجاد کنیم به گونه‌ای که یک مفصل حرکت دیگری را تقلیدکند. برای این کار دو پارامتر multiplier   و offset   برای تعیین حرکت مفصل جدید از طریق رابطه زیر در این تگ قابل تنظیم‌اند.

value = multiplier * other_joint_value + offset.

  • safety_controller  (optional)

در این تگ پارامترهای زیر تعیین می‌شوند:

  • soft_lower_limit : این پارامتر حد پایین مقداری است که کنترلر برای حفظ ایمنی، با رسیدن مفصل به آن شروع به محدود کردن موقعیت مفصل می‌کند.
  • soft_upper_limit : این پارامتر حد بالای حالت بالایی است.
  • k_position : این پارامتر بیانگر ارتباط بین محدوده‌های سرعت و موقعیت است.
  • k_velocity : این پارامتر بیانگر ارتباط بین محدوده‌های نیرو و سرعت است.

برای درک بهتر می‌توانید نمودارهای زیر را مشاهده کنید.

تگهای transmission و gazebo برای تنظیمات تخصصی تر می‌باشد که در آینده به توضیح آنها خواهیم پرداخت.

تگGazebo  ، transmission

Share
2

Related posts

مارس 16, 2020

نصب ROS بر روی ویندوز ۱۰


Read more
استاندارد نامگذاری منابع در ROS

یکی دیگر از استانداردهای ROS نحوه نامگذاری منابع در رآس است

فوریه 25, 2020

بررسی استاندارد نامگذاری منابع در ROS


Read more
بررسی استاندارد مربوط به واحد اندازه‌گیری و دستگاه های مختصاتی در ROS

واحد اندازه‌گیری و دستگاه‌های مختصاتی برای استفاده در ROS مورد بررسی قرار می گیرد.

فوریه 19, 2020

بررسی استاندارد واحد اندازه‌گیری و دستگاه های مختصاتی


Read more

دیدگاهتان را بنویسید لغو پاسخ

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

آموزش سیستم عامل رباتیک ROS

  • پیش‌نیازهای شروع ROS
    • نصب Ubuntu در کنار ویندوز به صورت Dual Boot
    • نحوه نصب اوبونتو بر روی VMware در ویندوز ۱۰
    • اشتراک اطلاعات بین ویندوز و ماشین مجازی(VMware)
    • راه اندازی و تنظیمات اولیه Ubuntu جهت کار با ROS
    • نصب ROS
  • آموزش مقدماتی ROS
    • گام اول: نصب و پیکربندی محیط ROS
    • گام دوم: آدرس دهی در ROS
    • گام سوم: ایجاد بسته در ROS
    • گام چهارم :مفهوم Node در ROS
    • گام پنجم : مفهوم تاپیک در ROS
    • گام ششم : مفهوم service و parameters در ROS
    • گام هفتم : مفهوم launch فایل‌ها در ROS
    • گام هشتم : ایجاد فایل‌های msg و srv در ROS
    • گام نهم: مفهوم Publisher-Subscriber در ROS به زبان ++C
    • گام دهم: مفهوم Publisher-Subscriber در ROS به زبان python
    • گام یازدهم: ضبط و بازپخش داده‌ها در ROS
    • گام دوازدهم: نوشتن یک service و client ساده (C++)
    • گام سیزدهم: نوشتن یک service و client ساده (Python)
  • آموزش سطح متوسط ROS
    • ساخت یک پکیج به صورت دستی
    • مدیریت وابستگی‌های سیستم
    • تعریف پیام های سفارشی در ROS
    • مقدمه‌ای بر شبیه‌ ساز گزبو Gazebo
    • مقدمه‌ای بر RVIZ نمایشگر سه‌بعدی

ربات‌ها

  • ربات‌های زمینی
    • ربات TIAGo
    • TurtleBot
  • ربات‌های هوایی
  • بازوهای رباتیک
  • ربات‌های دریایی

برچسب‌ها

  • ;hvhdd fhgh
  • A Gentle Introduction to ROS
  • actor
  • actor_Gazebo
  • ajk nv vhs
  • bash
  • C++
  • ca tvhsd v
  • catkin
  • chmode

Google-fomrs

ایران رآس، اولین مرجع آموزش و توسعه ROS در ایران

سایت ایران رآس با بهره گیری از متخصصین حوزه رباتیک به تولید محتوای آموزشی پرداخته و آنها را در اختیار کاربران قرار می­دهد . همچنین متخصصین ما این آمادگی را دارند تا به موسسات و مراکزی که قصد ورود به دنیای رآس را دارند مشاوره های تخصصی داده و برای آنها دوره های آموزشی خصوصی برگزار کند.


درباره ما تماس با ما قوانین و مقررات ثبت شکایات
  • پیش نیازهای ROS
  • آموزش مقدماتی ROS
  • آموزش سطح متوسط ROS
  • کتاب آموزش ROS
  • نرم افزارها
  • ربات‌ها
© تمام حقوق مادی و معنوی برای ایران رآس محفوظ است.
  • No translations available for this page