目标:使用 Python 创建并运行服务节点和客户端节点。
教程级别:初学者
时间:20 分钟
目录
背景
先决条件
任务
1. 创建一个包
2. 编写服务节点
3. 编写客户端节点
4. 构建并运行
摘要
下一步
相关内容
背景
当节点通过服务进行通信时,发送数据请求的节点称为客户端节点,而响应请求的节点称为服务节点。请求和响应的结构由一个 .srv
文件决定。
这里使用的例子是一个简单的整数加法系统;一个节点请求两个整数的和,另一个节点则响应结果。
先决条件
在之前的教程中,您学习了如何创建工作区和创建包。
任务
1. 创建一个包
打开一个新的终端并且初始化您的 ROS 2 安装,这样 ros2
命令就会生效。
导航到在之前教程中创建的 ros2_ws
目录。
请记住,包应该在 src
目录中创建,而不是在工作区的根目录中。导航到 ros2_ws/src
并创建一个新包:
cxy@ubuntu2404-cxy:~/ros2_ws/src$ ros2 pkg create --build-type ament_python --license Apache-2.0 py_srvcli --dependencies rclpy example_interfaces
going to create a new package
package name: py_srvcli
destination directory: /home/cxy/ros2_ws/src
package format: 3
version: 0.0.0
description: TODO: Package description
maintainer: ['cxy <cxy@todo.todo>']
licenses: ['Apache-2.0']
build type: ament_python
dependencies: ['rclpy', 'example_interfaces']
creating folder ./py_srvcli
creating ./py_srvcli/package.xml
creating source folder
creating folder ./py_srvcli/py_srvcli
creating ./py_srvcli/setup.py
creating ./py_srvcli/setup.cfg
creating folder ./py_srvcli/resource
creating ./py_srvcli/resource/py_srvcli
creating ./py_srvcli/py_srvcli/__init__.py
creating folder ./py_srvcli/test
creating ./py_srvcli/test/test_copyright.py
creating ./py_srvcli/test/test_flake8.py
creating ./py_srvcli/test/test_pep257.py
您的终端将返回一条消息,确认您的包 py_srvcli
及其所有必要的文件和文件夹已创建。
`--dependencies` 参数会自动将必要的依赖行添加到 `package.xml`。`example_interfaces` 是包含 `.srv` 文件的包,您将需要它来构建您的请求和响应结构:
int64 a
int64 b
---
int64 sum
请求的前两行是参数,破折号以下的是响应。
1.1 更新 package.xml
因为在创建包时您使用了 --dependencies
选项,所以您无需手动将依赖项添加到 package.xml
中。
一如既往,不过,请确保将描述、维护者电子邮件和姓名以及许可信息添加到 package.xml
。
<description>Python client server tutorial</description>
<maintainer email="you@email.com">Your Name</maintainer>
<license>Apache-2.0</license>
<?xml version="1.0"?>
# 声明XML版本为1.0
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
# 指定XML模式文件的位置和命名空间
<package format="3">
# 定义包的格式版本为3
<name>py_srvcli</name>
# 包的名称为'py_srvcli'
<version&