#include "ros/ros.h" // 包含 ROS 核心库头文件,提供 ROS 基本功能(如节点初始化、消息通信等)
#include "plumbing_server_client/AddInts.h" // 包含自定义服务消息头文件,定义服务的请求(num1、num2)与响应(sum)格式
int main(int argc, char *argv[]) {
setlocale(LC_ALL, ""); // 设置本地化环境,确保支持中文输出(如日志中的中文提示)
// 检查命令行参数数量:argc 表示参数总数,需传入 2 个数字参数(程序名 + 两个参数共 3 个元素)
if (argc != 3) {
ROS_INFO("提交的参数个数不对。"); // 打印参数错误提示信息
return 1; // 终止程序,返回错误码 1
}
// 初始化 ROS 节点:节点名为 "daBao",同时将命令行参数传递给 ROS 系统
ros::init(argc, argv, "daBao");
ros::NodeHandle nh; // 创建节点句柄,用于管理 ROS 资源(如创建客户端、访问参数等)
// 创建服务客户端:连接名为 "addInts" 的服务,使用自定义的 AddInts 消息类型进行通信
ros::ServiceClient client = nh.serviceClient<plumbing_server_client::AddInts>("addInts");
plumbing_server_client::AddInts ai; // 创建服务消息对象,存储请求数据与接收响应数据
// 组织请求数据:将命令行参数(字符串)转换为整数,填充到请求的 num1 和 num2 字段
ai.request.num1 = atoi(argv[1]);
ai.request.num2 = atoi(argv[2]);
bool flag = client.call(ai); // 发送请求并等待响应,call() 方法返回是否成功收到服务端响应
// 处理响应结果
if (flag) {
ROS_INFO("响应成功!"); // 打印响应成功提示
// 从响应中提取求和结果并打印
ROS_INFO("响应结果 = %d", ai.response.sum);
} else {
ROS_INFO("处理失败...."); // 打印响应失败提示
}
return 0; // 程序正常结束,返回 0
}