4-1- رابط آردوینو با رآس

بوردهای آردوینو بر روی پلتفرمی مبتنی بر میکروکنترلر قرار دارند که با استفاده از زبان برنامه­نویسی شبیه C++ برنامه­نویسی می­شوند. انواع بوردهای مختلف آردوینو موجود هستند[39]. در اینجا قصد داریم از آردوینو مگا استفاده کنیم که در فروشگاه اینترنتی[40] موجود است.

شکل 5-33 بورد Arduino Mega 2560 Rev3 را نشان می‌دهد.

شکل ‏5‑33: بورد  Arduino Mega 2560 Rev3

بورد آردوینو را می­توانید با اتصال به کامپیوتر خود برنامه­نویسی کنید. IDE آردوینو را می‌توانید از آدرس اینترنتی[41] دانلود کنید.

هنگامی‌که IDE را راه‌اندازی کنید، پنجره‌ای همانند شکل 5-34 نشان داده می­شود.

شکل ‏5‑34: IDE آردوینو

در زبان برنامه­نویسی آردوینو همانند C++، کتابخانه‌های زیادی برای ساده­سازی کارها وجود دارد. به عنوان مثال، کتابخانه‌هایی برای برقراری ارتباط با کامپیوتر، ارسال دستور سرعت به موتورها و غیره وجود دارد.

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

اول بیایید ببینیم چگونه یک کتابخانه آردوینو برای برقراری ارتباط با رآس ایجاد کنیم.

باید بسته رآس زیر را برای ایجاد این کتابخانه نصب کنید. دستور نصب آن به شکل زیر است:

$ sudo apt-get install ros-kinetic-rosserial-arduino

این دستور بسته‌های لازم برای ارتباط آردوینو با رآس را نصب می‌کند.

گام بعدی باز کردن IDE  آردوینو است. از منوی File>preference را انتخاب کند. پنجره‌ی شکل 5-35 نشان داده می­شود.

شکل ‏5‑35: پنجره preference آردوینو

ترمینال جدیدی باز کرده و به مسیر پوشه sketchbook ذکر شده در پنجره preference بروید. اگر به این پوشه بروید در آن پوشه دیگری به‌نام libraries می­یابید. پس به پوشه libraries بروید و دستور زیر را اجرا کنید (به شکل 5-36 نگاه کنید).

$ rosrun rosserial_arduino make_libraries.py .

شکل ‏5‑36: ایجاد یک کتابخانه رآس برای آردوینو

هنگام اجرای فرمان قبل، مشاهده می­کنید پیام‌های در ترمینال چاپ می­شوند که در واقع فرآیند ایجاد کتابخانه آردوینو برای رآس را نشان می­دهد.

پس از اتمام فرآیند، پوشه libraries را بررسی کنید. پوشه ros_lib کتابخانه­ی آردوینو برای رآس است.

IDE آدرینو را ببندید و مجددا آنرا راه‌اندازی کنید. سپس به File>Examples>ros_lib بروید. فهرستی از مثال‌ها با استفاده از آردوینو و رآس را می‌بینید. بیایید یک مثال پایه یعنی Blink را بررسی کنیم.

Blink اساسا شبیه Hello World برای آردوینو است. هنگامی‌که آردوینو با رآس ارتباط برقرار می‌کند، تاپیکی دریافت می کنیم. هنگامی‌که روی تاپیک منتشر می­کنیم روشن شده و پس از انتشار مجدد شبیه به چشمک زدن چراغ LED خاموش می شود.

شکل 5-37 مثال Blink را نشان می‌دهد.

شکل ‏5‑37: مثال Blink آردوینو

عملکرد کد، خود تفسیر است. گره­ای ایجاد کرده­ایم و مشترک تاپیکی به‌نام /toggle_led شده­ایم. هنگامی‌که پیامی روی تاپیک می‌آید، LED روشن می‌شود، و هنگامی‌که داده­های بعدی روی تاپیک می‌آیند، LED خاموش می‌شود.

اجازه دهید کد را روی آدرینو آپلود کنیم. برای انجام این کار، آردوینو را به یک لپ تاپ وصل کنید.

پورت سریال Arduino را با استفاده از دستور dmesg پیدا کنید (به شکل 5-38 نگاه کنید).

$ dmesg

شکل ‏5‑38: خروجی دستور dmesg

دستگاه سریال آردوینو /dev/ttyACM0 است.

با استفاده از دستور زیر، مجوز دسترسی دستگاه را تغییر دهید.

$ sudo chmod 777 /dev/ttyACM0

پس از آن، این دستگاه سریال را از IDE آدرینو انتخاب کنید.

Goto Tools>Port>ttyACM0

اکنون می‌توانیم این مثال را کامپایل کرده و کد را روی بورد آردوینو آپلود کنیم.

پس از آپلود کد، باید دستورات زیر را برای مشاهده تاپیک­ها از Arduino اجرا کنیم. هر دستور را در ترمینال‌ جداگانه­ای اجرا کنید.

شروع roscore

$ roscore

رآس serial server را روی رایانه آغاز کنید. گره تبدیل تاپیک­ها را از/ به آردوینو انجام می‌دهد.

$ rosrun rosserial_python serial_node.py /dev/ttyACM0

یک چیزی روی تاپیک /toggle_led منتشر کنید.

$ rostopic pub toggle_led std_msgs/Empty –once

با اینکار LED روی بورد روشن می‌شود. اگر دوباره آن را انجام دهید، LED خاموش می‌شود

شکل 5-39 خروجی را نشان می‌دهد.

شکل ‏5‑39: دستور چشمکزن LED

مثال­های بیشتری از ارتباط آردوینو با رآس در ویکی رآس[42] وجود دارد.

[39] www.arduino.cc/en/Main/Products

[40] https://store.arduino.cc/usa/arduino-mega-2560-rev3

[41] www.arduino.cc/en/Main/Software

[42] http://wiki.ros.org/rosserial_arduino/Tutorials