Я пытаюсь воспроизвести учебник по последовательности Movement здесь: https://github.com/moveit/moveit2_tutor ... xtence.cpp> Создайте сервис, похожий на этот узел. Контекст заключается в том, что тип сообщения, который я получаю, не имеет правильного формата, чтобы вызвать службу последовательности GetMotion. Таким образом, мой узел - это услуга, которая получает сообщение и переформирует его в BE SESHERGENCEREQUESTEQUEST. При создании запроса он должен вызвать службу последовательности GetMotion и спланировать движение, т. Е. Я пытаюсь гнезд вызовов последовательности GetMotion в рамках обратной связи MyCustomService < /p>
Проблема, с которой я сталкиваюсь, относится к спине (более конкретно ожидающему результату GetMotionSectence): < /p>
Код: Выделить всё
void my_custom_callback(const std::shared_ptr msg,
std::shared_ptr success){
// Do some magic with msg
...
// Call GetMotionSequence
motion_sequence_service_future = motion_sequence_service_client_->async_send_request(
motion_sequence_service_request);
// Wait for the result (here I'm getting issues)
std::future_status service_status;
do
{
switch (service_status = service_future.wait_for(std::chrono::seconds(1)); service_status)
{
case std::future_status::deferred:
RCLCPP_ERROR(LOGGER, "Deferred");
break;
case std::future_status::timeout: // it gets caught here
RCLCPP_INFO(LOGGER, "Waiting for trajectory plan...");
break;
case std::future_status::ready:
RCLCPP_INFO(LOGGER, "Service ready!");
break;
}
} while (service_status != std::future_status::ready);
...
}
Я пытался сделать это классическим способом, используя rclcpp :: spin_until_future кода выполняется в рамках обратного вызова моего узла сервера, который сам вращается в основном с executor.spin () ).
Моя последняя попытка заставить это работать, было использовать перегрузку async_send_request :
motion_sequence_service_client_->async_send_request(
motion_sequence_service_request,
[success](rclcpp::Client::SharedFuture future){
auto response = future.get();
...
}
);
< /code>
Чтобы создать ответ MyCustomService с лямбдой, чтобы не было тупика. Проблема заключается в том, что это приводит к тому, что реакция MyCustomService будет писать слишком поздно, а клиент, который отправляет необразованные данные, не получает правильного ответа (успех), даже если нет тупика, и планирование движения было успешным.>
Подробнее здесь: https://stackoverflow.com/questions/796 ... ed-service
Мобильная версия