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

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

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 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

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