• اولین مرجع آموزش رآس در ایران
  • 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
گام چهارم :مفهوم Node در ROS
دسامبر 11, 2018
مفهوم service و parameters در ROS
گام ششم : مفهوم service و parameters در ROS
دسامبر 17, 2018

گام پنجم : مفهوم تاپیک در ROS

Categories
  • آموزش مقدماتی ROS
Tags
  • node
  • rostopic
  • topic
  • turtlesim
  • تاپیک
مفهوم Topic در ROS

مفهوم Topic در ROS

مفهوم Topic در ROS: در آموزش‌های قبلی شما با مفهوم نود به‌خوبی آشنا شدید، حال می‌خواهیم به مبحث تاپیک به پردازیم. ربات A ذکرشده در بحث قبل را به یاد بیاورید. اگر در خاطر داشته باشید، بیان شد که نود کنترل موقعیت ربات با نود کنترل سرعت ربات در ارتباط است.

درواقع نودها با استفاده از Topic ها در ROS با هم در ارتباط هستند. در شکل زیر نود کنترل موقعیت با نود کنترل سرعت با هم در ارتباط هستند در این صورت این رابط تاپیک نامیده می‌شود.

understanding Topic

به‌منظور فهم بهتر تاپیک در ادامه مثالی را در ROS اجرا می‌کنیم. اگر به یاد داشته باشید در زمان معرفی نحوه‌ی آدرس‌دهی در ROS بسته‌ای را نصب کردید. این بسته شامل یکسری نود برای به حرکت درآوردن یک لاک‌پشت توسط صفحه‌کلید در محیط ROS است. در ابتدا نیاز است تا رآس مَستر را اجرا کنیم. برای اجرا ابتدا یک ترمینال جدید باز کنید و داخل آن دستور زیر را اجرا کنید:

roscore

با اجرای دستور بالا هسته‌ اصلی ROS اجرا می‌شود. حال می‌خواهیم نود مربوط به نمایش این لاک‌پشت را اجرا کنیم. ازآنجایی‌که نام بسته‌ی نصب‌شده turtlesim، نام نود مربوطه turtlesim_node و نحوه‌ی اجرای یک نود در ROS به کمک ابزار rosrun است. دستور کلی برای اجرای نود به‌صورت زیر خواهید شد:

توجه: دقت شود که دستور زیر را در یک ترمینال جدید اجرا نمایید.

rosrun turtlesim turtlesim_node

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

rosrun turtlesim turtle_teleop_key

قبلا ذکر شده است اما ذکر دوباره آن نیز ضرر ندارد، دقت شود: بعد اجرای دستور بالا باید حتماً در زمانی که می‌خواهید دستورات شما از طریق کیبورد برای لاک‌پشت فرستاده شود باید حالت focus در ترمینال مربوط به نود کیبورد فعال باشد.

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

نود مربوط به نمایش این لاک‌پشت را اجرا کنیم.

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

sudo apt-get install ros-distro-rqt
 sudo apt-get install ros-distro-rqt-common-plugins

البته توجه داشته باشید که <distro> را متناسب با نوع توزیع خود تغییر دهید به‌عنوان نمونه برای توزیع kinetic دستورات بالا به‌صورت زیر می‌شود.

sudo apt-get install ros-kinetic-rqt
 sudo apt-get install ros-kinetic-rqt-common-plugins

بعد از نصب بسته‌ی بالا به‌منظور استفاده از آن دستور زیر را باید در یک ترمینال جدید اجرا نمایید.

توجه : ترمینال مربوط به اجرای لاکپشت در ابتدای آموزش را باز بگذارید. و در صورتی که ترمینال مربوط به آن را بسته‌اید. دوباره آن را اجرا نمایید.

rosrun rqt_graph rqt_graph

در این صورت بعد از اجرا شکلی مطابق شکل زیر مشاهده خواهید کرد.

rosrun rqt_graph rqt_graph

همانطور که در شکل بالا مشاهده می‌شود، نود ،teleop_turtle  توسط تاپیک /turtle1/cmd_vel سرعت ایجاد شده  را به نود /turtlesim منتقل می‌کند.

ابزار rostopic echo

ابزار rostopic

همان‌طور که می‌دانید تاپیک‌ها رابط‌هایی هستند که پیام‌ها را منتقل می‌کنند. آیا تابه‌حال به این فکر کردید که چگونه می‌توان اطلاعات یک تاپیک را مشاهده نمود؟ ابزار rostopic با استفاده از گزینه‌هایی که در اختیار کاربران قرار می‌دهد این امکان را ایجاد می‌کند که اطلاعاتی را از تاپیک‌ها دریافت نمایید.

در زیر لیستی از آپشن‌های این ابزار را مشاهده می‌کنید. البته خودتان هم با واردکردن دستور rostopic –h می‌توانید این آپشن‌ها را مشاهده نمایید:

• rostopic bw: با استفاده از این دستور پهنای باند تاپیک نشان داده می‌شود.
• rostopic echo: در ترمینال فعلی پیام در حال انتقال را نمایش می‎دهد.
• rostopic hz: نرخ ارسال پیام توسط تاپیک نمایش داده می‌شود.
• rostopic list: مشاهده‌ی تاپیک‌های فعال
• rostopic pub: ارسال داده به تاپیک
• rostopic type: نوع تاپیک را نمایش می‌دهد.

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

دستور rostopic list

دستور rostopic list

معمولاً در زمان اجرای برنامه یکسری اطلاعات در بین نودهای در حال جابه‌جا شدن است. درصورتی‌که بخواهید بدایند چه تاپیک‌هایی فعال هستند و اطلاعات را منتشر و یا دریافت می‌کنند، دستور rostopic list را اجرا نمایید. برای آشنایی با آپشن‌های این دستور می‌توانید کد زیر را وارد نمایید:

rostopic list -h

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

rostopic list -v

در نهایت خروجی مطابق زیر را مشاهده خواهید کرد.

&lt;/pre&gt;

Published topics:
* /turtle1/color_sensor [turtlesim/Color] 1 publisher
* /turtle1/cmd_vel [geometry_msgs/Twist] 1 publisher
* /rosout [rosgraph_msgs/Log] 2 publishers
* /rosout_agg [rosgraph_msgs/Log] 1 publisher
* /turtle1/pose [turtlesim/Pose] 1 publisher

Subscribed topics:
* /turtle1/cmd_vel [geometry_msgs/Twist] 1 subscriber
* /rosout [rosgraph_msgs/Log] 1 subscriber
&lt;pre&gt;

برای این‌که تنها تاپیک‌های مربوط به منتشرکننده‌های پیام را مشاهده نمایید از آپشن –p و برای مشاهده دریافت‌کننده‌های پیام از آپشن –s استفاده نمایید.

اگر دقت کرده باشید تاپیک‌ سرعت برای ربات به‌صورت زیر است:

/turtle1/cmd_vel [geometry_msgs/Twist] 1 publisher

که قسمت اول نام تاپیک قسمت دوم جنس تاپیک و در انتها نوع پیام را مشخص می‌کند که در اینجا نام تاپیک /turtle1/cmd_vel، جنس تاپیک [geometry_msgs/Twist] و نوع آن‌که انتشاردهنده است را مشاهده می‌کنید.

دستور rostopic echo

دستور rostopic echo

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

rostopic echo [topic]

توجه داشته باشید که [topic] را با نام تاپیک موردنظر خود تغییر دهید. فرض کنید که می‌خواهید تاپیک سرعت که در حال انتشار برای لاک‌پشت است را مشاهده نمایید برای این منظور دستور زیر را باید در یک ترمینال جدید اجرا نمایید:

rostopic echo /turtle1/cmd_vel

بعد از اجرای این دستور لیست دیتاهای در حال ارسال را مشاهده خواهید کرد؛ اما درصورتی‌که هیچ دیتایی مشاهده نکردید احتمالاً هیچ دیتایی بر روی تاپیک موردنظر شما منتشر نمی‌شود.

دقت کنید که اگر لاک‌پشت بعدازاینکه شما نود مربوط به حرکت را اجرا کردید هنوز حرکت نمی‌کند و دیتایی مشاهده نمی‌کنید باید ترمینالی که در آن نود مربوط به حرکت لاک‌پشت را اجرا کردید انتخاب کنید. درنهایت اگر همه چیز را به‌درستی انجام داده باشید باید خروجی مطابق زیر را مشاهده نمایید:

linear:
 x: 2.0
 y: 0.0
 z: 0.0
angular:
 x: 0.0
 y: 0.0
 z: 0.0
---
linear:
 x: 2.0
 y: 0.0
 z: 0.0
angular:
 x: 0.0
 y: 0.0
 z: 0.0
---

دستور rostopic type

دستور rostopic type

پیام‌هایی که در حال انتقال توسط تاپیک‌ها هستند انواع مختلفی دارند. برخی از تاپیک‌ها از جنس Twist و برخی دیگر از جنس Navdata هستند (در رابطه با انواع جنس تاپیک‌ها بعداً صحبت خواهد شد).

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

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

اولین کاری که نیاز است انجام دهید این است که بدانید نود موقعیت تعریف‌شده، موقعیت را با چه جنسی ارسال می‌کند؛ که برای این منظور از دستور rostopic type به‌صورت زیر به یاد استفاده نمایید:

rostopic type [topic]

به‌عنوان نمونه برای مشخص شدن جنس تاپیک /turtle1/cmd_vel دستور زیر را وارد نمایید

rostopic type /turtle1/cmd_vel

خروجی به‌صورت شکل زیر خواهد بود.

geometry_msgs/Twist

خب حالا با سؤال دیگری روبه می‌شوید، این جنس پیام دقیقاً چه چیزی است؟!

برای حل این سؤال باید از دستور rosmsg مطابق شکل زیر استفاده کنید.

rosmsg show geometry_msgs/Twist

که درنهایت جزئیات پیام ارسالی را به‌صورت زیر مشاهده خواهید کرد:

geometry_msgs/Vector3 linear
 float64 x
 float64 y
 float64 z
geometry_msgs/Vector3 angular
 float64 x
 float64 y
 float64 z

دستور rostopic pub

دستور rostopic pub

همان‌طور که قبلاً نیز بحث شد تاپیک‌ها مسئول انتقال پیام هستند. فرض کنید که شما می‌خواهید بجای آنکه نود مربوط به حرکت ربات لاک‌پشتی را اجرا کنید. خودتان دستوری بدهید تا توسط تاپیک تعریف‌شده برای لاک‌پشت، سرعت دلخواه خودتان را تنظیم نمایید.

در ROS برای این کار دستوری تحت عنوان rostopic pub وجود دارد. کلیت این دستور به‌صورت زیر است:

rostopic pub [topic] [msg_type] [args]

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

rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[Vx, Vy, Vz]' '[wx, wy, wz]'

که مقادیر V و w را به‌صورت دلخواه وارد نمایید. مقدار -۱ موجود در بالا به‌این‌علت است که تنها یک‌بار این پیام ارسال می‌شود.
همان‌طور که متوجه شده‌اید لاک‌پشت بعد از مدتی متوقف می‌شود. برای داشتن یک حرکت پایدار، با استفاده از دستور rostopic pub –r، یک جریان پایدار از فرمان، با نرخ ۱ هرتز ایجاد می‌شود و تا زمانی که ترمینالی که دستور زیر را در آن وارد کرده‌اید باز باشد، لاک‌پشت به حرکت خود مطابق شکل زیر ادامه می‌دهد.

rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, -1.8]'
rostopic pub –r

اکنون اگر به پنجره  rqt_graphمراجعه کنید و دکمه refresh که در گوشه بالا و سمت چپ آن قرار دارد را بزنید، تغییراتی مطابق شکل زیر در آن مشاهده می‌کنید.

پنجره rqt_graph

ابزار rqt_plot

ابزار rqt_plot

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

برای این منظور باید دستور زیر را داخل یک ترمینال اجرا نمایید؛ و سپس نام تاپیک موردنظر خود را در قسمت topic در بالای نمودار وارد کنید و سپس روی علامت + کلیک کنید. در این صورت شما می‌توانید نمودار مربوطه را مشاهده کنید.

rosrun rqt_plot rqt_plot

به عنوان مثال در شکل زیر تاپیک‌های /turtle1/pose/x و /turtle1/pose/y رسم شده‌اند.

ابزار rqt_plot یکی از ابزارهای دیگر در ROS نمایش به‌روز نمودار هر تاپیک دلخواه است.
Share
11

Related posts

مارس 16, 2020

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


Read more
سپتامبر 20, 2019

گام سیزدهم: نوشتن یک service و client ساده (Python)


Read more
سپتامبر 19, 2019

گام دوازدهم: نوشتن یک service و client ساده (C++)


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