У вас вопросы?
У нас ответы:) SamZan.net

Компьютерная модель робота Phoenix

Работа добавлена на сайт samzan.net: 2015-07-05

Поможем написать учебную работу

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

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 7.4.2025

PAGE  4

Государственный Университет Аэрокосмического Приборостроения  

Дипломная работа 

Компьютерная модель робота Phoenix 

Руководитель: к.т.н., начальник СКБ ГУАП Астапкович А. М.

Студент: Астапкович Д. А.


ОГЛАВЛЕНИЕ

[1] Государственный Университет Аэрокосмического Приборостроения  

[2] Дипломная работа

[3] Компьютерная модель робота Phoenix

[4] Руководитель: к.т.н., начальник СКБ ГУАП Астапкович А. М.

[5]
ОГЛАВЛЕНИЕ

[6]  

[7]
ПОСТАНОВКА ЗАДАЧИ

[8]
ОБЗОР СИМУЛЯТОРОВ РОБОТОВ И СИСТЕМ РАСПОЗНАВАНИЯ ОБРАЗОВ

[8.1] Обзор робототехнических симуляторов

[8.2] Распознавание образов. Краткий обзор

[8.2.1] Введение

[8.2.2] Определения

[8.2.3] Методы распознавания образов

[8.2.4] Общая характеристика задач распознавания образов и их типы

[9] ВЫБОР ПРОГРАММНОГО И АППАРАТНОГО ОБЕСПЕЧЕНИЯ

[9.1]   Выбор программного инструментария

[9.1.1] Требования к инструментарию

[9.1.2] Выбор среды математического моделирования

[9.1.3] Выбор среды для разработки трехмерного симулятора

[9.2] Выбор аппаратного обеспечения

[10] Проектирование АЛГОРИТМОВ И ИНТЕРФЕЙСОВ

[10.1] Общая схема работы

[10.2] Математическая модель робота

[10.2.1]   Краткий обзор двухколесных роботов

[10.2.2] Уравнения, описывающие положение колес робота

[10.2.3] Уравнения, описывающие работу двигателей

[10.2.4] Общая система уравнений, описывающая движение робота

[10.2.5] Верификация математической модели

[10.2.6] Движение по прямой

[10.2.7] Вращение на месте

[10.2.8] Движение по окружности

[10.3] Алгоритм работы симулятора

[10.4] Разработка интерфейсов

[10.4.1] Структура файла для передачи экспериментальных данных в Mathсad

[10.4.2] Интерфейс для чтения экспериментальных данных в Mathсad.

[10.4.3] Интерфейс настроек симулятора

[10.4.4] Интерфейс симулятора

[11]
Заключение

[12]
СПИСОК ЛИТЕРАТУРЫ

[13]
ПРИЛОЖЕНИЯ

[13.1] Листинг программы на Dark Basic

[13.2]
Содержание файла настроек

[13.3]
Плакаты к дипломной работе


ВВЕДЕНИЕ

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

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

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

Принципиальное отличие мозга от современных компьютеров заключается в том, что мозг можно рассматривать как параллельную вычислительную структуру (ВС), в то время как современные микропроцессоры явлются последовательными ВС. В соответствии с эмперическим  законом Мура, мощность вычислительных устройств растет экспоненциально, и эта тенденция сохраняется уже около 50 лет. Так же неуклонно уменьшается их стоимость, что позволило перейти к использованию искусственных нейронных сетей (ИНС), реализуемых на последовательных ВС.   

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

 Дипломная работа посвящена разработке программно-инструментальной среды ‘Phonix-2’, в первую очередь ориентированной на проведение исследований в области использования ИНС в качестве систем управления мобильным автономным объектом, использующим для ориентации в пространстве изображения с бортовых видеокамер.  Более конкретно, разрабатываемая система ориентирована на ИНС, настраиваемых по методике “обучение с учителем”.

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

На рис. В.1. показана блочная диаграмма, иллюстрирующая форму обучения с учителем.

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

Рис. В.1. Блочная диаграмма обучения с учителем

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

Парадигма обучения с учителем применительно к системе управления автономного мобильного робота, реализованной на базе нейронной сети,    исследовалась в проекте СКБ ГУАП «Феникс-1», результаты которого опубликованы в сборнике докладов [2] .

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

Внешний вид робота и стуктура бортовой системы управления роботом Феникс-1 представлен на рис. В.2. Робот имеет два ведущих колеса с независимым приводом и оснащен web-камерой Creative для получения изображений размеров 320х240 пикселей с частотой 30 кадров/сек. и ноутбуком Toshiba (1.2 ГГц). Бортовая система управления обеспечивает возможность реализации как стандартных, так и нейросетевых алгоритмов управления.

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

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

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

Рис. В.2. Внешний вид робота и стуктура системы управления роботом Феникс-1

Рис. В.3. Система управления на одном нейроне

Модель нейронной сети (рис. В.3.) реализована в виде матрицы весов W, которая имеет размер m на n.  Эта матрица определяет зависимость m выходов управления от n входных сигналов с сенсоров. Для времени tk  отклик нейронной сети представляет собой вектор управления A(tk), который вычисляется по формуле:

где  

Si (tk ) – показания i-го датчика   в момент времени tk,

Ak (tk )  – сигнал управления по k-му каналу в момент времени tk,

Wi,j  – вес, определяющий вклад показаний  i-го датчика на сигнал управления по k-ому каналу управления.          

В векторно-матричных  обозначениях система В.1 компактно записывается в виде  

W * S(tk ) = A ( tk )               (В.2).

Элементы матрицы W представляют собой свободные параметры,  которые определяются на этапе обучения нейронной сети.

Процесс обучения происходит следующим образом – формируется вектор w, который состоит из неизвестных коэффициентов Wi,j матрицы W:

w  =  [W11, … W1n, W21, … W2n,   ……         Wm1, …  Wmn ]T

Схожим образом формируется вектор a:

a     =   [A1(t1) ..  Am(t1), A1(t2) ..  Am(t2),   …….          A1(tp) ..  Am(tp) ] T

Свободные параметр являются решением линейной системы уравнений S∙w = a, где S представляет собой разряженную матрицу, сформированную из показаний сенсоров:

Для получения корректного решения необходимо использовать регуляризацию Тихонова. В этом случае решением будет являться такой набор коэффициентов, при котором нормы ||S∙w – a|| и ||w|| будут минимальны:

F(w)  =  IISw-aII + gIIwII               (В.3).

Аналитечески решение выражается следующим образом:

W =  (ST S + g E) –1 ST a               (В.4).

Более подробно вопрос обучения нейронной сети рассмотрен в работе [3].

Матрица W определяется в ходе обучения, схема которого показана на рис. В.4.

Рис. В.4. Схема обучения через показ

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

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

Рис. В.5. Схематичное изображение кадра

 

Алгоритм нахождения отлонения D был реализован методом центра масс. В соответствии с этим методом положение полосы Nc  в измерительной области находится по формуле:

 (В.4),

где Nc – номер пикселя в центре области распознавания;

n – число пикселей в области распознавания;

Li – яркость i-го пикселя.

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

