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沒什麼大的區別