在plumbing_server_client下面的src下面创建一个新的demo02_client.cpp
输入下面代码:
/*
需求:
编写两个节点实现服务通信,客户端节点需要提交两个整数到服务器
服务器需要解析客户端提交的数据,相加后,将结果响应回客户端,
客户端再解析
服务器实现:
1.包含头文件
2.初始化 ROS 节点
3.创建 ROS 句柄
4.创建 客户端 对象
5.请求服务,接收响应
*/
// 1.包含头文件
#include "ros/ros.h"
#include "plumbing_server_client/AddInts.h"
int main(int argc, char *argv[])
{
setlocale(LC_ALL,"");
// 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 = 100;
ai.request.num2 = 200;
// 6.处理响应
bool flag = client.call(ai);
// 7.处理响应
if (flag)
{
ROS_INFO("请求正常处理,响应结果:%d",ai.response.sum);
}
else
{
ROS_ERROR("请求处理失败....");
}
return 0;
}
配置cmakefiles文件
add_executable(demo02_client src/demo02_client.cpp)
target_link_libraries(demo02_client
${catkin_LIBRARIES}
)
add_dependencies(demo02_client ${PROJECT_NAME}_gencpp)
配置完毕之后ctrl+shift+b进行编译。
然后ctrl+alt+t打开终端
输入roscore启动ros
然后新开一个终端
输入
source ./devel/setup.bash
rosrun plumbing_server_client demo01_server
然后新开一个终端
输入
source ./devel/setup.bash
rosrun plumbing_server_client demo02_client
输出结果如下:
如果服务端启动了,但是客户端请求处理失败,那么根据问题不一样,说明没有找到这个话题名字。
需要将上述代码里面的话题名字与服务器端一致。
// 4.创建 客户端 对象
ros::ServiceClient client = nh.serviceClient<plumbing_server_client::AddInts>("AddInts");
将AddInts改为与之前一样的addints。