13.客户端Client的编程实现

2023-11-07

学习视频:https://www.bilibili.com/video/BV1zt411G7Vn?p=13
目标:通过客户端程序发布请求给spawn服务器创建第二只小海龟
一、创建功能包
打开终端,输入命令

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

二、用C++创建客户端代码
1.创建客户端代码
输入指令,打开turtle_spawn.cpp文件

gedit ~/catkin_ws/src/learning_service/src/turtle_spawn.cpp

复制下列代码,保存退出。

/***********************************************************************
Copyright 2020 GuYueHome (www.guyuehome.com).
***********************************************************************/

/**
 * 该例程将请求/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;
};

2.配置客户端代码编译规制
输入指令,打开CMakeList.txr文件

gedit ~/catkin_ws/src/learning_service/CMakeLists.txt

加入下面代码如下图所示

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

在这里插入图片描述
三、用Pyhton创建客户端代码
1.创建客户端代码
输入指令,打开turtle_spawn.py文件。

mkdir ~/catkin_ws/src/learning_service/scripts
gedit ~/catkin_ws/src/learning_service/scripts/turtle_spawn.py

复制下列代码,保存关闭文件。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

########################################################################
####          Copyright 2020 GuYueHome (www.guyuehome.com).          ###
########################################################################

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

import sys
import rospy
from turtlesim.srv import Spawn

def turtle_spawn():
	# ROS节点初始化
    rospy.init_node('turtle_spawn')

	# 发现/spawn服务后,创建一个服务客户端,连接名为/spawn的service
    rospy.wait_for_service('/spawn')
    try:
        add_turtle = rospy.ServiceProxy('/spawn', Spawn)

		# 请求服务调用,输入请求数据
        response = add_turtle(2.0, 2.0, 0.0, "turtle2")
        return response.name
    except rospy.ServiceException as e:
        print("Service call failed: %s" %e)

if __name__ == "__main__":
	#服务调用并显示调用结果
    print("Spwan turtle successfully [name:%s]" %(turtle_spawn()))

这里Python3和Python2语法不相同,我作了一些修改。
2.设置turtle_spawn.py 文件运行权限

cd ~/catkin_ws/src/learning_service/scripts
chmod +x turtle_spawn.py 

四、编译功能包(Python不需要)

cd ~/catkin_ws/
catkin_make

五、运行程序
1.运行roscore

roscore

2.打开新的终端,运行小海龟仿真器

rosrun turtlesim turtlesim_node 

3.打开新的终端,运行指令

rosrun learning_service turtle_spawn.py

4.运行效果如下
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

13.客户端Client的编程实现 的相关文章

  • Citesapace作图结果部分——文章整体思路简单分析

    Citespace相关论文 除了引言部分 一般从第二部分开始结合citespace作图软件进行分析 以下做一个该部分简要的概括 2 Materials and Methods 数据检索部分一般分为两部分 2 1 Data Collectio
  • 解决Python中的循环引用和内存泄漏问题

    在Python编程中 循环引用和内存泄漏是两个常见的问题 本文将详细介绍如何识别和解决这些问题 并提供详细的代码示例 1 什么是循环引用 循环引用是指两个或多个对象之间相互引用的情况 这种情况可能导致内存泄漏 因为Python的垃圾回收机制
  • 数据治理体系建设

    01 数据治理建设路径 1 业务数字化的目的是打造一体化的业务流 信息流与数据流 从企业整体经营管理的角度 战略制定及分解 领域业务目标制定 业务方案设计 业务需求识别 信息系统功能及数据库设计 数据汇聚及分析 业务目标监测及改善 这个过程
  • 图片在网页能打开,小程序上不显示的解决方法

    这种情况可能是图片被小程序自动加上了防盗链 导致显示不出来 解决方案 1 在img标签是上加属性 referrerPolicy no referrer
  • 使用VS Code打造Python编程与Markdown写作利器,打破知乎、WordPress和微信公众号的壁垒

    目录 1 前言 2 安装与环境搭建 2 1 VS Code安装 2 2 VS Code常用快捷键 2 3 打造Python编辑器 2 4 打造Markdown编辑器 3 一些技巧 3 1 更舒适的Python编程环境 3 2 Markdow
  • oracle数据库中选择桌面类和服务器类的区别

    在以前的学习过程中 一直用到的都是sql server数据库 之后接触到了oracle数据库 在安装过程中 有两个选项 桌面类和服务器类 当时按照网上的安装步骤 选择了桌面类 后来公司里他们安装都是用的服务器类 后来查了查两者的区别 桌面类
  • 【MyBatis】resultMap和resultType的区别

    mybatis中resultMap和resultType的区别 mybatis中在查询进行select映射的时候 返回类型可以用resultType 也可以用resultMap resultType是直接表示返回类型的 而resultMap
  • 使用jira的sprint面板进行敏捷开发——scrum master笔记(待完善)

    一 jira中sprint面板的创建 这个很简单 键入jira后 顶栏处找 面板 查看全部面板 此时页面右上侧有 创建面板 的按钮 点击 选择 创建一个Scrum面板 根据提示填信息到完成即可 二 jira中sprint面板的配置 点击进入
  • 如何清除win7系统中的开机密码

    设置系统的开机密码是很正常的事情 当然 忘记开机密码也是常有的事情 下面的方法是通过PE盘清除win7的卡机密码 首先 看一下我的电脑是有密码的 有密码的机器 二 PE盘的准备 我用的pe是we 这是我用过的最良心的PE环境 关于PE的安装
  • java查找算法:二分查找(两种方式)

    二分查找算法思想 二分查找针对的是一个有序的数据集合也就是数组 这也成为了二分查找的一个重要局限性 查找思想有点类似分治思想 每次都通过跟区间的中间元素对比 将待查找的区间缩小为之前的一半 直到找到要查找的元素 或者区间被缩小为0 一 返回
  • Cocos Creator 3D 梦想再起航!

    在 Cocos 不算长的生命历程中 我们曾多次尝试给开发者带来 3D 游戏的开发能力 2014 年 我们的 3D 团队开辟了 Cocos2d x 对 3D 的支持 至今已孵化出莉莉丝的 剑与家园 腾讯的 乱世王者 这样的超级大作 同时 Co
  • Skywalking web页面空白问题解决

    问题描述 今天微服务报错想用链路id追踪这个服务的流向 发现skywalking页面空白 查看后台进程发现skywalking oap server服务掉了 重启还是不行 tail n500 skywalking oap server lo
  • Python实现飞机大战游戏(后附完整代码文件和素材)

    前言 自学Python的记录 不喜勿喷 本程序的代码是以B站黑马程序员的视频代码为基础 个人加以总结思考 写就的博文 纯属记录自己的学习历程 当初想到要用Python的pygame模块开发飞机大战游戏的时候 顿时就兴奋了 毕竟学以致用是最好
  • 网络自动化运维(NetDevOps)创作者推荐

    前言 随着NetDevOps技术登上了历史舞台 越来越多的从业者开始利用NetDevOps简化网络的运维 并进行了技术分享 将蛋糕越做越大 在这里 仅代表个人对这些无私奉献的网络 运维工程师们表达由衷的敬意 此外 我也想向大家推荐一些我认识
  • 【Java】POJO

    POJO Plain Ordinary Java Object 简单的Java对象 通指没有使用Entity Beans的普通java对象 可以把POJO作为支持业务逻辑的协助类 POJO实质上可理解为简单的实体类 顾名思义 POJO类的作
  • 深夜更新,C语言笔记整理

    C 语言笔记整理 C语言一经出现就以其功能丰富 表达能力强 灵活方便 应用面广等特点迅速在全世界普及和推广 C语言不但执行效率高而且可移植性好 可以用来开发应用软件 驱动 操作系统等 C语言也是其它众多高级语言的鼻祖语言 所以说学习C语言是

随机推荐

  • GLFW初体验

    GLFW初体验 GLFW 很遗憾 没有找到FW的确切含义 Wiki上没有 GLFW主页也没有 猜测F表示for W表示Window GLFW是干啥用的 一个轻量级的 开源的 跨平台的library 支持OpenGL及OpenGL ES 用来
  • Tengine/nginx配置https/ssl/443端口健康检查

    这里列出 nginx upstream check module 模块所支持的指令意思 Syntax check interval milliseconds fall count rise count timeout millisecond
  • k8s学习-CKS真题-ImagePolicyWebhook容器镜像扫描

    目录 题目 环境搭建 imagePolicyWebhook搭建 解题 任务二 任务三 任务一 检查 模拟考题 参考 题目 Context cluster上设置了容器镜像扫描器 但尚未完全集成到 cluster 的配置中 完成后 容器镜像扫描
  • 函数作业(2023.1.4)

    函数作业 1 计算数组中完数的个数 完数 除本身约数和等于本身 例如6 1 23 1 2 3 6 例如28 1 2 4 7 14 28 在该函数 void PerfectFun int arr int n 循环数组每一个值 在该函数 int
  • 【STM32仿真】STM32CubeMX+Keil+Proteus单片机仿真

    文章目录 一 软件介绍和下载安装 1 1 STM32CubeMX介绍 1 2 Proteus介绍 二 创建第一个项目 2 1 STM32CubeMX生成代码 2 2 keil5 生成可执行文件 2 3 Proteus 搭建简单电路 三 按键
  • 【雕爷学编程】Arduino动手做(06)---KY-038声音传感器模块2

    37款传感器与执行器的提法 在网络上广泛流传 其实Arduino能够兼容的传感器模块肯定是不止这37种的 鉴于本人手头积累了一些传感器和执行器模块 依照实践出真知 一定要动手做 的理念 以学习和交流为目的 这里准备逐一动手尝试系列实验 不管
  • 【华为OD机试】垃圾短信识别(python, java, c++, js)

    垃圾短信识别 前言 本专栏将持续更新华为OD机试题目 并进行详细的分析与解答 包含完整的代码实现 希望可以帮助到正在努力的你 关于OD机试流程 面经 面试指导等 如有任何疑问 欢迎联系我 wechat steven moda email n
  • vue.js中created方法作用

    这是它的一个生命周期钩子函数 就是一个vue实例被生成后调用这个函数 一个vue实例被生成后还要绑定到某个html元素上 之后还要进行编译 然后再插入到document中 每一个阶段都会有一个钩子函数 方便开发者在不同阶段处理不同逻辑 一般
  • 解决小程序wx.openLocation位置偏移的问题

    接口返回的经纬度是在合家欢公寓 而小程序的openLocation 地图实际却定位到了玖耀里 导致了将近1km的偏差 因为我是从第三方拿的经纬度位置 随后我又开始全网搜索找答案 有说 加 type gcj02 的 经测试 这个仅对获取当前位
  • 服务器反馈为空,反馈服务器端error的处理

    1 首先明确下顺序 Eg POST 情况 string gt NSData NSMutableURLrequest NSURLConnection NSURLResponse staticNSString body aaaaaa 要POST
  • 关于服务器上tomcat获取时间少8个小时的问题

    我的抄贴生活又开始了 哈哈 主要是在学习过程中 发现解决一些问题 然后 想记录下来 在 首选项 gt Tomcat gt JVM Settings 项 设定 JRE 的版本为 jre1 5 0 06 并且添加如下几个JVM Paramete
  • 对我们的人生数学建模

    欢迎访问我的个人博客 sky的技术小屋 本来写了好多 最后想想还是全删掉了 因为都是些婆婆妈妈的只和自己有关的小事 还是挑个最想表达的说说吧 一直以来 随着自己学习的东西越来越多 对社会现实也看的越来越多 我对人生处事的一个总结就是 人生就
  • 微信小程序通过 wxministore 实现类似于vuex的全局装填数据管理

    首先 我们打开终端 引入依赖 npm install wxministore save 然后 如果你是新版开发者工具 就 npm i 构建一下 如果你是 老版本的 微信开发者工具 就打开右上角详情 选择本地管理 勾选 使用 npm 模块 然
  • Qt-configure配置选项

    这个页面给出了一个简短的 当使用configure脚本或configure exe二进制构建Qt时的各种不同的可用选项 当使用默认选项构建Qt 只需如下所示的从命令行调用configure 在Linux Mac OS X和Unix平台下构建
  • linux 如何加载本地镜像至docker

    在 Linux 上加载本地镜像至 Docker 可以使用 docker load 命令 步骤如下 将本地镜像打包成 tar 文件 sudo dockersave o myimage tar myimage latest 使用 docker
  • java按照月份把一个时间段拆分成多个时间区间并返回相差天数

    java按照月份把一个时间段拆分成多个时间区间并返回相差天数 代码实现 package com example demo utils import java text ParseException import java text Simp
  • 双系统安装Windows和Linux(CentOS7)

    讲在前面的话 判断磁盘分区格式 判断计算机启动方式 制作USB安装盘 开始安装CentOS7 Linux系统分区 安装完毕 磁盘转换mbr 或者gpt 格式 VMware虚拟机安装Linux 网络如何配置 参考 计算机系统启动项引导设置 双
  • 数据结构“入门”—单链表(C语言实现)

    目录 1 前言 2 单链表基本概念 2 单链表的实现 2 1 单链表的创建 2 2 创建一个结点 2 3 打印链表 2 4 销毁单链表 3 增删查改 3 1 插入数据 尾插 头插 在pos之前插入 在pos之后插入 3 2 删除数据 尾删
  • 2023年第七届航空航天、机械与机电工程国际会议(CAMME 2023)

    2023年第七届航空航天 机械与机电工程国际会议 CAMME 2023 重要信息 会议网址 www camme org 会议时间 2023年5月26 28日 召开地点 中国西安 截稿时间 2023年4月26日 录用通知 投稿后2周内 收录检
  • 13.客户端Client的编程实现

    学习视频 https www bilibili com video BV1zt411G7Vn p 13 目标 通过客户端程序发布请求给spawn服务器创建第二只小海龟 一 创建功能包 打开终端 输入命令 cd catkin ws src c