ROS 服务创建与调用指南

介绍 ROS 服务(Service)是一种请求-响应模式的通信机制,适合一次性查询或控制操作(区别于持续发布的 Topic)。 1 2 3 4 5 客户端 (Client) 服务端 (Server) | | |--- 请求 (Request) ------------->| | | 处理逻辑 |<-- 响应 (Response) -------------| 原理 通信模型 ROS 服务基于 TCP/IP 的同步 RPC(远程过程调用)机制: 服务端在 ROS Master 注册服务名和地址 客户端通过 ROS Master 查找服务端地址 客户端与服务端建立 TCP 直连 客户端发送请求,阻塞等待响应 服务端处理完成后返回响应,客户端解除阻塞 graph LR A[ROS Master<br>注册中心] -->|① 注册服务| B[Server<br>服务端] A -->|② 查找服务| C[Client<br>客户端] B <-->|③ TCP 直连| C 与 Topic 的对比 特性 Topic(话题) Service(服务) 通信模式 发布-订阅(异步) 请求-响应(同步) 是否阻塞 否,持续发布 是,等待响应 数据流向 单向(发布者→订阅者) 双向(请求+响应) 适用场景 持续数据流(传感器、位姿) 一次性操作(查询、控制) 典型例子 点云、里程计、地图 获取变换、保存文件、重置状态 底层实现 服务定义文件 .srv 编译后自动生成 C++/Python 的请求和响应类 通信协议:roscpp 使用 TCPROS,rospy 使用 XML-RPC + TCPROS 服务端回调函数在 ROS spinner 线程中执行,多个请求会排队处理 作用 适用场景 状态查询:获取某个变量的当前值(如本项目的变换矩阵查询) 配置修改:运行时修改参数(如切换模式、调整阈值) 触发动作:执行一次性操作(如保存地图、重置系统) 同步确认:需要确认操作结果(如配准是否成功) 本项目中的应用 sequenceDiagram participant Other as 其他节点 participant MRLO as MRLO 节点 Other->>MRLO: get_transform(robot_id=1) MRLO->>MRLO: 从 drone_gicp_poses_ 读取 MRLO-->>Other: transform (Pose) Other->>Other: 使用变换矩阵转换坐标系 外部节点(如导航、规划模块)需要知道各机器人相对于 robot0 的坐标变换,通过服务按需获取,避免不必要的持续订阅。 ...

June 17, 2026 · 3 min · Zero-Kq

Ubuntu ROS 环境安装与配置指南

介绍 本文介绍在 Ubuntu 系统上安装与配置 ROS 环境的完整流程,包括系统编码与软件源检查、ROS2 Foxy 安装、ROS1 与 ROS2 环境切换、编译命令差异及常用终端指令对照。 1. 检查系统设置 1.1 检查编码 UTF-8 终端输入: 1 locale 出现如下输出信息说明编码为 UTF-8: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 LANG=zh_CN.UTF-8 LANGUAGE=zh_CN:en_US:en LC_CTYPE="zh_CN.UTF-8" LC_NUMERIC=zh_CN.UTF-8 LC_TIME=zh_CN.UTF-8 LC_COLLATE="zh_CN.UTF-8" LC_MONETARY=zh_CN.UTF-8 LC_MESSAGES="zh_CN.UTF-8" LC_PAPER="zh_CN.UTF-8" LC_NAME="zh_CN.UTF-8" LC_ADDRESS="zh_CN.UTF-8" LC_TELEPHONE="zh_CN.UTF-8" LC_MEASUREMENT="zh_CN.UTF-8" LC_IDENTIFICATION="zh_CN.UTF-8" LC_ALL= 1.2 检查是否启用 Ubuntu Universe 存储库 终端输入: 1 apt-cache policy | grep universe 若输出如下则表示已启用: ...

March 12, 2026 · 2 min · Zero-Kq

无人机仿真环境搭建指南

介绍 本文记录无人机仿真开发环境的完整搭建流程,涵盖 ROS 安装、PX4-Autopilot 源码编译、Gazebo 仿真环境配置、MAVROS 通信中间件安装,以及 QGroundControl 地面站部署。 1. 安装 ROS 使用鱼香 ROS 一键安装脚本: 1 wget http://fishros.com/install -O fishros && . fishros 2. 安装 PX4-Autopilot 2.1 下载源码 1 git clone https://github.com/PX4/PX4-Autopilot.git 2.2 安装依赖 解压缩后执行: 1 2 cd ~/Desktop/PX4-Autopilot bash ./Tools/setup/ubuntu.sh 2.3 添加环境路径 编辑 ~/.bashrc 文件,添加以下内容: 1 2 3 4 source ~/桌面/PX4-Autopilot/Tools/setup_gazebo.bash ~/桌面/PX4-Autopilot ~/桌面/PX4-Autopilot/build/px4_sitl_default export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/桌面/PX4-Autopilot export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/桌面/PX4-Autopilot/Tools/sitl_gazebo # 具体路径取决于实际文件环境 使环境变量生效: 1 source ~/.bashrc 此时开启终端会打印以下信息: 1 2 3 GAZEBO_PLUGIN_PATH $GAZEBO_PLUGIN_PATH GAZEBO_MODEL_PATH $GAZEBO_MODEL_PATH LD_LIBRARY_PATH $LD_LIBRARY_PATH 可通过注释 setup_gazebo.bash 最后三句关闭打印。 ...

March 11, 2026 · 1 min · Zero-Kq