Для более точного определения положения в реальном проекте использовалось пять областей распознавания. На рис. В.6. приведено изображение с камеры робота. Области распознавания обозначены символами D1-D5.

Рис. В.6. Области распознавания на реальном кадре

В одной из серий проведенных экспериментов робот управлялся ПИД-регулятором по параметру D, рассчитанному для области D1. При этом записывались данные по всем измерительным полосам D1-D5, которые в дальнейшем использовались для расчета коэффициентов нейронной сети.

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

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

Еще до начала проекта было очевидно, что получение экспериментальных данных из реальной среды явлется дорогостоящим процессом. Для ежегодных международных робототехнических соревнований в МГУ им. Ломоносова по скоростному прохождению трассы используется полигон размером 6 на 10 метров со своеобразной шахматной текстурой. Создание подобного полигона в рамках ограничений проекта по ресурсам было невозможным.

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

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

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

          

Рис. 1.5. Внешний вид виртуального полигона

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

Результатом  дипломной работы является программно-инструментальная среда “Phoenix-2”, используемая в СКБ Государственного Университета Аэрокосмического Приборостроения в качестве инструмента для исследования систем управления на базе ИНС.

 


ПОСТАНОВКА ЗАДАЧИ

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

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

Как показал опыт,  накопленный в рамках проекта Феникс-1[2], представленного во введении  цели обучения  могут очень сильно различаться и видоизменяться в процессе обучения.  Несмотря на исследовательский характер проекта и небольшие размеры как робота, так и полигона, проведение даже одной серии экспериментов является трудоемким мероприятия.

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

Такая постановка подразумевает  решение ряда задач:

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

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

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

Управление задается с клавиатуры или джойстика – данные с этих контроллеров определяют напряжения на двигателях согласно математической модели

В качестве виртуальной среды используется плоский ненаклонный полигон произвольного размера с произвольной текстурой.   

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

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

Программно-инструментальная среда  должна обеспечивать взаимодействие со средой математического моделирования.

  1.  
    ОБЗОР СИМУЛЯТОРОВ РОБОТОВ И СИСТЕМ РАСПОЗНАВАНИЯ ОБРАЗОВ

  1.  Обзор робототехнических симуляторов

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

Одной из первых программ такого рода был Autonomous Micro Robot Soccer Simulator, которая была больше похожа на игрушку, чем на серьезную программу, — модель поведения робота выбиралось из нескольких вариантов без возможности редактирования.

Более серьезным программным продуктом является ARC (Autonomous Robot Controller), разработанный Ксави Маркезом. Эта программа не позволяет моделировать своего собственного робота от начала до конца, но дает возможность проверить поведение робота в определенном окружении при наличии тех или иных датчиков.

Этот симулятор обеспечивает возможность задания типа, количества и мест расположения датчиков, реакцию на их сигналы, окружение робота (стены, прозрачные объекты, линии на полу, координатные точки и т.д.). К недостаткам можно отнести двухмерность (вид сверху) и ограничение на тип робота (только два колеса). Следует отметить компактность кода, реализующего симулятор, размер которого  примерно  750 Кбайт.

Eще одна программа такого рода MOBOTSIM. В сравнении с ARC этот симулятор немного удобнее из-за встроенного интерпретатора языка Sax Basic, что позволяет задавать параметры робота непосредственно в симуляторе.

Как показал анализ наиболее близким  аналогом программно-инструментальной среды является программный продукт  Electric Drive Train Simulator.  Этот программный продукт обеспечивает возможность конструирования робота  и по целому ряду свойств  близок к задачам дипломного проекта.

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

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

Таблица 1.1. Варианты колесных схем

Компоненты оборудования робота определяются рядом необходимых  параметров.  На рис. 1.1. показана вкладка Motor, с помощью  которой  выбирается  электродвигатель для робота. Есть возможность загрузки описаний наиболее популярных моделей электродвигателей, а так же создание собственных описаний с использованием внутренней утилиты Motor Editor. Остальные параметры настраиваются схожим образом.

Список параметров электродвигателей краткими описаниями и переводами приведен ниже:

Рис. 1.1. Вкладка Motor

Name – название или номер электродвигателя

Manufacturer – название компании, производителя электродвигателя

Weight/mass – вес или масса электродвигателя

Nominal voltage – номинальное напряжение

Armature resistance – сопротивление обмотки

Stall current – сила тока при номинальном напряжении

Torque constant – вращающий момент при подаче напряжения в 1 В

Stall torque – вращающий момент блокированного ротора при подаче номинального напряжения

Angular-velocity constant – угловая скорость ротора при подаче напряжения в 1 В

No-load angular velocity – угловая скорость ротора без нагрузки при номинальном напряжении

No-load current – сила тока при номинальном напряжении 

Peak Power – максимальная генерируемая мощность, которую может выработать электродвигатель. Пик мощности обычно достигается при 50% тока при заблокированном роторе и 50% частоты вращения без нагрузки.

Peak efficiency – коэффициент полезного действия

Rotor Inertia – инерция вращения ротора электродвигателя

Notes – второстепенная информация об электродвигателе (размер мотора,  фирмы-поставщики)

Motors in series – число моторов, соединённых последовательно. Предполагается, что все валы электродвигателей соединены механически.

Motors in parallel – число моторов, подключенных параллельно. Предполагается, что все валы электродвигателей соединены механически.

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

Рис. 1.2. Вкладка Test drive display

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

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

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

Данный обзор выполнен на основании фундаментальных монографий  [3], [4].

 

  1.  Введение

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

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

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

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

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

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

В 50-60-е годы ХХ века на основе массы работ появилась теория статистических решений. В результате этого появления найдены алгоритмы, обеспечивающие отнесение нового объекта к одному из заданных классов, что явилось началом планомерного научного поиска и практических разработок. В рамках кибернетики начало формироваться новое научное направление, связанное с разработкой теоретических основ и практической реализации устройств, а затем и систем, предназначенных для распознавания объектов, явлений, процессов. Новая научная дисциплина получила название "Распознавание образов".

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

В последующем математический аппарат теории распознавания расширился за счет применения:

- разделов прикладной математики; теории информации;

- методов алгебры логики;

- математического программирования и системотехники.

  1.  Определения

Распознавание образов (объектов) – задача идентификации объекта или определения каких-либо его свойств по его изображению (оптическое распознавание) или аудиозаписи (акустическое распознавание) и другим характеристикам.

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

Методика отнесения элемента к какому-либо образу называется решающим правилом. Еще одно важное понятие – метрика – способ определения расстояния между элементами универсального множества. Чем меньше это расстояние, тем более похожими являются объекты (символы, звуки и др.) – то, что мы распознаем. Обычно элементы задаются в виде набора чисел, а метрика – в виде функции. От выбора представления образов и реализации метрики зависит эффективность программы, один алгоритм распознавания с разными метриками будет ошибаться с разной частотой.

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

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

  1.  Методы распознавания образов

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

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

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

  1.  Общая характеристика задач распознавания образов и их типы

Общая структура системы распознавания и этапы в процессе ее разработки показаны на рис. 1.3.

Рис. 1.3. Структура системы распознавания

