محمد سعید
محمد سعید
خواندن ۳ دقیقه·۲ سال پیش

مفهوم Service و Parameter در ROS

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

  1. مفهوم Node و Topic در ROS
  2. مفهوم Topic و Message در ROS
  3. و این آموزش: مفهوم Service و Parameter در ROS


بی مقدمه بریم سراغ Service و Parameter

Services

فرض می کنیم turtlesim_node از آموزش قبولی هنوز در حال اجرا است. حالا بیایید برویم به سراغ Service ها که راه دیگری برای ارتباط بین node ها هستند و به node اجازه می دهند که یک درخواست ارسال و پاسخ را دریافت کند. rosservice دستورات زیادی برای استفاده دارد که در زیر نمایش داده شده است:

rosservice list print information about active services rosservice call call the service with the provided args rosservice type print service type rosservice find find services by service type rosservice uri print service ROSRPC uri

rosservice list

$ rosservice list

لیست حاصل از دستور فوق نشان می دهد که turtlesim node نه سرویس در اختیار ما قرار می دهد: reset, clear, spawn, kill, turtle1/set_pen, /turtle1/teleport_absolute, /turtle1/teleport_relative, turtlesim/get_loggers, and turtlesim/set_logger_level. و دو service که مربوط به rosout node می باشند: /rosout/get_loggers and /rosout/set_logger_level.

/clear /kill /reset /rosout/get_loggers /rosout/set_logger_level /spawn /teleop_turtle/get_loggers /teleop_turtle/set_logger_level /turtle1/set_pen /turtle1/teleport_absolute /turtle1/teleport_relative /turtlesim/get_loggers /turtlesim/set_logger_level

بیایید نگاهی دقیق تر به clear service با استفاده از rosservice بی اندازیم.

rosservice type

شکل کلی برای استفاده از rosservice به صورت زیر است:

rosservice type [service]

برای مثال:

$ rosservice type /clear

خروجی کد فوق:

std_srvs/Empty

این سرویس empty است. بدین معنی که برای استفاده نیاز به هیچ آٰگومانی ندارد. (هیچ دیتایی را در هنگام ایجاد درخواست و دریافت پاسخ وجود نخواهد داشت) حالا بیایید این سرویس را با استفاده از rosservice call صدا بزنیم:

rosservice call

شکل کلی استفاده:

rosservice call [service] [args]

در هنگام صدا زدن هیچ آرگومانی اضافه نخواهد شد زیرا سرویس مدنظری از نوع empty بود.

$ rosservice call /clear

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

حالا بیایید سرویسی را بررسی کنید که دارای آرگومان است. نوع سرویس spawn را با دستور زیر بررسی میکنیم.

$ rosservice type /spawn | rossrv show

خروجی:

float32 x float32 y float32 theta string name --- string name

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

rosservice call /spawn 2 2 0.2 &quot&quot

سرویس نام لاک پشت جدید را در پاسخ مشخص میکند:

name: turtle2

حالا دوتا لاک پشت داریم :)


rosparams

بیایید نگاهی به ابزار های پارامتر ها بی اندازیم:

rosparam set set parameter rosparam get get parameter rosparam load load parameters from file rosparam dump dump parameters to file rosparam delete delete parameter rosparam list list parameter names

rosparam list

با دستور فوق لیست پارامترها را میتواینم مشاهده کنیم:

/rosdistro /roslaunch/uris/host_nxt__43407 /rosversion /run_id /turtlesim/background_b /turtlesim/background_g /turtlesim/background_r

سه پارامتر انتهایی مربوط به لاک پشت ماست.

rosparam set و rosparam get

به شکل کلی از دو دستور مذکور فوق می توان بهش شکل زیر استفاده کرد:

rosparam set [param_name] rosparam get [param_name]

بیایید کانال قرمز رنگ زمینه را تغییر دهیم:

$ rosparam set /turtlesim/background_r 150

دستور فوق مقدار پارامتر را تغییر می دهد. حالا باید clear service را صدا بزنیم تا تغییرات اعمال شود.

$ rosservice call /clear

و حالا خواهیم داشت:

بیایید نگاهی به مقدار دیگر پارامتر ها بی اندازیم. مثلا مقدار رنگ سبز زمینه.

$ rosparam get /turtlesim/background_g

خروجی کد فوق برابر خواهد بود با:

86

با دستور $ rosparam get / می توان محتوای پارامتر ها را مشاهده کرد.

$ rosparam get /

خروجی دستور فوق:

rosdistro: 'noetic ' roslaunch: uris: host_nxt__43407: http://nxt:43407/ rosversion: '1.15.5 ' run_id: 7ef687d8-9ab7-11ea-b692-fcaa1494dbf9 turtlesim: background_b: 255 background_g: 86 background_r: 69

ممکن است بخواهیم تنظیمات مربوط به پارامترها را در یک فایل ذخیره کنیم تا در زمان دیگری آن را بارگیری و استفاده کنیم. این امکان با استفاده از rosparam امکان پذیر است.

rosparam dump and rosparam load

شکل کلی استفاده از دستورات فوق به صورت زیر است:

rosparam dump [file_name] [namespace] rosparam load [file_name] [namespace]

در اینجا ما همه پارامترها را در فایلی به نام params.yaml ذخیره میکنیم.

$ rosparam dump params.yaml

شما میتوانید هر زمان که نیاز بود این فایل yaml را به شکل زیر load و استفاده نمایید:

$ rosparam load params.yaml copy_turtle $ rosparam get /copy_turtle/turtlesim/background_b

خروجی کد فوق؛

255


در این بخش از آموزش سعی شد مفاهیم Service و Parameter در ROS مطرح شود.

rosرباتیکپایتونubuntu
ارشد هو‌ش‌مصنوعی‌ می‌خونم، عاشق طبیعت و چیزایی که به بهش نزدیکم می‌کنه.
شاید از این پست‌ها خوشتان بیاید