ROS 2 自定义接口(消息、服务和动作)
在 ROS 2 中,自定义接口是构建复杂机器人系统的核心。自定义接口使开发者能够定义特定于应用的数据结构和通信模式,包括消息(Message)、服务(Service)和动作(Action)。本文将介绍如何在 ROS 2 中创建和使用这些自定义接口。
1. 自定义消息(Message)
自定义消息用于定义节点之间传递的数据结构。消息类型可以包含多个字段,这些字段定义了数据的结构。
1.1 创建自定义消息
-
创建包
首先,创建一个新的 ROS 2 包用于存放自定义消息:ros2 pkg create my_custom_msgs --build-type ament_cmake --dependencies rosidl_default_generators
-
添加消息目录
在包目录下创建msg
目录,并在其中添加.msg
文件。例如,我们定义一个包含位置和速度的消息类型:mkdir -p my_custom_msgs/msg
创建文件
PositionSpeed.msg
:float64 position float64 speed
-
修改
CMakeLists.txt
和package.xml
在CMakeLists.txt
中添加对消息的支持:rosidl_generate_interfaces(${PROJECT_NAME} "msg/PositionSpeed.msg" DEPENDENCIES # Add packages that above messages depend on )
在
package.xml
中添加对消息的依赖:<buildtool_depend>ament_cmake</buildtool_depend> <!-- <depend>rosidl_default_generators</depend> --> <!-- 添加下面三行 --> <build_depend>rosidl_default_generators</build_depend> <exec_depend>rosidl_default_runtime</exec_depend> <member_of_group>rosidl_interface_packages</member_of_group> <test_depend>ament_lint_auto</test_depend> <test_depend>ament_lint_common</test_depend>
-
构建包
使用以下命令构建包:
colcon build --packages-select my_custom_msgs
-
验证
ros2 interface show my_custom_msgs/msg/PositionSpeed
2. 自定义服务(Service)
自定义服务定义了节点之间的请求和响应数据结构。服务类型使用 .srv
文件定义。
2.1 创建自定义服务
-
添加服务目录
在包目录中创建srv
目录,并添加.srv
文件。例如,定义一个计算圆面积的服务:mkdir -p my_custom_msgs/srv
创建文件
ComputeArea.srv
:float64 radius --- float64 area
-
修改
CMakeLists.txt
和package.xml
在CMakeLists.txt
中添加对服务的支持:rosidl_generate_interfaces(${PROJECT_NAME} "msg/PositionSpeed.msg" "srv/ComputeArea.srv" DEPENDENCIES # Add packages that above messages depend on )
-
构建包
colcon build --packages-select my_custom_msgs
-
验证
ros2 interface show my_custom_msgs/srv/ComputeArea
3. 自定义动作(Action)
自定义动作允许节点执行长期运行的任务,并提供进度和结果反馈。动作类型使用 .action
文件定义。
3.1 创建自定义动作
-
添加动作目录
在包目录中创建action
目录,并添加.action
文件。例如,定义一个计算阶乘的动作:mkdir -p my_custom_msgs/action
创建文件
Factorial.action
:int32 number --- int32 result --- string status
-
修改
CMakeLists.txt
和package.xml
在CMakeLists.txt
中添加对动作的支持:rosidl_generate_interfaces(${PROJECT_NAME} "msg/PositionSpeed.msg" "srv/ComputeArea.srv" "action/Factorial.action" DEPENDENCIES # Add packages that above messages depend on )
-
构建包
使用以下命令构建包:
colcon build --packages-select my_custom_msgs
-
验证
ros2 interface show my_custom_msgs/action/Factorial
结论
自定义接口在 ROS 2 中是非常重要的,它们使得节点能够以更灵活和高效的方式进行通信。通过定义自定义消息、服务和动作类型,开发者可以构建符合特定需求的机器人系统,提升系统的功能性和可维护性。
希望这篇文章能够帮助你更好地理解和使用 ROS 2 的自定义接口。
标签:自定义,msgs,接口,custom,srv,msg,ROS,my From: https://blog.csdn.net/weixin_44318762/article/details/141131656