четверг, 16 апреля 2015 г.

Готовимся к Евроботу-2015. Софт. Часть 2.

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

Шутка, конечно. Работа не останавливалась ни на минуту, насколько это вообще было возможно. Учёбу ни у кого никто не отменял.

Впрочем, я рапространяюсь. Самое интересное - ниже.

Итак, в предыдущей статье я рассказал об основных идеях проекта. С тех пор мы успели немного более подробно проработать архитектурные моменты, а также подготовили полезный для работы софт.

Серверная часть


На данном этапе было решено спроектировать сервер на Python с использованием библиотеки 0MQ и python-serial. Сервер устроен предельно просто: он принимает в REP-сокет ZeroMQ сообщение установленного формата, по заданным правилам формирует сообщение для контроллера, которое затем отправляет последнему через USB (плата Cerebellum Stepper имеет аппаратный USB и прикидывается там модемным устройством (CDC-Class) - получается эдакий USB<->UART). Затем получает ответ от контроллера, снова оборачивает его в 0MQ-сообщение и отправляет обратно клиенту.

В системе Cerebellum Board определяется как ACM (/dev/ttyACMx), без системного протокола. На самой плате за это отвечает аппаратный USB (контроллер AVR ATmega32U4 имеет аппаратный Full Speed USB), обработкой CDC (и вообще работой с USB-стеком) занимается библиотека LUFA.

Общение с контроллером сводится к запросам двух типов: get и set. Первым запросом можно прочитать данные из "регистров" (пронумерованных структур данных в контроллере), set-запросами - записать. Адресация и форматы сообщений описаны в коде сервера. В идеальном случае всё это должно описываться отдельно, но Python - язык скриптовый, и хранить такие особенности там довольно удобно.


Скриптование


Для взаимодействия с сервером Cerebellum через TCP была написана библиотека на Python. Предполагается, что поведение робота будет описываться именно на Python через максимально простой и ёмкий API. 

Индикация и управление


Как и планировалось, приложение для индикации положения робота, а также для управления шасси и манипуляторами было написано приложение на C++ с использованием Qt Framework. На данный момент реализована отрисовка положения робота на поле, управление шасси с клавиатуры, а также управление сервомашинками манипуляторов.



Итоги


Совместная работа железа, серверной части и библиотеки уже проверена. Специфика ACM-устройств позволяет без дополнительных настроек устанавливать соединение на любой скорости, к тому же USB гарантирует целостность передаваемых данных. При установке скорости обмена с портом на 200 Кбод, удалось добиться даже получения ШИМ-сигнала для светодиода на плате. Это очень субъективная оценка скорости работы, но она выглядит достаточной для поставленных задач.

До следующего отчёта!

Комментариев нет:

Отправить комментарий