Задачи распознавания имеют следующие характерные этапы:  

  •  преобразование исходных данных к виду, удобному для распознавания;
  •  собственно распознавание (указание принадлежности объекта определенному классу)

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

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

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

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

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

В существующих системах распознавания есть две наиболее сложные проблемы:

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

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

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

Применительно к проекту Феникс-2 разрабатываемый инструментарий должен был оеспесить возможность исследования  алгоритмов распознавания применительно к кругу задач очерченных выше для трехмерных объектов.  

  


  1.  ВЫБОР ПРОГРАММНОГО И АППАРАТНОГО ОБЕСПЕЧЕНИЯ

  1.    Выбор программного инструментария

  1.  Требования к инструментарию

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

Отдельно стоит отметить операционную систему – для разработки была выбрана MS Windows XP как наиболее доступная и простая в использовании. Поэтому и среда математического моделирования, и среда для разработки трехмерного симулятора должны работать под управлением данной операционной системы.

  1.  Выбор среды математического моделирования 

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

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

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

Приложение идеально подходит для обучения, вычислений и инженерных расчётов. Открытая архитектура приложения в сочетании с поддержкой технологий .NET и XML позволяют легко интегрировать Mathcad практически в любые ИТ-структуры и инженерные приложения. Программа очень популярна среди инженеров, она проста в использовании и не требует специальных навыков программирования. Документация и справочная система Mathcad позволяют быстро освоить приложение.

  1.  Выбор среды для разработки трехмерного симулятора

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

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

Как показал анализ для решения поставленных задач и имеющихся возможностей  был выбран пакет Dark Basic Professional от компании The Game Creators, опыт использования которого был накоплен при реализации проекта Феникс-1[2].

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

Таблица 2.1 Возможности Dark Basic Professional

Работа в трехмерном пространстве

Работа в двумерном пространстве

Binary Space Partitioning (BSP)

Potential Visibility Set

Pixel & vertex shaders

Real time shadows

True reflections

Lights

Matrices

Advanced terrain

Multiple camera views

Particle system

Lightning fast 2D sprites

Polygon collision detection

Bump mapping

Light mapping

Environment mapping

Multitexturing

Bone based animations

Cartoon shading

Rainbow rendering

Low level access of object data

Vector and matrix manipulation

Super-Fast 2D Sprites

Mirror, Stretch and Blur

Fade, Transparency and Rotate

Screen-Sized sprites

Fast Collision

Animated Sprites

Gamma Control

Scale Sprites

2D Drawing Functions

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

На выходе можно получить выполняемый файл, который полностью совместим с операционной системой MS Windows Xp.

  1.  Выбор аппаратного обеспечения

Аппаратные требования взяты из соответствующей спецификации для Dark Basic Professinal как наиболее ресурсоемкой части программного обеспечения. Они изложены в таблицах 2.1. и 2.2.

Таблица 2.1. Минимальные аппаратные требования

Процессор:

300 MHz Pentium II Processor

Память:

64 MB of Ram

Скорость CD привода:

4x Speed CD-Rom Drive

Жесткий диск:

400 MB of hard disk space

Графическая карта:

Fully DirectX compatible Graphics Card with 64 MB Memory or more and Hardware 3D Acceleration

Звуковая карта:

Direct X compatible Sound Card

Устройства ввода:

клавиатура и мышь

Таблица 2.2. Рекомендуемые аппаратные требования

Процессор:

733 MHz Pentium III Processor и выше

Память:

1024 MB

Скорость CD привода:

16x и больше

Жесткий диск:

400 MB of hard disk space

Графическая карта:

Fully DirectX compatible Graphics Card with 64 MB Memory or more and Hardware 3D Acceleration

Звуковая карта:

Direct X compatible Sound Card

Устройства ввода:

клавиатура, мышь, джойстик


  1.  Проектирование АЛГОРИТМОВ И ИНТЕРФЕЙСОВ 

Общая схема работы

Общая схема работы представлена на рис. 3.1. Общая математическая модель, реализованная как в Mathcad, так и в Dark Basic, является ключевым элементом всей системы. На данный момент это модель двухколесного робота, однако очевидно, что можно смоделировать любую другую систему и реализовать ее схожим образом.

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

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

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

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



Математическая модель робота

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

  1.    Краткий обзор двухколесных роботов 

Фирма ActivMedia Robotics выпускает четыре серии двухколесных роботов:

PowerBot (рис. 3.2.) – самый крупный робот, при весе 120 кг (с аккумуляторами) и габаритах 85х65х43 см может нести на себе до 100 кг оборудования

PeopleBot – довольно высокое и не слишком устойчивое сооружение (112 см в высоту)

Pioneer 2-DXe, Pioneer 2-AT – это небольшие роботы весом около 30 кг

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

Рис. 3.2. Робот PowerBot

Компания MrRobot предлагает Talrik Junior (TJ) (рис. 3.3.). Диаметр собранного TJ — 7 дюймов, высота — 3,5 дюйма. Корпус изготавливается или из пятислойной березовой фанеры, или из черного пластика. Передвигается робот на двух 2,75-дюймовых колесах и заднем опорном ролике. Два высококачественных сервомотора установлены ниже платформы, чтобы управлять каждым колесом непосредственно. В качестве контроллера используется плата MSCC11E2 на основе процессора MC68HC11 (256 байт RAM и 2 Кбайт EEPROM). Доступные языки: Imagecraft C (коммерческий транслятор C), ассемблеры MC68HC11, sBASIC, tinyFORTH, и TJ Mindstorms (все ПО свободное).

Кроме того, Talrik Junior оборудован двумя инфракрасными детекторами и двумя инфракрасными излучателями. Плата MSCC11E2A обладает достаточно широкими возможностями ввода-вывода, чтобы существенно увеличить количество датчиков TJ.

Рис. 3.3. Робот TJ Pro

Фирма K-Team предлагает недорогую модель Khepera (рис.3.4) (процессор Motorola 68331, 25 MГц, датчики, моторы).

Рис. 3.4. Робот Khepera

  1.  Уравнения, описывающие положение колес робота

Движение двухколесного робота зависит от оборотов левого и правого колеса. При различных скоростях колес робот начинает двигаться по окружности с центром в точке, описываемой радиус-вектором Rc. Радиус поворота – длина вектора Rr. Графически модель представлена на рис. 3.5.

 

Рис. 3.5. Графическое представление модели робота

Дополнительные параметры робота:

Dr – диаметр колеса

l – расстояние между колесами

ω1 – угловая скорость левого колеса

ω2 – угловая скорость правого колеса

φ – угол, определяющий ориентацию робота

Сначала найдем φ. Длина дуги, по которой проехало правое колесо:

Зная длину дуги, нетрудно вычислить φ, поделив полученное выражение на длину окружности, по которой вращается колесо.

где |Rr(t)| + l/2 - радиус вращения правого колеса.

Аналогичным образом  φ определяется для левого колеса, необходимо лишь изменить радиус вращения:

Из выражений для φ можно выразить |Rr|, приравняв правые части:

Подставив полученное выражение для |Rr| в любое из выражений для φ и произведя упрощение, получаем конечное выражения для φ:

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

Так же есть необходимость введения матрицы поворота двумерного вектора на угол φ T(φ):

Поскольку время t мало, можно рассматривать перемещение робота как движение  по дуге с постоянным радиусом |Rr|. Центр дуги задается радиус-вектором Rр. В этом случае выполняется равенство:

Из данного равенства можно выразить Rr(t):

На данном этапе необходимо сделать подстановку |Rr| и φ, а так же произвести упрощение выражения с учетом малости φ (sin(∆φ) = ∆φ, cos(∆φ) =1). После этого можно разложить выражение для вектора Rr(t) по компонентам х и у и представить его в дифференциальной форме: 

  1.  Уравнения, описывающие работу двигателей

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

Двигатель представляет собой электрическую цепь с общим сопротивлением R, в которой есть катушка с индуктивностью L. Напряжение в цепи U(t) меняется в зависимости от показаний датчиков.

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

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

где k1, k2 – коэффициенты, определяемые экспериментальным путем.

  1.  Общая система уравнений, описывающая движение робота

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

Вектор перемещения центра робота Rr(t) необходимо раскладывать по двум координатам. Работа двух двигателей описывается с помощью четырех уравнений – по два на токи и на обороты колес. Поэтому общее количество уравнений в модели семь:

(3.1)

Для описания эволюции робота для системы  обыкновенных дифференциальных уроавнений  ставилась задача Коши (3.1) [5].  

Применительно к модели реализованной в Mathсad  требоуется задание начальных условий, а именно:

  •  положение робота (ориентация, координаты X и Y);
  •  начальных скорость вращения колес;
  •  начальные токи.

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

Для решения задачи Коши  использовался метод Рунге-Кутта [5], который реализован в виде отдельной функции в этом пакете.

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

  1.  Верификация математической модели

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

  •  движение по прямой – напряжения на обоих двигателях одинаковы
  •  вращение на месте – напряжения равны по модулю и противоположны по знаку
  •  движение по окружности – напряжения на двигателях разные

Поверка была осуществлена также в среде Mathсad.

  1.  Движение по прямой

Робот стоит в центре координат, повернут на 45 градусов, на двигатели подается по 1,5 вольта.

Графики, описывающие состояние системы, представлены на рис. 3.6., 3.7, 3.8.

  1.  Вращение на месте

Робот стоит в центре координат. На двигатели подается одинаковое по значению и разное по знаку напряжения в 1,5 вольта.

Графики, описывающие состояние системы, представлены на рис. 3.9., 3.10., 3.11.

  1.  Движение по окружности

Робот стоит в центре координат. На один их двигателей подается 1,5 вольта, на другой 0,1 вольта.

Графики, описывающие состояние системы, представлены на рис. 3.11., 3.12., 3.13.

  1.  Алгоритм работы симулятора

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

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

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

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



  1.  Разработка интерфейсов

  1.  Структура файла для передачи экспериментальных данных в Mathсad

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

Таблица 3.1. Структура файла с экспериментальными данными

  1.  
  1.  
  1.  
  1.  
  1.  
  1.  
  1.  
  1.  
  1.  
  1.  
  1.  

Mr#

Dw#

l#

U1#

U2#

Umax#

phi#

RcX#

RcY#

L1#

  1.  

L2#

R1#

R2#

k11#

k12#

k21#

k22#

X(1)

X(2)

X(3)

  1.  

X(4)

X(5)

X(6)

X(7)

10

time

RcX

RcY

phi

w1

w2

I1

I2

U1

U2

N

В первых десяти строках массива находится информация о настройках эксперимента из файла настроек. После десятой строки в массиве содержится информация непосредственно о ходе эксперимента.

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

  1.  Интерфейс для чтения экспериментальных данных в Mathсad.

Полученные в ходе эксперимента данные обрабатываются в среде Mathсad. На рис. 3.15.


Рис. 3.15. Обработка результатов эксперимента в среде MathCad

  1.  Интерфейс настроек симулятора

Настройки симулятора хранятся в файле в формате INI. Это очень распространенный формат данных, который имеет крайне простую структуру. Он поддерживается операционной средой MS Windows на уровне API – для чтения и записи файлов в формате INI есть стандартные системные процедуры. Так же эти файлы нередко используются в различных программах для хранения настроек.

Формат файла представлен ниже:

; некоторый комментарий

 

[Section1]

; комментарий о разделе

var1 = значение_1 ; иногда допускается комментарий к отдельному параметру

var2 = значение_2

 

[Section2]

var1 = значение_1

var2 = значение_2

 

; иногда позволяется перечислять несколько значений через запятую

[Section3]

var1 = значение_1_1, значение_1_2, значение_1_3

var2 = значение_2

INI файл может содержать:

  •  пустые строки;
  •  комментарии — от символа «;» (точка с запятой) до конца строки;
  •  заголовки разделов — строки, состоящие из названия раздела, заключённого в квадратные скобки «[ ]»;
  •  значения параметров — строки вида «имя_параметра = значение».

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

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


Рис. 3.16. INI файл с настройками симулятора (Notepad++)

  1.  Интерфейс симулятора

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

Внешний вид симулятора показан на рис. 3.17.

Рис. 3.17. Окно симулятора

 


Заключение 

Результатом  дипломной работы является программно-инструментальная среда    “PHOENIX-2” , используемая в СКБ Государственного Университета Аэрокосмического Приборостроения в качестве инструмента для исследования нейронных систем управления.

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


СПИСОК ЛИТЕРАТУРЫ

  1.  Саймон Хайкин Нейронные сети: полный курс. 2-е исправленное издание, 2006
  2.  сборник докладов Пятьдесят девятой Международной студенческой научно-технической конференции ГУАП, С-Пб, 2006
  3.  Дэвид Формайс, Жан Понс Компьютерное зрение. Современный подход, 2004
  4.  Уильям Прэтт Цифровая обработка изображений, 1982
  5.  Крылов В.И., Бобков В.В., Монастрырский П.И. Вычислительные методы высшей математики, 1975
  6.  Игнатьев М.Б. Основные положения по дипломному проектированию для специальностей 2201, 2204, 2016 / М.Б. Игнатьев, О.В. Мишура, А.В. Гордеев, Л.Г. Ахутина и др.: Санкт-Петербургский государственный университет аэрокосмического приборостроения. 1999, 45 с.
  7.  Прогнозирование элементов бизнес-плана проектов: методические указания к выполнению дипломного проекта / под ред. д.э.н. проф. В.Б. Сироткина; Санкт-Петербургский государственный университет аэрокосмического приборостроения. 2002, 63 с.
  8.  Безопасность жизнедеятельности, промышленная и экологическая безопасность: методические указания к выполнению дипломного проекта / под ред. к.т.н. доц. А.И. Панферова; Санкт-Петербургский государственный университет аэрокосмического приборостроения. 2001, 34 с.
  9.  Инернет-источник http://www.ferra.ru
  10.  Инернет-источник http://www.enigmaindustries.com
  11.  Инернет-источник http://www.wikipedia.com
  12.  Инернет-источник http://www.artkis.ru/neural_network.html
  13.  Инернет-источник http://www.mobotsoft.com 
  14.  Инернет-источник http://www.solarbotics.com
  15.  Инернет-источник http://thegamecreators.com
  16.  Инернет-источник http://ru.wikipedia.org


ПРИЛОЖЕНИЯ

Листинг программы на Dark Basic

REM Project: Robot

REM Created: 21.09.2007 14:58:49

REM

REM ***** Main Source File *****

REM

rem ===========================================================

rem sync

  sync on : sync rate 50

rem ===========================================================

rem display mode

  rem set display mode 800,500,16

rem ===========================================================

rem joystick check and prepare

  rem Control device check

  perform checklist for control devices

  rem Chooses first control devices if found

  if checklist quantity()=0

     flagJoystick = 0

  else

     flagJoystick = 1

     set control device checklist string$(1)

  endif

rem ===========================================================

rem Paramaters and 3d initilization

gosub sParams

gosub s3d

gosub sFlagInit

rem ===========================================================

rem Main Cycle

do

  sync

  gosub sControl

  gosub sEuler

  gosub sRobotPos

  gosub sFlagProcessing

  gosub sHUD

loop

rem ===========================================================

rem HUD

sHUD:

rem system

  set cursor 0,0

  for i=1 to ARRAY COUNT(X(0)) step 1

     print "X", i, " = ", FloatToStr(X(i),3)

  next i

  print " "

  print " Joystick X ", control device x()

  print " Joystick Y ", control device y()

  print " "

  print "U1 ", U1#

  print "U2 ", U2#

  set cursor 900, 650

  print "FPS ", screen fps()

rem status

  print ""

  if flagState = 0

     print "State: Free Ride"

  endif

  if flagState = 1000

     print "State: Stop"

  endif

  if flagState = 100

     print "State: Recording"

  endif

  if flagState = 200

     print "State: Replaying"

  endif

rem robot params

  set cursor 800, 0

  print "Robot mass: ", Mr#

  set cursor 800, 15

  print "Wheel diameter: ",Dw#

  set cursor 800, 30

  print "Wheel distance: ", l#

  set cursor 800, 45

  print "Max U: ", Umax#

  set cursor 800, 60

  print "L1: ", L1#

  set cursor 800, 75

  print "L2: ", L2#

  set cursor 800, 90

  print "R1: ", R1#

  set cursor 800, 105

  print "R2: ", R2#

rem Keys info

  set cursor 350,700

  print "Press C button to record, X button to stop"

rem Task

 set cursor (512-len(task$)*5), 0

 print task$

rem for Debug

 set cursor (512-len(task$)*5), 50

return

rem ===========================================================

rem Euler

sEuler:

rem accuracy

h# = 0.01

Dim Xtmp(7) AS DOUBLE FLOAT

rem Xtmp count ( vector X myltiplied on system )

