Рабочий отчет RWR-2014-06-01.2

advertisement
Луцкий В.А.
Программа взаимодействия с сервоконтроллером
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
Download