ROS服务通信《客户端》 C++向服务端发送信息(乌龟案例,生成第二个乌龟)

服务调用乌龟案例

实现步骤:
1.启动乌龟显示节点。
2.通过ros命令,获取乌龟生成服务的服务名称以及服务消息类型。
3.编写服务请求节点,生成新的乌龟。
实现流程:
1.通过ros命令获取服务与服务消息信息。
2.编码实现服务请求节点。
3.启动roscore,turtlesim_node,乌龟生成节点,生成新的乌龟。

获取服务话题

rosservice list
# 获取服务列表

显示ros正在服务的列表

/clear
/kill
/reset
/rosout/get_loggers
/rosout/set_logger_level
/rqt_gui_py_node_19784/get_loggers
/rqt_gui_py_node_19784/set_logger_level
/rqt_gui_py_node_20438/get_loggers
/rqt_gui_py_node_20438/set_logger_level
/spawn
/teleop_turtle/get_loggers
/teleop_turtle/set_logger_level
/turtle1/set_pen
/turtle1/teleport_absolute
/turtle1/teleport_relative
/turtlesim/get_loggers
/turtlesim/set_logger_level

rosservice  info  /spawn

/spawn的信息结果

Node: /turtlesim
URI: rosrpc://makus-AFS:60819
Type: turtlesim/Spawn
Args: x y theta name

查看 turtlesim/Spawn信息

rossrv info turtlesim/Spawn

turtlesim/Spawn类型信息

float32 x
float32 y
float32 theta
string name
 ---
 string name

命令的方式调用服务

rosservice call /spawn "x: 0.0 
y: 05.0
theta: 90.0 
name: 'turtle2'"

c++程序实现

#include "ros/ros.h"
#include "turtlesim/Spawn.h"
/*
 * 需求:向服务端发送请求,生成一只新乌龟
 * 话题:/spawn
 * 消息:turtlesim/Spawn
 */
int main(int argc,char *argv[])
{
    ros::init(argc,argv,"service_call");
    ros::NodeHandle nh;
    ros::ServiceClient client= nh.serviceClient<turtlesim::Spawn>("/spawn");
    //组织数据
    turtlesim::Spawn spawn;
    spawn.request.x = 1.0;
    spawn.request.y = 4.0;
    spawn.request.theta = 1.5;
    spawn.request.name = "turtle2";
    //发送数据请求
    //判断服务器状态
    //ros::service::waitForService("spawn"); //可以判断
    client.waitForExistence();
    bool flag = client.call(spawn);//flag接收响应状态
    if(flag)
    {
        ROS_INFO("generate turtle:%s ",spawn.response.name.c_str());
    }
    else
    {
        ROS_INFO("Requst failed!");
    }
}

CmakeLists.txt设置

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

编译代码

catkin_make

测试代码运行

roscore
rosrun turtlesim turtlesim_node
rosrun pakage_02 service_PUB_spawn
[ INFO] [1647933957.137713494]: generate turtle:turtle2 

结果展示,这里你可以看到2只啦。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZUSTAND

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值