Программирование в реальном времени в робототехнике с помощью Stack Overflow

Я работаю над проектом робототехники с C ++ и OpenCV. На этом этапе я столкнулся с проблемой, которая состоит из:

У меня есть два метода moveRight() а также moveLeft() что я вызывал последовательно в моем коде, но проблема в том, что второй не запускается, потому что первый требует времени (время движения робота), но когда я ставлю Sleep(5000) между ними (я догадался, что для движения достаточно пяти секунд) все в порядке.

Что такое программное решение, которое позволяет избежать использования Sleep (потому что это создает некоторые другие проблемы)?

5

Решение

Вы можете попробовать добавить слой косвенности. Добавьте очередь действий для выполнения, поставьте в очередь действия для moveLeft и moveRight и где-нибудь еще (другой поток) правильно выполните действия из очереди, ожидая завершения предыдущего действия, прежде чем выполнять следующее действие. В идеале вам нужен способ проверить, завершено ли действие, чтобы вы могли кодировать его на основе событий.

6

Другие решения

Вы никогда не должны «догадываться» в робототехнике. Вам следует ЗНАТЬ, МЕРА сколько времени занимает ваше движение и используйте это в своем коде. Например, звонок moveRight() часто и пусть он проверит, как долго он работает. Вернуть true когда он работает и использовать его в качестве условия для вызова moveLeft()

2

Вы можете использовать таймер и при выполнении MoveRight () установить таймер на 5 секунд, а после окончания таймера выполнить Moveleft ().

1
По вопросам рекламы [email protected]