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没什么大的区别