В примере, таком как examples / allegro_hand, где основной поток продвигает симулятор, а другой отправляет ему команды через LCM, какой самый чистый способ для каждого процесса убить другое?
Я изо всех сил пытаюсь убить побочный процесс, когда умирает основной процесс. Я обернул AdvanceTo попыткой и поймал ошибку, возникающую, когда
решатель дискретных обновлений MultibodyPlant не смог сойтись
Я могу вручную publi sh логическое значение с drake :: lcm :: Publi sh внутри блока catch. В побочном процессе я подписываюсь и использую что-то вроде this HandleStatus для обработки входящих сообщений. Соответствующий HandleStatus не вызывается, если я не добавлю a while (0 == lcm_.handleTimeout (10)) как это . Когда я это делаю, побочный процесс застревает в ожидании сообщения, которое не приходит, если симуляция не сработает. Есть какие-нибудь советы, как поступить в этом случае?
Я могу убить основной процесс (allegro_single_object_simulation), отправив логическое значение через LCM из другого (run_twisting_mug), AdvanceTo-ing на меньший временной шаг в основном процессе и проверка полученного логического значения после каждого меньшего AdvanceTos. Кажется, это работает надежно, но, возможно, не самое чистое решение.
Если я думаю об этом неправильно и есть лучший способ запустить такой пример, пожалуйста, дайте мне знать. Спасибо!