news 2026/7/20 20:06:00

【ROS】ros学习笔记(10)——通讯实操03_服务调用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【ROS】ros学习笔记(10)——通讯实操03_服务调用

通讯实操03_服务调用

  • 1.服务名称和消息的获取
    • 1.1 获取话题
    • 1.2 获得消息类型
    • 1.3 获得消息格式
  • 2.功能实现
    • 2.0 编写launch文件
    • 2.1 写cpp文件
    • 2.2 修改CMake
  • 3.运行
  • 4.命令方式简单运行

需求描述:编码实现向 turtlesim 发送请求,在乌龟显示节点的窗体指定位置生成一乌龟,这是一个服务请求操作。

结果演示:

实现分析:

  1. 首先,需要启动乌龟显示节点。
  2. 要通过ROS命令,来获取乌龟生成服务的服务名称以及服务消息类型。
  3. 编写服务请求节点,生成新的乌龟。

实现流程:

  1. 通过ros命令获取服务与服务消息信息。
  2. 编码实现服务请求节点。
  3. 启动 roscore、turtlesim_node 、乌龟生成节点,生成新的乌龟。

1.服务名称和消息的获取

1.1 获取话题

rosservice list

得到结果如下:

话题名为:/spawn
spawn是下蛋的意思

1.2 获得消息类型

rosservicetype/spawn

得到结果如下:

或者用

rosservice info /spawn

来获得消息类型

消息类型为:turtlesim/Spawn

1.3 获得消息格式

rossrv info turtlesim/Spawn

得到结果如下:

消息格式为:

float32 x float32 y float32 theta string name --- string name

2.功能实现

创建功能包需要依赖的功能包: roscpp rospy std_msgs turtlesim

2.0 编写launch文件

在功能包下添加launch文件夹,在launch文件夹下面添加launch文件,内容如下:

<!--启动乌龟GUI和键盘控制节点--><launch><!-- 乌龟GUI --><nodepkg="turtlesim"type="turtlesim_node"name="turtle"output="screen"/><!-- 键盘控制 --><nodepkg="turtlesim"type="turtle_teleop_key"name="key"output="screen"/></launch>

这样可以通过roslaunch命令同时启动小乌龟节点和小乌龟键盘控制节点

source./devel/setup.bash roslaunch plumbing_test start_turtle.launch

2.1 写cpp文件

在功能包下面的src目录下创建新的cpp文件
内容如下

#include"ros/ros.h"#include"turtlesim/Spawn.h"/* 需求:向服务端发送请求,生成一只新乌龟 话题:/spawn 消息:turtlesim/Spawn 1.包含头文件 2.初始化ros节点 3.创建节点句柄 4.创建服务端对象 5.组织数据并发送 6.处理响应 */intmain(intargc,char*argv[]){setlocale(LC_ALL,"");// 2.初始化ros节点ros::init(argc,argv,"service_call");// 3.创建节点句柄ros::NodeHandle nh;// 4.创建服务端对象ros::ServiceClient client=nh.serviceClient<turtlesim::Spawn>("/spawn");// 5.组织数据并发送//5.1 组织请求数据turtlesim::Spawn spawn;spawn.request.x=1.0;spawn.request.y=4.0;spawn.request.theta=1.57;spawn.request.name="turtle2";//5.2 发送请求//判断服务器状态//ros::service::waitForService("/spawn");client.waitForExistence();boolflag=client.call(spawn);//flag 接收响应状态,响应结果也会被设置进spwan对象// 6.处理响应if(flag){ROS_INFO("乌龟生成成功,新乌龟名字叫:%s",spawn.response.name.c_str());}else{ROS_INFO("乌龟生成失败");}return0;}

2.2 修改CMake

修改功能包下的src下的cmake文件
第136行取消注释add_executable(节点名 cpp文件),注意一般节点名选用和cpp文件名一致

add_executable(test_o1_severclient src/test_o1_severclient.cpp)

第149-151行target_link_libraries取消注释

target_link_libraries(和上一条同名的节点名 ${catkin_LIBRARIES} )

target_link_libraries(test_o1_severclient ${catkin_LIBRARIES} )

3.运行

先编译,然后先开一个终端source一下,然后用roslaunch启动多个节点

source./devel/setup.bash oslaunch plumbing_test_sever start_turtle.launch

再开一个终端source一下,rosrun启动服务

source./devel/setup.bash rosrun plumbing_test_sever test_o1_severclient

4.命令方式简单运行

可以使用rosservice call来简单实现功能
新开一个终端,输入rosservice call,按tab补齐
然后就可以自定义新生成的乌龟的x坐标、y坐标和姓名
回车运行指令
指令运行后会返回乌龟名称
(theta的角度是弧度制,3.0接近pai所以乌龟的头向右侧)

学习的为赵虚左老师的教程 1.老师的文档 2.老师的视频
在笔记上理论部分大量参考了老师的文档

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/20 20:05:44

如何快速提升显卡性能:AtlasOS终极驱动优化指南

如何快速提升显卡性能&#xff1a;AtlasOS终极驱动优化指南 【免费下载链接】Atlas &#x1f680; An open and lightweight modification to Windows, designed to optimize performance, privacy and usability. 项目地址: https://gitcode.com/GitHub_Trending/atlas1/Atl…

作者头像 李华
网站建设 2026/7/20 20:04:05

2026年全平台GEO服务商横评:主流AI引擎适配能力深度对比

引言随着国内生成式AI应用的快速普及&#xff0c;用户搜索行为已分散到多个主流大模型平台&#xff0c;豆包、元宝、DeepSeek、Kimi、通义千问、百度AI等平台均拥有亿级用户规模&#xff0c;不同平台的用户画像、使用场景存在明显差异。由于不同大模型的算法逻辑、内容偏好、引…

作者头像 李华
网站建设 2026/7/20 20:02:51

指标体系不是画一棵树:从业务目标到决策系统

“核心指标、过程指标、护栏指标和贡献链”不是分别拍脑袋确定的。正确顺序是&#xff1a;先明确业务目标&#xff0c;再梳理目标实现的机制&#xff0c;最后在机制的不同位置放置指标。很多指标体系看起来很完整&#xff1a;有核心指标、有过程指标、有护栏指标&#xff0c;还…

作者头像 李华
网站建设 2026/7/20 20:01:49

固定光伏支架 计算书

固定光伏支架 计算书 1、设计依据 1.1、主要设计规范 GB/T 50017-2017 《钢结构设计标准》

作者头像 李华
网站建设 2026/7/20 20:01:33

GitHub Copilot SDK架构揭秘:JSON-RPC通信与CLI服务器模式

GitHub Copilot SDK架构揭秘&#xff1a;JSON-RPC通信与CLI服务器模式 【免费下载链接】copilot-sdk Multi-platform SDK for integrating GitHub Copilot Agent into apps and services 项目地址: https://gitcode.com/GitHub_Trending/co/copilot-sdk GitHub Copilot …

作者头像 李华
网站建设 2026/7/20 20:01:03

Ptex在游戏开发中的应用:实时渲染中的纹理管理策略

Ptex在游戏开发中的应用&#xff1a;实时渲染中的纹理管理策略 【免费下载链接】ptex Per-Face Texture Mapping for Production Rendering https://wdas.github.io/ptex 项目地址: https://gitcode.com/gh_mirrors/pt/ptex Ptex是一种创新的每面纹理映射技术&#xff0…

作者头像 李华