Note: This tutorial assumes that you have completed the previous tutorials: understanding ROS topics. |
Please ask about problems and questions regarding this tutorial on answers.ros.org. Don't forget to include in your question the link to this page, the versions of your OS & ROS, and also add appropriate tags. |
Tìm hiểu trình phục vụ và các tham số trong ROS
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.Tutorial Level: BEGINNER
Next Tutorial: Dùng rqt_console và roslaunch
Contents
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.
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:
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:
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 rqt_console and roslaunch