مفهوم Service و Parameter در ROS

این آموزش ادامه آموزش های زیر است که پیشنهاد میشود ابتدا مطالعه شود. مفهوم Node و Topic در ROSمفهوم Topic و Message در ROSو این آموزش: مفهوم Service و Parameter در ROSبی مقدمه بریم سراغ Service و ParameterServicesفرض می کنیم 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 urirosservice 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 namesrosparam 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 مطرح شود.