ROS2 Jazzy 动作通信 (Action) 完整实战教程(C+++Python 双实现)
一、前言动作通信Action是 ROS2 中用于长时间任务交互的通信模型兼具服务同步应答、话题持续反馈的优势适用于机械臂运动、导航、累加计算等耗时任务。 本文从零搭建自定义 Action 消息分别使用 C、Python 实现动作服务端 客户端完整复现「1~N 累加、实时进度反馈、任务取消、结果返回」全流程全程附踩坑解决方案适合 ROS2 初学者系统学习。环境华为云开发空间 ROS2 Jazzy二、整体工程结构robot_ws/src├── base_interfaces_demo # 自定义Action消息包├── cpp03_action # C动作通信实现└── py03_action # Python动作通信三、第一步自定义 Action 接口 base_interfaces_demo实现3.1 创建功能包cd ~/robot_ws/src ros2 pkg create --build-type ament_cmake base_interfaces_demo --dependencies rclcpp rclcpp_action action_msgscd base_interfaces_demo mkdir action nano action/Progress.action文件内容# 请求数据客户端发给服务端 int64 num --- # 最终结果任务完成后返回 int64 sum --- # 实时进度反馈循环持续推送 float64 progress3.3 配置 package.xml新增依赖与分组标签编译报错核心修复点buildtool_dependrosidl_default_generators/buildtool_depend dependaction_msgs/depend member_of_grouprosidl_interface_packages/member_of_group3.4 配置 CMakeLists.txt文件末尾添加接口生成代码只保留 action 文件规避 msg/srv 不存在报错rosidl_generate_interfaces(${PROJECT_NAME} action/Progress.action ) ament_export_dependencies(rosidl_default_runtime)3.5 编译与验证接口cd ~/robot_ws colcon build --packages-select base_interfaces_demo source install/setup.bash # 校验action是否生成成功 ros2 interface show base_interfaces_demo/action/Progress输出三段消息结构即代表自定义动作接口完成。四、第二步C 动作通信 cpp03_action4.1 创建 C 功能包# 创建工作空间并初始化包 cd ~/robot_ws/src ros2 pkg create --build-type ament_cmake cpp03_action --dependencies rclcpp rclcpp_action base_interfaces_demo # 进入包目录并创建标准ROS 2目录结构 cd cpp03_action mkdir -p src4.2 动作服务端 demo01_action_server.cpp实现逻辑接收数字、循环累加、实时推送进度、支持任务取消、返回总和 完整代码见文末资源核心回调handle_goal校验请求数字小于 1 拒绝任务handle_cancel接收客户端取消指令execute子线程执行累加循环发布进度反馈handle_accepted新开线程执行耗时任务防止节点阻塞4.3 动作客户端 demo02_action_client.cpp实现逻辑发送目标数字、监听服务端接收状态、打印实时进度、接收最终求和结果。4.4 CMakeLists.txt 编译配置find_package(rclcpp REQUIRED) find_package(rclcpp_action REQUIRED) find_package(base_interfaces_demo REQUIRED) # 编译服务端 add_executable(demo01_action_server src/demo01_action_server.cpp) ament_target_dependencies(demo01_action_server rclcpp rclcpp_action base_interfaces_demo) # 编译客户端 add_executable(demo02_action_client src/demo02_action_client.cpp) ament_target_dependencies(demo02_action_client rclcpp rclcpp_action base_interfaces_demo) # 安装可执行文件 install(TARGETS demo01_action_server demo02_action_client DESTINATION lib/${PROJECT_NAME})4.5 编译与双终端运行# 编译 cd ~/robot_ws colcon build --packages-select cpp03_action source install/setup.bash终端 1服务端ros2 run cpp03_action demo01_action_server终端 2客户端ros2 run cpp03_action demo02_action_client运行效果服务端持续打印进度客户端同步输出百分比最终输出551~10 累加结果五、第三步Python 动作通信 py03_action5.1 创建 Python 功能包cd ~/robot_ws/src ros2 pkg create --build-type ament_python py03_action --dependencies rclpy base_interfaces_demo5.2 Python 服务端 demo01_action_server_py.py逻辑与 C 完全对齐通过ActionServer绑定执行回调循环 sleep 模拟耗时计算publish_feedback 推送进度。5.3 Python 客户端 demo02_action_client_py.pyActionClient实现三类回调目标接收回调、实时进度回调、最终结果回调。5.4 setup.py 注册可执行程序Python 核心配置找到 entry_points 修改entry_points{ console_scripts: [ demo01_action_server_py py03_action.demo01_action_server_py:main, demo02_action_client_py py03_action.demo02_action_client_py:main, ], },5.5 编译运行cd ~/robot_ws colcon build --packages-select py03_action source install/setup.bash终端 1ros2 run py03_action demo01_action_server_py终端 2ros2 run py03_action demo02_action_client_py六、运行结果与警告说明6.1 正常运行输出客户端持续打印10%、20%...100%最终输出sum 55服务端同步打印每一步进度任务完成提示。6.2 常见警告解决方案警告may be more than one action server for the action get_sum原因C 与 Python 服务端重名话题冲突 解决CtrlC 关闭所有旧 ROS2 终端重新只启动单版本服务端。运行时报没有那个文件或目录原因未进入工作空间刷新环境变量 解决cd ~/robot_ws source install/setup.bash编译提示msg/Student.msg不存在原因CMakeLists 中残留旧消息路径 解决删除 msg、srv 相关配置仅保留 action 文件。七、Action 通信核心原理总结通信三部分Goal请求目标、Feedback实时反馈、Result最终结果服务端使用独立子线程执行耗时任务避免节点阻塞支持任务取消、参数校验、异步回调适配长时运动类机器人任务C 与 Python 接口逻辑完全一致仅语法、API 调用存在差异。八、完整踩坑清单自定义 action 包必须添加member_of_group标签否则编译直接报错Python 包必须在 setup.py 注册 console_scripts否则 ros2 run 找不到程序每次新开终端必须执行 source 刷新环境变量多套服务端同时运行会产生话题冲突警告测试时仅保留一套Action 依赖action_msgs自定义消息包必须显式声明依赖C 动作任务必须开子线程否则 spin 阻塞无法接收新请求。九、总结本文完整实现 ROS2 Action 全链路开发从自定义动作消息到 C、Python 双语言服务端客户端开发覆盖编译、运行、排错全流程适合课程作业、毕业设计、入门学习使用。整套代码可直接复制运行无冗余依赖适配 ROS2 Humble/Jazzy 全系版本。

