Part2.2.3 服务通信实际操作 C++实现

本文介绍了如何通过ROS(Robot Operating System)调用/spawn服务,在turtlesim环境中生成一个新的乌龟实例,展示了服务类型、消息格式和参数传递的方法。

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

调用服务去生成一只新的乌龟
与话题通信类似,首先去获得所有服务的话题,/spawn .然后查看话题的类型,turtlesim/Spawn,然后查看消息的具体内容都包括什么,具体的代码实现如下所示。

#include "ros/ros.h"
#include "turtlesim/Spawn.h"
#include <cstdlib>
/*
调用服务/spawn 去生成一只新的乌龟
ding@ding-TravelMate-P259-G2-MG:~$ rosservice list
/clear
/kill
/reset
/rosout/get_loggers
/rosout/set_logger_level
/spawn
/turtle1/set_pen
/turtle1/teleport_absolute
/turtle1/teleport_relative
/turtlesim/get_loggers
/turtlesim/set_logger_level
----------------------------------------------------------------------------------
ding@ding-TravelMate-P259-G2-MG:~$ rosservice type /spawn
turtlesim/Spawn
-----------------------------------------------------------------------------
ding@ding-TravelMate-P259-G2-MG:~$ rossrv info turtlesim/Spawn
float32 x
float32 y
float32 theta
string name
---
string name
*/
int main(int argc,char *argv[])
{
    ros::init(argc,argv,"turtlesim_new");
    ros::NodeHandle nh;
    
 if(argc!=5) //如果采用外部输入判断传入的参数的数量
 {
     ROS_INFO("failed");
     return 1;
 }

  ros::ServiceClient new_turtlesim=nh.serviceClient<turtlesim::Spawn>("/spawn");
   ros::service::waitForService("/spawn");
   turtlesim::Spawn turtle2;
   /*采用了两种输入形式,在程序中固定数据,以及在外部输入数据
   在程序里进行参数的输入
   turtle2.request.x=1.0;
   turtle2.request.y=2.0;
   turtle2.request.theta=0;
   turtle2.request.name="turtle2";
   */

   //外部数据的输入,第一个参数是节点路径
   turtle2.request.x=atof(argv[1]);
   turtle2.request.y=atof(argv[2]);
   turtle2.request.theta=atof(argv[3]);
   turtle2.request.name=argv[4];
   if(new_turtlesim.call(turtle2))
 {
     ROS_INFO("name = %s ",turtle2.request.name.c_str());
 }
 else{
     ROS_INFO("failed ");
     return 1;
 }



    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一蓑烟雨荏平生

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

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

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

打赏作者

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

抵扣说明:

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

余额充值