Мегаобучалка Главная | О нас | Обратная связь


Алгоритм стабилизации при сканировании



2019-12-29 174 Обсуждений (0)
Алгоритм стабилизации при сканировании 0.00 из 5.00 0 оценок




В данном случае установка остаётся такой же.

Теперь необходимо, чтобы луч О1В в момент времени t проходил через точку c координатой x, где x = x(t) – изменяется со временем по определённому закону в некотором интервале (слева и справа от точки А). Пусть начало координат – точка А. Это моделирует ситуацию сканирования.

Пусть вначале платформа находится в горизонтальном положении, а затем через время ∆t она повернулась на угол φ (рис. Н). Тогда луч О1В должен проходить через точку с координатой х = х(∆t) = ∆x. Для этого нужно повернуть двигатель на угол φ против часовой стрелки до вертикального положения. А затем на угол α также против часовой стрелки.

Найдём угол α с помощью заданных величин ОА = h, ОО1 = r. А также .

Из треугольника ОО1С находим: ,

Отсюда .

Теперь можно найти tgα: ;

Отсюда находим .

Получили, что двигатель должен совершить поворот на угол (α+φ) против часовой стрелки

 

 


Рис 4.1.4 Нахождение угла поворота ротора на первом шаге.

 

Далее пусть прошло ещё ∆t времени. Пусть двигатель был повёрнут на угол α1 = α от вертикали. А за время ∆t платформа повернулась на угол φ1 и отклонение платформы равно углу φ – сумме двух поворотов.

В положении 2 луч проходит через точку х = x(2∆t) необходимый угол отклонения от вертикали луча О1В обозначим как α2. Угол α2 находится аналогично из величин h, r и угла φ:

 

.

 

Чтобы перейти из положения 1 в положение 2 при сканировании, необходимо следующим образом поворачивать двигатель: сначала по часовой стрелке на угол α1, затем против часовой стрелки на угол (α2 + φ). То есть повернуть против часовой стрелки на угол (φ + (α2 – α1)) = (φ + Δ α), где Δ α = α2 – α1.

 

 


Рис 4.1.5 Нахождение угла поворота ротора на произвольном шаге

 

Аналогично случаю с наведением на цель сформулируем алгоритм полностью:

1. Пусть начальное положение платформы горизонтальное и луч наведён на цель. Тогда φ = 0, α = 0, также заданы r и h;

Дальнейшие пункты повторяем при t = nΔt, где n = 0, 1, 2, …

2. Считываем угловую скорость платформы ω1;

3. Считываем положение платформы φ1;

4. Прогнозируем положение платформы через Δt: φ = φ1 + ω1Δt;

5. По формулам находим α1 и α2:

; .

6. Подаем на двигатель значения угла, на который нужно совершить поворот и угловой скорости этого поворота: α = α2 – α1 + Δφ, ω = α / Δt.

 

    3.2 Реализация алгоритма

 

Реализуем алгоритм стабилизации при наведении на цель. Пусть Δt = 10 мсек, r = 1 м, h = 4 м. На рисунке 4.2.1 изображён график изменения углового положения платформы.

 

 


Рис 4.2.1 График изменения углового положения платформы

 

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

Необходимое угловое положение ротора при заданном угловом положении платформы определяется по формуле:

 

. (4.2.1)

 

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

 

Рис 4.2.2 График изменения углового положения ротора


На каждом шаге мы определяем отклонение углового положения ротора от идеального, определяемого формулой (4.2.1).

График изменения данной ошибки показан на рисунке 4.2.3. Видно, что данная ошибка достаточно мала по сравнению со значениями углов.

 

Рис 4.2.3 График ошибки углового положения ротора

 

Теперь найдём значения отклонения положения луча от точки А, в которой он должен находится.

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

, где х – координата точки.

Из этой формулы мы можем найти значение х, подставляя в качестве φ значение углового положения платформы в данный момент, а в качестве α – значение реального угла поворота ротора в данный момент:

 

 

