在类的成员函数中发送服务请求,rclcpp::spin_until_future_complete函数的第一个参数问题?
-
在类中定义一个成员函数,在成员函数内部通过某些机制触发,发送一个服务请求,会有如下代码:
auto result = clientCmd_->async_send_request(requestCmd);
if(rclcpp::spin_until_future_complete(node, result) != rclcpp::FutureReturnCode::SUCCESS)
{
RCLCPP_ERROR(rclcpp::get_logger("rclcpp"), "Failed to call service 'command(query)'");
}
else
{
...
}
在类的成员函数中放入该段代码,会报错,spin_until_future_complete()函数的第一个参数有问题。但不像官方例程,这里没有node的定义,是在成员函数内部的,改为spin_until_future_complete(this, result)也编译失败。请问这种类内成员函数中进行服务请求的情况,这里的spin_until_future_complete()函数第一个参数应该如何填写呢?
谢谢!查了fishros主页的动手学ROS2,并没有这种情况的实例程序。 -
@凌云 在 在类的成员函数中发送服务请求,rclcpp::spin_until_future_complete函数的第一个参数问题? 中说:
spin_until_future_complete(this, result)
不应该用这句话,应该用回调函数接收数据
-
@凌云 可以用回调函数,也可以result.wait_for的方法进行等待response。不过还是推荐回调的方法,不会出错
-
@Lorry 谢谢指点。
客户端的回调函数怎么写?类似服务器端的写法,像下面这样吗?类的构造函数初始化中:
clientCmd_ = this->create_client<pack_a::srv::Int8>("command", std::bind(&ControlExecutor::Callback_Client, this, _1);回调函数:
void ControlExecutor::Callback_Client(const std::shared_ptr<pack_a::srv::Int8::Response> response)
{
...
} -
-
@Lorry 感谢,我来试试。
-
@凌云 rclcpp::spin_until_future_complete(this->get_node_base_interface(), result) 可以试试