Воспроизведение поведения человека, перестройка системы управления на примере обхода препятствий при попутном движении
Анализ функционирования известных систем управления движением. Связь динамического программирования с вариационным исчислением и принципом максимума. Синтез алгоритма безопасного движения речного транспорта. Цена предложения. Экономическая эффективность.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 07.02.2013 |
Размер файла | 1,3 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
rot --;
RotateImage (rot*2, "Pictures\\Ship_rotate\\Vstr_", PANEL_ONCOMING_OBJ);
}
}
if ((ONCOMING_OBJ_left <= 15) && (l < width/4)) {
l++;
SetCtrlAttribute (panelHandle, PANEL_ONCOMING_OBJ, ATTR_WIDTH, width-l*(3+velocity_second));
CanvasDrawBitmap (PANEL, PANEL_ONCOMING_OBJ, second, VAL_ENTIRE_OBJECT, MakeRect(0,-l*(velocity_second+3),VAL_KEEP_SAME_SIZE, VAL_KEEP_SAME_SIZE));
if (l == width/4) CanvasClear (panelHandle, PANEL_ONCOMING_OBJ, VAL_ENTIRE_OBJECT);
}
else {
ONCOMING_OBJ_left -= velocity_second+3;
SetCtrlAttribute (PANEL, PANEL_ONCOMING_OBJ, ATTR_LEFT, ONCOMING_OBJ_left);
}
distance_side = CTRL_OBJ_top - (ONCOMING_OBJ_top + height);
distance = ONCOMING_OBJ_left - (CTRL_OBJ_left + width);
if (distance >= 0)
SetCtrlVal (PANEL, PANEL_FWD_DIST, distance);
risk_threshold = (1 + 3 + 0.5*oncoming)*20;
SetCtrlVal (panelHandle, PANEL_RISK_2, risk_threshold);
risk = risk_function (CTRL_OBJ_top-CTRL_OBJ_top0, velocity_ctrl_side, distance/25, (height+ONCOMING_OBJ_top-ONCOMING_OBJ_top0)/25);
if (!Safety_System || (risk <= risk_max)) SetCtrlVal (PANEL, PANEL_RISK, risk);
if (distance < 100) SetCtrlAttribute (PANEL, PANEL_FWD_DIST, ATTR_FILL_COLOR, VAL_RED);
else if (distance < 200) SetCtrlAttribute (PANEL, PANEL_FWD_DIST, ATTR_FILL_COLOR, VAL_YELLOW);
else SetCtrlAttribute (PANEL, PANEL_FWD_DIST, ATTR_FILL_COLOR, VAL_GREEN);
if (risk > risk_max*2/3) SetCtrlAttribute (PANEL, PANEL_RISK, ATTR_FILL_COLOR, VAL_RED);
else if (risk > risk_max/3) SetCtrlAttribute (PANEL, PANEL_RISK, ATTR_FILL_COLOR, VAL_YELLOW);
else SetCtrlAttribute (PANEL, PANEL_RISK, ATTR_FILL_COLOR, VAL_GREEN);
if ((((vehicle == 0) && (distance <= -15)) || ((vehicle == 1) && (distance <= -45))) && (distance_side <= 0)&& (!activate)) {
tmr=0;
SetCtrlAttribute (PANEL, PANEL_TIMER, ATTR_ENABLED, 0);
SetCtrlAttribute (panelHandle, PANEL_Clr, ATTR_DIMMED, tmr);
SetCtrlAttribute (panelHandle, PANEL_Snos_vstr, ATTR_DIMMED, tmr || oncoming);
}
if (Safety_System && (((risk >= (0.9) * risk_max) && (!oncoming)) || ((risk >= (0.96) * risk_max) && (oncoming)))) {
SetCtrlAttribute (PANEL, PANEL_TEXTMSG, ATTR_VISIBLE, 1);
activate++;
}
if (ONCOMING_OBJ_left <= -100) {
tmr = 0;
SetCtrlAttribute (PANEL, PANEL_TIMER, ATTR_ENABLED, 0);
SetCtrlAttribute (panelHandle, PANEL_Clr, ATTR_DIMMED, tmr);
SetCtrlAttribute (panelHandle, PANEL_Snos_vstr, ATTR_DIMMED, tmr || oncoming);
}
}
if (activate) {
//velocity_ctrl = 2;
if ((CTRL_OBJ_top < 280) && (!done)) {
if (!(n%2))
if (vehicle == 1)
if (angle <= 10) {
angle +=4;
rot --;
RotateImage (angle, "Pictures\\Ship_rotate\\ctrl_", PANEL_CTRL_OBJ);
if ((!oncoming) && (rot >= 0)) RotateImage (rot*2, "Pictures\\Ship_rotate\\vstr_", PANEL_ONCOMING_OBJ);
if (angle >= 10) {
pos = 1;
n = -1;
}
}
CTRL_OBJ_top += 3;
SetCtrlAttribute (PANEL, PANEL_CTRL_OBJ, ATTR_TOP, CTRL_OBJ_top);
CTRL_OBJ_left += 2;
SetCtrlAttribute (PANEL, PANEL_CTRL_OBJ, ATTR_LEFT, CTRL_OBJ_left);
}
else {
done = 1;
SetCtrlAttribute (panelHandle, PANEL_TIMER, ATTR_INTERVAL, 0.02);
if (!(n%6)) {
if (vehicle == 1) {
if (pos == 1) {
if (angle == 0) pos = 2;
RotateImage (angle, "Pictures\\Ship_rotate\\ctrl_", PANEL_CTRL_OBJ);
angle -=4;
}
if (pos == 3) {
RotateImage (angle, "Pictures\\Ship_rotate\\ctrl_", PANEL_CTRL_OBJ);
if (angle == -12) pos = 4;
angle -=4;
}
if ((pos == 4) && (angle < 0)) {
angle +=4;
RotateImage (angle, "Pictures\\Ship_rotate\\ctrl_", PANEL_CTRL_OBJ);
}
}
}
if ((CTRL_OBJ_top > CTRL_OBJ_top0) && (CTRL_OBJ_left > ONCOMING_OBJ_left + width)) {
CTRL_OBJ_top -= 1;
SetCtrlAttribute (PANEL, PANEL_CTRL_OBJ, ATTR_TOP, CTRL_OBJ_top);
if (pos == 2) pos = 3;
}
CTRL_OBJ_left += 2;
SetCtrlAttribute (PANEL, PANEL_CTRL_OBJ, ATTR_LEFT, CTRL_OBJ_left);
if ((ONCOMING_OBJ_left <= 15) && (l < 17)) {
l++;
SetCtrlAttribute (panelHandle, PANEL_ONCOMING_OBJ, ATTR_WIDTH, width-l*velocity_second);
CanvasDrawBitmap (PANEL, PANEL_ONCOMING_OBJ, second, VAL_ENTIRE_OBJECT, MakeRect(0,-l*velocity_second,VAL_KEEP_SAME_SIZE, VAL_KEEP_SAME_SIZE));
if (l == 17) CanvasClear (panelHandle, PANEL_ONCOMING_OBJ, VAL_ENTIRE_OBJECT);
}
else {
ONCOMING_OBJ_left -= velocity_second;
SetCtrlAttribute (PANEL, PANEL_ONCOMING_OBJ, ATTR_LEFT, ONCOMING_OBJ_left);
}
//}
if (CTRL_OBJ_left >= 450) {
tmr=0;
SetCtrlAttribute (PANEL, PANEL_TIMER, ATTR_ENABLED, 0);
SetCtrlAttribute (panelHandle, PANEL_Clr, ATTR_DIMMED, tmr);
SetCtrlAttribute (panelHandle, PANEL_Snos_vstr, ATTR_DIMMED, tmr || oncoming);
}
}
}
}
else {
CanvasDrawBitmap (PANEL, PANEL_BACKGROUND, bit, VAL_ENTIRE_OBJECT, MakeRect(0,-n%100*3,VAL_KEEP_SAME_SIZE, VAL_KEEP_SAME_SIZE));
if (!(n%20)) k=-k;
//if (!(rand()%3))
SM_WAY_OBJ_left += k*2;
SetCtrlAttribute (PANEL, PANEL_SM_WAY_OBJ, ATTR_LEFT, SM_WAY_OBJ_left);
if ((n > 20) && (CTRL_OBJ_left < 400)) {
CTRL_OBJ_left += 2;
SetCtrlAttribute (PANEL, PANEL_CTRL_OBJ, ATTR_LEFT, CTRL_OBJ_left);
if ((CTRL_OBJ_left > 200) && (CTRL_OBJ_top < SM_WAY_OBJ_top)) {
CTRL_OBJ_top += 3;
SetCtrlAttribute (PANEL, PANEL_CTRL_OBJ, ATTR_TOP, CTRL_OBJ_top);
}
}
}
break;
}
return 0;
}
int CVICALLBACK Accelerate (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
if ((CTRL_OBJ_left < 400)&&(distance > 2)) {
CTRL_OBJ_left += 4;
SetCtrlAttribute (PANEL, PANEL_CTRL_OBJ, ATTR_LEFT, CTRL_OBJ_left);
}
break;
}
return 0;
}
int CVICALLBACK Break (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
if (CTRL_OBJ_left > 54) {
CTRL_OBJ_left -= 4;
SetCtrlAttribute (PANEL, PANEL_CTRL_OBJ, ATTR_LEFT, CTRL_OBJ_left);
}
break;
}
return 0;
}
int RotateImage (int angle, char ship_path[25], int ship)
{
int bmp;
char an[4], pict[34];
Fmt (an, "%s<%i", angle);
strcpy (pict, ship_path);
strcat (pict, an);
strcat(pict, ".bmp");
GetBitmapFromFile (pict, &bmp);
//SetCtrlAttribute (panelHandle, ship, ATTR_HEIGHT, height+abs(angle));
CanvasDrawBitmap (panelHandle, ship, bmp, VAL_ENTIRE_OBJECT,
MakeRect (0, 0, VAL_KEEP_SAME_SIZE, VAL_KEEP_SAME_SIZE));
return 0;
}
int CVICALLBACK Activate_side (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
Side_motion = !Side_motion;
break;
}
return 0;
}
int CVICALLBACK Initially_select_vehicle (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
GetCtrlVal (pan2, PANEL_2_LISTBOX, &vehicle);
if (vehicle != 2) {
SetCtrlAttribute (panelHandle, PANEL_ONCOMING_RING, ATTR_VISIBLE, 1);
SetCtrlAttribute (panelHandle, PANEL_Snos_vstr, ATTR_VISIBLE, 1);
}
DiscardPanel (pan2);
SetCtrlVal (panelHandle, PANEL_VEHICLE_RING, vehicle);
GetCtrlAttribute (PANEL, PANEL_SM_WAY_OBJ, ATTR_TOP, &SM_WAY_OBJ_top0);
GetCtrlAttribute (PANEL, PANEL_SM_WAY_OBJ, ATTR_LEFT, &SM_WAY_OBJ_left0);
GetCtrlVal (PANEL, PANEL_Safety_System, &Safety_System);
draw ();
SetDefault ();
break;
}
return 0;
}
int CVICALLBACK Select_vehicle (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_VAL_CHANGED:
GetCtrlVal (panelHandle, PANEL_VEHICLE_RING, &vehicle);
if (vehicle == 2) {
SetCtrlAttribute (panelHandle, PANEL_ONCOMING_RING, ATTR_VISIBLE, 0);
SetCtrlAttribute (panelHandle, PANEL_Snos_vstr, ATTR_VISIBLE, 0);
}
else {
SetCtrlAttribute (panelHandle, PANEL_ONCOMING_RING, ATTR_VISIBLE, 1);
SetCtrlAttribute (panelHandle, PANEL_Snos_vstr, ATTR_VISIBLE, 1);
}
draw ();
SetDefault ();
break;
}
return 0;
}
int CVICALLBACK Select_oncoming (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_VAL_CHANGED:
GetCtrlVal (panelHandle, PANEL_ONCOMING_RING, &oncoming);
SetCtrlAttribute (panelHandle, PANEL_Snos_vstr, ATTR_DIMMED, oncoming);
Side_motion = !oncoming;
SetCtrlVal (panelHandle, PANEL_Snos_vstr, Side_motion);
draw ();
SetDefault ();
break;
}
return 0;
}
int CVICALLBACK Reset_pict (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
SetDefault ();
break;
}
return 0;
}
Размещено на Allbest.ru
Подобные документы
Постановка задачи синтеза системы управления. Применение принципа Максимума Понтрягина. Метод аналитического конструирования оптимальных регуляторов. Метод динамического программирования Беллмана. Генетическое программирование и грамматическая эволюция.
дипломная работа [1,0 M], добавлен 17.09.2013Схемотехнический синтез системы автоматического управления. Анализ заданной системы автоматического управления, оценка ее эффективности и функциональности, описание устройства и работы каждого элемента. Расчет характеристик системы путем моделирования.
курсовая работа [3,4 M], добавлен 21.11.2012Проведение аналитического конструирования оптимальных регуляторов для систем с распределенными параметрами. Синтез распределенного регулятора для системы управления температурным полем многослойной пластинки. Анализ работы замкнутой системы управления.
курсовая работа [461,2 K], добавлен 20.12.2014Синтез системы автоматического управления корневым методом, разработанным Т. Соколовым. Определение передаточных функций по задающему и возмущающему воздействиям. Оценка устойчивости замкнутой нескорректированной системы регулирования по критерию Гурвица.
курсовая работа [1,3 M], добавлен 26.01.2015Понятие большой системы управления. Модель структурного сопряжения элементов. Организация многоуровневой структуры управления. Общая задача линейного программирования. Элементы динамического программирования. Постановка задачи структурного синтеза.
учебное пособие [1,3 M], добавлен 24.06.2009Постановка задачи динамического программирования. Поведение динамической системы как функция начального состояния. Математическая формулировка задачи оптимального управления. Метод динамического программирования. Дискретная форма вариационной задачи.
реферат [59,9 K], добавлен 29.09.2008Строение и функционирование спутниковой системы навигации и навигационной аппаратуры потребителя. Особенности баллистических ракет как динамических систем. Формирование и синтез алгоритмов управления и стабилизации систем управления летательным аппаратом.
дипломная работа [2,8 M], добавлен 01.11.2013Обзор задач, решаемых методом динамического программирования. Составление маршрута оптимальной длины. Перемножение цепочки матриц. Задача "Лестницы". Анализ необходимости использования специальных методов вероятностного динамического программирования.
курсовая работа [503,3 K], добавлен 28.06.2015Разработка и внедрение автоматизированной системы управления дорожным движением. Специфика применения программы интеллектуальных транспортных сетей, использующей принцип нейронных схем, в городе Хабаровске на языке программирования Turbo Pascal 7.0.
дипломная работа [1,7 M], добавлен 19.06.2012Синтез и анализ систем автоматического управления (САУ) техническими объектами на базе современных методов и с помощью вычислительной техники. Система модального управления электроприводом постоянного тока. Основные элементы САУ и расчет их параметров.
курсовая работа [1,9 M], добавлен 25.10.2012