فهرست مطالب:

کنترلر رباتیک ROS مبتنی بر Matlab: 9 مرحله
کنترلر رباتیک ROS مبتنی بر Matlab: 9 مرحله

تصویری: کنترلر رباتیک ROS مبتنی بر Matlab: 9 مرحله

تصویری: کنترلر رباتیک ROS مبتنی بر Matlab: 9 مرحله
تصویری: کنترل ربات مبتنی بر رزبری پای پیکو به کمک شتاب سنج موبایل 2024, جولای
Anonim
Image
Image
کنترلر رباتیک ROS مبتنی بر Matlab
کنترلر رباتیک ROS مبتنی بر Matlab

من از کودکی همیشه آرزو داشتم مرد آهنی باشم و هنوز هم دارم. مرد آهنی یکی از آن شخصیت هایی است که واقعاً امکان پذیر است و به سادگی من آرزو دارم که روزی مرد آهنی شوم ، حتی اگر مردم به من بخندند یا بگویند این کار غیرممکن است زیرا "تا زمانی که کسی این کار را انجام ندهد" غیرممکن است-آرنولد شوارتزنگر.

ROS یک چارچوب نوظهور است که برای توسعه سیستم های رباتیک پیچیده استفاده می شود. برنامه های کاربردی آن عبارتند از: سیستم مونتاژ خودکار ، دورکاری ، سلاح های مصنوعی و ماشین آلات سنگین در بخش صنعتی.

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

بنابراین این دستورالعمل در مورد چگونگی ساخت کنترلر روباتیک ROS مبتنی بر Matlab است ، این یکی از معدود آموزش های موجود در این زمینه و در میان معدود دستورالعمل های ROS خواهد بود. هدف این پروژه طراحی کنترلر است که می تواند هر روبات ROS متصل به شبکه شما را کنترل کند. بنابراین بیایید شروع کنیم!

اعتبار ویرایش ویدئو: Ammar Akher ، در [email protected]

تدارکات

اجزای زیر برای پروژه مورد نیاز است:

(1) ROS PC/Robot

(2) روتر

(3) کامپیوتر با MATLAB (نسخه: 2014 یا بالاتر)

مرحله 1: راه اندازی همه چیز

راه اندازی همه چیز
راه اندازی همه چیز

برای این دستورالعمل ، من از اوبونتو 16.04 برای رایانه linux و ros-kinetic خود استفاده می کنم ، بنابراین برای جلوگیری از سردرگمی ، توصیه می کنم از ros kinetic و ubuntu 16.04 استفاده کنید زیرا بهترین پشتیبانی از ros-kinetic را دارد. برای کسب اطلاعات بیشتر در مورد نحوه نصب ros kinetic به https://wiki.ros.org/kinetic/Installation/Ubuntu مراجعه کنید. برای MATLAB یا مجوز خریداری می کنید یا نسخه دنباله را از اینجا بارگیری می کنید.

مرحله 2: درک نحوه عملکرد کنترل کننده

درک نحوه عملکرد کنترل کننده
درک نحوه عملکرد کنترل کننده

یک کامپیوتر کنترلر رباتیک را در MATLAB اجرا می کند. کنترل کننده آدرس IP و پورت ros pc/robot را وارد می کند.

یک موضوع ros برای ارتباط بین کنترلر و ros pc/robot استفاده می شود ، که همچنین توسط کنترلر به عنوان ورودی گرفته می شود. مودم برای ایجاد یک LAN (شبکه محلی) مورد نیاز است و همان چیزی است که آدرس IP را به همه دستگاه های متصل به شبکه اختصاص می دهد. بنابراین ros pc/robot و رایانه ای که کنترلر را اجرا می کند باید هر دو به یک شبکه متصل باشند (یعنی شبکه مودم). بنابراین اکنون که می دانید "چگونه کار می کند" ، بیایید به "نحوه ساخت آن" برسیم…

مرحله 3: ایجاد یک رابط ROS-MATLAB

