客户端的优化
服务通信自定义srv调用,客户端随意提交两个数,完成数的相加。也就是实现参数的动态提交:
1.格式:rosrun xxxx xxxx 12 34
2.节点执行时候,需要获取命令中的参数,并且组织进 request
代码中应该加入
//优化实现。获取命令的参数
if (argc !=3){
ROS_INFO("提交的参数不对");
return 1;
}
改掉固定输入值:
// 5.组织请求数据
plumbing_server_client::AddInts ai;
ai.request.num1 = atoi(argv[1]);
ai.request.num2 = atoi(argv[2]);
总体代码在demo02里面改动,demo01服务端不改动。
/*
需求:
编写两个节点实现服务通信,客户端节点需要提交两个整数到服务器
服务器需要解析客户端提交的数据,相加后,将结果响应回客户端,
客户端再解析
服务器实现:
1.包含头文件
2.初始化 ROS 节点
3.创建 ROS 句柄
4.创建 客户端 对象
5.请求服务,接收响应
实现参数的动态提交:
1.格式:rosrun xxxx xxxx 12 34
2.节点执行时候,需要获取命令中的参数,并且组织进 request
*/
// 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 句柄
ros::NodeHandle nh;
// 4.创建 客户端 对象
ros::ServiceClient client = nh.serviceClient<plumbing_server_client::AddInts>("addints");
// 5.组织请求数据
plumbing_server_client::AddInts ai;
ai.request.num1 = atoi(argv[1]);
ai.request.num2 = atoi(argv[2]);
// 6.处理响应
bool flag = client.call(ai);
// 7.处理响应
if (flag)
{
ROS_INFO("响应成功");
ROS_INFO("请求正常处理,响应结果:%d",ai.response.sum);
}
else
{
ROS_ERROR("请求处理失败....");
return 1;
}
return 0;
}
完毕之后ctrl+shift+b进行编译。
然后ctrl+alt+t打开终端
输入roscore启动ros
然后新开一个终端
输入
```bash
source ./devel/setup.bash
rosrun plumbing_server_client demo01_server
然后新开一个终端
输入
source ./devel/setup.bash
rosrun plumbing_server_client demo02_client 12 334
输出结果如下:
1.格式:rosrun xxxx xxxx 12 34
注意rosrun的格式在客户端的格式如果后面没有两个数,就会变成提交的参数不对。