ROS2官網教程學習筆記理解ROS2服務篇


學習目標:瞭解ros2服務有關的命令行

背景

這一點和ros1一樣沒變,服務是一對一的,通過呼叫(call)和響應(response)方式進行節點間的通訊

準備條件

需要學習前面的教程

學習內容

1. 運行節點

和之前一樣首先運行兩個節點

ros2 run turtlesim turtlesim_node
ros2 run turtlesim turtle_teleop_key

2. ros2 service list

ros2 service list用於列出當前所有的服務

/clear
/kill
/reset
/spawn
/teleop_turtle/describe_parameters
/teleop_turtle/get_parameter_types
/teleop_turtle/get_parameters
/teleop_turtle/list_parameters
/teleop_turtle/set_parameters
/teleop_turtle/set_parameters_atomically
/turtle1/set_pen
/turtle1/teleport_absolute
/turtle1/teleport_relative
/turtlesim/describe_parameters
/turtlesim/get_parameter_types
/turtlesim/get_parameters
/turtlesim/list_parameters
/turtlesim/set_parameters
/turtlesim/set_parameters_atomically

3. ros2 service type

通過下面命令可以查看一個服務的消息類型

ros2 service type <service_name>

3.1 ros2 service list -t

我們還可以使用下面的命令顯示所有服務的類型

ros2 service list -t

4. ros2 service find

我們可以用下面的命令查找一個類型的所有話題

ros2 service find <type_name>

例如

ros2 service find std_srvs/srv/Empty

我們的到如下結果

/clear
/reset

5. ros2 interface show

我們可以通過下面的命令查看服務消息的結構

ros2 interface show <type_name>.srv

6. ros2 service call

當我們知道了服務的名字、類型、服務消息類型的結構之後就可以調用下面的命令呼叫相應服務

ros2 service call <service_name> <service_type> <arguments>

例如

ros2 service call /clear std_srvs/srv/Empty

由於std_srvs/srv/Empty爲空所以不需要任何額外的參數,如果對應的類型不爲空的話就需要傳入相應的參數,例如

ros2 service call /spawn turtlesim/srv/Spawn "{x: 2, y: 2, theta: 0.2, name: ''}"

總結

總的來說和ros1沒什麼大的區別

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章