相关新闻

服装缺陷检测:开源模型 vs 自研训练的 ROI 量化决策模型

服装缺陷检测:开源模型 vs 自研训练的 ROI 量化决策模型

引言 在服装制造业中,视觉检测是保障产品质量、降低次品率的关键环节。随着深度学习技术的普及,企业面临一个核心决策:是直接采用成熟的开源视觉检测模型,还是投入资源自研训练专属模型?业界常泛泛而谈“各有优劣”&am…

2026/7/2 4:33:45阅读更多 →
2026 AI直播系统技术深度评测:端到端延迟低于200ms,500路并发架构解析

2026 AI直播系统技术深度评测:端到端延迟低于200ms,500路并发架构解析

当724小时无人值守直播成为电商标配,AI直播系统的技术栈选型正成为决定商家运营效率的核心变量。据艾媒咨询数据,2024年全球数字人电商直播市场规模达492.82亿美元,预计2026年将达767.93亿美元。中国信通院报告显示,2026年国内AI数…

2026/7/2 4:33:45阅读更多 →
来福谐波(股份代号:3952.HK):全链条自研重塑成本曲线 稳居全球谐波减速器第一梯队

来福谐波(股份代号:3952.HK):全链条自研重塑成本曲线 稳居全球谐波减速器第一梯队

6月22日,浙江来福谐波(股份代号:3952.HK)传动股份有限公司(下称「来福谐波(股份代号:3952.HK)」)正式启动港股招股,作为第十八C章特专科技公司,其…

2026/7/2 4:33:45阅读更多 →
2026年儿童口腔运营学习费用大揭秘,你想知道吗?

2026年儿童口腔运营学习费用大揭秘,你想知道吗?

目前尚无“2026年儿童口腔运营”的官方统一收费标准,但可根据现有市场行情,为您梳理出不同学习路径的费用区间,供您参考。💰 费用概览:不同学习路径的预算参考学习路径核心内容费用区间市场案例参考入门线上课儿童口腔…

2026/7/2 5:58:54阅读更多 →
千兆网卡还没过时 这些场景依然是最佳选择

千兆网卡还没过时 这些场景依然是最佳选择

"都2026年了,还在用千兆网卡?"——这句话在技术论坛里隔三差五就会出现。言下之意很明确:万兆甚至25G才是数据中心的主流,千兆早该淘汰了。 但实际部署中,千兆网卡在新出货的服务器和工业设备中依然占据相当…

2026/7/2 5:58:54阅读更多 →
京东商品详情 API 完整调用实例

京东商品详情 API 完整调用实例

Java 完整调用示例&#xff08;HttpClient&#xff09;依赖 Mavenxml<!-- httpclient --> <dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.14</version> </de…

2026/7/2 5:58:54阅读更多 →
AI算力基建动态简报(2026.07.01)

AI算力基建动态简报(2026.07.01)

