近年来,机器人领域的进步和采用的技术激增。 其中之一是 ROS2(机器人操作系统 2),它是一个开源中间件框架,提供用于开发、测试和维护机器人应用程序的工具、库和约定。 本文深入研究使用 setup.py 在 ROS2 包中添加服务文件,这是使用该平台的开发人员的一项基本技能。 我们将从简要介绍开始,提出问题的解决方案,引导您完成分步指南,并讨论相关主题以加深理解。
在 ROS2 包中设置服务文件涉及两个主要步骤:创建服务消息定义文件 (.srv) 以及在 package.xml 和 setup.py 文件中添加必要的配置。 在本教程中,我们将创建一个简单的服务,它接受输入字符串并返回所提供输入的长度。
首先,让我们准备我们的工作区。 使用以下命令创建名为“string_length_service”的 ROS2 包:
“`
ros2 pkg create –build-type ament_python string_length_service
“`
现在,在“string_length_service”包中创建一个名为“srv”的目录来存储我们的服务消息定义文件:
“`
mkdir srv
“`
在“srv”目录中,创建一个名为“StringLength.srv”的文件,其中包含以下内容:
“`
字符串输入字符串
-
int64 长度
“`
在 package.xml 文件中,确保添加必要的依赖项:
“`xml
“`
现在,让我们进入本文的核心部分——在 setup.py 中添加服务文件。 打开“setup.py”文件并包含以下代码:
“`蟒蛇
从setuptools导入安装程序
从全局导入全局
包名称 = '字符串长度服务'
设置(
名称=包名,
版本='0.0.0',
包=[包名],
数据文件=[
('共享/ament_index/resource_index/packages',
['资源/' + 包名]),
('share/' + package_name, ['package.xml']),
('共享/' + 包名, glob('srv/*'))
],
install_requires=['安装工具'],
zip_safe=真,
维护者='developer_name_here',
Maintenanceer_email='developer_email_here',
description='计算字符串长度的服务',
许可证='麻省理工学院',
test_require=['pytest'],
入口点={
'console_scripts':[
'string_length_server = ' + package_name + '.string_length_server:main',
'string_length_client = ' + package_name + '.string_length_client:main',
],
},
)
“`
现在让我们讨论一下这段代码的作用: setup.py 文件使用 setuptools 来分发和管理我们的包。 package_name 变量保存我们的包的名称。 data_files 列表指定与包一起分发的必要资源、package.xml 和服务文件。 install_requires 列出了所需的包,entry_points 定义了我们的服务可执行文件。 确保将“developer_name_here”和“developer_email_here”替换为正确的值。
使用 rclpy 和 std_srvs
在 setup.py 中设置服务文件后,需要使用 ROS2 Python 客户端库、rclpy 和 std_srvs 来实现标准服务类型的服务器和客户端代码。
在包目录中创建文件“string_length_server.py”和“string_length_client.py”并实现服务器和客户端代码。 您可以在 ROS2 文档中找到有关如何编写服务器和客户端代码的详细信息。
构建和测试服务
最后,使用以下命令构建并测试您的包:
“`
来源/opt/ros/foxy/setup.bash
colcon build –packages-select string_length_service
源安装/setup.bash
“`
成功构建后,使用两个单独的终端运行服务器和客户端:
“`
ros2 运行 string_length_service string_length_server
“`
“`
ros2 运行 string_length_service string_length_client
“`
本指南深入解释了如何在 ROS2 包的 setup.py 中添加服务文件,同时涉及 rclpy 和 std_srvs 等相关主题。 通过执行这些步骤,您可以以高效且有组织的方式创建和分发 ROS2 服务,从而促进机器人应用程序内的交互。 祝你好运,编码愉快!