Шагающие роботы - отдельный большой класс роботов, которые передвигаются, опираясь на конечности. Чтобы шагание было плавным, требуется синхронизация конечностей робота перед началом движения. Она может производиться конструктивно, тогда в программу не нужно вносить никаких дополнительных элементов. Однако если конструкция гобота не предполагает автоматической синхронизации его конечностей, нужно производить ее программно.
Наиболее распространенный вариант синхронизации - использование датчика касания. Рассмотрим для примера часть программы робота, у которого датчик касания связан с моторами, движущими конечности, следующим образом:
Серые пластины, жестко закрепленные на оси, нвжимают на кнопку при вращении моторов. Это поможет понять, на сколько градусов один мотор во вращении отстоит от второго.
Первые три блока запускают оба мотора и, как только будет нажата кнопка на датчике касания, эти моторы останавливаются. Сделано это для того, чтобы определить их начальное положение. Мощность выбирается небольшая, в данном случае – 20, чтобы не пропустить момент вращения и вовремя остановить моторы. После остановки моторы запускаются отдельно. Сначала, например, мотор В с настройками Unlimited (Неограниченно), вперед, мощность – 40. Если мощность моторов будет слишком большой, в процессе работы программы может сбиться синхронизация, да и передвигаться робот будет не так плавно, как хотелось бы.
Как только запущен мотор В, программа ждет, когда он спровоцирует нажатие кнопки датчика касания. После этого с аналогичными настройками запускается мотор С. А мотор В проворачивается ровно на 200 градусов (Duration (Продолжительность) – 200 Degrees (Градусы)), чтобы высвободить кнопку.
Программа снова ожидает нажатия на кнопку датчика, на этот раз спровоцированного мотором С. После чего мотор С отводится, как уже говорилось, вперед на 20 градусов (Duration – 20 Degrees). Теперь моторы синхронизированы. Осталось заставить робота двигаться в нужном направлении, за что отвечает блок Move (Движение), помещенный в цикл для бесконечного движения вперед.
Примечание: Когда моторы синхронизированы, один из них отстает от второго ровно на половину оборота – 180 градусов. Мотор В отводится на 200 градусов потому, что впоследствии мотор С тоже придется отвести немного дальше, иначе кнопка останется зажатой и собьет работу программы. Отведем мотор С на 20 градусов, после чего промежуток сократится как раз до 180 градусов, нужных нам (200 – 20 = 180).
Моторы должны отставать на пол оборота для того, чтобы робот переставлял тройки конечностей, расположенные по бокам, не одновременно, а по очереди. Весь процесс синхронизации (программной или механической) заключается в том, что Вы устанавливаете опоры робота в какое-то изначальное положение, из которого он должен начать двигаться.
В рассмотренном примере использована конструкция робота Манти.
Еще один пример синхронизации конечностей робота при помощи датчиков - программа для робота-черепахи. Отличие от предыдущего примера состоит в том, что датчики касания расположены на самих конечностях.
Перед началом движения конечности черепахи по очереди опускаются до опорной поверхности, фиксируя тем самым свое положение. После этого запускается основная программа движения.
Синхронизация для удобства вынесена в подпрограмму, поскольку может потребоваться проводить ее не только в начале работы, но и после остановок и совершения поворотов.
Основная программа в этом случае выглядит следующим образом:
Этот робот во время движения сканирует пространство в поисках препятствий. Когда препятствие обнаружено, черепаха втягивает голову под панцирь и останавливается. Через некоторое время движение возобновляется по циклу.