На рисунке 4.2.4 показан график изменения ошибки. Максимальная ошибка получилась меньше 1мм.


Рис 4.2.4 График отклонения положения луча от точки А

 

 


Заключение

 

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

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

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

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

Получены результаты работы данных алгоритмов.

 

 


Приложение

 

void CDiplom1Dlg::OnBnClickedStartButton()

{

int iInstallResult;

double ft;

iInstallResult=SetTimer(1, 10, NULL);

if(iInstallResult==FALSE)

{

MessageBox((LPCTSTR)L"Cannot install timer",

(LPCTSTR)L"Error message",

MB_OK+MB_ICONERROR);

}

m_XPrev = m_Graph.left + 5;

m_XPrev2 = m_Graph3.left + 5;

m_YPrev = m_Graph.bottom - 5 * 16 - 2 - 60;

m_YPrev3 = m_Graph3.bottom - 5 * 16 - 2;

m_YPrev4 = m_Graph4.bottom - 5 * 16 - 2;

ft = atan( sin(3.1415926/6)/(4 - cos(3.1415926/6)) );

m_ftPrev = 30;

m_YPrev2 = m_Graph2.bottom - 5 * 16 - 2 + 2 * (unsigned long)floor(ft*57.29578);

OnBnClickedClearButton();

DrawGrid(1);

DrawGrid(2);

DrawGrid(3);

DrawGrid(4);

m_Time = 0;

}

void CDiplom1Dlg::OnTimer(UINT_PTR nIDEvent)

{

double ft,t,t1,ft1,ft2,w,fi,dx;

m_Time += 0.01;

t = m_Time;

t1 = t;

ft = 30 * exp(-0.2*t) * cos(t*(2*3.1415926));

ft1 = - atan( sin(ft * 3.1415926/180)/(4 - cos(ft * 3.1415926/180)) );

w = (- 6 * exp(-0.2*(t-0.01)) * cos((t-0.01)*(2*3.1415926)) -

30 * (2*3.1415926) * exp(-0.2*(t-0.01)) * sin((t-0.01)*(2*3.1415926)) ) * 3.1415926/180;

fi = m_ftPrev * 3.1415926/180 + w / 100;

ft2 = - atan( sin(fi)/(4 - cos(fi)) );

dx = sin(ft * 3.1415926/180) - tan(-ft2) * (4 - cos(ft * 3.1415926/180));

if ((fmod(t,0.0625)<=0.005)||(fmod(t,0.0625)>0.0575))

{

m_XNext = m_XPrev + 1;

m_XNext2 = m_XPrev2 + 1;

m_YNext = m_Graph.bottom - 5 * 16 - 2 - 2*(unsigned long)floor(ft);

m_YNext2 = m_Graph2.bottom - 5 * 16 - 2 - (unsigned long)floor(2*ft2*57.29578);

m_YNext3 = m_Graph3.bottom - 5 * 16 - 2 - (unsigned long)floor(80*(ft1-ft2)*57.29578/0.025);

m_YNext4 = m_Graph4.bottom - 5 * 16 - 2 - (unsigned long)floor(80*1000*dx);

DrawLine();

m_XPrev = m_XNext;

m_XPrev2 = m_XNext2;

m_YPrev = m_YNext;

m_YPrev2 = m_YNext2;

m_YPrev3 = m_YNext3;

m_YPrev4 = m_YNext4;

}

m_ftPrev = ft;

if (m_XNext == m_Graph.left + 245)

OnBnClickedStopButton();

CDialog::OnTimer(nIDEvent);

}

void CDiplom1Dlg::DrawGrid(int numG)

{

unsigned long y_b;

unsigned long y_t;

unsigned long x_l;

unsigned long x_r;

unsigned long x[16],y[11],f[11],s1,s2;

double dx,dy;

int i;

if (numG == 1)

{

y_b = m_Graph.bottom - 2;

y_t = m_Graph.top - 2;

x_l = m_Graph.left + 5;

x_r = m_Graph.right;

}

if (numG == 2)

{

y_b = m_Graph2.bottom - 2;

y_t = m_Graph2.top - 2;

x_l = m_Graph2.left + 5;

x_r = m_Graph2.right;

}

if (numG == 3)

{

y_b = m_Graph3.bottom - 2;

y_t = m_Graph3.top - 2;

x_l = m_Graph3.left + 5;

x_r = m_Graph3.right;

}

if (numG == 4)

{

y_b = m_Graph4.bottom - 2;

y_t = m_Graph4.top - 2;

x_l = m_Graph4.left + 5;

x_r = m_Graph4.right;

}

CClientDC dc(this);

dx = (x_r - x_l) / 15;

dy = (y_b - y_t) / 10;

s1 = floor(dx);

s2 = floor(dy);

COLORREF m_PenColor = RGB(0,0,255);

CPen m_Pen;

m_Pen.CreatePen(2/*PS_SOLID*/, 1, m_PenColor);

dc.SelectObject(&m_Pen);

for (i=0;i<11;i++)

{

x[i] = x_l + i * s1;

y[i] = y_b - i * s2;

}

for (i=11;i<16;i++)

x[i] = x_l + i * s1;

for (i=0;i<11;i++)

{

dc.MoveTo(x[i],y[0]);

dc.LineTo(x[i],y[10]);

dc.MoveTo(x[0],y[i]);

dc.LineTo(x[15],y[i]);

}

for (i=11;i<16;i++)

{

dc.MoveTo(x[i],y[0]);

dc.LineTo(x[i],y[10]);

}

m_Pen.DeleteObject();

m_Pen.CreatePen(PS_SOLID, 1, m_PenColor);

dc.SelectObject(&m_Pen);

dc.MoveTo(x[0],y[0]);

dc.LineTo(x[0],y[10]);

dc.MoveTo(x[0],y[5]);

dc.LineTo(x[15],y[5]);

m_Pen.DeleteObject();

m_ResultsEdit.Format(L"bottom = %d, top = %d, left = %d, right = %d, dx = %d, dy = %d",y_b,y_t,x_l,x_r,s1,s2);

UpdateData(FALSE);

}

void CDiplom1Dlg::DrawLine(void)

{

CClientDC dc(this);

COLORREF m_PenColor = RGB(255,0,0);

CPen m_Pen;

m_Pen.CreatePen(0, 1, m_PenColor);

dc.SelectObject(&m_Pen);

dc.MoveTo(m_XPrev,m_YPrev);

dc.LineTo(m_XNext,m_YNext);

dc.MoveTo(m_XPrev,m_YPrev2);

dc.LineTo(m_XNext,m_YNext2);

dc.MoveTo(m_XPrev2,m_YPrev3);

dc.LineTo(m_XNext2,m_YNext3);

dc.MoveTo(m_XPrev2,m_YPrev4);

dc.LineTo(m_XNext2,m_YNext4);

m_Pen.DeleteObject();

}

 

 


список использованной литературы

 

1. Самарский А. А., Михайлов А. П. «Математическое моделирова-

ние: Идеи. Методы. Примеры» Физматлит, 2001 г, 320 с;

2. http://aqua.sm.bmstu.ru/study/student/Library/CoodrSys.htm;

3. Проектирование следящих систем. Колл. авторов. Под ред. Л.В. Рабиновича.М.: Машиностроение, 1969.-500 с.

4. Следящие приводы. В 2-х кн. Под ред. Б.К. Чемоданова.-М.: Энергия, 1976.-384 с., ил.

5. http://ru.wikipedia.org;

6. http://www.optolink.ru;

7. http://www.modem-techno.ru;

8. http://www.skbis.ru.

 



2019-12-29 174 Обсуждений (0)
Алгоритм стабилизации при сканировании 0.00 из 5.00 0 оценок









Обсуждение в статье: Алгоритм стабилизации при сканировании

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

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



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (174)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

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

Удобная навигация

Нет шокирующей рекламы



(0.008 сек.)