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

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

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 04.05.2015
Размер файла 2,2 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

· положение робота (ориентация, координаты X и Y);

· начальных скорость вращения колес;

· начальные токи.

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

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

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

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

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

· движение по прямой - напряжения на обоих двигателях одинаковы

· вращение на месте - напряжения равны по модулю и противоположны по знаку

· движение по окружности - напряжения на двигателях разные

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

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

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

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

Размещено на http://www.allbest.ru/

1

Размещено на http://www.allbest.ru/

1

Размещено на http://www.allbest.ru/

1

3.2.7 Вращение на месте

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

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

Размещено на http://www.allbest.ru/

1

Размещено на http://www.allbest.ru/

1

Размещено на http://www.allbest.ru/

1

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

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

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

Размещено на http://www.allbest.ru/

1

Размещено на http://www.allbest.ru/

1

Размещено на http://www.allbest.ru/

1

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

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

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

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

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

Размещено на http://www.allbest.ru/

1

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

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

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

Таблица 3.1

Структура файла с экспериментальными данными

0

1

2

3

4

5

6

7

8

9

0

Mr#

Dw#

l#

U1#

U2#

Umax#

phi#

RcX#

RcY#

L1#

1

L2#

R1#

R2#

k11#

k12#

k21#

k22#

X(1)

X(2)

X(3)

2

X(4)

X(5)

X(6)

X(7)

10

time

RcX

RcY

phi

w1

w2

I1

I2

U1

U2

N

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

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

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

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

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

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

Настройки симулятора хранятся в файле в формате 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++)

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

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

Внешний вид симулятора показан на рис. 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#

otate 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;

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

Размещено на http://www.allbest.ru/

1

Размещено на http://www.allbest.ru/

1

Размещено на http://www.allbest.ru/

1

Размещено на http://www.allbest.ru/

1

Размещено на http://www.allbest.ru/

1

Размещено на http://www.allbest.ru/

1

Размещено на http://www.allbest.ru/

1

Размещено на Allbest.ru

...

Подобные документы

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

    дипломная работа [3,2 M], добавлен 04.08.2014

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

    курсовая работа [3,3 M], добавлен 22.12.2014

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

    курсовая работа [1,2 M], добавлен 20.05.2015

  • Проектирование базы данных для информационной системы "Грузоперевозки". Обследование предметной области. Анализ бизнес-процессов, программного и аппаратного обеспечения. Проектирование компонентов приложения и его структуры. Выбор средств реализации.

    курсовая работа [1,6 M], добавлен 21.04.2014

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

    курсовая работа [462,2 K], добавлен 15.01.2014

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

    дипломная работа [5,5 M], добавлен 10.05.2014

  • Теоретические основы распознавания образов. Функциональная схема системы распознавания. Применение байесовских методов при решении задачи распознавания образов. Байесовская сегментация изображений. Модель TAN при решении задачи классификации образов.

    дипломная работа [1019,9 K], добавлен 13.10.2017

  • История предприятия "Приднестровский Государственный Университет". Обзор аппаратного и программного обеспечения сети, используемого на предприятии. Инфологическое, логическое и физическое проектирование модели базы данных. Разработка основных алгоритмов.

    отчет по практике [886,6 K], добавлен 12.09.2012

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

    курсовая работа [444,6 K], добавлен 28.01.2013

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

    курсовая работа [81,7 K], добавлен 18.08.2014

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

    курсовая работа [469,1 K], добавлен 20.05.2014

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

    курсовая работа [3,0 M], добавлен 14.11.2013

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

    курсовая работа [588,7 K], добавлен 11.08.2017

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

    дипломная работа [555,3 K], добавлен 19.01.2017

  • Оптико-электронная система идентификации объектов подвижного состава железнодорожного транспорта. Автоматический комплекс распознавания автомобильных номеров. Принципы и этапы работы систем оптического распознавания. Особенности реализации алгоритмов.

    дипломная работа [887,3 K], добавлен 26.11.2013

  • Порядок автоматизации расчетов себестоимости и длительности программного обеспечения производственного предприятия. Выбор языка программирования и системы управления базами данных. Разработка алгоритмов расчета себестоимости программного обеспечения.

    дипломная работа [1,7 M], добавлен 13.06.2017

  • Проектирование программного средства "Автоматизированная система контроля и учета кабельных проводок на Нововоронежской АЭС-2". Выбор инструмента для создания программного обеспечения. Технические условия работы программы. Структура базы данных ПС.

    дипломная работа [4,4 M], добавлен 29.06.2012

  • Назначение, технические характеристики промышленного робота МП20. Режимы работы робота и кинематическая схема. Приводные электродвигатели. Элементы электроавтоматики. Алгоритм управления следящим цифроаналоговым приводом. Интерфейс станочной магистрали.

    курсовая работа [1,7 M], добавлен 15.04.2013

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

    дипломная работа [2,4 M], добавлен 11.04.2010

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

    лабораторная работа [274,4 K], добавлен 01.12.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.