## page was copied from ROS/Tutorials/UnderstandingServicesParams #################################### ##FILL ME IN #################################### ## links to any required tutorials ## note.0= [[ROS/Tutorials/UnderstandingTopics|understanding ROS topics]] ## descriptive title for the tutorial ## title = Tìm hiểu trình phục vụ và các tham số trong ROS ## multi-line description to be displayed in search ## description = Hướng dẫn này giới thiệu các dịch vụ ROS, và các tham số cũng như sử dụng các công cụ dòng lệnh rosservice và rosparam. ## the next tutorial description ## next = ## links to next tutorial ## next.0.link= [[vn/ROS/Tutorials/UsingRqtconsoleRoslaunch|Dùng rqt_console và roslaunch]] ## next.1.link= ## what level user is this tutorial for ## level= BeginnerCategory #################################### <<IncludeCSTemplate(TutorialCSHeaderTemplate)>> <<TOC(4)>> Giả sử turtlesim_node của bạn vẫn đang chạy từ hướng dẫn trước, hãy xem các dịch vụ mà turtlesim cung cấp: == ROS Services == Dịch vụ là một cách khác mà các nút có thể giao tiếp với nhau. Dịch vụ cho phép các nút gửi yêu cầu và nhận được phản hồi. == Dùng rosservice == Rosservice có thể dễ dàng gắn kết client/service framework của ROS với các dịch vụ. Rosservice có nhiều lệnh có thể được sử dụng cho các chủ đề, như hình dưới đây: Sử dụng: {{{ 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 }}} Lệnh danh sách chỉ ra rằng nút turtlesim cung cấp chín dịch vụ: reset, clear, spawn, kill, turtle1/set_pen, `/turtle1/teleport_absolute`, `/turtle1/teleport_relative`, `turtlesim/get_loggers`, and `turtlesim/set_logger_level`. Ngoài ra còn có hai dịch vụ liên quan đến nút rosout: / rosout / get_loggers và / 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 }}} Xem xét kỹ hơn `clear` service dùng `rosservice type`: === rosservice type === Dùng: {{{ rosservice type [service] }}} Hãy xem loại của clear service: {{{ $ rosservice type /clear }}} . {{{ std_srvs/Empty }}} Dịch vụ này rỗng , có nghĩa là khi cuộc gọi dịch vụ được thực hiện, nó sẽ không có đối số (nghĩa là nó không gửi dữ liệu khi đưa ra yêu cầu và không nhận dữ liệu khi nhận phản hồi). Hãy gọi dịch vụ này bằng cách sử dụng cuộc gọi rosservice: '''Cuộc gọi rosservice''' Sử dụng: {{{ rosservice call [service] [args] }}} Ở đây chúng ta sẽ gọi mà không có đối số vì dịch vụ là loại rỗng: {{{ $ rosservice call /clear }}} Điều này làm những gì chúng ta mong đợi, nó sẽ xóa sạch nền của turtlesim_node. . {{attachment:turtlesim.png}} Chúng ta hãy nhìn vào trường hợp dịch vụ có các đối số bằng cách xem thông tin của service spawn: {{{ $ rosservice type /spawn| rossrv show }}} . {{{ float32 x float32 y float32 theta string name --- string name }}} Dịch vụ này cho phép chúng ta tạo ra một turtle mới ở một vị trí và hướng xác định. Trường tên là tùy chọn, vì vậy đừng đặt tên cho turtle mới và để cho nó tự đặt một tên. {{{ $ rosservice call /spawn 2 2 0.2 "" }}} Dịch vụ sẽ trả về tên của turtle đã đặt: . {{{ name: turtle2 }}} Bây giờ turtlesim sẽ trông giống như sau: . {{attachment:turtle(service).png|turtle(service).png}} == Dùngrosparam == `rosparam` cho phép bạn lưu trữ và tùy chỉnh dữ liệu trên ROS [[Parameter Server]]. Thông số Server có thể lưu số nguyên, floats, boolean, dictionaries và danh sách. Rosparam sử dụng ngôn ngữ YAML cho cú pháp. Trong các trường hợp đơn giản, YAML trông rất tự nhiên: 1 là số nguyên, 1.0 là float, một là kiểu chuỗi, true là một boolean, [1, 2, 3] là một danh sách các số nguyên, và {a: b, c: D} là một từ điển. Rosparam có nhiều lệnh có thể được sử dụng trên các tham số, như hình dưới đây:: Dùng: {{{ 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 }}} Hãy xem những thông số hiện có trên serrver: === rosparam list === {{{ $ rosparam list }}} Ở đây ta thấy nút turtlesim có ba thông số server cho màu nền (background color): . {{{ /background_b /background_g /background_r /roslaunch/uris/aqy:51932 /run_id }}} Thay đổi gía tri của một thông số dùng `rosparam set`: === rosparam set và rosparam get === Dùng: {{{ rosparam set [param_name] rosparam get [param_name] }}} Điều này sẽ thay đổi màu nền sang màu đỏ (background): {{{ $ rosparam set /background_r 150 }}} Gía trị thông số sẽ thay đổi, bây giờ ta sẽ gọi clear service để thông số thay đổi có tác dụng: {{{ $ rosservice call /clear }}} Bây giờ turtlesim sẽ trông giống như sau: . {{attachment:turtle(param).png|turtle(param).png}} Bây giờ hãy xem gía trị của những thông số trên server. Xem gía trị của green background channel: {{{ $ rosparam get /background_g }}} . {{{ 86 }}} Chúng ta có thể dùng `rosparam get /` to hiển thị toàn bộ nội dung của Parameter Server. {{{ $ rosparam get / }}} . {{{ background_b: 255 background_g: 86 background_r: 150 roslaunch: uris: {'aqy:51932': 'http://aqy:51932/'} run_id: e07ea71e-98df-11de-8875-001b21201aa8 }}} Bạn cần lưu thông tin này trong một tập tin để có thể tải lại dùng bất cứ khi nào. Dùng `rosparam`: === rosparam dump và rosparam load === Dùng: {{{ rosparam dump [file_name] [namespace] rosparam load [file_name] [namespace] }}} Tất cả các thông số sẽ ghi trong tập tin params.yaml {{{ $ rosparam dump params.yaml }}} Bạn có thể tải lại tập tin yaml vào một namespaces mới, ví dụ. `copy`: {{{ $ rosparam load params.yaml copy $ rosparam get /copy/background_b }}} . {{{ 255 }}} Bây giờ bạn đã hiểu cách hoạt động của ROS services và các thông số, thử dùng [[ROS/Tutorials/UsingRqtconsoleRoslaunch|rqt_console and roslaunch]] ## AUTOGENERATED DO NOT DELETE ## TutorialCategory ## ROSTutorialCategory ## TutorialTurtlesim