ایجاد رابط ROS-MATLAB
ایجاد رابط ROS-MATLAB
ایجاد رابط ROS-MATLAB
ایجاد رابط ROS-MATLAB
ایجاد رابط ROS-MATLAB
ایجاد رابط ROS-MATLAB

ROS-MATLABInterface یک رابط مفید برای محققان و دانش آموزان برای نمونه سازی الگوریتم های ربات خود در MATLAB و آزمایش آن بر روی روبات های سازگار با ROS است. این رابط می تواند توسط جعبه ابزار سیستم روباتیک در matlab ایجاد شود و ما می توانیم الگوریتم خود را نمونه اولیه و آزمایش کنیم یک ربات مجهز به ROS یا شبیه سازهای ربات مانند Gazebo و V-REP.

برای نصب جعبه ابزار سیستم روباتیک در MATLAB خود ، کافی است به گزینه Add-on در نوار ابزار بروید و جعبه ابزار robotic را در اکسپلورر افزونه جستجو کنید. با استفاده از جعبه ابزار روباتیک می توانیم موضوعی مانند گره ROS را منتشر یا مشترک شویم و می توانیم آن را به عنوان یک ROS master تبدیل کنیم. رابط MATLAB-ROS دارای اکثر قابلیت های ROS است که می توانید برای پروژه های خود نیاز داشته باشید.

مرحله 4: دریافت آدرس IP

دریافت آدرس IP
دریافت آدرس IP
دریافت آدرس IP
دریافت آدرس IP

برای کار کنترلر ضروری است که آدرس IP روبات/رایانه ROS خود و رایانه شخصی که کنترلر را در MATLAB اجرا می کند ، بدانید.

برای دریافت IP رایانه شخصی خود:

روی ویندوز:

خط فرمان را باز کرده و دستور ipconfig را تایپ کرده و آدرس IPv4 را یادداشت کنید

برای لینوکس:

دستور ifconfig را تایپ کرده و آدرس inet را یادداشت کنید. اکنون که آدرس IP را دارید ، زمان ساختن رابط کاربری گرافیکی است…

مرحله 5: یک GUI برای کنترل کننده ایجاد کنید

یک GUI برای کنترل کننده ایجاد کنید
یک GUI برای کنترل کننده ایجاد کنید
یک GUI برای کنترل کننده ایجاد کنید
یک GUI برای کنترل کننده ایجاد کنید
یک GUI برای کنترل کننده ایجاد کنید
یک GUI برای کنترل کننده ایجاد کنید

برای ایجاد GUI ، MATLAB را باز کرده و در پنجره فرمان ، راهنما را تایپ کنید. این برنامه راهنما را باز می کند ، هر چند که ما GUI خود را ایجاد می کنیم. همچنین می توانید از طراح برنامه در MATLAB برای طراحی GUI خود استفاده کنید.

ما در کل 9 دکمه ایجاد می کنیم (همانطور که در شکل نشان داده شده است):

6 دکمه فورد ، عقب ، چپ ، راست ، اتصال به ربات ، قطع ارتباط

3 دکمه قابل ویرایش: Ros PC ip ، پورت و نام موضوع.

دکمه های قابل ویرایش دکمه هایی هستند که IP ROS رایانه ، پورت آن و نام موضوع را به عنوان ورودی دریافت می کنند. نام موضوع چیزی است که کنترل کننده متلب و روبات ROS/رایانه از طریق آن ارتباط برقرار می کنند. برای ویرایش رشته روی دکمه قابل ویرایش ، روی دکمه راست کلیک کنید >> به ویژگی های Inspector بروید >> String و متن دکمه را ویرایش کنید.

هنگامی که GUI شما کامل شد ، می توانید دکمه ها را برنامه ریزی کنید. اینجاست که سرگرمی واقعی شروع می شود…

مرحله 6: برنامه نویسی دکمه های قابل ویرایش GUI

