В настоящий момент я работаю над созданием программного продукта, который управляет движением гексапода.
Что для этого потребовалось?
Для этого сначала нужно было узнать как решаются прямая и обратная задачи кинематики.
- Прямая задача кинематики заключается в нахождении координат конца кинематической цепи, при заданных длинах звеньев и углах между ними.
- Обратная — в нахождении углов между звеньями, при известных координатах конца координатной цепи и длинах звеньев.
Для гексапода обратная задача использовалась для позиционирования ноги в точку заданными координатами. Прямая непосредственно для робота не использовалась, а применялась для наглядного изображения положения звеньев ноги гексапода при заданных углах поворота серводвигателей в окне выполнения программы. Т.е. программа рассчитывает углы и тут же на экране, используя эти значения, схематически рисует ногу. Это удобно и на этапе разработки, чтобы посмотреть правильно ли программа вычисляет углы, и на этапе использования готового программного продукта, чтобы посмотреть как гексопод себя будет вести при определенных входных значениях.
Параллельно с математикой я знакомилась с платой Arduino.
Краткие сведения о плате Arduino.
Arduino — это небольшая плата с собственным процессором и памятью. На плате также есть пара десятков контактов, к которым можно подключать всевозможные компоненты: лампочки, датчики, моторы, чайники, роутеры, магнитные дверные замки и вообще всё, что работает от электричества.
Arduino приобрела свою популярность в основном из-за простоты программирования. Для прошивки платы достаточно ее подключения к компьютеру через USB-порт. Для Arduino существует специальная, кроссплатформенная интегрированная среда разработки IDE Arduino. Язык программирования в ней основан на С++, с добавлением некоторых специфических функций.
Программная среда IDE Arduino.
Среда разработки Arduino состоит из встроенного текстового редактора программного кода, области сообщений, окна вывода текста(консоли), панели инструментов с кнопками часто используемых команд и нескольких меню.
В каждой программе должны быть две функции: setup() и loop(). После названия функции и круглых скобок идут фигурные скобки, внутри которых будет располагаться ваш код. Говорят, что между фигурными скобками располагается блок кода для функции или, иначе говоря, тело функции.
void <Имя функции>() { код }
Особенности функций:
- Функция setup() запускается один раз, после каждого включения питания или сброса платы Arduino. В теле данной функции пишется код для инициализации переменных, установки режима работы цифровых портов, и т.д.
- Функция loop() в бесконечном цикле последовательно раз за разом исполняет команды, которые описаны в ее теле.
Связь между ПК и платой через последовательный порт. Создание обработчика.
Для того, чтобы можно было изменять характер движения гексопода, мы решили прошить в плату обработчик некоторого пакета информации, который поступает на плату через последовательный порт. Каждый пакет определяет положение одной ноги и содержат номера пинов, к которым подключены серводвигатели, углы поворотов этих серводвигателей и длительность задержки.
Описание и презентация программного продукта, управляющего движением гексапода в реальном времени.
Кроме обработчика, на обычном С++, в Code Blockse было написано приложение, которое в 3D-виде показывает движение гексапода. С помощью клавиатуры можно изменять направление движения гексапода. В будущем можно будет изменять и характер движения (он будет поворачиваться вместе с корпусом, сможет реализовать иные разнообразные действия). Программа формирует строку с углами поворотов серводвигателей, для текущего положения гексапода и посылает ее через COM-порт. После чего плата обрабатывает полученный пакет и ставит сервоприводы на нужные углы. В результате реальный гексопод двигается так-же, как и его 3D-модель.
Заказать набор“Гексапод”