当前位置: 首页 > news >正文

【ros2】ROS2 C++服务端与客户端开发指南

文章目录

  • ROS2 C++服务端与客户端开发指南
    • 一、核心概念:C++服务通信的特点与优势
    • 二、基于书中第4章的C++服务开发核心步骤
      • 1. 前置准备:创建功能包与依赖配置
        • (1)创建C++功能包
        • (2)配置`package.xml`
        • (3)配置`CMakeLists.txt`
      • 2. 服务端开发步骤(以书中海龟巡逻为例)
        • (1)服务接口回顾(`.srv`文件)
        • (2)服务端代码实现
      • 3. 客户端开发步骤(以书中随机巡逻为例)
        • (1)客户端代码实现
      • 4. 编译与运行
        • (1)编译功能包
        • (2)启动节点测试
    • 三、书外拓展知识:C++服务通信高级特性
      • 1. 同步与异步调用的区别
      • 2. 服务的并发处理
      • 3. 服务的超时控制
      • 4. 服务与参数的结合
      • 5. 调试与监控工具
    • 四、常见问题与解决方案
    • 五、总结

ROS2 C++服务端与客户端开发指南

(基于《ROS2机器人开发:从入门到实践》第4章及拓展知识)

一、核心概念:C++服务通信的特点与优势

服务(Service)是ROS2中基于“请求-响应”模式的双向通信机制,适用于需要明确反馈的交互场景(如任务执行、参数查询、算法计算等)。相比Python,C++实现的服务通信具有运行效率高、实时性强的特点,更适合机器人控制、传感器数据处理等性能敏感场景。

核心特征:

  • 通信模式:客户端主动发送请求,服务端处理后返回响应(一对一交互)。
  • 接口定义:通过.srv文件声明请求(Request)和响应(Response)数据结构,用---分隔。
  • 生命周期:服务仅在被调用时激活,处理完成后释放资源,适合低频率、高复杂度的任务。

二、基于书中第4章的C++服务开发核心步骤

1. 前置准备:创建功能包与依赖配置

(1)创建C++功能包

服务端和客户端需依赖ROS2核心库及自定义接口包,创建功能包命令如下:

# 创建C++功能包,依赖rclcpp(ROS2 C++库)和自定义接口包
ros2 pkg create demo_cpp_service --build-type ament_cmake \
--dependencies rclcpp chapt4_interfaces turtlesim
  • 依赖说明:
    • rclcpp:ROS2 C++核心库,提供节点、服务等基础功能。
    • chapt4_interfaces:自定义服务接口包(包含.srv文件)。
    • turtlesim:示例中控制海龟运动的依赖(根据实际场景调整)。
(2)配置package.xml

声明编译和运行依赖,确保功能包能正确引用接口和ROS2库:

<?xml version="1.0"?>
<package format="3"><name>demo_cpp_service</name><version>0.0.0</version><description>ROS2 C++服务示例</description><!-- 编译依赖 --><buildtool_depend>ament_cmake</buildtool_depend><build_depend>rclcpp</build_depend><build_depend>chapt4_interfaces</build_depend><build_depend>turtlesim</build_depend><!-- 运行依赖 --><exec_depend>rclcpp</exec_depend><exec_depend>chapt4_interfaces</exec_depend><exec_depend>turtlesim</exec_depend><export><build_type>ament_cmake</build_type></export>
</package>
(3)配置CMakeLists.txt

指定可执行文件、依赖库及安装规则(核心配置):

cmake_minimum_required(VERSION 3.8)
project(demo_cpp_service)if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")add_compile_options(-Wall -Wextra -Wpedantic)  # 开启编译警告
endif()# 查找依赖包
find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
find_package(chapt4_interfaces REQUIRED)
find_package(turtlesim REQUIRED)# 服务端可执行文件
add_executable(turtle_control src/turtle_control.cpp)
ament_target_dependencies(turtle_controlrclcppchapt4_interfacesturtlesim
)# 客户端可执行文件
add_executable(patrol_client src/patrol_client.cpp)
ament_target_dependencies(patrol_clientrclcppchapt4_interfaces
)# 安装可执行文件到install目录
install(TARGETSturtle_controlpatrol_clientDESTINATION lib/${PROJECT_NAME}
)ament_package()

2. 服务端开发步骤(以书中海龟巡逻为例)

服务端的核心逻辑是:创建服务对象 → 定义请求处理回调函数 → 处理请求并生成响应

(1)服务接口回顾(.srv文件)

书中4.3节定义的巡逻服务接口Patrol.srv

# 请求:目标位置坐标
float32 target_x
float32 target_y
---
# 响应:处理结果
int8 SUCCESS=1  # 成功常量
int8 FAIL=0     # 失败常量
int8 result     # 1表示成功,0表示失败
(2)服务端代码实现
// src/turtle_control.cpp
#include "rclcpp/rclcpp.hpp"
#include "geometry_msgs/msg/twist.hpp"          // 速度控制消息
#include "turtlesim/msg/pose.hpp"              // 海龟位置消息
#include "chapt4_interfaces/srv/patrol.hpp"    // 自定义巡逻服务接口// 命名空间简化代码
using namespace std::placeholders;
using Patrol = chapt4_interfaces::srv::Patrol;
using Twist = geometry_msgs::msg::Twist;
using Pose = turtlesim::msg::Pose;class TurtleController : public rclcpp::Node {
public:TurtleController() : Node("turtle_control_node") {// 1. 创建速度发布者(控制海龟运动)vel_pub_ = this->create_publisher<Twist>("/turtle1/cmd_vel", 10)
http://www.dtcms.com/a/614537.html

相关文章:

  • 网站开发成本主要有哪些网络广告发布
  • 【035】Dubbo3从0到1系列之dubbo-remoting核心接口Endpoint
  • 用备份的网站代码做网站步骤小程序模板怎么导入
  • 利用帝国cms网站建设网页源代码怎么搜索关键词
  • 【愚公系列】《腾讯元宝从入门到精通》002-提示词设计与优化
  • C++哈希(包含unordered_set和unordered_map的封装)
  • 编译类语言 | 深入了解编译原理及应用
  • 西安建设银行网站专业公司网站 南通
  • 禁止同ip网站查询抖音小程序注册
  • Chaos-nano:Arduino Pro Mini 轻量级操作系统解析与实战应用
  • 从 0 到 1 学爬虫:Python 基础语法在爬虫中的实战运用用这个标题写一篇文章,在当前对话窗口输出
  • 网页设计网站排行榜中国发达国家还有多远
  • Podman和Docker
  • 自己架设服务器做网站一同看网页打不开
  • 手写LRU 缓存
  • 23-MD5+DES+Webpack:考试宝
  • 前端构建工具环境变量,安全管理
  • 个人网站名称举例网站建设需要的硬件
  • 数据分析笔记09:Python条件语循环
  • 可在哪些网站做链接赣州网络招聘
  • 高端网站制作网站背景自动切换
  • 代码生成工具GitHub Copilot介绍
  • RDMA基本操作类型---send/recv,write/read
  • 2.37基于Multisim的数字电子钟准点报时,时间可调,Multisim时钟,Multisim电子时钟。含3000字报告。功能:带准点报时,时间可调
  • 建筑模板有哪些seo优化按天扣费
  • 广州网站设计联系方式旅游做攻略用什么网站好
  • 小华HC32L136K8TA 单片机新建 MDK5 工程模板 (一)
  • day15(11.15)——leetcode面试经典150
  • LED闪烁功能代码详解
  • 这几年做哪些网站致富基于ssh框架的网站开发流程