使用c++完成一个ros service项目的编写

本文介绍了在ROSMelodic环境下,如何使用rosservice实现节点间的双向有应答通信,包括创建工作空间、定义msg和srv消息类型,以及在C++中编写client和服务端的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ROS通信机制

编译平台

本项目依赖于ubuntu18.04,ROS版本为ROS melodic ,运行于windows10上面的虚拟机

ros service

ros service是节点之间通讯的另一种方式。服务允许节点发送一个请求(request)并获得一个响应(response),本文使用c++完成了一个基础了ROS service项目的编写。
rosservice于前面文章中提到的ros topic一个显著的区别是,service是双向有应答机制的通讯方式,而topic只是完成了简单的接受消息和处理消息的任务。

创建工作空间

mkdir -p catkin_test/src

使用mkdir命令创建一个工作空间
然后我们cd进入catkin_test,使用catkin_make对工作空间进行编译,完成工作空间的注册和初始化
在这里插入图片描述
在这里插入图片描述
编译完成后会出现build和devel两个文件夹,当这两个文件夹产生,就代表这个工作空间创建成功。
创建一个名为test的功能包

cd src
catkin_create_pkg test roscpp rospy std_msgs

在正式的cpp文件编写之前,我们需要做一点准备。创建在两个节点之间沟通的“消息”。
使用ROS完成的这个功能,我们需要有两个节点,这俩个节点为别作为client和service,即一个作为客户端一个作为服务端。我们在srvz中规定了他们之间是如何通信的,而msg规定了srv中传递的消息是什么类型的。

msg和srv

首先我们需要明确一下msg和srv两个概念
msg:msg 文件是描述 ROS 消息字段的简单文本文件。它们用于生成不同语言消息的源代码。
SRV:SRV 文件描述服务。它由两部分组成:请求和响应。
这是ROS官网上的解释。
我们将msg文件放在msg文件夹下,将srv文件放在srv文件夹下。
在功能包下建立两个新建文件夹,msg与srv:
在这里插入图片描述
接下来分别在msg和srv下创建msg文件和srv文件
在这里插入图片描述

在test_1.msg中填入下列内容

int64 a
int64 b
int64 sum

在test_2.srv填入一下内容

int64 a
int64 b
---
int64 sum

在msg中规定了通信中主要涉及有三个数据,数据类型均为int64
在srvz中我们规定了int64 a与int64 b为请求数据,int6 sum为响应数据

client

在src下完成client.cpp和listner,cpp的创建
client.cpp

#include<ros/ros.h>
#include<std_msgs/String.h>
#include"test1/test_2.h"

int main(int argc,char **argv)
{
   
    ros::init(argc,argv,"add_two_ints_client");
    if(argc != 3)
    {
   
        ROS_INFO("usage: add_two_ints_client X Y");
        return 1;
    }
    ros::NodeHandle n;
    ros::ServiceClient client = n.serviceClient<test1::test_2>("add_two_ints"</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值