尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

【ROS】ros学习笔记(10)——通讯实操03_服务调用
📅 发布时间:2026/7/20 20:25:52

通讯实操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.老师的视频
在笔记上理论部分大量参考了老师的文档

相关新闻

  • 孕妇防妊娠纹用什么好?别瞎买!硬核拆解省下试错钱 - 信息热点
  • EasyX游戏:推箱子
  • RuoYi-Vue3代码生成器useDict白屏问题排查与修复

最新新闻

  • Office.js:3步构建企业级Office扩展应用,告别繁琐开发流程
  • Optimus技术评估指南:从原理到实战验证
  • 程序员必备:人体工学椅选购指南与健康坐姿解析
  • Path of Building深度解析:如何用开源工具破解《流放之路》的Build构建密码
  • 5分钟上手:Python版B站视频下载器完整使用指南
  • 暗黑破坏神2 Win11完美适配指南:d2dx宽屏补丁终极解决方案

日新闻

  • Python开发内部工具:7大核心库实战解析
  • 合肥雷达官方2026年7月最新信息:客户服务网点地址与售后热线权威公示 - 亨得利官方服务中心
  • PCA实战指南:从变量纠缠诊断到主成分业务解读

周新闻

  • SaaS软件行业GEO实践:AI搜索时代的品牌可见性与获客新路径
  • 什么是PCTFE?医药高端包装的“防潮王牌“材料
  • 【JVM调优实战】16-可视化利器-JConsole-VisualVM-JMC

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号