برنامه نویسی دکمه های قابل ویرایش GUI
برنامه نویسی دکمه های قابل ویرایش GUI
برنامه نویسی دکمه های قابل ویرایش GUI
برنامه نویسی دکمه های قابل ویرایش GUI
برنامه نویسی دکمه های قابل ویرایش GUI
برنامه نویسی دکمه های قابل ویرایش GUI
برنامه نویسی دکمه های قابل ویرایش GUI
برنامه نویسی دکمه های قابل ویرایش GUI

GUI به عنوان یک فایل.fig ذخیره می شود اما توابع کد/فراخوانی در قالب.m ذخیره می شود. فایل.m حاوی کد همه دکمه های شما است. برای افزودن توابع تماس به دکمه ها ، روی دکمه راست کلیک کنید> > مشاهده تماس های تلفنی >> پاسخ به تماس. با این کار فایل.m برای رابط کاربری گرافیکی شما باز می شود که در آن دکمه مشخص شده است.

اولین تماس تلفنی که قصد داریم کدگذاری کنیم مربوط به دکمه قابل ویرایش ROS IP است. در زیر تابع edit1_Callback کد زیر را بنویسید:

تابع edit1_Callback (hObject ، eventdata ، handles)

جهانی ros_master_ip

ros_master_ip = دریافت (hObject ، 'String')

در اینجا این تابع به عنوان edit1_Callback تعریف شده است که به اولین دکمه قابل ویرایش اشاره دارد. وقتی یک آدرس IP از شبکه ROS را در این دکمه قابل ویرایش وارد می کنیم ، آدرس IP را به عنوان یک رشته در یک متغیر جهانی به نام ros_master_ip ذخیره می کند.

سپس درست زیر _OpeningFcn (hObject ، eventdata ، handles ، varargin) موارد زیر را تعریف کنید (شکل را ببینید):

جهانی ros_master_ip

جهانی ros_master_port

teleop_topic_name جهانی

ros_master_ip = '192.168.1.102'؛

ros_master_port = '11311'؛

teleop_topic_name = '/cmd_vel_mux/input/teleop'؛

شما فقط در سطح جهانی ros-pc ip (ros_master_ip) ، port (ros_master_port) و نام Teleop Topic را سخت کدگذاری کرده اید. این کار این است که اگر دکمه های قابل ویرایش را خالی بگذارید ، هنگام اتصال از این مقادیر از پیش تعریف شده استفاده می شود.

تماس بعدی که قرار است کدگذاری کنیم مربوط به دکمه Port editable است.

در زیر تابع edit2_Callback کد زیر را بنویسید:

تابع edit2_Callback (hObject ، eventdata ، handles)

جهانی ros_master_port

ros_master_port = دریافت (hObject ، 'String')

در اینجا این تابع به عنوان edit2_Callback تعریف شده است که به دکمه قابل ویرایش دوم اشاره دارد. وقتی پورت ros pc/robot را از شبکه ROS در این دکمه قابل ویرایش وارد می کنیم ، پورت را به عنوان یک رشته در یک متغیر جهانی به نام ros_master_port ذخیره می کند.

به طور مشابه ، تماس بعدی که قصد کدگذاری آن را داریم ، دکمه قابل ویرایش نام موضوع است.

در زیر تابع edit3_Callback کد زیر را بنویسید:

تابع edit3_Callback (hObject ، eventdata ، handles)

teleop_topic_name جهانی

teleop_topic_name = get (hObject ، 'String')

مشابه ros_master_port ، این نیز به عنوان رشته در یک متغیر جهانی ذخیره می شود.

در ادامه ما به بررسی عملکردهای فراخوانی دکمه های فشار…

مرحله 7: برنامه نویسی دکمه های GUI Push

برنامه نویسی دکمه های GUI Push
برنامه نویسی دکمه های GUI Push
برنامه نویسی دکمه های GUI Push
برنامه نویسی دکمه های GUI Push

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

