Новости

Разработка программного обеспечения для android устройства

Работа добавлена:






Разработка программного обеспечения для android устройства на http://mirrorref.ru

Оглавление

Введение14

1 Индивидуальные задачи авторов для групповой работы18

2 Обоснование выбора языков программирования20

3 Разработка программного обеспечения для androidустройства24

3.1 Разработка современного дизайна приложения24

3.2 Разработка алгоритма передачи информационных команд.25

3.3 Прием и обработка видеопотока28

3.4 Разработка цифрового стика.32

3.5 Реализация настроек приложения.34

3.6 Разработка алгоритма обеспечения безопасности.38

3.7 Алгоритм записи и воспроизведения маршрута роботизированной системы.40

3.8 Тестирование android-приложения43

4 Сборка и настройка роботизированной системы на базе контроллера ТРИК45

5 Разработка программного обеспечения для ТРИК-контроллера49

5.1 Алгоритм движения по линии49

5.2 Алгоритм обнаружения препятствий49

5.3 Алгоритм движения по поступающим сигналам с пульта управления50

5.4 Описание алгоритма датчика касания51

5.5 Описание алгоритма для датчика линии52

5.6 Тестирование ТРИК-контроллера55

Заключение58

Список литературы60

Приложение62

Введение

Кибернетический контроллер предназначен для управления роботами, беспилотными летательными аппаратами, средствами передвижения (включая балансирующие «сегвеи»), встраиваемыми устройствами и киберфизическими системами [1, 2].

Контроллер снабжен цветным сенсорным дисплеем, программируемыми кнопками, WiFi и Bluetooth, имеет встроенную защиту от перегрузки по току и от глубокой разрядки аккумулятора. Состав компонентов изображен на рис. 1.

Рис.1 Все компоненты роботизированной системы

Контроллер совместим с широким спектром периферийных устройств, имеет в своем составе все необходимое оборудование для управления двигателями постоянного тока и сервоприводами, а также для приема и обработки информации от цифровых и аналоговых датчиков, микрофонов, видеосенсоров. Основные технические характеристики контроллера описаны на сайте производителя [3] (табл. 1).

Таблица 1

Основные технические характеристики контроллера

Характеристика

Значение

Центральный процессор (ЦП)

OMAP-L138 C6-Integra™ DSP+ARM® SoC, Texas Instruments

Тактовая частота ЦП

375 МГц

Процессорное ядро ЦП

ARM926EJ-S™ RISC MPU

DSP-ядро ЦП

C674x Fixed/Floating-Point VLIW DSP

Оперативная память

256 МБайт

FLASH - память

16 МБайт

Периферийный процессор (ПП)

MSP430F5510, Texas Instruments

Тактовая частота ПП

24 МГц

Интерфейсы пользователя

USB 2.0, WiFi b/g/n, BlueTooth, 2*UART, 2*I2C, Micro-SD, Mic in (stereo), Line out (mono)

Встроенный LCD монитор

2.4” TFT,  цветной, сенсорный, разрешение 320*240 пикселей

Светодиодный индикатор

2-цветный, программно-управляемый

Данная система работает на UNIX подобной системе Linux и имеет соответственно журналируемую файловую систему ext4 [4]. Эта файловая система основана на ext3, ранее использовавшейся по умолчанию во многих дистрибутивах GNU/Linux. В ext4 была улучшена файловая система:

  • увеличился максимальный размер одного раздела диска до 1 эксабайта;
  • увеличился объем одного файла до 16 терабайт;
  • введен механизм записи файлов, который повышает производительность и уменьшает фрагментацию файлов.

Android - популярная операционная система для большинства современных устройств, таких как смартфоны, планшеты, телевизоры, нетбуки, электронные книги, а в 2013 году еще и носимые устройства в виде наручных часов и в 2015 году и автомобильные развлекательные системы. Операционная система основана на ядре Linux и базируется на виртуальной машине Java собственной разработки Google. С помощью Android Native Development Kit разработчики могут портировать отдельные компоненты приложений и библиотеки, написанные на других языках программирования, отличных от Java, таких как Си, Python и другие.

Актуальность. Данная разработка является востребованной на сегодняшний день. В современном мире особенную актуальность имеют роботизированные системы, ввиду своей автоматизированности и эффективности работы, а также минимизации ошибок, свойственных человеку, возникающих при выполнении работы.

Новизна данного проекта заключается в сочетании многих возможностей по перемещению и обработке видеосигнала, а также построении на базе отечественного контроллера ТРИК, использование которого допускается в оборонной промышленности Российской Федерации, что позволит внедрить разработанную роботизированную систему в военную и оборонную сферу РФ.

Цели данной разработки:

  1. собрать роботизированную систему, состоящую из шасси, четырех моторов, батареи, контроллера ТРИК и датчиков.
  2. реализовать возможность управления роботизированной системой удаленно через сеть wi-fi;
  3. реализовать возможность передвижения роботизированной системы;
  4. реализовать возможность автономного передвижения системы по одному и двум датчикам линии;
  5. реализовать возможность движения роботизированной системы по линии с использованием видеомодуля “Глаз”;
  6. реализовать прием и передачу видеопотока на управляющее устройство;
  7. протестировать конечный продукт, выявив факты некорректной работы.

Задачиданной разработки:

  1. соединить воедино все элементы будущей конструкции из имеющихся компонентов сборки;
  2. разработать android-приложение, которое позволит управлять удаленно роботизированной системой через сеть wi-fi;
  3. разработать алгоритм движения роботизированной системы по рабочей поверхности;
  4. разработать алгоритмы движения роботизированной системы по двум и одному датчикам линии;
  5. разработать алгоритм движения роботизированной системы по видеомодулю “Глаз”;
  6. разработать алгоритм приема и передачи видеопотока на android-смартфон с последующим его отображением на экране;

Результатом выполнения выпускной квалификационной работы является создание роботизированной системы на базе контроллера ТРИК, которая имеет хорошую функциональность, такую как перемещение системы с помощью удаленного пульта управления, движение по направляющей линии с использование датчика линии, видеомодуля “Глаз”, а также захватывание видеопотока с помощью видеомодуля “Глаз”, с последующей обработкой и отправкой готового изображения на удаленное устройство управления.

1 Индивидуальные задачи авторов для групповой работы

В ходе выполнения выпускной квалификационной работы студентами Горбуновым Александром Михайловичем, Капелинским Дмитрием Анатольевичем, Лазаренко Михаилом Олеговичем были достигнуты следующие результаты:

  1. Горбунов Александр Михайлович:
    1. обосновал выбор языков программирования для android-приложения и ТРИК контроллера;
    2. создал современный дизайн приложения для смартфона под управление операционной системы Android и реализовал его с помощью инструментов разработчика в среде разработки приложений Android Studio;
    3. разработал алгоритм передачи информационных команд от android-приложения ТРИК-контроллеру по wi-fi сети;
    4. создал отдельные классы, реализующие корректные прием и обработку видеопотока, принимаемого по сети wi-fi с ТРИК-контроллера;
    5. разработал и внедрил цифровой стик для управления направлением и скоростью передвижения роботизированной системы на базе ТРИК-контроллера;
    6. спроектировал и реализовал настройки приложения для увеличения гибкости пользования;
    7. разработал алгоритм обеспечения безопасности android-приложения;
    8. протестировал итоговое программное обеспечение для android-смартфона на наличие недочетов и некорректной работы приложения.
    9. программно реализовал алгоритм записи и воспроизведения маршрута роботизированной системы;
    10. протестировал android-приложение на наличие ошибок в работе приложения.
    1. Капелинский Дмитрий Анатольевич:
      1. разработал алгоритм движения роботизированной системы по линии расположенной на горизонтальной поверхности с пропорционально-дифференциальным регулятором движения используя видеомодуль “Глаз”.
      2. разработал алгоритм обнаружения препятствий с помощью ультразвукового датчика с последующим использованием расчетов для определения препятствий, мешающих дальнейшему движению.
      3. разработал алгоритм реакции роботизированной системы на поступающие сигналы с пульта управления.
      4. протестировал разработанное программное обеспечение, для выявления ошибок в работе программного обеспечения для контроллера ТРИК.
      1. Лазаренко Михаил Олегович:
        1. разработал метод обнаружения линии на поверхности с помощью датчика линии;
        2. разработал и реализовал алгоритм при срабатывании датчика касания;
        3. разработал метод реализации передвижения для роботизированной системы на базе контроллера ТРИК;
        4. протестировал разработанное программное обеспечение для контроллера ТРИК.

2 Обоснование выбора языков программирования

Перед тем, как начать разработку программного обеспечения, необходимо выбрать нужный язык программирования, учитывая некоторые параметры (от наиболее значимого параметра к менее):

  1. основные доступные языки программирования для разработки конечного программного обеспечения;
  2. какими языками программирования владеет разработчик конкретного программного обеспечения;
  3. под какие языки программирования доступно больше всего документации на сайте производителя и иных информационных источниках, а также доступны алгоритмы и другие функциональные средства от сообщества.

Для полноценной разработки проекта по созданию роботизированной системы на базе контроллера ТРИК необходимо выбрать подходящие языки программирования для приложения под android-смартфон и программы по контроллер ТРИК.

Android – популярная операционная система для большинства современных устройств, таких как смартфоны, планшеты, телевизоры, нетбуки, электронные книги, а в 2013 году еще и носимые устройства в виде наручных часов и в 2015 году и автомобильные развлекательные системы. Операционная система основана на ядре Linux и базируется на виртуальной машине Java собственной разработки Google. С помощью Android Native Development Kit разработчики могут портировать отдельные компоненты приложений и библиотеки, написанные на других языках программирования, отличных от Java, таких как Си, Python и другие. Однако, основным языком программирования, установленным компанией Google, которая на сегодняшний день владеет Android, является Java. Также большинство когда-либо разработанных приложений под операционную систему Android были написаны именно на языке Java. И последним важным фактором, определяющим конечный выбор языка программирования, является поддержка сообщества, т.е. на языке Java есть большое многообразие книг, курсов, пособий по написанию современных приложений на языке Java, что оказывая существенную помощь при написании приложений.

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

  1. основным языком программирования написания android-приложений является Java;
  2. основным выбором разработчиков ПО для приложений на android является именно язык Java;
  3. в сети интернет и других информационных источниках существует большое количество всевозможной информации, которая поможет при написании конечного программного обеспечения для android-смартфона.

Контроллер ТРИК – современное российское устройство для управления роботами, средствами передвижения, беспилотными летательными аппаратами. ТРИК – это совокупность мощной современной электроники и надежность периферии. Группа отечественных квалифицированных специалистов разработала данный алгоритм ориентировочно для робототехнических задач. В список задач, выполняемых контроллером, входят:

  1. управление моторами и сервоприводами;
  2. обработка видео- и аудиопотока;
  3. синтез речи;
  4. навигация;
  5. обмен данными через беспроводную связь;
  6. сбор показаний всевозможных датчиков.

Контроллер ТРИК работает под управлением операционной системы Linux, что означает доступность моторов и всевозможных датчиков на борту роботизированной системы даже из shell скриптов. Поэтому стало возможным программирование с помощью большинства языков программирования, а именно:

  1. Си или С++/Qt;
  2. JavaScript;
  3. C# (.Net);
  4. F# (.Net);
  5. Python;
  6. Java.

Также создание программ возможно с помощью среды визуального программирования TRIK Studio для начинающих разработчиков (например, для школьников).

Для разработки конечного программного обеспечения для контроллера ТРИК был выбран язык программирования JavaScript. Выбор обуславливается наличием информативных руководств, а также необходимых примеров, которые помогут в разработке приложения для контроля и взаимодействия с роботизированной системой и всеми модулями в целом [5].

Для удобной разработки android-приложения на выбранном языке программирования Java была выбрана среда разработки Android Studio, так как она имеет несколько важных для данной разработки факторов:

  1. официальная поддержка данной IDE от компании Google, что означает своевременное обновление самой IDE до самой последней;
  2. наличие самых новых библиотек и наборов инструментов разработчика, что дает возможность использования всех необходимых инструментов для разработки приложения на всех версиях android;
  3. встроенная поддержка ProGuard и утилиты подписывания приложений, которая обеспечивает защищенность и безопасность всего приложения от третьих лиц;
  4. наличие большого количества инструментов для разработки современного адаптивного дизайна android-приложения;

Для того чтобы начать разработку программного обеспечения, необходимо понять каким образом загружать и исполнять код, написанный на JavaScript. С представленной проблемой может помочь справиться TRIK Studio, разработанное компанией ООО «КиберТех». Данная программа предоставляет возможность разрабатывать и отправлять на ТРИК контроллер готовые программы на тестирование. Также возможно отслеживать то, как изменяются переменные на контроллере, и отлаживать работу самих программ. Также на контроллере есть сервер Samba, с помощью которого можно просматривать, изменять и добавлять доступные файлы, если имеется подключение к ТРИК-контроллеру. Samba – это стандартный набор оперативной совместимости Windows для Linux и Unix [6]. Samba является свободно распространяемым программным обеспечением, лицензированным по лицензии GNU General Public License, проект Samba является членом Consolidation Freedom Conservancy. В итоге был выбран вариант загрузки кода программного обеспечения с использованием сервера Samba и последующей отладкой на самом контроллере.

Еще одним важным сервером ТРИК-контроллера является DHCP-сервер. При использовании данного инструмента становится возможным подключение android-устройств к ТРИК-контроллеру. DHCP-сервер выделяет свободный IP-адрес смартфону и подключает его к локальной сети ТРИК-контроллера. Данная возможность позволяет управлять ТРИК-контроллером со специального приложения, установленного на android-устройстве [7].

3 Разработка программного обеспечения дляandroidустройства

3.1 Разработка современного дизайна приложения

Как уже было сказано, разработка данного приложения начинается с создания и реализации дизайна этого приложения. Дизайн разрабатываемого приложения (рис.2) будет основываться на material design [8], разработанный компанией Google.

Рис.2. Интерфейс главного экрана приложения

На переднем плане должен размещаться блок видеопроигрывателя, расположенный на всей поверхности дисплея android-смартфона. Это позволит пользователю в полной мере наблюдать за видеопотоком, захватываемым дополнительным видеомодулем «Глаз», и своевременно вносить корректировку в направление и скорость движения самой роботизированной системы. Вторым важным компонентом разрабатываемого приложения выступает интерактивный джойстик, расположенный в правой части экрана (в настройках также предусмотрено изменение положения джойстика на левую сторону). Третьим компонентом данного приложения является блок функциональных кнопок [9], расположенных внизу экрана. Данное расположение позволит пользователю быстро прикасаться пальцем до необходимой кнопки. Имеется пять функциональные кнопок. На них возложены дополнительные функции управления роботизированной системы на базе контроллера ТРИК, такие как:

  1. включение/отключение функции адаптивного движения по заданной траектории с помощью одного и двух датчиков линии;
  2. включение/отключение функции движения по линии с помощью видеомодуля “Глаз”, включенного в режиме датчика линии;
  3. включение/отключение функции движения по предварительно записанной в файл траектории;
  4. отключение смартфона от роботизированной системы.

Четвертым компонентом, отображаемым на рабочей поверхности, является область оповещения. Данная область предназначена для уведомления пользователя о текущем состоянии работы приложения, например, статус подключения, критические ошибки, причина отсоединения от роботизированной системы и т.д. Данная функция удобна своей доступностью, т.е. пользователь будет мгновенно оповещен об ошибках, возникших при подключении к роботизированной системы или об успешном процессе подключения. Последним, пятым, компонентом, расположенным справа вверху, является кнопка, по нажатию на которую пользователю отображается новое окно с текущими настройками и возможностью их изменения.

3.2 Разработка алгоритма передачи информационных команд.

Возможность передачи команд по wi-fi сети – основная функция разрабатываемого приложения, которое создано для контроля роботизированной системы. Каждое действие, совершаемое пользователем, должно иметь свой отклик, т.е. формировать необходимую команду и отправлять ее на обработку и выполнение контроллеру ТРИК. Это сделает отдельный класс, специально спроектированный таким образом, чтобы принимать все внутренние действия с главного экрана, формировать команды по ранее спланированному стилю и отправлять на определенный IP-адрес роботизированной системы, заданный в настройках приложения.

Для написания данного класса необходимо вначале определить блок импортов, показанный на рис. 3.

Рис.3. Блок импортов SenderService

Главный метод класса SenderService – private void connectAsync(), который запускает все необходимые зависимые функции. Также он делает всевозможные проверки, и, при появлении каких-либо ошибок, уведомляет пользователя. К тому же данный метод привязывает нужные lisner’ы. Результатом таких уведомлений является информационное сообщение слева вверху экрана. Это те случаи, когда выводится сообщение об успешном подключении (рис. 4) и о безуспешном (рис. 5).

Рис.4. Экран приложения, когда соединение установлено

Рис.5. Экран приложения, когда соединение не установлено

Далее, чтобы интерфейс будущего приложения не тормозил, надо запустить новый поток и выполнять все последующие команды в этом вновь созданном потоке, а не в UI-потоке. В этом потоке в основном теле мы вызываем новую функцию connectToTRIK(). Здесь создается новый сокет [10] для создания канала между контроллером ТРИК и смартфоном. Также данному сокету надо выставить необходимые приоритеты:

  1. setTcpNoDelay – необходимый флаг, когда нужно передать маленький пакет через tcp соединение;
  2. setKeepAlive – флаг, который не позволяет прервать соединение, когда нет пакетов данных;
  3. setSoLinger – включение/отключение SO_LINGER с указанным временем задержки в секундах;
  4. setTrafficClass – высокий приоритет трафика в системе android.

Далее идет структура try/catch, которая пытается на указанный IP-адрес через определенный в настройках порт соединения послать тестовое сообщение. Если соединение установлено, функция заканчивает свою работу, но если по какой-либо причине не удалось послать тестовое сообщение, то на экран пользователя будет выведено сообщение об ошибке.

Следующим важным методом класса является void send (final String command). Данный метод класса занимается непосредственной отправкой специальных команд контроллеру.

Работа метода начинается с проверки на null pointer exception потока вывода команды на контроллер. Если проверка пройдена, данная функция создает новый поток (asyncTask [11]) и пишет в этот исходный поток необходимую команду. Если произойдут ошибки при передаче, пользователь немедленно будет оповещен с уровнем уведомления 2 (error).

3.3 Прием и обработка видеопотока

Другой особенностью данной разработки является возможность передачи и приема видеопотока с ТРИК-контроллера на android-смартфон. Отображение видеопотока, захватываемого с видеомодуля “Глаз”, поможет пользователю лучше ориентироваться на местности, а также даст пользователю возможность увидеть труднодоступные места. Чтобы реализовать данную возможность, необходимо разработать соответствующий алгоритм.

Для начала необходимо создать свой класс (MjpegView) для отрисовки полученных по сети wi-fi кадров. Данный класс наследуется от стандартного класса в системе android – SurfaceView. Для начала нам необходим конструктор по умолчанию, который запустит главный метод этого класса – init (context). Метод init (Context context) создает новый объект класса MjpegViewThread, принимает в локальные переменные размеры области, где будет располагаться отрисованный кадр и инициализирует объект класса Paint. Метод private void init (Context context) (рис. 6):

Рис.6.Метод private void init (Context context)

Теперь необходимо написать новый класс MjpegViewThread, который подготовит рабочую поверхность к отрисовке первого и последующих кадров. Когда класс убедится в отсутствии ошибок, от запустит еще один поток MjpegRenderThread, который получает на вход битовую информацию о кадре (frame), обрабатывает ее и рисует стандартными методами на «холсте» рабочей поверхности (DrawToCanvas). Ниже представлен главный метод потока public void run() (рис. 7), который делает всевозможные проверки на отсутствие ошибок, а также запускает все необходимые подчиненные функции.

Рис.7.метод public void run()

Нижепредставленметод private void DrawToCanvas (@NonNull Canvas canvas, @NonNull Rect destRect) (рис. 8),которыйотрисовываетнапереданном «холсте»определенный bitmap [12].

Следующим шагом в реализации отображения видеопотока на дисплее android-смартфона – реализация своего класса MjpegInputStream, который будет унаследован от DataInputStream. Сначала, необходимо написать главный метод класса, а именно readMjpegFrame ().

Рис.8.метод private void DrawToCanvas (@NonNull Canvas canvas, @NonNull Rect destRect)

Данный метод принимает на вход результат деятельности другого написанного нами функционального класса и делает необходимые проверки на целостность и точность пришедших по сети wi-fi данных, а также в случае обнаружения критических и иных ошибок выкидывает exception, сигнализирующий об обработанной ошибке (JPG stream is totally broken or this is extremely huge image), что означает, что данный jpg-последовательность символов имеет неправильную кодировку или слишком большая, чтобы ее обработать. Итогом работы данного разработанного класса является объект класса BoundedInputStream, который впоследствии будет кадром для отрисовки на холсте. Реализация отрисовки есть в вышеупомянутом классе.и И последний важный компонент в этом приложении для отображения видеопотока на экране смартфона представляет собой отдельный класс StartReadMjpegAsync, который является наследником AsyncTask. Это указывает на то, что данный наследованный класс является асинхронной задачей, т.е. программный код, написанный в этом классе будет выполняться в отдельном потоке, что положительно скажется на производительности и быстродействии приложения. Данный класс будет заниматься захватом видеопотока с определенного URL (в этом случае он указан в настройка приложения) с последующим его транспортировкой в другой класс для дальнейшей обработки и отображения на экране смартфона. В данном классе два главных метода: doInBackground и onPostExecute (рис. 9). В первом методе открывается httpсоединение с ранее указанным URL, получаются необходимые данные и отправляются в onPostExecute. Во втором методе осуществляется перезапись результата в кеш видеопроигрывателя и запускается видеопоток.

Рис.9. doInBackground и onPostExecute

На этом этапе закончена реализация отображения видеопотока на рабочей площади главного экрана приложения.

3.4 Разработка цифрового стика.

Стик – устройство управления, предназначенное для контролирования направлением и скоростью перемещения управляемого объекта (в представленном проекте это роботизированная система).

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

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

В начале необходимо скачать с удаленного репозитория github.com библиотеку Damien Brun – virtual joystick android. Так как была выбрана среда разработки Android Studio, достаточно написать одну строчку в сборщике Gradle:

compile 'io.github.controlwear:virtualjoystick:1.0.0'

Далее необходимо создать отдельный класс, который будет унаследован от класса JoystickView. Затем написать главный в этом классе метод init (). В этом методе происходит считывание положения указателя джойстика относительно центра. Метод setOnMoveListener(new JoystickView.OnMoveListener() класса JoystickView возвращает два значения – целочисленные значения угла и силы. Так как ТРИК-контроллер принимает значения x и y значение координаты, необходимо преобразовать полученные данные к правильному виду с помощью тригонометрических функций.

Функцияget_quarter (intangle) (рис. 10) принимает на вход угол, на который был оттянут цифровой стик, а на выходе выдает целочисленное значение угла.

Рис.10.Функция get_quarter (int angle)

Функцияget_total_string_command (intquarter,intstrength,intangle) (рис. 11) получает на вход результат работы предыдущей функции, т.е. номер четверти, где в данный момент располагается цифровой стик, а на выходе выдает результирующую строку, содержащую команду ТРИК-контроллеру.

Рис.11 get_total_string_command (int quarter, int strength, int angle)

Последней значимой функцией является send (String command), которая принимает на вход команду, необходимую послать ТРИК-контроллеру и затем пересылает ее в специальный класс, занимающийся непосредственной отправкой сообщения.

В конце необходимо в конструкторе по умолчанию настроить запуск главного метода init().

В связи с ограниченностью функционала ТРИК-контроллера невозможно реализовать алгоритм отображения оповещения при возможном столкновении роботизированной системы с препятствием. ТРИК-контроллер может принимать команды по сети для дальнейших их исполнений, однако не имеет возможности передачи информации на управляющее устройство. Таким образом, ТРИК-контроллер не способен послать сообщение android-смартфону о возможном столкновении с препятствием.

3.5 Реализация настроек приложения.

Чтобы повысить гибкость в интерфейсе приложения необходимо реализовать окно настроек этого приложения. Настройки приложения позволяют пользователю подстроить приложение под себя, через изменение размера и положения цифрового стика, цвета указателя и обрамления этого стика и т.д.

Для этого необходимо создать новый класс, унаследовать его от стандартного в android класса PreferenceActivity [13], и создать свой собственный xml-файл с разметкой будущих настроек. В этом xml-файле будет храниться необходимая информация о всех пунктах настроек и их значениях, а также занимаемое ими положение и разделение на категории. В данном программном продукте (android-приложение) реализованы категории, на которые поделены все пункты меню: основные настройки, настройки уведомления, настройки джойстика и настройки безопасности.

В основных настройках приведены все необходимые параметры для сопряжения android-приложения и ТРИК-контроллера, настройки уведомления несут в себе информацию о появившимся уведомлении. С помощью настроек джойстика можно кастомизировать параметры цифрового стика, а настройки безопасности предназначены для повышения защищенности данного приложения от третьих лиц.

Главные аспекты разрабатываемого xml-файла:

  1. категория “Основные настройки”:
    1. EditTextPreference – hostAddress;
    2. EditTextPreference – hostPort;
    3. EditTextPreference – videoURI;
    1. категория “Настройки уведомления”:
      1. EditTextPreference – timeout_alert_message;
      2. ListPreference  – alert_color;
      1. категория “Настройки джойстика”:
        1. EditTextPreference – joystick_size отвечает за размер джойстика;
        2. ListPreference – joystick_position отвечает за положение джойстика;
        3. ListPreference – joystick_pointer_color отвечает за цвет указателя джойстика;
        4. ListPreference – joystick_border_color отвечает за цвет границы джойстика.
        5. EditTextPreference – showPads;
        1. категория “Настройки безопасности”:
          1. CheckBoxPreference – chbx_password;
          2. EditTextPreference  – txt_password;

Подробное описание назначения каждого пункта меню приложения:

  1. hostAddress: в данное поле записывается IP-адрес роботизированной системы в формате 192.168.xx.xx. На данный адрес android-приложение отправляет информационные команды, а также принимает видеопоток. Стандартное значение – 192.168.77.1;
  2. hostPort: в данное поле записывается порт роботизированной системы, через который будет осуществляться коммуникация android-приложения и ТРИК-контроллера. Стандартное значение – 4444;
  3. videoURI: данное поле отвечает за конечный путь, по которому android-приложение будет принимать видеопоток и обрабатывать. Стандартное значение –  http://192.168.77.1:8080/?action=stream;
  4. timeout_alert_message: данное поле предназначено для хранения переменной, отвечающей за время, через которое всплывающее уведомление будет убрано. Стандартное значение – 5;
  5. alert_color: данное поле настроек хранит информацию о цвете всплывающего уведомления. Стандартное значение – желтый;
  6. showPads: в данное поле записана степень прозрачности цифрового стика;
  7. joystick_size: в данном поле записан размер джойстика. Стандартное значение – 900;
  8. joystick_position: данная переменная отвечает за позицию джойстика, будет ли он находиться слева или справа. Также эта переменная отвечает за позицию группы кнопок (движение по датчику линии, по показания видеомодуля и др.). Если в меню выбрано положение цифрового стика справа, то группа функциональных кнопок будет располагаться слева таким образом, чтобы сам стик не перекрывал кнопки. И наоборот: если стик слева – кнопки справа. Стандартное значение – справа;
  9. joystick_pointer_color: в данную переменную записывается выбранный цвет указателя джойстика из предварительно представленных. Возможные цвета:
    1. желтый;
    2. красный;
    3. черный;
    4. синий;
    5. зеленый;
    6. серый;
    7. коричневый;
    8. белый.

Стандартное значение – белый;

  1. joystick_border_color: в данную переменную также записывается цвет, но уже границы самого цифрового стика. Предварительно выбранные цвета такие же, как и цвета указателя стика. Стандартное значение – белый;
  2. chbx_password: данное поле отвечает за включение/отключение ввода пин-кода при запуске приложения. По умолчанию включен пин-код;
  3. txt_password: данное поле хранит в себе информацию о пин-коде. Стандартное значение - 0000;

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

Рис.12. Интерфейс настроек приложения

Чтобы в других классах получить значения переменных настроек приложения, необходимо сначала инициализировать объект класса SharedPreferences данными, полученными стандартный методом класса PreferenceManager - PreferenceManager.getDefaultSharedPreferences(getBaseContext()). Затем в соответствующие переменные (int, string, float, и другие) записать значения, полученные методами getInt(), getString(), getFloat и т.д. Например,

final String addr=sharedPreferences.getString (SettingsActivity.SK_HOST_ADDRESS, "192.168.77.1").

После этого необходимо убедиться в корректности полученных данных, применив конструкцию try/catch (рис. 13). Например,

Рис.13. Конструкцию try/catch

Настройки приложения – необходимый компонент современного адаптивного мобильного приложения, которые позволяют сделать использование приложения большее комфортным и повысить качество конечного продукта.

Разработанные настройки дают возможность пользователю гибко изменять стандартные настройки интерфейса, чтобы комфортнее и эффективнее взаимодействовать с роботизированной системой.

3.6 Разработка алгоритма обеспечения безопасности.

Безопасность – полное отсутствие или минимально возможный риск при обеспечении работоспособности какой-либо системы. Обеспечение безопасности функционирования роботизированной системы – отсутствие или минимизация угроз извне, способных повлиять на работу самой системы в целом или воздействовать путем взаимодействия с системой управления роботизированной системы.

В данном android-приложении было решено использовать распространенный элемент безопасности – пин-код. Данное средство безопасности рассчитано на то, чтобы не дать третьим лицам взять на себя управление роботизированной системой.

Чтобы реализовать в приложении механизм проверки правильно введенного пин-кода с заранее сохраненным, был спроектирован следующий алгоритм:

  1. открыть окно с десятью цифрами и полем ввода пин-кода, состоящего из четырех цифр;
  2. сравнить введенный пин-код с заранее сохраненным в памяти устройства четырехзначным числом;
  3. в зависимости от правильности введенного пароля запустить основное окно приложения или вывести сообщение о некорректном пин-коде.

Чтобы программно реализовать разработанный алгоритм, необходимо проделать несколько шагов. Сначала необходимо разработать интерфейс отдельного окна, расположив все необходимые элементы на переднем плане (иконка приложения вверху, под ним поле ввода пин-кода, далее десять кнопок в центре, отвечающих за набор цифр и всплывающее уведомление, сообщающее о правильности введенного пин-кода). Данную информацию необходимо представить в виде xml-разметки и поместить в xml-файл директории “layout”. Когда интерфейс спроектирован и записан в соответствующий файл, необходимо создать новое активити для отображения готового интерфейса, а также вся остальная работа. Основной код написан в файле PinSplashScreen.java. Все объявления и инициализация переменных происходит в методе onCreate (final Bundle savedInstanceState). Здесь же происходит проверка, включил ли пользователь пин-код на входе в приложение или нет и на основании этих данных происходит либо запрос этого пин-кода или вызов основного окна приложения. Также написан метод verify_pincode (String code), который проверяет введенные четыре цифры с четырьмя цифрами, записанными во внутреннюю память устройства. Итоговый интерфейс окна ввода пин-кода изображен на рис. 14.

Рис.14. окна ввода пин-кода

3.7 Алгоритм записи и воспроизведения маршрута роботизированной системы.

Еще одной немаловажной функцией разрабатываемой роботизированной системы является возможность передвижения без вмешательства извне. Это может быть полезным в случаях, когда пользователь управляет роботизированной системой по одному и тому же маршруту. Чтобы избавить пользователя от многократного повторения одних и тех же действий, в разработатываемой системе присутствует алгоритм, позволяющий один раз записать требуемый маршрут и в дальнейшем воспроизводить его без участия самого пользователя по нажатию нескольких функциональных клавиш.

Алгоритм состоит из:

  1. пользователь, будучи подключенным к ТРИК-контроллеру, нажимает кнопку начала записи маршрута;
  2. проезжает весь маршрут от начальной точки до конечной;
  3. нажимает кнопку окончания записи маршрута;
  4. когда возникает необходимость проехать по заданному маршруту без помощи извне, пользователь нажимает кнопку воспроизведения маршрута.

Данный алгоритм программно реализуется путем написания методов в двух классах – основном MainActivity и классе джойстика MyJoystickView. MainActivity ждет, когда пользователь нажмет на кнопку начала записи маршрута (рис. 15) и передает данные в MyJoystickView.

Рис.15. Кнопка начала записи маршрута

В свою очередь MyJoystickView, после пришедших данных, начинает записывать все действия пользователя в файл /storage/emulated/0/robotic_route.txt. Когда пользователь нажмет на кнопку остановки записи маршрута, MyJoystickView прекращает запись действий, и система будет готова воспроизвести его.

Первоначально необходимо вписать разрешение приложению использовать запись и чтение из файла:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

Одним из основных методов алгоритма является set_writable (boolean b_write). Этот метод обрабатывает нажатия пользователем на кнопки начала и окончания записи маршрута, и запускает соответствующий метод. Когда пользователь нажал на кнопку начала записи маршрута, все действия пользователя записываются в предварительно созданный список private List<String> string_list = new LinkedList<String>(). Данные записываются как x- и y-координата положения джойстика относительно его центра и время в миллисекундах, которое он оставался в этом положении. Когда пользователь нажал на кнопку завершения записи маршрута, все элементы списка записываются в заранее созданный файл. Когда все данные запишутся в файл на внутреннем хранилище устройства, пользователю будет доступна кнопка воспроизведения маршрута (рис. 16).

Рис.16. Кнопка воспроизведения маршрута

Robotic_route.setOnClickListener(new View.OnClickListener() {...}) занимается отслеживанием нажатия на кнопку воспроизведения маршрута и запускает механизм управления роботизированной системой без помощи пользователя. Для этого вначале скрывается цифровой стик, чтобы пользователь случайно не нажал на него, затем запускается новый поток, чтобы интерфейс приложения работал корректно и эффективно, в котором открывается файл с маршрутом на чтение, построчно считываются данные и далее, посылаются необходимые сигналы ТРИК-контроллеру через сеть wi-fi. После каждой отсылки команды поток, выполняющий данные действия, “засыпает” на определенное количество миллисекунд, определенное в файле маршрута (рис. 17).

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

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

Рис.17. Файле маршрута

3.8 Тестирование android-приложения

Конечное программное обеспечение для android-смартфона было протестировано на наличие ошибок в работе. Тестирование проводилось на android-смартфоне Samsung galaxy s5 mini.

В ходе тестирования были выявлены следующие недочеты:

  1. проблема с воспроизведением заранее записанного маршрут;
  2. проблема с передачей на ТРИК-контроллер данных, не соответствующих требуемым;
  3. проблема с передачей на ТРИК-контроллер данных, неправильно выведенных, используя тригонометрические функции.

Первая проблема заключалась в использовании в неправильном месте функции string_list.clear(). Из-за этого при записи нового маршрута в тот же файл, что и предыдущий, новый записывался к старому, из-за чего после нажатия кнопки воспроизведения маршрута воспроизводились сразу оба. Решение данной проблемы заключалось в постоянной очистке списка команд, записываемых в файл на внутреннем носителе устройства, при каждой последующей записи нового маршрута.

Вторая проблема заключалась в передаче команды в неправильном формате. Например, посылалась команда “pad 1 00”, отображающее действие пользователя по остановке роботизированной системы. Однако, чтобы ТРИК-контроллер остановил систему, необходима команда “pad 1 0 0”. Решением данной проблемы стало изменение функции формирования итоговой команды таким образом, чтобы между координатами отклонения цифрового стика ставился пробел.

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

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

  1. Использование процессора было на уровне 10%, что не превышает установленных значений. Были замечены кратковременные скачки до 25%;
  2. Использование оперативной памяти было в пределах 22 мегабайт. Потребление оперативной памяти также находится на стандартном уровне;
  3. Нагрузка на сеть была 10 килобайт в секунду отдача и 320 килобайт в секунду загрузка. Отдача обуславливается легковесными командами, отсылаемыми ТРИК-контроллеру, а загрузка - необходимо загружать 20 изображений в секунду, чтобы отобразить видеопоток.

4 Сборка и настройка роботизированной системы на базе контроллера ТРИК

Первым действием для достижения поставленной цели ВКР является сборка конечного корпуса роботизированной системы (рис. 18). В сборку системы входит:

  1. сборка шасси, на которое будут крепиться моторы для обеспечения движения самой системы;
  2. расположение по углам четыре мотора, чтобы итоговая система получилась полноприводной;
  3. размещение в центральной части корпуса батареи, которая будет питать все электрические приборы;
  4. расположение в легкодоступном месте ТРИК-контроллер, чтобы можно было свободно управлять настройками самого контроллера;
  5. закрепление по периметру корпуса необходимых датчиков;
  6. подсоединение всех необходимых проводов от датчиков и моторов к ТРИК-контроллеру.

Рис. 18. Собранная роботизированная система

Сборка корпуса роботизированной системы – это сочетание творческого процесса и правильного расположения всех элементов. Инструменты для сборки итоговой модели были приложены в комплекте к контроллеру ТРИК, что позволяет беспрепятственно провести все необходимые работы по сборке роботизированной системы.

Для того чтобы начать разрабатывать и тестировать программное обеспечение на роботизированной системе, необходимо загрузить последнюю версию прошивки на ТРИК-контроллер. Для осуществления данного пункта настройки системы необходима SD карта размером минимум 2 Гб, картридер и программное обеспечение Disk Imager, установленное на персональный компьютер, с которого будет осуществлена сама прошивка. Эта утилита может производить чтение и запись на SD-карты и USB-устройства [14]. Данное программное обеспечение является модификацией стандартной windows-утилиты Win32DiskImager, разработанное с использованием программной платформой .NET и реализует несколько дополнительных функций:

  1. запись образов прошивки на несколько SD-карт одновременно;
  2. считывание/запись прошивки из/в сжатых форматов файлов: ZIP, TGZ, GZ, XZ;
  3. возможность записи последнего файла, который считывается/ записывается;
  4. отключение дисков после записи;
  5. предоставление большого количества файловых фильтров в диалоговом окне файла для типичных файлов прошивки (.img, .bin, .sdcard);
  6. DiskImager также может быть немного быстрее при работе с несжатым чтением/ записью.

С помощью данной программы на SD карту записывается, заранее скачанная прошивка для контроллера, последняя версия которой находится на официальном сайте компании ООО “КиберТех”. После подключения источника питания к ТРИК-контроллеру загрузка операционной системы будет производиться только с SD карты.

Следующим шагом является настройка силовых моторов. Чтобы моторы пришли в движение, необходимо соединить провода, идущие от силовых моторов к контроллеру, к портам M1-M4, а в коде программы необходимо указать мощность моторов в процентах. Для программной остановки моторов необходимо либо указать моторам нулевую мощность, либо вызвать функцию stop.

Датчики. Чтобы считывать показания датчиков, прикрепленных к роботизированной системе, необходимо соединить датчик проводом с контроллером, при этом аналоговые датчики должны подключаться к портам A1-A6, а цифровые датчики подключаются соответственно к портам D1-D2. Порты A выдают различные значения в зависимости от номера порта. Порты A1 и A2 выдают значения от 6 до 8000, порты A3 и A4 выдают значения от 0 до 1, порты A5 и A6 выдают значения от 100 до 1. Видеомодуль подключается к портам Video1-Video2.

На самом контроллере есть семь кнопок:

  1. 4 кнопки для управления;
  2. кнопка подтверждения;
  3. кнопка отмены;
  4. кнопка питания.

При необходимости возможно подключение управляющего компьютера через порт последовательного интерфейса (UART), либо через порт интерфейса USB. Для подключения к контроллеру по UART и USB используются специальные кабели хост интерфейсов.

Для доступа к интерфейсу ТРИК-контроллера можно воспользоваться утилитой PuTTY и проводом типа UART.

PuTTY – это SH и telnet клиент, разработанный первоначально Саймоном Татемом для платформы Windows [15]. PuTTY – это программное обеспечение с открытым исходным кодом, которое представляет собой SH и telnet клиент, разработанный первоначально Саймоном Татемом для платформы Windows.

Uart – универсальный асинхронный приемопередатчик, который передает преобразованные в последовательный вид данные таким образом, чтобы они могли корректно считаться другому устройству через физическую цифровую линию. Чтобы UART провод успешно начал передавать нужные данные, необходимо скачать драйвера с сайта разработчика ТРИК-контроллера. Далее настроить PuTTY таким образом, чтобы был указан порт Serial и COM-порт выбранного USB, а также установлена скорость равная 115200, сделать неактивными последовательный паритет (Serial Parity) и управление потоком (Flow Control) на вкладке подключения (Connection).

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

5 Разработка программного обеспечения для ТРИК-контроллера

5.1 Алгоритм движения по линии

Для реализации алгоритма движения по линии с пропорционально-дифференциальным регулятором, используя видеомодуль «Глаз», необходимо присоединить этот модуль так, чтобы сам модуль смотрел на поверхность движения перед роботизированной системой. Далее включить видеокамеру в режиме сенсора линии и с его помощью записывать отклонение от центра линии в переменную [16]. В зависимости от отклонения от центра, необходимо регулировать мощность силовых моторов пропорционально отклонению, т.е. чем больше отклонение, тем меньше скорость моторов и тем больше разность между скоростью правой и левой парой моторов. Это является пропорционально-дифференциальным регулятором (ПД-регулятор). ПД-регулятор – это параллельно соединенные пропорциональное и идеальное дифференцирующее звено [17]. Выходной сигнал ПД-регулятора зависит от ошибки регулирования и от скорости изменения ошибки.

5.2 Алгоритм обнаружения препятствий

Для реализации алгоритма обнаружения препятствий с помощью ультразвукового датчика и последующим использованием расчетов для определения препятствий, мешающих дальнейшему движению, необходимо подключить сам датчик к порту D1 и снимать с него показания расстояния до найденного препятствия. Работа программы заключается в том, чтобы посылать стоп сигнал на силовые моторы, когда расстояние будет равно половине корпуса роботизированной системы. Проблема заключается в том, что край корпуса роботизированной системы может столкнуться с препятствием из-за маленького угла измерения ультразвукового датчика [18]. Если препятствие находится так, что край роботизированной системы наезжает на это преграда, но угол измерения ультразвукового модуля не способен детектировать расстояние до объекта на всем протяжении движения, то при приближении робота к объекту, сенсор может потерять его из виду до минимального расстояния в половину корпуса и врезаться в объект. С помощью тригонометрической формулы можно рассчитать расстояние, при котором роботизированная система при вышеуказанных условиях столкнется с препятствием.

(2)

гдеX – двойное расстояние между препятствием и серединой роботизированной системы; D – расстояние до препятствия.

При условии, что X больше чем ширина роботизированной системы, она проедет, не задев препятствие.

5.3 Алгоритм движения по поступающим сигналам с пульта управления

Для реализации алгоритма обработки полученных сигналов требуется Android-устройство с установленным приложением, разработанным Горбуновым Александром TRIK joystick. Чтобы смартфон мог присоединиться к ТРИК-контроллеру необходимо включить точку доступа на контроллере и произвести подключение к сети “trik-6953ba”. Чтобы подключение к контроллеру в приложении прошло успешно, необходимо ввести в настройках приложения локальный IP-адрес, который высвечивается при включении точки доступа на контроллере.

Также, чтобы на смартфоне воспроизводился видеопоток с видеомодуля, необходимо написать URI этого видео в настройках приложения. Далее, чтобы начать отправление видеопотока с модуля “Глаз” на смартфон, необходимо включить данный модуль и запустить два скрипта. Один из них отвечает за сохранение видеоряда в формате JPEG в fifo, а второй берет кадры из fifo, запускает http-сервер и на данный сервер посылает видеоряд с видеомодуля.

Для обработки нажатия на кнопки и джойстик было создано шесть параллельных потоков, каждый из которых отвечает за свою кнопку. Координаты положения джойстика с помощью разработанного алгоритма преобразовываются в мощность силовых моторов. Поворачивать данная роботизированная система может только одним способом: разностью подачи мощностей к моторам в правой и левой частях роботизированной системы. Соответственно, чтобы из координат нажатия на джойстик получить мощность моторов, необходимо на правую часть подать разность координат, а на левую часть силовых моторов подать сумму координат.

Различные действия будут происходить при нажатии на функциональные кнопки на пульте управления:

  1. при нажатии на первую кнопку роботизированная система издает звуковой сигнал “beep.wav”;
  2. при нажатии на вторую кнопку роботизированная система выполняет алгоритм движения по линии с помощью двух датчиков света;
  3. при нажатии на третью кнопку роботизированная система выполняет алгоритм движения по линии с помощью видеомодуля “Глаз”;
  4. при нажатии на пятую кнопку роботизированная система завершает выполнение программы.

5.4 Описание алгоритма датчика касания

Следующим пунктом разработки программного обеспечения является разработка алгоритма действий при срабатывании датчика касания.

Датчик касания (контактный, аналоговый) служит для формирования сигнала в случае прикосновения к предмету или препятствию. Широко применяется для конструирования роботов различного назначения.

При выполнении программы сначала происходит инициализация всех переменных и калибровка используемых датчиков. Далее начинается выполнение основной программы, в которой происходит управление и выполнение основных функций программной среды. В основной программе создается параллельный поток, в котором и происходит обработка информации, поступающей с контактного датчика касания, и реализация дополнительных действий.

Существует несколько вариантов развития событий. В случае, если произошел опрос датчика и ответа не поступило, то генерируется исключительная ситуация, при обработке которой происходит завершение выполнения параллельного потока основной программой, очищается память и контроллер оповещается о том, что датчик более недоступен.

Когда опрос датчика произошел удачно, а показания датчика были записаны в переменную для обработки, и в ходе обработки были получены результаты, свидетельствующие о том, что датчик касания не сработал, то никаких действий предпринимать не требуется.

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

5.5 Описание алгоритма для датчика линии

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

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

Датчик линии – аналоговый датчик, позволяющий отслеживать движение робота по линии. Основным рабочим органом датчика является инфракрасный фотоэлемент. В паре с ним работает светодиод, который включается и подсвечивает поверхность.

Первый вариант алгоритма использует для обнаружения линии два датчика света. Алгоритм действий при работе с датчиками линии заключается в считывании информации с двух датчиков, расположенных на нижней стороне корпуса системы. Было использовано два датчика для ускорения определения направления изменения линии, поскольку в отличии от использования в качестве датчика линии камеры, при выходе за пределы зоны обнаружения линии датчики просто перестают подавать сигнал линии, тогда как камера детектирует отклонение от центра изображения, и есть возможность изменять траекторию движения роботизированной системы по ходу движения. В алгоритме движения при отклонении линии от прямой в достаточной степени, отклонение детектируется одним из датчиков.

Суть этого алгоритма заключается в том, что в начале выполнения роботизированная система начинает движение с определенной скоростью в прямом направлении с целью обнаружения линии. В случае, если линия была обнаружена, роботизированная система начинает поворачивать в сторону датчика, зафиксировавшего линию, изменять в большую сторону скорость поворота и уменьшать значение прямолинейной составляющей скорости для уменьшения вероятности потери линии. После обнаружения линии и выполнения определенных действий снова происходит опрос датчиков, и в случае, если линия все еще находится в поле видимости, то скорость поворота возрастает, а скорость движения вперед – уменьшается. Если линия снова обнаружена, то алгоритм выполняется заново, если нет, то продолжается движение вперед. Далее существует два варианта при потере линии из зоны обнаружения датчиков. Первый вариант – после поворота линия оказалась между датчиками. В этом случае роботизированная система продолжит ехать по линии, уменьшая прямолинейную скорость и увеличивая скорость поворота на поворотах, и наоборот, увеличивая прямолинейную скорость и уменьшая скорость поворота на прямых участках линии до тех пор, пока не закончится линия или на пути движения не встретится участок линии со слишком резким поворотом. Второй вариант – после поворота линия оказалась за пределами области обнаружения датчиков и не между ними. В таком случае робот со временем перестает поворачивать и поедет вперед, до тех пор пока не встретит линию снова.

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

В ходе работы этого алгоритма происходит поиск линии путем движения вперед. Далее, при обнаружении линии, роботизированная система начинает поворачивать до тех пор, пока не потеряет линию из зоны детектирования. Затем начинает плавно изменять направление поворота пока заново не обнаружит и не пересечет линию и снова начнет изменять направление поворота. В случае, если линия имеет разрывы и зона обнаружения линии пройдет между концом одной линии и началом следующей, то есть попадет в разрыв, то робот повернет на 180° и поедет по линии в обратном направлении.

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

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

Оба алгоритма движения по линии запускаются с удаленного Android-устройства и их выполнение может быть прервано пользователем при нажатии на джойстик или кнопкой завершения работы программы. При использовании этих алгоритмов датчик касания и инфракрасный датчик продолжают работать, что предотвращает возможность столкновения роботизированной системы с препятствиями и может привести к выходу ее отдельных модулей или системы в целом в неисправное состояние.

Данные алгоритмы могут использоваться в сочетании друг с другом для увеличения надежности системы. При выходе из строя или потере соединения с одним из датчиков предусмотрена возможность использования другого алгоритма для одного датчика линии.

Все расчеты и действия, связанные с датчиками линии, выполняются в отдельном потоке, который создается в начале выполнения программы. Однако, при включении движения по линии отключаются некоторые другие функции, такие как дистанционное управление со смартфона или использование других алгоритмов движения по линии, но сохраняется функционал датчика касания и инфракрасного датчика расстояния.

Программа является расширяемой, благодаря ее модульной структуре и использованию объектно-ориентированного языка программирования JavaScript.

5.6 Тестирование ТРИК-контроллера

В ходе тестирования был обнаружен ряд проблем, связанный с неоригинальными частями шасси и их совместимостью с контроллером, возникла проблема с тем, что видеомодуль фиксировал не только спектр видимого излучения, но и инфракрасное излучение, а также в ходе тестирования возникла проблема с размещением датчиков линии на корпусе роботизированной системы. Также были проблемы с постоянно перезапускающейся операционной системой контроллера. Основной проблемой стала маленькая скорость выполнения потока команд связанных со снятием данных с датчиков и изменением напряжения на портах контроллера.

Тестирование показало, что ультразвуковой датчик не функционирует. Для обеспечения выполнения функций по обнаружению препятствий необходим датчик определяющий расстояние до ближайшего объекта. В результате был использован инфракрасный датчик расстояния [19], который является аналогом ультразвукового датчика, но является не цифровым, а аналоговым, что, однако, не повлияло на его работоспособность.

При работе с шасси Multi Chassis Family [20] возникла проблема с тем, что при подаче на силовые моторы мощности меньше 50% роботизированная система не начинала движение до тех пор, пока ей не придавалось дополнительное ускорение внешними силами. В соответствии со спецификациями к колесной базе рабочее напряжение – 3-6В. Было произведено измерение напряжения с помощью вольтметра на выходах M1, M2, M3, M4, на которых были получены одинаковые результаты (табл. 2).

Таблица 2

Напряжение на силовых моторах в зависимости от подаваемой мощности.

Мощность, %

Напряжение, В

10

1,1±0,2

20

1,4±0,2

30

1,6±0,2

40

2,0±0,2

50

2,4±0,2

60

3,0±0,2

70

3,6±0,2

80

4,4±0,2

90

7±1

100

11±1

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

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

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

В результате, эмпирическим путём были получены значения мощности силовых моторов, при которых контроллер все еще успевает считать значения с датчиков и вероятность застревания сведена к минимуму.

Роботизированная система в собранном состоянии имеет два датчика линии и один инфракрасный датчик расстояния, которые являются источниками инфракрасного излучения. В связи с тем, что у видеомодуля “Глаз” отсутствует фильтр инфракрасного излучения, им фиксируется излучение этих датчиков, что, в некоторых обстоятельствах, может привести к засветам на получаемом изображении. При использовании камеры в режиме сенсора линии засветы на изображении могут привести к некорректному выполнению программы. В результате было принято решение о реализации алгоритма движения по линии, используя видеомодуль “Глаз”, в виде отдельной программы, перед запуском которой необходимо отключить датчики линии и датчик расстояния.

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

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

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

Заключение

После выполнения выпускной квалификационной работы были получены следующие выводы:

  1. получены теоретические и практические знания в области программирования контроллеров и создания android-приложений;
  2. получены навыки работы с роботизированными системами на примере системы на базе контроллера ТРИК;
  3. получен на практике конечный продукт в виде роботизированной системы с разработанным программным обеспечением;

Были получены следующие результаты:

  1. сконструирована роботизированная система из предоставленной элементной базы;
  2. создано android-приложение, которое предоставляет пользователю осуществлять управление роботизированной системой через wi-fi сеть;
  3. разработано и реализовано программное обеспечение для ТРИК-контроллера, которое предоставляет возможность перемещения роботизированной системы по рабочей поверхности, по линии с помощью датчика света, видеомодуля “Глаз”, а также отсылает полученный видеопоток с камеры на управляющее устройство;
  4. произведено тестирование android-приложения и программного обеспечения для ТРИК-контроллера.

Практическая значимость данной разработки имеется для компаний, чья работа связана с охранной деятельностью, военным делом, развлекательной деятельностью.

В дальнейшем данная разработка может быть улучшена путем улучшения аппаратной базы. Также можно увеличить функциональность данной разработки путем увеличения количества дополнительных модулей, включенных в состав роботизированной системы.

В ходе выполнения выпускной квалификационной работы студентами Горбуновым Александром Михайловичем, Капелинским Дмитрием Анатольевичем, Лазаренко Михаилом Олеговичем были достигнуты следующие результаты, полученные каждым автором по отдельности:

  1. Горбунов А.М.:
    1. обосновал выбор языков программирования;
    2. разработал прикладное программное обеспечение для Android-устройства;
    3. разработал методы связи аndroid-устройства и ТРИК контроллера;
    1. Капелинский Д.А.:
      1. разработал методы обнаружения линии на поверхности с помощью видоискателя “Глаз”;
      2. разработал методы определения препятствий с помощью ультразвукового датчика;
      3. разработал методы связи ТРИК контроллера и аndroid-устройства;
      1. Лазаренко М.О.:
        1. разработал методы реализации передвижения для ТРИК контроллера;
        2. разработал методы обнаружения линии на поверхности с помощью датчика линии;
        3. разработал и реализовал алгоритмы действия при срабатывании датчика касания;

Список литературы

  1. TRIK. URL:http://www.trikset.com/ (дата обращения 3.04.2017).
  2. TRIK project official sources GitHub.URL:https://github.com/trikset (дата обращения 12.04.2017).
  3. Кибернетический контроллер ТРИК, руководство пользователя. URL:https://drive.google.com/file/d/0BzWuF-slPpvUOGJ2NmU4UTZicDA/edit (дата обращения 3.04.2017).
  4. Ext4 - Linux Kernel Newbies. URL:https://kernelnewbies.org/Ext4 (дата обращения 13.04.2017).
  5. Современный учебник JavaScript. URL:https://learn.javascript.ru (дата обращения 03.04.2017).
  6. Samba - opening windows to a wider world.URL:https://www.samba.org/ (дата обращения 04.04.2017).
  7. udhcp Server. URL:https://udhcp.busybox.net/ (дата обращения 3.04.2017).
  8. Introduction  - Material design - Material design guidelines.URL:https://material.io/guidelines  (дата обращения 05.04.2017).
  9. Роджерс Р., Ломбардо Д., Медниекс З., Мейк Б. Android. Разработка приложений. М.: ЭКОМ Паблишерз, 2010. С. 245-280.
  10. Socket (Java Platform SE 7). URL:https://docs.oracle.com/javase/7/docs/api/java/net/Socket.html (датаобращения 08.04.2017).
  11. AsyncTask | Android Developers. URL:https://developer.android.com/reference/android/os/AsyncTask.html (датаобращения 15.04.2017).
  12. Роджерс Р., Ломбардо Д., Медниекс З., Мейк Б. Android. Разработка приложений. М.: ЭКОМ Паблишерз, 2010. С. 283-311.
  13. PreferenceActivity - Активити с настройками | Программирование под Android. URL:http://androiddocs.ru/preferenceactivity-aktiviti-s-nastrojkami (дата обращения 09.04.2017).
  14. R. Belkovи A. J. Lennon, «DiskImager».URL:https://github.com/RomanBelkov/DiskImager  (дата обращения 04.04.2017).
  15. PuTTY. URL:http://www.putty.org/  (дата обращения 3.04.2017).
  16. OmniVision Technologies, «OV7670/OV7171 CMOS VGA (640x480) CameraChip» 8.07.2005.URL:https://mgbot.ru/tools/download.php?file=1128  (дата обращения 4.04.2017).
  17. Пропорционально-дифференциальный регулятор. URL:https://www.ngpedia.ru/id390453p1.html (дата обращения 3.04.2017).
  18. Purlance Industry Co., «Ultrasonic Ranging Module HC - SR04».URL:https://mgbot.ru/tools/download.php?file=1183 (дата обращения 4.04.2017).
  19. Sharp, «Distance Measuring Sensor Unit Measuring distance: 10 to 80 cm Analog output type».URL:https://mgbot.ru/tools/download.php?file=1184  (дата обращения 4.04.2017).
  20. DAGU Off set gear motor acessorios 1:48 (1 pair)_Motor/Geared Motor_Welcome to DAGU Hi-Tech Electronic Robotics online Shop! - Powered by ECShop.URL: http://www.dagurobot.com/goods.php?id=86 (дата обращения 4.04.2017).

Разработка программного обеспечения для android устройства на http://mirrorref.ru


Похожие рефераты, которые будут Вам интерестны.

1. Реферат Разработка программного обеспечения для платформы Android

2. Реферат Разработка устройства на основе микроконтроллера PIC16F84A. Написание программного обеспечения выполняющего попеременное мигание трех светодиодов с частотой в 3 Гц

3. Реферат Разработка устройства для удаленного управления звуковой информацией на выходе смартфона под управлением операционной системы Android

4. Реферат РАЗРАБОТКА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ АС

5. Реферат ОСНОВЫ СТАНДАРТИЗАЦИИ И СЕРТИФИКАЦИИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ: НАДЕЖНОСТЬ И КАЧЕСТВО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

6. Реферат Разработка программных модулей программного обеспечения компьютерных систем

7. Реферат Разработка автоматических тестов для тестирования новой функциональности программного обеспечения

8. Реферат Разработка программного обеспечения систем контроля и управления технологическими процессами

9. Реферат Разработка автоматизированной системы расчета себестоимости и длительности разработки программного обеспечения

10. Реферат Разработка конечного набора тестов для проверки корректной работы программного обеспечения IP-телефонов