【ROS实操3服务调用添加乌龟数量】

news2024/10/2 18:20:38

需求描述

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

实现分析

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

实现流程

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

1.服务名称与服务消息获取

获取话题:/spawn

rosservice list

在这里插入图片描述
/spawn可以在乌龟界面新建乌龟

获取消息类型:turtlesim/Spawn

rosservice type /spawn

获取消息格式:

rossrv info turtlesim/ Spawn

在这里插入图片描述

简单实现

终端中继续输入rosservice call /spawn "然后tab自动补齐,就可以开始设置了
分别是x,y坐标,唯一需要注意的是theta是乌龟的脑袋朝向,是用弧度来做单位的,3.14为一弧度,要想朝上,就是一半的弧度,就是1.57.

x:00
y:00
theta:0.0
name:“随便设置”

在这里插入图片描述
设置后,回车:
在这里插入图片描述
用c++实现,需要的功能包有roscpp,rospy,std_msgs,turtlesim
之前功能包有这些,直接在src下面新建文件test03_service_client.cpp
粘贴以下代码:

#include "ros/ros.h"
#include "turtlesim/Spawn.h"
/*需求:是向服务端发送请求,生成一只新的乌龟
话题:/spawn
消息: turtlesim/Spawn
1.包含头文件;
2.初始化·ROS·节点;
3.创建节点句柄;
4.创建客户端对象;
5.组织数据并发送:
6.处理响应。
8*/

int main(int argc, 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-l
// 6.处理响应。
//5-2.发送请求
//判断服务器状态
// ros : : service: :waitForService( " /spawn" );
client.waitForExistence( );
bool flag = client.call(spawn);// flag 接收响应状态,响应结果也会被设置进spwan对象//6.处理响应。
if (flag){
ROS_INFO("乌龟生成成功,新乌龟叫:8s " , spawn. response.name.c_str());}
else{
ROS_INFO("请求失败!!!");

}
return 0;
}

其中代码按照之前的代码进行修改数字还有文件名字即可。

spawn.request.x = 1.0;
spawn. request.y = 4.0;
spawn. request.theta = 1.57;
spawn. request.name = "turtle2" ;

判断服务器是否响应的函数,二选一即可。

ros : : service: :waitForService( " /spawn" );
client.waitForExistence( );
//判断服务器状态
// ros : : service: :waitForService( " /spawn" );这个也可以
client.waitForExistence( );
bool flag = client.call(spawn);// flag 接收响应状态,响应结果也会被设置进spwan对象//6.处理响应。
if (flag){
ROS_INFO("乌龟生成成功,新乌龟叫:8s " , spawn. response.name.c_str());}
else{
ROS_INFO("请求失败!!!");
}

然后配置cmakelist.txt文件:

add_dependencies(test03_service_client ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})

target_link_libraries(test03_service_client
   ${catkin_LIBRARIES}
 )

在这里插入图片描述
然后ctrl+shift+b编译运行无误即可。

运行

先启动roslaunch plumbing_test start_turtle.launch
在这里插入图片描述
新建一个:

source ./devel/setup.bash
rosrun plumbing_test test03_service_client

在这里插入图片描述
再来一次会失败:
在这里插入图片描述
原因是名字turtle2名字重复需要修改name,即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/436837.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++基础入门——语法详解篇(上)

文章目录 一、什么是 C 呢&#xff1f; 二、为什么要学 C 呢&#xff1f; 三、C 基础语法 3、1 C 关键字 3、2 命名空间 3、2、1 为什么要引入命名空间 3、2、2 命名空间的定义 3、2、3 命名空间的使用 3、3 C的输入和输出 3、4 函数重载 3、4、1 函数重载的概念 3、4、2 C支持…

【WAF】雷池安装及使用体验

文章目录 前言一、雷池介绍二、安装及使用1.下载链接2.下载3. 安装waf测试 前言 长亭一直是我比较喜欢的一家公司&#xff0c;像业界比较出名的扫描器xray还有rad等很多工具都是他们开发的&#xff0c;使用起来非常的nice&#xff0c;联动其他安全工具可以实现自动漏洞挖掘&am…

掌玩科技×OceanBase:HTAP实时数据分析,降低80%存储成本

欢迎访问 OceanBase 官网获取更多信息&#xff1a;https://www.oceanbase.com/ 近日&#xff0c;新兴游戏公司海南掌玩网络科技有限公司&#xff08;以下简称“掌玩科技”&#xff09;正式牵手原生分布式数据库 OceanBase&#xff0c;其投放系统、用户分析系统、数据系统、运营…

beef-xss浏览器劫持

beef-xss浏览器劫持 一&#xff0c;实验拓扑图二&#xff0c;租用一台阿里云&#xff0c;搭建docker环境和beef环境1.租一台阿里云服务器&#xff0c;系统选用ubuntu&#xff0c;计时收费的那种&#xff0c;一个小时几毛钱2.开启策略组3000端口&#xff0c;5000端口4.安装docke…

wait/notify使用详解

1. 使用注意事项 wait/notify(All)可用于线程间(线程数量>3)通信 永远在synchronized方法或对象里使用wait/notify(All),不然JVM报java.lang.IllegalMonitorStateException 永远在while循环里使用wait&#xff0c;防止其他原因改变先前判断条件 永远在线程间共享对象(生产…

直流有刷电机的电路分析

这里写目录标题 H桥改进后的电路L298N原理图野火的电机驱动板MOS管野火的原理图 H桥 当 Q1 和 Q4 导通时&#xff0c;电流将经过 Q1 从左往右流过电机&#xff0c;在经过 Q4 流到电源负极&#xff0c;这时图中电机可以顺时针转动。 当 Q3 和 Q2 导通时&#xff0c;电流将经过 Q…

【AI算法学习】基于AutoEncoder的生成对抗网络

基于AutoEncoder的生成对抗网络&#xff1a;VAE-GAN AutoEncoderVAEGANVAE-GANDCGANInfoGANss-InfoGAN论文链接 " 生成模型&#xff08;Generative modeling&#xff09;"已成为机器学习的一个较为广泛的领域。在图像这种流行数据上&#xff0c;每张图像都有数千数万…

服务(第七篇)nginx优化

隐藏版本号&#xff1a; 方法①&#xff1a; 修改配置文件&#xff1a; 检测&#xff1a;版本号没有了 方法②&#xff1a; 首先修改nginx.h文件&#xff0c;修改版本号和服务名&#xff1a; 然后切换到/opt/nginx-1.18.0进行编译安装&#xff1a; 安装后进入nginx.conf进行…

Redis缓存实战(2)

目录 缓存定义 Redis缓存实战 1删除缓存还是更新缓存&#xff1f; 2如何保证缓存与数据库的操作同时成功或者失败&#xff1f; 3先操作数据库还是缓存&#xff1f; 缓存问题 缓存穿透 缓存雪崩 缓存击穿 缓存定义 缓存&#xff08;Cache)是数据交换的缓冲区&#xff0…

微信小程序自动化测试实战教程,框架源码应有尽有

目录 1. 微信小程序自动化测试介绍 2. 搭建微信小程序自动化测试框架 步骤1&#xff1a;选择测试工具 步骤2&#xff1a;搭建测试环境 步骤3&#xff1a;编写测试脚本 步骤4&#xff1a;执行测试 3. 实现微信小程序自动化测试的关键技术 技术1&#xff1a;微信小程序自动…

Netty:常见的面试题和答案

1. 什么是Netty&#xff1f; 答&#xff1a;Netty是一个高性能的网络编程框架&#xff0c;基于NIO的非阻塞式IO模型&#xff0c;可以帮助开发者快速开发高性能、高可靠性的网络应用程序。 2. Netty的核心组件有哪些&#xff1f; 答&#xff1a;Netty的核心组件包括&#xff…

GPT-3模型简单介绍

目录 一、概要 二、深入扩展 一、概要 与T5模型( Text-to-Text Transfer Transformer&#xff0c;详见文末链接 &#xff09;相似&#xff0c;OpenAI提出的GPT-3模型&#xff08;第三代GPT&#xff09;也是通过将不同形式的自然语言处理任务重定义为文本生成实现模型的通用化。…

【面试】一文读懂Java类加载全过程

文章目录 一、概述1. 类加载器2. 加载阶段3. 验证阶段4. 准备阶段5. 解析阶段6. 初始化阶段类加载过程总结 二、相关问题Q: 什么是类加载&#xff1f;Q: Java中有哪些类加载器&#xff1f;Q: 类加载的过程包括哪些步骤&#xff1f;Q: 类加载器的双亲委派模型是什么&#xff1f;…

告别StringUtil:使用Java的全新String API优化你的代码

前言 Java编程语言每一次主要更新&#xff0c;都引入了许多新功能和改进。 并且在String 类中引入了一些新的方法&#xff0c;能够更好地满足开发的需求&#xff0c;提高编程效率。 repeat(int count)&#xff1a;返回一个新的字符串&#xff0c;该字符串是由原字符串重复指定…

Jetson TX1 /TX2 对比介绍

大家好&#xff0c;我是虎哥&#xff0c;经过一段时间的整理&#xff0c;针对TX1/TX2这些看起来已经落伍的产品&#xff0c;如何找到合适的应用场景&#xff0c;我也整体上做了一些了解好调研。现在由于资料很多都比较老了&#xff0c;有些表述也有些前后表述不一&#xff0c;所…

ClickHouse环境搭建

目录 1 ClickHouse 的安装1.1 准备工作1.1.1 确定防火墙处于关闭状态1.1.2 CentOS 取消打开文件数限制1.1.3 安装依赖1.1.4 CentOS 取消 SELINUX 1.2 单机安装1.2.1 在 hadoop102 的/opt/software 下创建 clickhouse 目录1.2.2 将安装文件上传到 hadoop102 的software/clickhou…

Baumer工业相机堡盟工业相机如何联合BGAPISDK和OpenCV实现图像的伽马变换校正算法增强(C++)

Baumer工业相机堡盟工业相机如何联合BGAPISDK和OpenCV实现图像的伽马变换校正算法增强&#xff08;C&#xff09; Baumer工业相机Baumer工业相机使用图像算法增加图像的技术背景Baumer工业相机通过BGAPI SDK联合OpenCV使用图像增强算法1.引用合适的类文件2.BGAPI SDK在图像回调…

第三章 作业(7BF)【计算机系统结构】

第三章 作业&#xff08;7BF&#xff09;【计算机系统结构】 前言推荐第三章 作业&#xff08;7BF&#xff09;71115鲲鹏流水线调研华为鲲鹏处理器ARM体系的总体思想ARM的流水线结构 最后 前言 2023-4-10 18:49:41 以下内容源自《【计算机系统结构】》 仅供学习交流使用 推荐…

上一次c语言多文件处理代码的改进和总结

先看看上一次的文件&#xff1a; (3条消息) 认真复习c语言1_穿花云烛展的博客-CSDN博客 对于有重复结构体定义但是并不会报错&#xff0c;只是难以修改而已&#xff1a;为了解决这个一改就要改两次的情况&#xff0c;这里有一个解决方案&#xff1a; 上面的代码是可以运行的&…

常见的Web攻击技术

文章目录 前言HTTP 不具备必要的安全功能在客户端即可篡改请求针对 Web 应用的攻击模式 因输出值转义不完全引发的安全漏洞跨站脚本攻击XSSXSS实例 SQL 注入攻击实例 HTTP 首部注入攻击HTTP 首部注入攻击案例HTTP 响应截断攻击 因会话管理疏忽引发的安全漏洞会话劫持会话固定攻…