ROS:客户端Client的编程实现

news2025/1/12 12:14:46

目录

  • 一、话题模型
  • 二、创建功能包
  • 三、创建代码并编译运行(C++)
    • 3.1步骤
    • 3.2创建客户端Client代码
    • 3.3编译
  • 四、运行

一、话题模型

Sever端是海龟仿真器/turtlesim,Client端是待实现的程序,其作为Response的节点,并产生Request的请求,发给Server端。Server端收到Request请求后产生一只海龟,回馈一个Response给Client海龟产生是否成功。Service的名称为/spawn,中间传输消息的数据结构为turtlesim::Spawn。
ROS Master负责管理节点。
在这里插入图片描述

二、创建功能包

创建新的功能包 learning_service

cd ~/catkin_ws/src
catkin_create_pkg learning_service roscpp rospy std_msgs geometry_msgs turtlesim

在这里插入图片描述

三、创建代码并编译运行(C++)

3.1步骤

初始化ROS
创建一个Client实例
发布服务请求数据
等待Server处理之后的应答结果

3.2创建客户端Client代码

在learning_service/src新建文件turtle_spawn.cpp

/**
 * 该例程将请求/spawn服务,服务数据类型turtlesim::Spawn
 */

#include <ros/ros.h>
#include <turtlesim/Spawn.h>

int main(int argc, char** argv)
{
    // 初始化ROS节点
	ros::init(argc, argv, "turtle_spawn");

    // 创建节点句柄
	ros::NodeHandle node;

    // 发现/spawn服务后,创建一个服务客户端,连接名为/spawn的service
	ros::service::waitForService("/spawn");
	ros::ServiceClient add_turtle = node.serviceClient<turtlesim::Spawn>("/spawn");

    // 初始化turtlesim::Spawn的请求数据
	turtlesim::Spawn srv;
	srv.request.x = 2.0;
	srv.request.y = 2.0;
	srv.request.name = "turtle2";

    // 请求服务调用
	ROS_INFO("Call service to spwan turtle[x:%0.6f, y:%0.6f, name:%s]", 
			 srv.request.x, srv.request.y, srv.request.name.c_str());

	add_turtle.call(srv);

	// 显示服务调用结果
	ROS_INFO("Spwan turtle successfully [name:%s]", srv.response.name.c_str());

	return 0;
};

3.3编译

先配置CMakeLists.txt编译规则:
设置需要编译的代码和生成的可执行文件;
设置链接库;

add_executable(turtle_spawn src/turtle_spawn.cpp)
target_link_libraries(turtle_spawn ${catkin_LIBRARIES})

拷贝到CMakeLists.txt对应位置
在这里插入图片描述
编译

cd ~/catkin_ws
catkin_make

在这里插入图片描述

四、运行

roscore
rosrun turtlesim turtlesim_node
rosrun learning_service turtle_spawn

生成第二只海龟
在这里插入图片描述
参考视屏:古月居ROS入门21讲
在这里插入图片描述

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

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

相关文章

wav格式怎么转换?介绍三个转换wav格式的方法

在音乐制作或者编辑过程中&#xff0c;可能需要将录制的音频文件转换成特定的格式以便于后期处理。例如&#xff0c;你可能拍摄了一段演奏视频&#xff0c;想要提取其中的音频&#xff0c;并将其转换为wav或者flac等无损格式&#xff0c;以便于进行音频编辑和修复。那么你知道w…

【正点原子STM32连载】 第二十四章 OLED显示实验 摘自【正点原子】STM32F103 战舰开发指南V1.2

1&#xff09;实验平台&#xff1a;正点原子stm32f103战舰开发板V4 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id609294757420 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第二十…

VMWare安装Ubuntu

VMWare安装Ubuntu 安装前 准备 访问https://cn.ubuntu.com/download(下载需要版本/以16.04为例)操作系统上安装VMWare 基本安装 下载映像文件后&#xff0c;按照一步一步操作即可安装注意选中映像文件安装结束&#xff0c;登录进入系统可看到以下画面 设置语言环境 进入系…

OpenMMLab-AI实战营第二期-课程笔记-Class 2:人体姿态估计与MMpose

Class 2&#xff1a;人体姿态估计与MMpose 文章目录 Class 2&#xff1a;人体姿态估计与MMpose**人体姿态估计概述****what?****下游任务** **2D 姿态估计****主流算法****基于回归坐标的方法****基于热图&#xff08;heatmap&#xff09;的方法** **多人姿态估计****基于回归…

5. 垃圾收集器G1ZGC详解

JVM性能调优 1. G1收集器(-XX:UseG1GC) 本文是按照自己的理解进行笔记总结&#xff0c;如有不正确的地方&#xff0c;还望大佬多多指点纠正&#xff0c;勿喷。 课程内容&#xff1a; 1、G1垃圾收集器详解 2、每秒几十万并发的系统JVM级别如何优化 3、ZGC垃圾收集器详解 4、…

设置 session rdp 时间限制

起因&#xff1a;一台服务器 2016版本&#xff0c;每当退出远程桌面后&#xff0c;过一段时间&#xff0c;用户所有的进程就会自动关闭&#xff0c;导致后台运行的任务出现异常。 运行 gpedit.msc, 根据以下资料设置后&#xff0c;记得重启&#xff0c;不然不会生效 前三个选…

汽车出海势头旺,汽车零部件企业如何破浪前行?