به عنوان مثال. عملکرد pushbutton6_Callback (hObject ، eventdata ، دسته ها)

توجه: بسته به ترتیبی که دکمه های فشار خود را ایجاد کرده اید ، بر این اساس شماره گذاری می شوند. بنابراین تابع pushbutton6 در فایل.m من می تواند برای Forward باشد در حالی که در فایل.m شما می تواند برای Backwards باشد بنابراین این را در نظر داشته باشید. برای اینکه بدانید عملکرد دقیق دکمه فشاری شما چیست ، به سادگی کلیک کنید >> View callback >> callbacks و این تابع را برای دکمه فشاری شما باز می کند ، اما برای این دستورالعمل فرض می کنم که همان من است.

برای دکمه Connect to robot:

در زیر تابع pushbutton6_Callback (hObject ، eventdata ، handles):

تابع pushbutton6_Callback (hObject ، eventdata ، handles) جهانی ros_master_ip

جهانی ros_master_port

teleop_topic_name جهانی

ربات جهانی

velmsg جهانی

ros_master_uri = strcat ('https://'، ros_master_ip، ':'، ros_master_port)

setenv ('ROS_MASTER_URI'، ros_master_uri)

روزینیت

robot = rospublisher (teleop_topic_name، 'geometry_msgs/Twist')؛

velmsg = rosmessage (ربات) ؛

این تماس با متصل کردن ros_master_ip و port متغیر ROS_MASTER_URI را تنظیم می کند. سپس دستور rosinit اتصال را آغاز می کند. پس از اتصال ، ناشر geometry_msgs/Twist را ایجاد می کند که از آن برای ارسال سرعت فرمان استفاده می شود. نام موضوع نامی است که ما در کادر ویرایش قرار می دهیم. پس از موفقیت آمیز بودن اتصال ، می توانیم دکمه های جلو ، عقب ، چپ ، راست را فعال کنیم.

قبل از افزودن فراخوان به Buttoins های Forward ، Backward ، ما باید سرعتهای خطی و زاویه ای را اولیه کنیم.

بنابراین در زیر _OpeningFcn (hObject ، eventdata ، handles ، varargin) موارد زیر را تعریف کنید (شکل را ببینید):

global left_spinVelocity global right_spinVelocity

پیشرو جهانی سرعت

سرعت عقب افتاده جهانی

left_spinVelocity = 2؛

right_spinVelocity = -2؛

forwardVelocity = 3؛

backwardVelocity = -3 ؛

توجه: همه سرعتها بر حسب rad/s است

اکنون که متغیرهای جهانی تعریف شده اند ، اجازه دهید دکمه های حرکت را برنامه ریزی کنیم.

برای دکمه فشار جلو:

تابع pushbutton4_Callback (hObject ، eventdata ، handles) global velmsg

ربات جهانی

teleop_topic_name جهانی

پیشرو جهانی سرعت

velmsg. Angular. Z = 0؛

velmsg. Linear. X = forwardVelocity؛

ارسال (روبات ، velmsg) ؛

latchpub = rospublisher (teleop_topic_name، 'IsLatching'، true)؛

به طور مشابه برای دکمه فشار عقب:

عملکرد pushbutton5_Callback (hObject ، eventdata ، دسته ها)

velmsg جهانی

ربات جهانی

سرعت عقب افتاده جهانی

teleop_topic_name جهانی

velmsg. Angular. Z = 0؛

velmsg. Linear. X = backwardVelocity؛

ارسال (روبات ، velmsg) ؛

latchpub = rospublisher (teleop_topic_name، 'IsLatching'، true)؛

به طور مشابه برای دکمه فشار چپ: تابع pushbutton3_Callback (hObject ، eventdata ، handles)

روبات جهانی velmsgglobal global left_spinVelocity

teleop_topic_name جهانی

velmsg. Angular. Z = left_spinVelocity؛

velmsg. Linear. X = 0؛

ارسال (روبات ، velmsg) ؛

latchpub = rospublisher (teleop_topic_name، 'IsLatching'، true)؛

به طور مشابه برای دکمه فشار راست:

ربات جهانی velmsgglobal

global right_spinVelocity

teleop_topic_name جهانی

velmsg. Angular. Z = right_spinVelocity؛

velmsg. Linear. X = 0؛

ارسال (روبات ، velmsg) ؛

latchpub = rospublisher (teleop_topic_name، 'IsLatching'، true)؛

پس از افزودن همه عملکردهای فراخوانی و ذخیره فایل ها ، می توانیم کنترلر خود را آزمایش کنیم.

مرحله 8: تنظیم پیکربندی شبکه در رایانه ROS (لینوکس)

راه اندازی پیکربندی شبکه در رایانه ROS (لینوکس)
راه اندازی پیکربندی شبکه در رایانه ROS (لینوکس)
راه اندازی پیکربندی شبکه در رایانه ROS (لینوکس)
راه اندازی پیکربندی شبکه در رایانه ROS (لینوکس)

ما کنترلر را روی ros pc (لینوکس) آزمایش می کنیم ، که نیاز به تنظیم پیکربندی شبکه دارد. اگر کنترلر را بر روی کامپیوتر لینوکس نیز اجرا می کنید ، باید پیکربندی شبکه را نیز در آنجا تنظیم کنید.

تنظیمات شبکه:

پنجره ترمینال خود را باز کرده و gedit.bashrc را تایپ کنید

پس از باز شدن فایل موارد زیر را اضافه کنید:

#پیکربندی ماشین روبات

صادرات ROS_MASTER_URI = https:// localhost: 11311

آدرس #IP گره اصلی ROS

صادر کردن ROS_HOSTNAME =

صادرات ROS_IP =

پژواک "ROS_HOSTNAME:" $ ROS_HOSTNAME

پژواک "ROS_IP:" $ ROS_IP

پژواک "ROS_MASTER_URI:" $ ROS_MASTER_URI

به دلیل اختصاص IP پویا ، هر بار باید این مرحله را دنبال کنید.

مرحله 9: Controller را اجرا کنید

Controller را اجرا کنید
Controller را اجرا کنید

ما قصد داریم کنترل کننده خود را روی یک ربات لاک پشت در Gazebo آزمایش کنیم.

برای نصب Gazebo ، لطفاً به https://gazebosim.org/tutorials؟tut=install_ubuntu&cat=install مراجعه کنید

برای نصب ربات لاک پشت ، لطفاً به https://yainnoware.blogspot.com/2018/09/install-turtlebot-on-ros-kinetic-ubuntu.html مراجعه کنید

پوشه ای را که فایل های.fig و.m خود را در MATLAB ذخیره کرده اید باز کنید و Run را فشار دهید (همانطور که در تصویر نشان داده شده است). با این کار کنترلر روی کامپیوتر باز می شود. قبل از فشار دادن اتصال ، مطمئن شوید شبیه ساز ربات لاک پشت شما کار می کند.

برای آزمایش شبیه سازی TurtleBot:

ترمینال را در رایانه Ros باز کنید و تایپ کنید: $ roslaunch turtlebot_gazebo turtlebot_world.launch. با این کار شبیه سازی Turtlebot در آن رایانه باز می شود. نام مبحث TurtleBot/cmd_vel_mux/input/teleop است که قبلاً در برنامه ارائه کرده ایم. آدرس رایانه ros pp ، نام پورت و موضوع را در دکمه های قابل ویرایش تایپ کرده و کلید را فشار دهید. به دکمه Robot وصل شوید. ربات لاک پشت شما باید با فشار دادن Forward ، Backward و غیره شروع به حرکت کند.

برای مشاهده سرعتهای خطی و زاویه ای:

یک ترمینال جدید باز کنید و دستور را تایپ کنید: $ rostopic echo/cmd_vel_mux/input/teleop

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

توصیه شده: