Луцкий В.А. Программа взаимодействия с сервоконтроллером Pololu Maestro Рабочий отчет RWR-2014-06-01.2 Москва, 2014 г. RWR-2014-06-01.2 1 Аннотация Программа предназначена для управления сервоконтроллерами Pololu Maestro, а именно для установки и контролирования положения подключенных к контроллеру сервоприводов и чтения сенсоров. Принцип работы Программа Pololu была написана под ОС Kubuntu при помощи Qt Creator версии 5.0. Pololu запускается под ROS. Установка соединения с контроллером Pololu Maestro через последовательный интерфейс производится с помощью библиотеки PolstroSerialInterfacePOSIX. Функции, обеспечивающие взаимодействие с контроллером после установки соединения, описаны непосредственно в самой программе.. Pololu является узлом ROS, он читает данные в определенном формате из топика cmd_topic. Данный топик задет тип операции взаимодействия с контроллером и необходимые аргументы. Получив данные из топика cmd_topic, Pololu выполняет операции взаимодействия с контроллером, и в случае если операция возвращает результат, передает его в топик ans_topic. Входные и выходные данные Входные данные 1. Параметры команды String command ;- название команды; Int32 arguement1; - первый аргумент команды; Int32 arguement2; - второй аргумент команды; Параметры команды поступают в виде сообщений входного топика cmd_topic 2. Файл конфигурации config: dev/ttyACM0 - имя COM-порта, к которому подключен контроллер 115200 - частота обмена данными с контроллером Выходные данные: 1. Параметры, возвращаемые после выполнения команды: Int32 result; - результат, возвращаемый командой (положение сервопривода или показание сенсора); Int32 result_array[ ]; - вектор результатов для команды, возвращающей несколько значений (показаний сенсоров/ положений сервоприводов); Программа отсылает в выходной топик ans_cmd значение result или массив result_array RWR-2014-06-01.2 2 Пример работы с программой Для работы с сервером пятна необходима ОС Kubuntu версии 12.04 и система ROS с созданным рабочим окружением. Инструкция по установке и настройке ROS можно найти в DropBox'е. Перед запуском программы необходимо установить соединение с контроллером и записать в файл конфигурации (рабочее окружение ROS)/src/pololu/config/config имя порта, по которому устанавливается соединение. После создания рабочей среды ROS скопируйте в папку src проект pololu и каталог spot_msg. Затем: 1. Подключаем контроллер к компьютеру. Перед первым соединением с контроллером необходимо произвести настройку конфигурации соединения с помощью программы Pololu Maestro Control Center На вкладке Serial Settings. Нужно выбрать режим DualPort (если соединение будет проходить через mini-USB вход контроллера) или UART, fixed boud rate со значением 115200 (если соединение будет идти через входы rx/tx контроллера, например при соединении через Bluetooth) , затем нажать Apply Settings. Загрузить программу Pololu Maestro Control Center и подробнее ознакомиться с её функциональностью можно на сайте http://www.pololu.com/product/1356/resources 2. Смотрим названия двух портов (или создаем свои порты, в случае более сложных соединений, например по Bluetooth) которые создал при подключении Pololu в папке /dev Как правило это порты ( /dev/ttyACM0 и /dev/tty/ACM1). Затем выбираем порт с меньшим именем (как правило /dev/tty/ACM0) и вводим его название в первую строку файла конфигурации (рабочее окружение ROS)/src/pololu/config/config. 3. Запускаем консоль и вводим команду roscore. 4. Не закрывая (!!!) предыдущую консоль, открываем новую и вводим команду rosrun pololu pololu. 5. Pololu запуститься и будет ожидать входных команд из топика cmd_topic. 6. Для контроля входного и выходного топиков выведем значения содержащихся в них сообщения. Для этого в новой консоли введем rosropic echo cmd_topic и в еще одной новой консоли введем rostopic echo ans_topic 7. Для пробной отправки команд во входной топик cmd_topic была написана тестовая программа pololu_test_sender. Данная программа отправляет в топик все команды, определенные протоколом. Для запуска тестовой программы необходимо в новой консоли набрать rosrun pololu_test_sender pololu_test_sender После этого, в соответствии с тестовой программой в топик cmd_topic будут отправляться сообщения, pololu будет выполнять соответствующие им команды и отправлять возвращаемые результаты в топик ans_topic RWR-2014-06-01.2 3 Показания сенсоров в топике ans_topic Программные функции Функции работы с контроллером по пользовательскому интерфейсу Все приведенные ниже функции определены внутри класса SerialInterface пространства имен Polstro 1. bool SerialInterface::setTargetCP( unsigned char channelNumber, unsigned short target ) - установка сервопривода на выходе контроллера в определенное положение 2. bool SerialInterface::setSpeedCP( unsigned char channelNumber, unsigned short speed) - установка скорости перемещения сервопривода 3. bool SerialInterface::setAccelerationCP( unsigned char channelNumber, unsigned char acceleration ) - установка ускорения при перемещении сервопривода 4. bool SerialInterface::getPositionCP( unsigned char channelNumber, unsigned short &position ) - получение значения на выходе канала контроллера (положение сервопривода или показания сенсора) 5. bool SerialInterface::getMovingStateCP( bool& servosAreMoving ) - функция возвращающая 1 если хотя бы один сервопривод находится в движении 0 если все сервоприводы находятся в состоянии покоя RWR-2014-06-01.2 4 6. bool SerialInterface::getErrorsCP( unsigned short& errors ) - функция, возвращающая код последней ошибки контроллера. 7. bool SerialInterface::goHomeCP() - установка сервоприводов в начальное положение 8. SerialInterface* SerialInterface::createSerialInterface( const std::string& portName, unsigned int baudRate ) - создание нового соединения с контроллером. Функции работы с последовательным интерфейсом библиотеки PolstroSerialInterfacePOSIX.h 1. int openPort( const std::string& portName ); - открытие последовательного порта для передачи данных порта 2. virtual bool writeBytes( const unsigned char* data, unsigned int dataSizeInBytes ); отправка данных на последовательный порт 3. virtual bool readBytes( unsigned char* data, unsigned int dataSizeInBytes ); - чтение данных из последовательного порта Глобальные переменные Подписка на топики ROS: ros::Subscriber client_pub ros::Publisher chutter_pub Указатель на класс интерфейса соединения с контроллером: Polstro::SerialInterface* serialInterface=NULL; Луцкий В.А. Программа взаимодействия с сервоконтроллером Pololu Maestro // Рабочий отчет RWR-2014-06-01.2, -М.: Robofob Lab, 2014 RWR-2014-06-01.2 5