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

发布了63 篇原创文章 · 获赞 50 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_38649880/article/details/104396099