Найти в Дзене

mBot2 #31. Манипулятор. Управление с другого робота. Используем WiFi Lan.

Оглавление

В прошлом материале мы рассмотрели ручное управление манипулятором с использованием джойстика самого робота с манипулятором.

Теперь рассмотрим ситуацию, что управлять действиями манипулятора мы будем с другого устройства под управлением CyberPi.

Это может быть вариант контроллера с шилдом Pocket Shield, которое оптимально подходит под пульт управления (и не только).

А может быть и вариант, при котором в качестве управляющего мы используем другого робота mBot2. При этом повторим ту программу, что делали и ранее, т.е. простое управление с джойстика, но теперь это джойстик на другом устройстве.

Да, сразу надо понять, что это мы программируем "ручное" управление. На деле можно сделать программу, при которой манипулятор будет управляться автоматически, при определенных условиях. Например, в варианте соревнования "Эстафета". Там 1 робот хватает банку ("палочку") и едет по линии до определенной точки, где его ждет второй робот. Тогда первый опускает банку, второй разворачивается и ее забирает, поворачивается и опять едет по линии, а первый занимает его позицию в ожидании следующей передачи.

И реализовать такой вариант будет не слишком сложно, если освоить сам процесс обмена данными между устройствами. Чем мы и займемся сегодня.

Нам потребуется запрограммировать двух роботов.

Начнем с того, который будет "пультом управления".

Робот-пульт.

Нам потребуется организовать связь, для которой используем встроенные возможности mBot2 по организации сетей взаимодействия на основе внутреннего wifi. Обратите внимание, для этого варианта не требуется соединять робота с каким-либо роутером и т.д. Он сам организует свою сеть и соединение.

Затем нам потребуется передавать какие то команды для робота-манипулятора. Это можно реализовать разными способами, например, передавая сообщение с различными значениями.

В нашем примере значения:

1 - для движения манипулятора вверх;

2 - движение вниз;

3 - открытие захвата;

4 - закрытие захвата.

Значение 9 - пустое, мы никак его не задаем. Используем же для ограничения ранее переданного "командного" значения, иначе стрела манипулятора так и будет двигаться в заданную сторону до предела. Возможно, вы предложите более изящный вариант программы, ждем в комментариях. В нашем варианте - вполне удобный, рабочий способ.

Программа может выглядеть так:

-2

Теперь перейдем к роботу с манипулятором.

Робот - манипулятор.

По получении команды по сети, робот должен совершать определенное движение. Мы намеренно оставили, по сути, программу из предыдущего занятия, чтобы было видно, какие блоки потребовалось добавить. Разве что паузы немного убавили, повысив плавность движения с сохранением контроля.

Как и ранее, мы могли свести все в один скрипт, но для удобства компоновки все же делим его на 2.

Вариант программы:

-3

Как видите, мы просто заменили условия. Вместо "Джойстик ...такой то" мы поставили значение получаемого сообщения.

Можно пробовать.

-4

Запускаем оба устройства, ждем загрузки программ, нажимаем на обоих кнопку А для запуска. Теперь можно управлять джойстиком "пульта" манипулятором на другом роботе. Кстати, достигается вполне приличная дальность. Мы пробовали управлять метров с 20, причем с закрытой дверью. Получилось. Если у вас будет проверена какая-то более дальняя вариация, отпишитесь в комментариях, нам тоже интересно.

Итоги. Видно, что передать управляющий сигнал с другого устройства - не слишком сложно. Используйте в проектах!

Удачи!

P.S. Как всегда, забрать готовые программы можно из папки проекта.

Кстати, мы сделали 2-а файла, каждому роботу - отдельный. Но вы вполне можете делать такие варианты в одном файле. Просто в среде mBlock5 добавить еще одно устройство CyberPi и для него собрать вторую программу.

Ранее в цикле: