فهرست مطالب:
- تدارکات
- مرحله 1: راه اندازی همه چیز
- مرحله 2: درک نحوه عملکرد کنترل کننده
- مرحله 3: ایجاد یک رابط ROS-MATLAB
- مرحله 4: دریافت آدرس IP
- مرحله 5: یک GUI برای کنترل کننده ایجاد کنید
- مرحله 6: برنامه نویسی دکمه های قابل ویرایش GUI
- مرحله 7: برنامه نویسی دکمه های GUI Push
- مرحله 8: تنظیم پیکربندی شبکه در رایانه ROS (لینوکس)
- مرحله 9: Controller را اجرا کنید
تصویری: کنترلر رباتیک ROS مبتنی بر Matlab: 9 مرحله
2024 نویسنده: John Day | [email protected]. آخرین اصلاح شده: 2024-01-30 08:54
من از کودکی همیشه آرزو داشتم مرد آهنی باشم و هنوز هم دارم. مرد آهنی یکی از آن شخصیت هایی است که واقعاً امکان پذیر است و به سادگی من آرزو دارم که روزی مرد آهنی شوم ، حتی اگر مردم به من بخندند یا بگویند این کار غیرممکن است زیرا "تا زمانی که کسی این کار را انجام ندهد" غیرممکن است-آرنولد شوارتزنگر.
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-MATLABInterface یک رابط مفید برای محققان و دانش آموزان برای نمونه سازی الگوریتم های ربات خود در MATLAB و آزمایش آن بر روی روبات های سازگار با ROS است. این رابط می تواند توسط جعبه ابزار سیستم روباتیک در matlab ایجاد شود و ما می توانیم الگوریتم خود را نمونه اولیه و آزمایش کنیم یک ربات مجهز به ROS یا شبیه سازهای ربات مانند Gazebo و V-REP.
برای نصب جعبه ابزار سیستم روباتیک در MATLAB خود ، کافی است به گزینه Add-on در نوار ابزار بروید و جعبه ابزار robotic را در اکسپلورر افزونه جستجو کنید. با استفاده از جعبه ابزار روباتیک می توانیم موضوعی مانند گره ROS را منتشر یا مشترک شویم و می توانیم آن را به عنوان یک ROS master تبدیل کنیم. رابط MATLAB-ROS دارای اکثر قابلیت های ROS است که می توانید برای پروژه های خود نیاز داشته باشید.
مرحله 4: دریافت آدرس IP
برای کار کنترلر ضروری است که آدرس IP روبات/رایانه ROS خود و رایانه شخصی که کنترلر را در MATLAB اجرا می کند ، بدانید.
برای دریافت IP رایانه شخصی خود:
روی ویندوز:
خط فرمان را باز کرده و دستور ipconfig را تایپ کرده و آدرس IPv4 را یادداشت کنید
برای لینوکس:
دستور ifconfig را تایپ کرده و آدرس inet را یادداشت کنید. اکنون که آدرس IP را دارید ، زمان ساختن رابط کاربری گرافیکی است…
مرحله 5: یک GUI برای کنترل کننده ایجاد کنید
برای ایجاد GUI ، MATLAB را باز کرده و در پنجره فرمان ، راهنما را تایپ کنید. این برنامه راهنما را باز می کند ، هر چند که ما GUI خود را ایجاد می کنیم. همچنین می توانید از طراح برنامه در MATLAB برای طراحی GUI خود استفاده کنید.
ما در کل 9 دکمه ایجاد می کنیم (همانطور که در شکل نشان داده شده است):
6 دکمه فورد ، عقب ، چپ ، راست ، اتصال به ربات ، قطع ارتباط
3 دکمه قابل ویرایش: Ros PC ip ، پورت و نام موضوع.
دکمه های قابل ویرایش دکمه هایی هستند که IP ROS رایانه ، پورت آن و نام موضوع را به عنوان ورودی دریافت می کنند. نام موضوع چیزی است که کنترل کننده متلب و روبات ROS/رایانه از طریق آن ارتباط برقرار می کنند. برای ویرایش رشته روی دکمه قابل ویرایش ، روی دکمه راست کلیک کنید >> به ویژگی های Inspector بروید >> String و متن دکمه را ویرایش کنید.
هنگامی که GUI شما کامل شد ، می توانید دکمه ها را برنامه ریزی کنید. اینجاست که سرگرمی واقعی شروع می شود…
مرحله 6: برنامه نویسی دکمه های قابل ویرایش 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
دکمه های فشاری که قبلاً ایجاد کردیم ، دکمه هایی هستند که برای حرکت ، اتصال و قطع ربات از کنترلر استفاده می کنیم. تماس های دکمه ای فشار به شرح زیر تعریف می شوند:
به عنوان مثال. عملکرد 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 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 را اجرا کنید
ما قصد داریم کنترل کننده خود را روی یک ربات لاک پشت در 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 خود را دارید. اگر از دستورالعمل آموزشی من خوشتان آمد ، لطفاً در اولین مسابقه نویسنده رای دهید و آن را تا آنجا که ممکن است با افراد دیگر به اشتراک بگذارید. متشکرم.
توصیه شده:
سوئیچ IOT رله مبتنی بر صدا مبتنی بر آردوینو (پشتیبانی از Google Home & Alexa): 11 مرحله
سوئیچ IOT رله مبتنی بر صدا مبتنی بر آردوینو (Google Home & Alexa Supported): این پروژه نحوه ایجاد یک سوئیچ رله مبتنی بر آردوینو ، کنترل صدا ، IOT را شرح می دهد. این یک رله است که می توانید از راه دور با استفاده از یک برنامه برای iOS و Android روشن و خاموش کنید ، همچنین آن را به IFTTT متصل کرده و با صدای خود با استفاده از Goog آن را کنترل کنید
مترونوم مبتنی بر میکرو کنترلر: 5 مرحله
مترونوم بر اساس میکروکنترلر: مترونوم یک وسیله زمان بندی است که توسط نوازندگان برای ردیابی ضرب آهنگ ها و ایجاد حس زمان بندی در مبتدیانی که در حال یادگیری یک ساز جدید هستند استفاده می شود. این به حفظ حس ریتم که در موسیقی بسیار مهم است کمک می کند. این مترونوم بوئی
دماسنج مادون قرمز غیر تماسی مبتنی بر آردوینو - دماسنج مبتنی بر IR با استفاده از آردوینو: 4 مرحله
دماسنج مادون قرمز بدون تماس مبتنی بر آردوینو | دماسنج مبتنی بر IR با استفاده از آردوینو: سلام بچه ها در این دستورالعمل ما با استفاده از آردوینو یک دماسنج غیر تماسی ایجاد می کنیم. از آنجا که گاهی اوقات دمای مایع/جامد بسیار زیاد یا بسیار پایین است و سپس تماس با آن و خواندن آن سخت است. دما در آن حالت
فلزیاب القایی مبتنی بر پالس مبتنی بر آردوینو: 5 مرحله
فلزیاب القایی مبتنی بر پالس DIY Arduino: این فلزیاب نسبتاً ساده با عملکرد عالی است
لمس خازنی با Evive (کنترلر مبتنی بر آردوینو): 6 مرحله (همراه با تصاویر)
Touch Capacitive With Evive (کنترلر مبتنی بر آردوینو): آیا می دانید صفحه لمسی گوشی هوشمند شما چگونه کار می کند؟ تلفن هوشمند دارای مجموعه ای از حسگرهای لمسی در زیر صفحه شیشه ای است. امروزه ، بر اساس فناوری تشخیص لمس خازنی و حتی یک لمس ملایم به راحتی قابل تشخیص است. لمس خازنی حس می شود