ros2服务通信官方仓库示例代码
时间: 2025-07-14 22:47:42 浏览: 6
<think>好的,我现在需要帮用户找到ROS2服务通信的官方示例代码所在的GitHub仓库。首先,我应该回顾一下用户提供的参考引用内容,看看有没有相关的信息。
用户提到的引用[2]是关于ROS2 Demos仓库的,里面提到这个仓库包含各种示范程序,包括多节点通信、生命周期管理等。服务通信属于节点间通信的一种,所以可能在这里能找到示例。另外,引用[4]详细介绍了服务通信的流程,包括C++和Python的实现步骤,但用户问的是具体的官方仓库,所以可能需要结合这些信息。
接下来,我需要确认ROS2的官方仓库结构。通常,ROS2的核心功能包和示例代码会放在GitHub的ros2组织下。比如,引用[1]提到的geometry2仓库属于ros2组织,所以服务通信的示例可能在类似的仓库中。
根据用户的问题,服务通信的示例可能在ros2/demos仓库里,因为引用[2]提到这个仓库是官方的示例库,包含各种演示程序。比如,服务通信通常涉及服务端和客户端,这在demos仓库中可能有对应的示例。
另外,用户引用的[4]中提到了创建服务通信功能包的步骤,但并没有直接给出仓库链接。所以需要根据已有的信息推断。比如,ros2/demos仓库可能包含服务通信的示例,或者另一个仓库如ros2/examples可能有专门的示例代码。
不过根据引用[2]的描述,ros2/demos确实承载了官方文档中的各种示例,包括服务通信。因此,我应该建议用户查看这个仓库,并具体指出其中的示例目录,比如服务通信可能在某个子目录下,如intra_process_demo或topic_service_action等。
此外,用户可能需要C++和Python的示例,而ros2/demos仓库支持这两种语言,所以需要指出具体的子目录,比如src/topics、src/services等。同时,可能还需要指导用户如何安装功能包,参考引用[3]提到的二进制安装方式,但用户需要的是源码示例,所以直接提供GitHub链接更合适。
总结:ROS2的服务通信示例代码应该在ros2/demos仓库中,具体在对应的服务通信相关目录下,同时可能需要参考官方文档中的说明来运行这些示例。</think>以下是为您整理的ROS2服务通信相关官方示例代码仓库及说明:
### 1. 核心官方仓库
- **ros2/demos** 仓库是服务通信的主要示例来源[^2]
- GitHub地址:https://github.com/ros2/demos
- 包含以下关键示例:
```bash
# 服务通信相关目录结构
demos/
├── demo_nodes_cpp/ # C++实现示例
│ └── src/services/
├── demo_nodes_py/ # Python实现示例
│ └── demo_nodes_py/services/
└── intra_process_demo/ # 进程内通信示例
```
### 2. 服务通信实现示例
#### C++ 版本示例
```cpp
// add_two_ints_server.cpp 核心代码片段
#include "rclcpp/rclcpp.hpp"
#include "example_interfaces/srv/add_two_ints.hpp"
class AddTwoIntsServer : public rclcpp::Node {
public:
AddTwoIntsServer() : Node("add_two_ints_server") {
service_ = create_service<example_interfaces::srv::AddTwoInts>(
"add_two_ints",
[this](const std::shared_ptr<example_interfaces::srv::AddTwoInts::Request> request,
std::shared_ptr<example_interfaces::srv::AddTwoInts::Response> response) {
response->sum = request->a + request->b;
RCLCPP_INFO(this->get_logger(), "计算完成: %ld + %ld = %ld", request->a, request->b, response->sum);
});
}
private:
rclcpp::Service<example_interfaces::srv::AddTwoInts>::SharedPtr service_;
};
```
#### Python 版本示例
```python
# add_two_ints_server.py 核心代码
import rclpy
from rclpy.node import Node
from example_interfaces.srv import AddTwoInts
class AddTwoIntsServer(Node):
def __init__(self):
super().__init__('add_two_ints_server')
self.srv = self.create_service(AddTwoInts, 'add_two_ints', self.add_callback)
def add_callback(self, request, response):
response.sum = request.a + request.b
self.get_logger().info(f'收到请求: {request.a} + {request.b}')
return response
```
### 3. 运行示例的步骤
1. 安装依赖(需先设置ROS2环境)
```bash
sudo apt install ros-${ROS_DISTRO}-demo-nodes-cpp ros-${ROS_DISTRO}-demo-nodes-py # 按引用[3]的安装方式
```
2. 启动服务端
```bash
ros2 run demo_nodes_cpp add_two_ints_server # C++版本
# 或
ros2 run demo_nodes_py add_two_ints_server # Python版本
```
3. 调用客户端
```bash
ros2 service call /add_two_ints example_interfaces/srv/AddTwoInts "{a: 5, b: 3}"
```
### 4. 进阶学习资源
- 服务接口定义规范:参考`example_interfaces`包中的`srv/AddTwoInts.srv`文件
- QoS策略配置示例:查看`quality_of_service`目录下的示例
- 生命周期管理集成:参考`lifecycle`目录的节点管理实现
阅读全文
相关推荐


















