• اولین مرجع آموزش رآس در ایران
  • 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
گام نهم: مفهوم Publisher-Subscriber در ROS به زبان ++C
ژانویه 31, 2019
ubuntu windows10 Dualboot
نصب Ubuntu در کنار ویندوز به صورت Dual Boot
مارس 30, 2019

گام دهم: مفهوم Publisher-Subscriber در ROS به زبان python

Categories
  • آموزش مقدماتی ROS
Tags
  • chmode
  • publisher
  • python
  • rospy
  • subscriber

Publisher  و  Subscriber در ROS به زبان python

در گام قبل با نحوه ساختن انتشاردهنده و شنونده پیام یا همان Publisher  و  Subscriber به زبان ++C آشنا شدید. در این گام قصد داریم تا نحوه ایجاد آنها به زبان پایتون را آموزش دهیم.

برنامه‌نویسان معمولاً برای اجرای کدهای خود ابتدا الگوریتم موردنظر خود را به زبان python می‌نویسند و بعد از تست و رفع مشکلات آن درنهایت برای افزایش کارایی و سرعت به زبان C++ بازنویسی می‌کنند. در ROS نیز همان‌طور که در آموزش‌های قبلی نیز ذکر شد این امکان وجود دارد که برنامه‌نویسان بتوانند با استفاده از زبان python کد موردنظر خود را بنویسند.

توجه: در این آموزش این فرض در نظر گرفته شده است که خواننده با زبان python آشنا است.

در همین ابتدا باید بگوییم که ساختار و مفاهیم کلی دقیقاً مشابه بخش مفهوم Publisher و Subscriberدر ROS به زبان C++ است؛ اما تنها در نوع بیان کمی تفاوت وجود دارد. خب نوبت به بررسی کدهای مرتبط با شنوده و منتشرکننده پیام می‌رسد. قبل از هر چیزی ابتدا باید پوشه‌ای به نام scripts در بسته‌ای که قبلاً ایجاد نمودید، درست کنید.

منتشر کننده پیام، Publisher

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

#!/usr/bin/env python
import rospy
from std_msgs.msg import String

def talker():
    pub = rospy.Publisher('chatter', String, queue_size=10)
    rospy.init_node('talker', anonymous=True)
    rate = rospy.Rate(10) # 10hz
    while not rospy.is_shutdown():
        hello_str = "hello world %s" % rospy.get_time()
        rospy.loginfo(hello_str)
        pub.publish(hello_str)
        rate.sleep()

if __name__ == '__main__':
    try:
        talker()
    except rospy.ROSInterruptException:
        pass

بخش اول:

ابتدا باید کتابخانه‌های مرتبط با ROS را فراخوانی کنید. برای این منظور کتابخانه‌ی rospy برای تعریف نود و کتابخانه‌ی std_msgs.msg  به‌منظور مشخص کردن جنس پیام برای انتشار، فراخوانی خواهند شد.

بخش دوم:

در این بخش برنامه‌نویس یک تابع با نام talker ایجاد کرده است. این تابع به دلیل اینکه منتشرکننده‌ی پیام است، به کمک متد Publisher در rospy پیامی را بر روی تاپیک chatter از جنس رشته و با صفی به‌اندازه‌ی ۱۰ ارسال می‌کند. در ادامه این تابع نود را مقداردهی اولیه کرده و سپس نرخ حلقه را مانند حالت قبل برابر ۱۰ هرتز قرار می‌دهد. در آخر حلقه‌ای ایجاد کرده با شرط اینکه ROS فعال و یا ترمینال بسته نشده باشد پیامی را نوشته و توسط متد publish انتشار دهد. در آخر تعریف این تابع نیز مانند حالت قبل از متد sleep استفاده کرده تا نرخ تنظیم‌شده رعایت شود.

بخش سوم:

قسمت اصلی برنامه در اینجا است. با استفاده از یک ساختار try-except تابع talker() فراخوانی شده و تا زمانی که با خطایی روبه‌رو نشده باشد این پیام منتشر می‌شود.

حال که از عملکرد این نود باخبر شدید کافی است تا فایلی با نام talker.py در پوشه‌ی scripts که قبلاً ایجاد نموده‌اید، درست کنید و سپس محتویات کد بالا در آن قرار دهید؛ و دستور زیر را وارد نمایید:

chmod +x talker.py

با این کار این نود قابل‌اجرا می‌شود.

شونده‌ی پیام subscriber

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

#!/usr/bin/env python
import rospy
from std_msgs.msg import String

def callback(data):
    rospy.loginfo(rospy.get_caller_id() + "I heard %s", data.data)
    
def listener():
    rospy.init_node('listener', anonymous=True)
    rospy.Subscriber("chatter", String, callback)
    rospy.spin()

if __name__ == '__main__':
    listener()

تنها تفاوت این فایل با مورد بررسی‌شده برای C++ تنها در استفاده از rospy است. از این بخش به دلیل سادگی عبور می‌کنیم.

به پوشه‌ی scripts که در بخش قبل ایجاد نمودید بروید و فایل با عنوان listener.py ایجاد کرده و سپس دستورات بالا را در آن قرار داده و درنهایت فایل را ذخیره نمایید.

حال این فایل را نیز دوباره باید قابل‌اجرا کنیم. برای این منظور از دستور زیر در خط فرمان استفاده می‌کنیم:

chmod +x listener.py

برای اجرای نودهای پایتون ایجادشده دقیقاً مشابه آموزش قبل از دستورات زیر استفاده نمایید:

یک ترمینال جدید باز کنید:

roscore

سپس یک ترمینال جدید دیگر باز کنید:

rosrun beginner_tutorials talker.py

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

سپس ترمینال دیگری باز کنید و دستور زیر را وارد کنید:

rosrun beginner_tutorials listener.py

درصورتی‌که بخواهید این برنامه‌ها را متوقف کنید تنها کافی است که دکمه‌های Ctrl+c را همزمان در ترمینال وارد کنید و یا ترمینال را ببندید. با این کار نودهای در حال اجرا حذف می‌شوند؛ و برنامه متوقف خواهد شد.

کارشناسان ما پاسخگوی سؤالات و مشکلات شما هستند.

پرسش و پاسخ ایران رآس

Share
4

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