Компьютерная модель робота 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