目录

  • 如何实现一个客户端
  • C++
    • 创建功能包
    • 编写程序
    • 配置CMakeLists.txt
    • 编译并运行
  • python
    • 创建并编写脚本
    • 运行

平台:华硕 Thinker Edge R 瑞芯微 RK3399Pro
固件版本:Tinker_Edge_R-Debian-Stretch-V1.0.4-20200615


记录自【古月居】古月·ROS入门21讲 | 一学就会的ROS机器人入门教程 —— 古月居GYH P13 13.客户端Client的编程实现

如何实现一个客户端

  1. 初始化ROS节点;
  2. 创建一个Client实例;
  3. 发布服务请求数据;
  4. 等待Server处理之后的应答结果。

C++

创建功能包

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

编写程序

nano ~/catkin_workspace/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的serviceros::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;
};

配置CMakeLists.txt

nano ~/catkin_workspace/src/learning_service/CMakeLists.txt

添加

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

编译并运行

cd ~/catkin_workspace
catkin_make# 新建一个终端
source ~/catkin_workspace/devel/setup.bash
roscore
# 新建一个终端
source ~/catkin_workspace/devel/setup.bash
rosrun turtlesim turtlesim_node
# 新建一个终端
source ~/catkin_workspace/devel/setup.bash
rosrun learning_service turtle_spawn

python

创建并编写脚本

cd ~/catkin_workspace/src/learning_service
mkdir scripts
cd ~/catkin_workspace/src/learning_service/scripts
nano turtle_spawn.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-########################################################################
####          Copyright 2020 GuYueHome (www.guyuehome.com).          ###
######################################################################### 该例程将请求/spawn服务,服务数据类型turtlesim::Spawnimport sys
import rospy
from turtlesim.srv import Spawndef turtle_spawn():# ROS节点初始化rospy.init_node('turtle_spawn')# 发现/spawn服务后,创建一个服务客户端,连接名为/spawn的servicerospy.wait_for_service('/spawn')try:add_turtle = rospy.ServiceProxy('/spawn', Spawn)# 请求服务调用,输入请求数据response = add_turtle(2.0, 2.0, 0.0, "turtle2")return response.nameexcept rospy.ServiceException, e:print "Service call failed: %s"%eif __name__ == "__main__":#服务调用并显示调用结果print "Spwan turtle successfully [name:%s]" %(turtle_spawn())

运行

sudo chmod +x ~/catkin_workspace/src/learning_service/scripts/turtle_spawn.py# 新建一个终端
source ~/catkin_workspace/devel/setup.bash
roscore
# 新建一个终端
source ~/catkin_workspace/devel/setup.bash
rosrun turtlesim turtlesim_node
# 新建一个终端
source ~/catkin_workspace/devel/setup.bash
rosrun learning_service turtle_spawn.py

【RK3399Pro学习笔记】九、ROS客户端Client的编程实现相关推荐

  1. ROS学习笔记九:用C++编写ROS发布与订阅

    ROS学习笔记九:用C++编写ROS发布与订阅 本节主要介绍如何用C++编写一个简单的ROS发布与订阅. 编写发布节点 在之前创建的例子beginner_tutorials软件包中,在其目录下的src ...

  2. ESP32 单片机学习笔记 - 08 - WebSocket客户端

    前言,终于要到网络模型的最后一层,第四层,应用层,http.websocket的实践了. 文章目录 ESP32 单片机学习笔记 - 08 - WebSocket客户端 一.应用层协议 科普概念 二.编 ...

  3. IOS学习笔记(九)之UIAlertView(警告视图)和UIActionSheet(操作表视图)基本概念和使用方法...

    IOS学习笔记(九)之UIAlertView(警告视图)和UIActionSheet(操作表视图)基本概念和使用方法 Author:hmjiangqq Email:jiangqqlmj@163.com ...

  4. python3.4学习笔记(九) Python GUI桌面应用开发工具选择

    python3.4学习笔记(九) Python GUI桌面应用开发工具选择 Python GUI开发工具选择 - WEB开发者 http://www.admin10000.com/document/9 ...

  5. 吴恩达《机器学习》学习笔记九——神经网络相关(1)

    吴恩达<机器学习>学习笔记九--神经网络相关(1) 一. 非线性假设的问题 二. 神经网络相关知识 1.神经网络的大致历史 2.神经网络的表示 3.前向传播:向量化表示 三. 例子与直觉理 ...

  6. at24c16如何划分出多个读写区_AVR学习笔记九、基于AT24C16的数据存储实验

    Ema{@AVR 学习笔记九.基于 AT24C16 的数据存储实验 ------- 基于 LT_Mini_M16 9.1 用 I/O 口模拟 I2C 总线实现 AT24C16 的读写 9.1.1 .实 ...

  7. BT源代码学习心得(九):客户端源代码分析(图形界面浅析) -- 转贴自 wolfenstein (NeverSayNever)

    BT源代码学习心得(九):客户端源代码分析(图形界面浅析)  author:wolfenstein 客户端将从btdownloadgui.py开始进行分析,这样可以顺便把Python中的GUI编程也看 ...

  8. JavaScript学习笔记(九)(验证框架,layer弹出层)

    JavaScript学习笔记(九) 一.jQuery Validate验证框架 1.引入相关插件路径 2. 修改一些规则 3. 自定义验证规则 4.异步验证 整体代码 二.layer弹出层 1.引入相 ...

  9. ROS学习笔记(十)——ROS试用练习(一)

    ROS学习笔记(十)--ROS试用练习 在此说明:之前使用的ROS是indigo,前两天电脑"炸"了,所以换了kinetic. 一.ROS文件系统导览 1.1如果你想找到turtl ...

最新文章

  1. 操作系统,看这一篇足够了!
  2. 编译安装MySQL5.6失败的相关问题解决方案
  3. poi动态创建文档_POI创建的文档具有不同条件的灵活样式
  4. 我的mongoose代码备份
  5. 《线性代数的几何意义》笔记(1)
  6. vue内容横向循环滚动_Vue替代marquee标签超出宽度文字横向滚动效果
  7. krpano漫游加方向性3D声音(这篇文章已被移到krpano中国网站 krpano360.com)
  8. 一个对Winsock完成端口模型封装的类
  9. 拿空间换时间的字典-Python基础前传(9)
  10. 用C语言实现正则表达式匹配器
  11. 新书出版 |《数据库程序员面试笔试真题库》
  12. Kafka 麒麟先生_近百位超人气嘉宾出席元旦萤火虫 重磅新企划蓄势待发!
  13. 简谈【自动化协议逆向工程技术的当前趋势】
  14. 【java】临时文件
  15. 澳大利亚麦考瑞大学计算机学院王岩教授招收2022-2023年入学博士研究生和双学位博士生
  16. More Effective C++之 Item M6:自增(increment)、自减(decrement)操作符前缀形式与后缀形式的区别
  17. web编程技术基础---CSS
  18. IP地址的规划和设计方法(三)
  19. 没有躲过的坑--C++函数的默认参数(重新定义默认参数)
  20. List集合(列表)

热门文章

  1. How Tomcat works — 一、怎样阅读源码
  2. Spring中实现监听的方法
  3. leetcode 888. 公平的糖果棒交换(set)
  4. leetcode392. 判断子序列(动态规划)
  5. 如何在React Native中使用react-navigation 5处理导航
  6. flask框架视图和路由_角度视图,路由和NgModule的解释
  7. JavaSE基础知识(6)—异常和异常处理
  8. Azure 和 Linux
  9. MFC编程之创建Ribbon样式的应用程序框架
  10. [转载]Python量化交易平台开发教程系列0-引言