问题:
如果先启动客户端,那么会请求异常
需求:
如果先启动客户端,不要直接抛出异常,而是挂起,等服务器启动后,再正常请求
解决:
在ROS中内置了相关函数,这些函数可以让客户端启动后挂起,等待服务器启动
//调用判断服务器状态函数
//函数一
client.waitForExistence();
//函数二需传参,参数是被等待的服务
ros::service::waitForService("addInts");
优化后完成客户端完整程序:
// 1、包含头文件;
#include "ros/ros.h"
#include "plumbing_server_client/AddInts.h"
int main(int argc, char *argv[])
{
setlocale(LC_ALL,"");
//优化实现,获取命令中函数
if(argc !=3){
ROS_INFO("提交的参数个数不对。");
return 1;
}
// 2、初始化ROS节点;
ros::init(argc,argv,"dabao");
// 3、创建节点句柄;
ros::NodeHandle nh;
// 4、创建一个客户端对象;
ros::ServiceClient client=nh.serviceClient<plumbing_server_client::AddInts>("addInts");
// 5、提交请求并处理响应;
plumbing_server_client::AddInts ai;
//5.1组织请求
ai.request.num1 = atoi(argv[1]);
ai.request.num2 = atoi(argv[2]);
//5.2处理响应
//调用判断服务器状态的函数(二选一即可)
//函数一
//client.waitForExistence();
//函数二
ros::service::waitForService("addInts");
bool flag = client.call(ai);
if (flag)
{
ROS_INFO("响应成功!");
ROS_INFO("响应结果=%d",ai.response.sum);
}else{
ROS_INFO("处理失败!");
}
return 0;
}
内容参考:AutolaborROS机器人入门(视频链接如下):
https://www.bilibili.com/video/BV1Ci4y1L7ZZ?p=1&vd_source=44198704c80851fc629e59778edea695