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

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

http://www.jsqmd.com/news/1230212/

相关文章:

  • 2026 礼品卡回收全攻略|闲置卡券安全变现,享卡回收实测避坑指南 - 信息热点
  • 2026年天津有毒气体报警器检测5家机构横向对比:资质、服务、费用全拆解 - 信息热点
  • 水晶轻奢跨境合规全手册:拆解品牌字体、天鹅剪影、水晶纹理三重商标完整保护边界
  • FreeRTOS学习笔记(九)
  • 2026年7月佛山工装与全案装修哪家强?头部合规企业推荐榜 - 互联网科技品牌测评
  • EasyX游戏:推箱子
  • 孕妇防妊娠纹用什么好?别瞎买!硬核拆解省下试错钱 - 信息热点
  • OData.NET版本兼容性指南:从OData v1-3到v4的迁移策略
  • RuoYi-Vue3代码生成器useDict白屏问题排查与修复
  • 01背包问题(二维动态规划法)的时间复杂度与空间复杂度
  • 软件工程毕业设计新颖的开题推荐
  • 深入理解 Go Context:从设计哲学到工程实践
  • 2026年自助洗车机靠谱公司推荐:选对品牌,创业成功的第一步 - Fan_00
  • EasyX游戏:太空射击
  • 基于Neh算法和禁忌搜索算法的排列流车间调度问题(PFSP)研究附Python代码
  • 守护市民财产!青岛推出双认证手表回收正规商家公示清单 - 好物测评局
  • 2026民企老板必看|综合性价比领先的国际 EMBA 择校榜单,避开镀金踩坑
  • 深入解析TI AM263P MSS_CTRL模块:从CPU模式到安全监控的底层配置
  • 2026年全平台GEO服务商横评:主流AI引擎适配能力深度对比
  • 多轨音频智能混音软件怎么选:从 AI 混音到 AI 母带的实际体验
  • 20个必知的RuboCop Performance代码检查规则,让你的Ruby程序飞起来
  • 外卖霸王餐API体验优化:Java后端基于GZIP压缩+Protobuf序列化减小接口响应体积的实践
  • 小程序毕业设计-基于 SpringBoot + 微信小程序的书洞图书借阅小程序的设计与实现 校园图书借阅分享服务小程序(源码+LW+部署文档+全bao+远程调试+代码讲解等)
  • 孕妇用妊娠油推荐|三项对比维度 选油不只看滋润与否 - 信息热点
  • 上海玖让装饰材料、上海专业卫生间玻璃隔断源头大厂(江浙沪工装定制) - 信息热点
  • 〇、动词类(常见谓语表述)
  • 2026年7月芝柏唐山官方声明:网点地址与客服热线最新信息公示 - 亨得利官方服务中心
  • HarmonyOS应用开发实战:小事记 - NavPathStack 进阶:路由守卫、参数传递、页面返回数据
  • IntelliJ IDEA 里怎么用 Git:从入门到日常协作
  • 在Windows上部署Unlimited-ocr并提供给大模型使用