随着国内汽车市场逐渐饱和&#xff0c;中国汽车企业开始寻求“汽车出海”的新市场增长点。在政府加大汽车出海政策支持力度下&#xff0c;根据中汽协数据&#xff0c;一季度的新能源汽车出口达24.8万辆&#xff0c;同比增长1.1倍。中国汽车行业持续深耕海外市场&#xff0c;出口…

节省公司资源,可以使用生产力分析系统!

经常出现有人下班后忘记关机的情况&#xff0c;不仅给公司造成损失&#xff0c;还浪费电力资源。虽说公司内通常会装有摄像头&#xff0c;可以看到具体是哪台电脑忘记关&#xff0c;但总不能让已经到家的职工&#xff0c;又返回公司关机吧。使用生产力分析系统&#xff0c;可以…

测量不确定度

不确定度与误差区别 相同点&#xff1a;都是评价测量结果质量高低的重要指标&#xff0c;都可以作为测量结果的精度评定参数。 不同点&#xff1a;测量误差是结果与真值之差&#xff0c;以真值为约定中心&#xff1b;而不确定度则是以估计值为约定中心&#xff0c;因此误差是…

SpringBoot使用SSE进行实时通知前端

SpringBoot使用SSE进行实时通知前端 说明maven依赖SSE工具类代码 Controller测试代码测试结果如下:注意将超时时间由原来的0改为默认的30秒&#xff0c;会报错。将springboot降为低版本如1.4.2.RELEASE。 说明 项目有个需求是要实时通知前端&#xff0c;告诉前端这个任务加载好…

数字孪生:让ECU在数字环境中“栩栩如生”

很多汽车广告中都会展示这样一个画面&#xff1a;在快要猛烈撞击障碍物之时&#xff0c;汽车所配备的防撞预警功能在最后关头实现停驶&#xff0c;守护车内老少一家人的生命安全。 近年来&#xff0c;汽车安全性能成为众多厂商广告中的主打&#xff0c;侧面印证了安全在当下消…

【传感器】最小二乘法实现磁力计椭球校准

总体思路 磁力计的数据在实际中是椭球的形状&#xff0c;在此之前使用了球体拟合进行校准&#xff0c;也就是简化为正球体的模型&#xff0c;得出的结果比较差&#xff0c;航向计算不准&#xff0c;还是需要用椭球的模型来估计偏移量&#xff0c;先使用标准的椭球方程&#xf…

微信小程序相关问题整理(一)

文章目录 1、引入 vant-weapp UI2、配置小程序 tabBar3、小程序登录授权流程4、小程序支付&#xff08;微信支付&#xff09;5、小程序分享6、小程序打开内置地图&#xff08;腾讯地图&#xff09;7、小程序打开app8、小程序打开其他小程序9、小程序获取当前地理位置额外&#…

项目上线出Bug:我踩过的4个大坑及事后反思

最近参与的拥有7大模块的系统项目&#xff0c;从去年11月开始开发&#xff0c;共5个月左右。 该项目是用JavaNode.js开发&#xff0c;开发人员含外包将近10位&#xff0c;测试人员A从头跟到尾&#xff0c;其他测试人员都是紧急时刻从其他项目临时调来&#xff0c;包含兄弟部门…

【LeetCode】HOT 100(2)

题单介绍&#xff1a; 精选 100 道力扣&#xff08;LeetCode&#xff09;上最热门的题目&#xff0c;适合初识算法与数据结构的新手和想要在短时间内高效提升的人&#xff0c;熟练掌握这 100 道题&#xff0c;你就已经具备了在代码世界通行的基本能力。 目录 题单介绍&#…

精通编辑和校对:避免常见错误的实用方法

编辑和校对是提高写作质量的关键环节。为了精通编辑和校对&#xff0c;我们需要了解常见的错误并学会避免它们。 以下是一些实用方法&#xff0c;帮助你在编辑和校对过程中避免常见错误。 1.充分理解文本内容和目的 在开始编辑和校对之前&#xff0c;确保充分理解文本的内容和…

今天教会你如何在Chrome中正确使用ChatGPT!

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;web开发者、设计师、技术分享博主 &#x1f40b; 希望大家多多支持一下, 我们一起进步&#xff01;&#x1f604; &#x1f3c5; 如果文章对你有帮助的话&#xff0c;欢迎评论 &#x1f4ac;点赞&#x1…

笔记本电脑无法正常启动怎么办?

随着计算机技术的发展&#xff0c;笔记本电脑在性能上已经不比台式机落后&#xff0c;并且因其便于携带的优势&#xff0c;受到广大用户的喜爱。那么&#xff0c;在笔记本电脑无法正常启动时&#xff0c;我们该怎么办呢&#xff1f; 笔记本电脑无法正常启动的原因 笔记本电脑无…

这就是00后吗,工作没两年,跳槽到我们公司起薪20K都快接近我了

在程序员职场上&#xff0c;什么样的人最让人反感呢? 是技术不好的人吗?并不是。技术不好的同事&#xff0c;我们可以帮他。 是技术太强的人吗?也不是。技术很强的同事&#xff0c;可遇不可求&#xff0c;向他学习还来不及呢。 真正让人反感的&#xff0c;是技术平平&…

Vue3-02-响应性 reactive

1. setup setup 是一个组件选项&#xff0c;组合式 API 就定义在 setup 中&#xff0c;包括 data、methods、computed 和 watch 等&#xff0c;都定义在 setup 中。 setup 实际上是一个生命周期钩子函数&#xff0c;执行时间点相当于 Vue2 中 beforeCreate 和 created 的结合…