• اولین مرجع آموزش رآس در ایران
  • 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
گام دوازدهم: نوشتن یک service و client ساده (C++)
سپتامبر 19, 2019
مقدمه‌ای بر RVIZ نمایشگر سه‌بعدی
اکتبر 9, 2019

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

Categories
  • آموزش مقدماتی ROS
Tags
  • python
  • service
  • srv
  • سرویس

نوشتن یک service و client ساده (Python)

در این آموزش قصد داریم تا نحوه نوشتن یک نود service و client به زبان Python آموزش دهیم.

در آموزش‌های قبلی یاد گرفتید که چگونه می‌توان یک service و client ساده (C++)را ایجاد نمود.مفاهیم دقیقا همانها است لذا از ذکر دوباره آنها خودداری می کنیم.

توجه در صورتی که هنوز با مفاهیم service و Client در ROS آشنا نیستید آموزش گام دوازدهم نوشتن یک service و client ساده (C++) را مشاهده نمایید.

ساخت یک نود سرویس

همانند آموزش قبلی در اینجا نیز ما یک نود سرویس به نام “add_two_ints_server” ایجاد خواهیم کرد که دو عدد را به‌عنوان ورودی را دریافت می‌کند و جمع آن‌ها را در خروجی برمی‌گرداند.

ابتدا مسیر فعلی خود را به مسیر بسته‌ای که در آموزش‌های مراحل قبل ایجاد کرده‌اید تغییر دهید.

roscd beginner_tutorials

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

وارد پوشه Scripts موجود در بسته خود شوید (در صورتی که پوشه ای با این نام ندارید، آن را ایجاد کنید.) و در آن یک فایل به اسم add_two_ints_server.py ایجاد کنید (right-click > New Document > Empty Document) و کدهای زیر را کپی و در آن پیست کنید.

#!/usr/bin/env python

from beginner_tutorials.srv import AddTwoInts,AddTwoIntsResponse
import rospy

def handle_add_two_ints(req):
    print "Returning [%s + %s = %s]"%(req.a, req.b, (req.a + req.b))
    return AddTwoIntsResponse(req.a + req.b)

def add_two_ints_server():
    rospy.init_node('add_two_ints_server')
    s = rospy.Service('add_two_ints', AddTwoInts, handle_add_two_ints)
    print "Ready to add two ints."
    rospy.spin()

if __name__ == "__main__":
    add_two_ints_server()

حال نیاز است تا این نود را قابل اجرا نماییم. برای این منظور نیاز است تا دستور زیررا وارد کنید.

chmod +x scripts/add_two_ints_server.py

توجه : هر فایل پایتون که ایجاد کردین به منظور اینکه قابلیت اجرا شدن در کنار ROSCore را داشته باشد باید از دستور بالا استفاده نمایید. تنها کافی است مسیر پوشه تا رسیدن به نام فایل خود را در انتهای دستور chmod +x قرار دهید.

توضیح کدها:

دستورات بالا همانطور که می‌دانید بخش اول آنها مربوط به افزودن وابستگی ها است. تابع اصلی ما add_two_ints_server  است. این تابع ابتدا این فایل را مقدار دهی اولیه می کند تا توسط ROS شناخته شود. سپس توسط دستور rospy.Service سرویسی با نام add_two_ints را ایجاد می کند.  که تایپ آن (اگر به یاد داشته باشید، قبلاً آن را ایجاد کردیم.) AddTwoInts  است. تمام درخواست ها به تابع handle_add_two_ints  فرستاده می شوند.

ساخت یک نود client

فایلی با نام add_two_ints_client.py در پوشه scripts بسته beginner_tutorials  ایجاد کنید. کدهای زیر را داخل فایل ایجاد شده قرار دهید.

#!/usr/bin/env python

import sys
import rospy
from beginner_tutorials.srv import *

def add_two_ints_client(x, y):
    rospy.wait_for_service('add_two_ints')
    try:
        add_two_ints = rospy.ServiceProxy('add_two_ints', AddTwoInts)
        resp1 = add_two_ints(x, y)
        return resp1.sum
    except rospy.ServiceException, e:
        print "Service call failed: %s"%e

def usage():
    return "%s [x y]"%sys.argv[0]

if __name__ == "__main__":
    if len(sys.argv) == 3:
        x = int(sys.argv[1])
        y = int(sys.argv[2])
    else:
        print usage()
        sys.exit(1)
    print "Requesting %s+%s"%(x, y)
    print "%s + %s = %s"%(x, y, add_two_ints_client(x, y))

فراموش نکنید که باید این نود را نیز با دستور chmod +x قابل اجرا نمایید.

chmod +x scripts/add_two_ints_client.py

توضیح کدها:

دستورات بالا نیز در ابتدا وابستگی‌ها را فراخوانی می کند. این فایل از دو تابع با نام های  add_two_ints_client(x, y)  و ()usage تشکیل شده و یک بخش اصلی main دارد. در بخش main ابتدا ورودی های نود را به مقادیر x و y انتساب می دهد. و سپس تابع  add_two_ints_client(x, y) را با این ورودی ها فراخوانی می کند. درون تابع add_two_ints_client  نیز به منظور منتظر ماندن برای سرور   add_two_ints، از دستور زیر استفاده می شود.

rospy.wait_for_service('add_two_ints')

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

add_two_ints = rospy.ServiceProxy('add_two_ints', AddTwoInts)

حال از این هندلر که ایجاد کردیم مانند یک تابع عادی با مقادیر ورودی x و y به صورت زیر استفاده می کنیم. و در نهایت نتیجه را باز می گرداند.

resp1 = add_two_ints(x, y)
        return resp1.sum

حال به منظور بیلد کردن نودهایی که ایجاد کردیم دستورات زیر را در ترمینال بزنید.

cd ~/catkin_ws
catkin_make

نحوه اجرای یک service و client ساده (Python)

ابتدا هسته ros را با دستور roscore اجرا نمایید. سپس یک ترمینال جدید باز کنید. حال ابتدا سرور را اجرا نمایید.  به منظور اجرای سرور دستور زیر را وارد نمایید.

rosrun beginner_tutorials add_two_ints_server.py

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

Ready to add two ints.

حال به منظور اجرای client دستور زیر را وارد نمایید. فرض کنید که ما میخواهیم اعداد ۵ و ۶ را با یکدیگر جمع کنیم. برای این منظور دستور زیر را باید در ترمینال وارد کنید

rosrun beginner_tutorials add_two_ints_client 5 6

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

request: x=5, y=6sending back response: [11]

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

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

Share
1

Related posts

مارس 16, 2020

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


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

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


Read more
گام یازدهم

ضبط و بازپخش داده‌ها در ROS

جولای 29, 2019

گام یازدهم: ضبط و بازپخش داده‌ها در ROS


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