این آموزش ادامه آموزش های زیر است که پیشنهاد میشود ابتدا مطالعه شود.
بی مقدمه بریم سراغ Service و Parameter
فرض می کنیم 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 ""
سرویس نام لاک پشت جدید را در پاسخ مشخص میکند:
name: turtle2
حالا دوتا لاک پشت داریم :)
بیایید نگاهی به ابزار های پارامتر ها بی اندازیم:
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 مطرح شود.