如何在ROS中发布和订阅服务?
时间: 2024-10-14 11:04:52 浏览: 28
在ROS中,发布和订阅服务通常涉及到两个关键的概念:`service_server` 和 `service_client`。
**发布服务**(Publishing a Service):
1. 首先,在包的`src`目录下创建一个服务,定义一个消息类型(`.msg`文件)和一个函数原型(`.srv`文件),比如`AddTwoInts.srv`。
2. 创建服务服务器,通常在`main.cpp`或其他主节点中编写,使用`ros::ServiceServer`,如下所示:
```cpp
void handleAddTwoInts(const AddTwoIntsRequest &req, AddTwoIntsResponse &res) {
res.sum = req.a + req.b;
service_server.setCallback(std::bind(&handleAddTwoInts, this, std::placeholders::_1, std::placeholders::_2));
}
```
3. 使用`service_serveradvertise()`来公开服务,指定主题名称和服务类型。
4. 在运行过程中,通过`service_server.handle()`等待客户端请求。
**订阅服务**(Subscribing to a Service):
1. 创建一个服务客户端,同样需要知道服务的主题名和消息类型。
2. 使用`ros::ServiceClient`,如:
```cpp
bool callAddTwoInts(AddTwoIntsRequest req, AddTwoIntsResponse &response) {
return service_client.call(req, response);
}
```
3. 调用`call()`方法发起请求,如果成功返回`true`,并将响应存储在`response`变量中。
在实际程序中,你需要在`ros::NodeHandle`上下文中进行这些操作,并在循环中持续监听和提供服务。
阅读全文