Xtmp(1) = ((X(4)+X(5))/(4*l#))*Dw#*(sin(X(3)*180)*(P1x# - P2x#) + cos(X(3)*180)*(P1y# - P2y#))

Xtmp(2) = ((X(4)+X(5))/(4*l#))*Dw#*(-cos(X(3)*180)*(P1x# - P2x#) + sin(X(3)*180)*(P1y# - P2y#))

Xtmp(3) = Dw#*(X(5)-X(4))/(2*l#)

Xtmp(4) = (-k11#/Mr#)*X(4) + (k12#/Mr#)*X(6)

Xtmp(5) = (-k21#/Mr#)*X(5) + (k12#/Mr#)*X(7)

Xtmp(6) = -R1#*X(6)/L1# + U1#/L1#

Xtmp(7) = -R2#*X(7)/L2# + U2#/L2#

rem result as sum X and Xtmp multiplied on step h

for i=1 to 7 step 1

     X(i) = X(i) + Xtmp(i)*h#

next i

rem result

return

rem ===========================================================

rem ===========================================================

rem Paramaters Init

sParams:

rem dll load

load dll "kernel32.dll", 1

Dim X(7) AS DOUBLE FLOAT

local returnval$

rem Config.ini reading

rem Mechanic Params

 call dll 1,"GetPrivateProfileStringA","Mechanic","Mr","0",returnval$,1024,"d:\config.ini"

 Mr# = StrToFloat(returnval$):returnval$=""

 call dll 1,"GetPrivateProfileStringA","Mechanic","Dw","0",returnval$,1024,"d:\config.ini"

 Dw# = StrToFloat(returnval$):returnval$=""

 call dll 1,"GetPrivateProfileStringA","Mechanic","l","0",returnval$,1024,"d:\config.ini"

 l# = StrToFloat(returnval$):returnval$=""

 call dll 1,"GetPrivateProfileStringA","Mechanic","phi","0",returnval$,1024,"d:\config.ini"

 phi# = StrToFloat(returnval$):returnval$=""

 call dll 1,"GetPrivateProfileStringA","Mechanic","RcX","0",returnval$,1024,"d:\config.ini"

 RcX# = StrToFloat(returnval$):returnval$=""

 call dll 1,"GetPrivateProfileStringA","Mechanic","RcY","0",returnval$,1024,"d:\config.ini"

 RcY# = StrToFloat(returnval$):returnval$=""

rem Electric Params

 call dll 1,"GetPrivateProfileStringA","Electric","U1","0",returnval$,1024,"d:\config.ini"

 U1# = StrToFloat(returnval$):returnval$=""

 call dll 1,"GetPrivateProfileStringA","Electric","U2","0",returnval$,1024,"d:\config.ini"

 U2# = StrToFloat(returnval$):returnval$=""

 call dll 1,"GetPrivateProfileStringA","Electric","Umax","10",returnval$,1024,"d:\config.ini"

 Umax# = StrToFloat(returnval$)

 returnval$=""

 call dll 1,"GetPrivateProfileStringA","Electric","L1","0.01",returnval$,1024, "d:\config.ini"

 L1# = StrToFloat(returnval$):returnval$=""

 call dll 1,"GetPrivateProfileStringA","Electric","L2","0.01",returnval$,1024,"d:\config.ini"

 L2# = StrToFloat(returnval$):returnval$=""

 call dll 1,"GetPrivateProfileStringA","Electric","R1","0.1",returnval$,1024,"d:\config.ini"

 R1# = StrToFloat(returnval$):returnval$=""

 call dll 1,"GetPrivateProfileStringA","Electric","R2","0.1",returnval$,1024,"d:\config.ini"

 R2# = StrToFloat(returnval$):returnval$=""

rem Common Params

 call dll 1,"GetPrivateProfileStringA","Common","k11","2",returnval$,1024,"d:\config.ini"

 k11# = StrToFloat(returnval$):returnval$=""

 call dll 1,"GetPrivateProfileStringA","Common","k12","1",returnval$,1024,"d:\config.ini"

 k12# = StrToFloat(returnval$):returnval$=""

 call dll 1,"GetPrivateProfileStringA","Common","k21","2",returnval$,1024,"d:\config.ini"

 k21# = StrToFloat(returnval$):returnval$=""

 call dll 1,"GetPrivateProfileStringA","Common","k22","1",returnval$,1024,"d:\config.ini"

 k122# = StrToFloat(returnval$):returnval$=""

rem Task

 returnval$=""

 call dll 1,"GetPrivateProfileStringA","Task","task","No task provided",returnval$,1024,"d:\config.ini"

 task$=returnval$:returnval$ = ""

rem 3d

 call dll 1,"GetPrivateProfileStringA","3d","field_size_x","10",returnval$,1024,"d:\config.ini"

 field_size_x# = StrToFloat(returnval$):returnval$=""

 call dll 1,"GetPrivateProfileStringA","3d","field_size_z","10",returnval$,1024,"d:\config.ini"

 field_size_z# = StrToFloat(returnval$):returnval$=""

 call dll 1,"GetPrivateProfileStringA","3d","txt_path","0",returnval$,1024,"d:\config.ini"

 txt_path$=returnval$:returnval$=""

 call dll 1,"GetPrivateProfileStringA","3d","obj1_x","10",returnval$,1024,"d:\config.ini"

 obj1_x# = StrToFloat(returnval$):returnval$=""

 call dll 1,"GetPrivateProfileStringA","3d","obj1_y","10",returnval$,1024,"d:\config.ini"

 obj1_y# = StrToFloat(returnval$):returnval$=""

 call dll 1,"GetPrivateProfileStringA","3d","obj1_z","10",returnval$,1024,"d:\config.ini"

 obj1_z# = StrToFloat(returnval$):returnval$=""

 call dll 1,"GetPrivateProfileStringA","3d","obj1_size","10",returnval$,1024,"d:\config.ini"

 obj1_size# = StrToFloat(returnval$):returnval$=""

rem dll unload

 delete dll 1

rem vector X init

  X(1) = RcX#

  X(2) = RcY#

  X(3) = phi#

  X(4) = 0

  X(5) = 0

  X(6) = 0

  X(7) = 0

rem Wheels positions

  P1x# = -0.45*l#*cos(X(3)*180) + X(1)

  P1y# = -0.45*l#*sin(X(3)*180) + X(2)

  P2x# = 0.45*l#*cos(X(3)*180) + X(1)

  P2y# = 0.45*l#*sin(X(3)*180) + X(2)

return

rem ===========================================================

rem ===========================================================

rem Control from joystick or keyboard

sControl:

rem Joystick

if flagJoystick = 1

  trans_mul# = 45

  angle_mul# = 0.7

  if abs (control device y()) < 200

     U1# = 0

     U2# = 0

  else

    U1# = (-(0.001 - 1/abs(control device y())*0.2)*control device y())*trans_mul#

  endif

  if abs (control device x()) < 400

     U2# = U1#

  else

     U1# = (0.001 - 1/abs(control device x())*0.2)*control device x()*angle_mul#

     U2# = -U1#

  endif

rem Keyboard Control

else

  if upkey() = 1

     U1# = Umax#

     U2# = Umax#

  else

     U1# = 0

     U2# = 0

  endif

  if downkey() = 1

     U1# = -Umax#

     U2# = -Umax#

  endif

  if leftkey() = 1

     U1#=-Umax#*0.2

     U2#=-U1#

  endif

  if rightkey() = 1

     U1#=Umax#*0.2

     U2#=-U1#

  endif

endif

gosub sNewFlag

return

rem ===========================================================

rem ===========================================================

rem 3D init: field and robot construction

s3d:

  make matrix 1,field_size_x#,field_size_z#,1,1

  set matrix wireframe off 1

  set matrix 1,0,1,0,2,1,0,0

rem txt preparation

 load bitmap txt_path$,1

 get image 1,0,0,BITMAP WIDTH(1),BITMAP HEIGHT(1)

 delete bitmap 1

 prepare matrix texture 1,1,1,1

 returnval$=""

rem cam

  COLOR BACKDROP 0, RGB(0,0,255)

  set camera range 0.1, 100

  xrotate camera 0, 60

rem body

  make object cube 2, 100

  scale object 2, 0.8*l#, 0.25*Dw#, 0.8*Dw#

  position object 2, 0, Dw#*0.5, 0

rem wheel 1

  make object cylinder 3, 100

  set object cull 3, 0

  color object 3, 1

  scale object 3, Dw#, 0.1*l#, Dw#

  rotate object 3, 0, 0, 90

  LocalTurnLeft# = 0

  texture object 3,1

rem wheel 2

  make object cylinder 4, 100

  set object cull 4, 0

  color object 4, 1

  scale object 4, Dw#, 0.1*l#, Dw#

  rotate object 4, 0, 0, 90

  LocalTurnRight# = 0

  texture object 4,1

rem object creation/placing

  make object sphere 5, 1

  position object 5, 0.1*obj1_x#, 0.1*obj1_y#, 0.1*obj1_z#

  scale object 5, 10*obj1_size#, 10*obj1_size#, 10*obj1_size#

return

rem ===========================================================

rem ===========================================================

rem Applying new coordinates to robot

sRobotPos:

  position object  2, X(1), Dw#*0.5, X(2)

  yrotate object 2, -X(3)*180

  SET CAMERA TO FOLLOW 0, OBJECT POSITION X(2),OBJECT POSITION Y(2), OBJECT POSITION Z(2), OBJECT ANGLE Y(2), 1.5, 0.5, 1, 0

  W1x# = 0.45*l#*cos(X(3)*180) + X(1)

  W1y# = 0.45*l#*sin(X(3)*180) + X(2)

  W2x# = -0.45*l#*cos(X(3)*180) + X(1)

  W2y# = -0.45*l#*sin(X(3)*180) + X(2)

  position object 3, W1x#, Dw#/2, W1y#

  xrotate object 3, -X(3)*180

  LocalTurnLeft# = LocalTurnLeft# + X(4)

  rem turn object left 3, LocalTurnLeft#

  position object 4, W2x#, Dw#/2, W2y#

  xrotate object 4, -X(3)*180

  LocalTurnRight# = LocalTurnRight# + X(5)

  rem turn object left 4, LocalTurnRight#

return

rem ===========================================================

rem ===========================================================

rem Flags Initilizaton with descriptions

`flag flagState is used to describe the state of programm

`0 stands forfree ride

`100 stands for data record

`200 stands for replayng trajectory

`1000 stands for stop (playing and recording are stopped)

sFlagInit:

  flagState = 0

  flagFileOpen = 0

  frame_count = 0

return

rem ===========================================================

rem ===========================================================

rem actions according to the state

sFlagProcessing:

  rem rec

  if flagState = 100

     if flagFileOpen = 0

        rem file prep

        file_path$ ="d:\data.txt"

        if file exist(file_path$)

           print "Deleting old file..."

           delete file file_path$

        endif

        print "Writing new file..."

        if not file open(1)

           open to write 1, file_path$

        endif

        flagFileOpen = 1

        rem writting parameters

        string$ = FloatToStr(Mr#, 5)+" "+FloatToStr(Dw#,5)+" "+FloatToStr(l#,5)+" "+FloatToStr(U1#,5)+" "+FloatToStr(U2#,5)+" "+FloatToStr(Umax#,5)+" "+FloatToStr(phi#,5)+" "+FloatToStr(RcX#,5)+" "+FloatToStr(RcY#,5)+" "+FloatToStr(L1#,5);

        write string 1, string$

        string$ = FloatToStr(L2#, 5)+" "+FloatToStr(R1#,5)+" "+FloatToStr(R2#,5)+" "+FloatToStr(k11#,5)+" "+FloatToStr(k12#,5)+" "+FloatToStr(k21#,5)+" "+FloatToStr(k22#,5)+" "+FloatToStr(X(1),5)+" "+FloatToStr(X(2),5)+" "+FloatToStr(X(3),5);

        write string 1, string$

        string$ = FloatToStr(X(4), 5)+" "+FloatToStr(X(5),5)+" "+FloatToStr(X(6),5)+" "+FloatToStr(X(7),5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5);

        write string 1, string$

        rem empty strings

        string$ = FloatToStr(0, 5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5);

        write string 1, string$

        string$ = FloatToStr(0, 5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5);

        write string 1, string$

        string$ = FloatToStr(0, 5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5);

        write string 1, string$

        string$ = FloatToStr(0, 5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5);

        write string 1, string$

        string$ = FloatToStr(0, 5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5);

        write string 1, string$

        string$ = FloatToStr(0, 5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5);

        write string 1, string$

        string$ = FloatToStr(0, 5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5)+" "+FloatToStr(0,5);

        write string 1, string$

     else

     rem Recording data from vector X to external file

        time# = screen fps()

        time# = 1/time#

        time# = time#*frame_count

        set cursor 0,700

        print "Record time ", time#

        string$ = FloatToStr(time#, 5)+" "+FloatToStr(X(1),5)+" "+FloatToStr(X(2),5)+" "+FloatToStr(X(3),5)+" "+FloatToStr(X(4),5)+" "+FloatToStr(X(5),5)+" "+FloatToStr(X(6),5)+" "+FloatToStr(X(7),5)+" "+FloatToStr(U1#,5)+" "+FloatToStr(U2#,5)

        write string 1, string$

        inc frame_count

     endif

  endif

  rem stop

  if flagState = 1000

     if (file open(1) = 1)

           close file 1

     endif

     flagFileOPen = 0

     frame_count = 0

     flagState = 0

  endif

return

rem ===========================================================

rem ===========================================================

rem ===========================================================

rem New Flag from Keyboard

sNewFlag:

  rem play

  if inkey$() = "z"

     flagState = 200

  endif

  rem stop

  if inkey$() = "x"

     flagState = 1000

  endif

  rem record

  if inkey$() = "c"

     flagState = 100

  endif

return

rem ===========================================================

function FloatToStr (input_float#, accuracy)

  input_integer = input_float#

  input_float# = input_float# - input_integer

  out_string$ = str$(input_integer) + "."

  for i=1 to 5 step 1

     input_float# = input_float#*10

     buf = abs(input_float#)

     input_float# = input_float# - buf

     out_string$ = out_string$ + str$(buf)

  next i

endfunction out_string$

function StrToFloat(input_string$)

 result# = 0

 result_int# = 0

 result_flt# = 0

 power = 0

 i = 1

 while (mid$(input_string$,i)<>".") and (i < len(input_string$) + 1)

  result_int# = result_int#*10 + val(mid$(input_string$,i))

  i = i + 1

 endwhile

 i = i + 1

 while i < len(input_string$) + 1

  result_flt# = result_flt#*10 + val(mid$(input_string$,i))

  i = i + 1

  power = power + 1

 endwhile

 result# = result_int# + result_flt#/(10^power)

endfunction result#


Содержание файла настроек

;механические параметра робота

[Mechanic]

;начальный угол (ориентация)

phi=0

;масса

Mr=2.5

;диаметр колес

Dw=0.3

;расстояние между колесами

l=0.5

;положение цента Х,У

RcX=0

RcY=0

;Электрические параметры робота

[Electric]

;максимальное напряжение

Umax=10

;начальные напряжения на двигателях

U1=0

U2=0

;индуктивности двигателей

L1=0.01

L2=0.01

;сопротивления двигателей

R1=0.1

R2=0.1

[Common]

;коэффициенты, определяющие инерцию системы

k11=2

k12=1

k21=2

K22=1

[Task]

;задача, которую надо выполнить

task=Ride Around

[3d]

;размер поля

field_size_x=10

field_size_z=10

;текстура пола

txt_path=d:\txt.jpg

;положение и размер первого объекта

obj1_x=5;

obj1_y=0;

obj1_z=5;

obj1_size=1;


Плакаты к дипломной работе







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

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

Постановка задачи

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

Цель работы

Компьютерная модель 

автономного робота Phoenix 

Параметры среды

Электрические параметры робота

Файл настроек

Механические параметры робота

Многослойная линейная нейронная сеть

Общая математическая модель

Управление

Траектория движения

Джойстик

Клавиатура

Rr(t)

l

Dw

φ

∆φ

Rc (t+∆t)

-

+

Сигнал ошибки

Вектор, описывающий состояние среды

Нейронная сеть

читель

Среда

Изображения с виртуальных камер

Dark Basic

Результаты эксперимента

S =

 S1(t1) S2(t1) ..  Sn(t1)     0   ….. ………………..… ……………………………        0          

 0        .. …    0              S1(t1) S2(t1) ..  Sn(t1)   0   ……………………………..         0        

                  …   ……         …  …                …   ……     …           …   …     ….

 0  ……………………………………………………… …….0    S1(t1) S2(t1) ..   Sn(t1)

           

S1(t2) S2(t2) ..  Sn(t2)     0       …… …………………………………………….         0            

 0      ……..         0       S1(t2) S2(t2) ..  Sn(t2)     0  ………………………………        0      

                  …   ……         …  …                …………………           ………..  

0 ……………………………………………………… …….0    S1(t2) S2(t2)  ..     Sn(t2)

………………………………………………………………………………………….         

 S1(tp) S2(tp) ..  Sn(tp)     0       …… …………………………………………………  0

 0        ……       0          S1(tp) S2(tp) ..  Sn(tp)    0  ……………………………… …. 0  

         …   ……         …  …                …………………           ………..

  0     …………………………………………………………….   S1(tp) S2(tp) ..   Sn(tp)

(В.1)

a(tk)

s(tk)

Рис. 3.14. Укрупненный алгоритм работы симулятора

Выход?

Запись в файл

Режим

записи?

Вычисление вектора состояния системы

Опрос устройств управления

Иницилизация вектора состояния системы

Создание

робота

Создание

3d окружения

Чтение параметров из INI файла

 Начало

Выбор устройства управления

Конец

да

нет

да

Математическая модель линейной нейронной сети

Отклонение D

Рис. 3.11. График движения центра робота

X, м

Rc (t)

Y, м

Сила тока, мА

Рис. 3.13. Токи в двигателях

Время, с

Рис. 3.12. Скорость вращения колес

Rr(t+∆t)

Обороты, 1/с

Контрастная полоса

Измерительная область

Ось, проходящая через центр робота 

Rr(t)

Rp

Сенсоры

(входной вектор)

Управляющее воздействие

(отклик сети)

W

Am

Ak

A1

Sn

Si

Мосты управления двигателями

RS-232

Контроллер

ASK Lab

Датчики числа оборотов

Ноутбук

Фактический отклик

Web-камера

Желаемый отклик

Сила тока, мА

Рис. 3.11. Токи в двигателях

Время, с

Рис. 3.7. Скорость вращения колес

Время, с

Рис. 3.10. Скорость вращения колес

Время, с

Обороты, 1/с

Рис. 3.9. График движения центра робота

X, м

Y, м

Сила тока, мА

Рис. 3.8. Токи в двигателях

Время, с

Обороты, 1/с

Рис. 3.6. График движения центра робота

X, м

Y, м

S1

=

*

A1(tk )

A2  (tk )

……..

Am(tk )

S1(tk )

S2 (tk )

.......

Sn(tk )

W11    W12   W13  ….W1 i …..   W1n

W21    W22   W23  ….W2 i …..   W2n

……………………………….

Wm1    Wm2   W23  ….W2 i ….. Wmn

Векторы управления оператора

A1(Tp)

…….

Am(Tp)

A1(T2)

…….

Am(T2)

A1(T1)

……

Am(T1)

Обучающие данные с сенсоров

S1(Tp)

S2(Tp)

…….

Sn(Tp)

S1(T2)

S2(T2)

……

Sn(T2)

S1(T1)

S2(T1)

…….

SNs(T1)

Данные, собранные во время обучения

Реальный сигнал управления a(t)

Обучающая

последовательность

a(Tk)

( Ai(Tk)

i=1..Na )

Сформированный вектор w

ОПЕРАТОР

Обучающий интерфейс

W i

i=1..Nw

УЧИТЕЛЬ

Среда

Обучающая последовательность

 I (Tk) k=1….p

Данные с сенсоров

s(t)

Обучающие

s (Tk),  ( Si Tk),

i=1..Ns )

Внешний файл данных

Si (tk )

Параметры

эксперимента

MathCad

Рис. 3.1. Общая схема работы

Система управления на одном нейроне

Сенсоры

(входной вектор)

Управляющее воздействие

(отклик сети)

W

Am

Ak

A1

Sn

Si

S1

=

*

A1(tk )

A2  (tk )

……..

Am(tk )

S1(tk )

S2 (tk )

.......

Sn(tk )

W11    W12   W13  ….W1 i …..   W1n

W21    W22   W23  ….W2 i …..   W2n

……………………………….

Wm1    Wm2   W23  ….W2 i ….. Wmn

Системы управления на базе нейронной сети

F(w)  =  IIS∙w-aII + gIIwII

w =  (ST S + g E) –1 ST a        

Процесс обучения нейронной сети

S =

 S1(t1) S2(t1) ..  Sn(t1)     0   ….. ………………..… ……………………………        0          

 0        .. …    0              S1(t1) S2(t1) ..  Sn(t1)   0   ……………………………..         0        

                  …   ……         …  …                …   ……     …           …   …     ….

 0  ……………………………………………………… …….0    S1(t1) S2(t1) ..   Sn(t1)

           

S1(t2) S2(t2) ..  Sn(t2)     0       …… …………………………………………….         0            

 0      ……..         0       S1(t2) S2(t2) ..  Sn(t2)     0  ………………………………        0      

                  …   ……         …  …                …………………           ………..  

0 ……………………………………………………… …….0    S1(t2) S2(t2)  ..     Sn(t2)

………………………………………………………………………………………….         

 S1(tp) S2(tp) ..  Sn(tp)     0       …… …………………………………………………  0

 0        ……       0          S1(tp) S2(tp) ..  Sn(tp)    0  ……………………………… …. 0  

         …   ……         …  …                …………………           ………..

  0     …………………………………………………………….   S1(tp) S2(tp) ..   Sn(tp)

Векторы управления оператора

A1(Tp)

…….

Am(Tp)

A1(T2)

…….

Am(T2)

A1(T1)

……

Am(T1)

Обучающие данные с сенсоров

S1(Tp)

S2(Tp)

…….

Sn(Tp)

S1(T2)

S2(T2)

……

Sn(T2)

S1(T1)

S2(T1)

…….

SNs(T1)

Данные, собранные во время обучения

“Real “

Actor

Signal a(t)

Environment

Conditions

“Teaching”

Actor Set a(Tk)

( Ai(Tk)

i=1..Na )

Optimal Parameter

Set w

ОПЕРАТОР

Обучающий интерфейс

Parameterized Control System

W i

i=1..Nw

УЧИТЕЛЬ

Среда

Teaching

Set  I (Tk) k=1….p

Данные с сенсоров

s(t)

Обучающие

s (Tk),  ( Si Tk),

i=1..Ns )

Перемещение робота

Токи в двигателях

Верификация математической модели

Система дифференциальных уравнений и вектор начальных условий

Математическая модель робота

Y

Rr(t)

l

Dw

φ

∆φ

Rc (t+∆t)

Rc (t)

Rr(t+∆t)

Rr(t)

Rp

X

Параметры среды

Электрические параметры робота

Файл настроек

Механические параметры робота

Общая схема работы

Общая математическая модель

Управление

Траектория движения

Джойстик

Клавиатура

Изображения с виртуальных камер

Dark Basic

Результаты эксперимента

Внешний файл данных

Si (tk )

Параметры

эксперимента

MathCad

Окно симулятора

Результаты в Mathcad

Файл данных

Эксперименты

Для решения системы дифференциальных уравнений в среде Mathcad использовался метод Рунге-Кутта, который реализован в виде отдельной функции в этом пакете.

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

Соответствие с методом Рунге-Кутта была достигнута с помощью варьирования величины шага (точности).

Реализация математической модели

  •  Простота использования и удобство интерфейса
  •  Большое количество встроенных функций
  •  Возможность программирования
  •  Работа с внешними файлами
  •  Относительно невысокая стоимость
  •  Работа в операционной среде Windows XP

MathCad

  •  Встроенные функции для работы
    •  3d
    •  2d
    •  текст
    •  файлы
    •  операционная система
  •  Поддержка большинства современных графических форматов
  •  Поддержка внешних устройств управления – джойстики, рули
  •  Возможность использования внешних библиотек
  •  Развитая система технической поддержки
  •  Невысокая стоимость
  •  Простота использования и удобство интерфейса
  •  Работа в операционной среде Windows XP

Dark Basic Professional

Инструментарий




1. Основы горного производства1
2. Ведь через два года я уеду учиться
3. Тема- ПРИБЫЛЬ И ЕЕ ВИДЫ Исполнитель- Гр
4. .Stzreihe ist ein zusmmengesetzter Stz der mindestens us zwei Elementrs~tzen besteht
5.  г именуем в дальнейшем
6. Геодезия. Инженерная геодезия
7. Воздействие науки на человека двойственно
8. Задание к курсовой работе по информатике Дано- Балка прямоугольного сечения с размерами BH
9. Курс лекций по дисциплине «ФИНАНСЫ И КРЕДИТ»
10. Мир 1996 ББК 28