ros::ServiceServer service = nh.advertiseService("add_two_ints", add);显示需要更多的参数
时间: 2023-07-16 08:17:19 浏览: 268
是的,这段代码中缺少了一个参数。ros::ServiceServer::advertiseService()函数需要传入两个参数:服务名称和服务回调函数。在这里,服务名称为"add_two_ints",服务回调函数为add。但是,在ROS中,服务回调函数的参数必须为两个,一个是服务请求,一个是服务响应。因此,完整的代码应该为:
```
bool add(my_package::AddTwoInts::Request &req,
my_package::AddTwoInts::Response &res)
{
res.sum = req.a + req.b;
ROS_INFO("request: x=%ld, y=%ld", (long int)req.a, (long int)req.b);
ROS_INFO("sending back response: [%ld]", (long int)res.sum);
return true;
}
int main(int argc, char **argv)
{
ros::init(argc, argv, "add_two_ints_server");
ros::NodeHandle nh;
ros::ServiceServer service = nh.advertiseService("add_two_ints", add);
ROS_INFO("Ready to add two ints.");
ros::spin();
return 0;
}
```
其中,my_package::AddTwoInts为服务类型,包含服务请求和服务响应。在服务回调函数中,我们从服务请求中获取两个整数a和b,然后将它们相加,存储到服务响应中,并输出一些信息。最后,我们使用ros::spin()函数来等待服务请求。
阅读全文