第1条&#xff1a;国内AI产业扶持政策正式落地执行核心信息&#xff1a;国常会出台的人工智能产业扶持政策于7月1日正式落地执行。政策要求新建万卡级智算中心必须配套高速光传输设备&#xff0c;同时加大高端芯片、存储材料研发补贴与税收减免力度。政策同时开放政企场景推动A…

2026/7/2 5:58:54阅读更多 →
没有海外信用卡怎么充值 ChatGPT?国内用户开通 Plus 的几种办法(2026 最新)

没有海外信用卡怎么充值 ChatGPT?国内用户开通 Plus 的几种办法(2026 最新)

没有海外信用卡怎么充值 ChatGPT&#xff1f; 这是很多国内用户开通 ChatGPT Plus 时的第一个难题。最现实的做法不是硬试国内银行卡&#xff0c;而是先选对充值方式。 国内用户常见的卡点主要有三个&#xff1a;网页端付款失败、虚拟卡操作麻烦、找代充又担心账号安全。本文直…

2026/7/2 5:58:54阅读更多 →
Amazon S3 存储桶设置为公开读取(所有人可访问)

Amazon S3 存储桶设置为公开读取(所有人可访问)

一、开启存储桶公共访问 登录 AWS 管理控制台。进入 Amazon S3。点击 存储桶&#xff08;Buckets&#xff09;。选择需要配置的存储桶&#xff08;例如&#xff1a;schber-com&#xff09;。进入 权限&#xff08;Permissions&#xff09; 页面。找到 屏蔽公共访问权限&#xf…

2026/7/2 5:53:54阅读更多 →
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月&#xff0c;Boris Cherny 公开宣布自己卸载了 IDE。一时间&#xff0c;Vibe Coding 成了全行业最热的话题。6个月后&#xff0c;当我们回过头来拉一份真实账本&#xff0c;发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

2026/7/1 4:42:14阅读更多 →
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言&#xff1a;审计结束三个月了&#xff0c;审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间&#xff0c;内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中&#xff0c;审计…

2026/7/1 5:19:01阅读更多 →
塞尔达传说旷野之息存档修改器:3分钟掌握海拉鲁世界自由定制技巧

塞尔达传说旷野之息存档修改器:3分钟掌握海拉鲁世界自由定制技巧

塞尔达传说旷野之息存档修改器&#xff1a;3分钟掌握海拉鲁世界自由定制技巧 【免费下载链接】BOTW-Save-Editor-GUI A Work in Progress Save Editor for BOTW 项目地址: https://gitcode.com/gh_mirrors/bo/BOTW-Save-Editor-GUI 想在《塞尔达传说&#xff1a;旷野之息…

2026/7/2 0:03:01阅读更多 →
告别 AccessKey:多云平台 CLI OAuth 免密认证完全指南

告别 AccessKey:多云平台 CLI OAuth 免密认证完全指南

在本地开发环境使用云厂商 CLI 时,传统的 AccessKey(AK)方式需要手动创建、下载和保管密钥,不仅繁琐,还存在泄漏风险。其实,主流云平台都已提供基于 OAuth 2.0 的免密认证方案,让开发者可以通过浏览器登录一次性完成授权,CLI 自动管理临时凭证的刷新,兼顾了便利与安全…

2026/7/2 0:03:01阅读更多 →
基于13DOF传感器与PIC32MZ的高精度嵌入式导航系统设计

基于13DOF传感器与PIC32MZ的高精度嵌入式导航系统设计

1. 项目背景与核心价值在嵌入式系统开发领域&#xff0c;高精度定位与导航一直是极具挑战性的技术方向。传统方案往往面临成本、精度和实时性难以兼顾的困境。这个项目通过13DOF&#xff08;13自由度&#xff09;传感器组合与PIC32MZ2048EFH100高性能MCU的协同工作&#xff0c;…

2026/7/2 0:03:01阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时&#xff0c;发现推理速度只有可怜的 1-2 FPS&#xff0c;而别人的演示视频却能跑到 30 FPS 以上&#xff0c;那么问题很可能不在模型本身&#xff0c;而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后&#xff0c;会直接使用官方示例…

2026/7/2 0:33:58阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一&#xff1a;为什么你需要了解 Coze 和 Dify&#xff1f;如果你对 AI 应用开发感兴趣&#xff0c;但一看到“大模型”、“智能体”、“工作流”这些词就头疼&#xff0c;觉得门槛太高&#xff0c;那这篇文章就是为你准备的。很多开发者&#xff0c;包括我自己&#…

2026/7/2 1:32:11阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会&#xff1a;配图一直是个让人头疼的问题。2026年&#xff0c;AI生图工具已经非常成熟了&#xff0c;但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1&#xff1a;速度之王2026年6月11日&#xff0c…

2026/7/2 1:50:13阅读更多 →