Я работаю над проектом робототехники с C ++ и OpenCV. На этом этапе я столкнулся с проблемой, которая состоит из:
У меня есть два метода moveRight()
а также moveLeft()
что я вызывал последовательно в моем коде, но проблема в том, что второй не запускается, потому что первый требует времени (время движения робота), но когда я ставлю Sleep(5000)
между ними (я догадался, что для движения достаточно пяти секунд) все в порядке.
Что такое программное решение, которое позволяет избежать использования Sleep
(потому что это создает некоторые другие проблемы)?
Вы можете попробовать добавить слой косвенности. Добавьте очередь действий для выполнения, поставьте в очередь действия для moveLeft и moveRight и где-нибудь еще (другой поток) правильно выполните действия из очереди, ожидая завершения предыдущего действия, прежде чем выполнять следующее действие. В идеале вам нужен способ проверить, завершено ли действие, чтобы вы могли кодировать его на основе событий.
Вы никогда не должны «догадываться» в робототехнике. Вам следует ЗНАТЬ, МЕРА сколько времени занимает ваше движение и используйте это в своем коде. Например, звонок moveRight()
часто и пусть он проверит, как долго он работает. Вернуть true
когда он работает и использовать его в качестве условия для вызова moveLeft()
Вы можете использовать таймер и при выполнении MoveRight () установить таймер на 5 секунд, а после окончания таймера выполнить Moveleft ().