Jump to content

TrackIR5 + GlovePIE + Python3 + Opentrack = Расширенное управление обзором.


72AG_Olega
 Share

Recommended Posts

2 часа назад, 154_Viktor сказал:

Подскажите ,как настроить кривые чтобы были максимально похожие на трекир. Были очень резкие , методом тыка пока не могу нормально настроить.

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

2 часа назад, 72AG_Olega сказал:

после того как я включил UAC (для тестирования):

UAC? Дома? Так себе идея. Проще создать в винде доп юзера, для которого включен UAC, а для игр - свой юзер и профиль

Link to comment
Share on other sites

1 час назад, =SF=Thresher сказал:

Повторюсь - UAC отключен. С ним не проверял.

Не, мне видео нужно делать именно для когда UAC включен, тогда будет спектр на все случаи (когда UAC отключен и так всё понятно)

1 час назад, 72AGs_miky сказал:

Извиняюсь за нубский вопрос, а как все правильно прикрыть (вручную)? Я просто убиваю крестиком, кто то там просит что то подтвердить, я подтверждаю. Это правильно?

Да, правильно. Можно программы-участники АОМ закрывать вообще в любом порядке.

33 минуты назад, Void сказал:

UAC? Дома? Так себе идея. Проще создать в винде доп юзера, для которого включен UAC, а для игр - свой юзер и профиль

Ну, не все же такие как мы, которые этот UAC отключаем... Надо и о других подумать, которые с ним и живут...🤥

Link to comment
Share on other sites

56 минут назад, 72AG_Olega сказал:

Ну, не все же такие как мы, которые этот UAC отключаем... Надо и о других подумать, которые с ним и живут...🤥

http://www.oszone.net/10594#400

 

Link to comment
Share on other sites

41 минуту назад, Void сказал:

Понял, спасибо. Остановимся на том, что пользователь и есть администратор, но у него всё же включен UAC.

  • Thanks 1
Link to comment
Share on other sites

=19GvFAB=Ahtuba
3 часа назад, 72AGs_miky сказал:

Извиняюсь за нубский вопрос, а как все правильно прикрыть (вручную)? Я просто убиваю крестиком, кто то там просит что то подтвердить, я подтверждаю. Это правильно?

Этого достаточно.

  • Thanks 1
Link to comment
Share on other sites

10 часов назад, 72AG_Olega сказал:

При запуске стала появляться консоль Питона, которая после автозапуска АОМ остается в развёрнутом состоянии на экране. Как её свернуть или убрать в трей?

Для сворачивания используется ключ /MIN. Попробуй так:

start /D %OPENTRACK_DIR% /MIN "" %OPENTRACK_FILE%

  • Thanks 1
Link to comment
Share on other sites

8 часов назад, 154_Viktor сказал:

Подскажите ,как настроить кривые чтобы были максимально похожие на трекир. Были очень резкие , методом тыка пока не могу нормально настроить.

Уточни - какие именно кривые надо настроить? Скорость поворота головы, мертвую зону или...?  Тут же такое дело: "максимально похоже на трекир" у каждого может быть свое. Это своего рода "Сделайте мне хорошо".

Вот у меня, например, не то, чтобы похоже, а стало еще лучше, чем было с чистым трекиром. Кривые были настроены "под себя". Сейчас настроены так, как рекомендовали в видео. Ну, почти так. У меня Трекир4, он работает немного не "как Трекир5". Я это знаю. Поэтому и кривые подкрутил немного в самом трекире, а не в опентреке.

Link to comment
Share on other sites

start /D %PYTHON_DIR% /MIN "" python -m %PYTHON_SCRIPT%

10 часов назад, 72AG_Olega сказал:

Правда целесообразность автосмещений по X я поставил под серьёзный вопрос. Ось Х и так хорошо работает.

А для меня автоматическое смещение по Х - обязательно. Я ещё планирую сделать перенос нажатием кнопки взгляда назад без поворота головы. И не только назад.

  • Like 1
Link to comment
Share on other sites

13 минут назад, oraclenok сказал:

Я ещё планирую сделать перенос нажатием кнопки взгляда назад без поворота головы. И не только назад.

давно забинден такой вид, но через средства игры

Link to comment
Share on other sites

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

  • Like 1
  • Upvote 1
Link to comment
Share on other sites

44 минуты назад, oraclenok сказал:

start /D %PYTHON_DIR% /MIN "" python -m %PYTHON_SCRIPT%

.....

Спасибо!

Красота!!!

===============

start /D %TRACKIR_DIR% /MIN "" %TRACKIR_FILE%        - работает
TIMEOUT 4

start /D %GLOVEPIE_DIR% "" PIEFree.exe -%GLOVEPIE_SCRIPT%    - вот этот бы заставить свернуться. Не поддается он  на /MIN   :(
TIMEOUT 2

start /D %PYTHON_DIR% /MIN "Python's server" python -m %PYTHON_SCRIPT%    - работает
TIMEOUT 2

start /D %OPENTRACK_DIR% "" %OPENTRACK_FILE%    - мне надо оставить развернутый: я так и не смог под семеркой заставить Ил-2 увидеть данные от опентрека, запущенного автоматом по захвату игры. :( Приходится жать его запуск вручную. Но меня такой вариант устраивает.

==============

Штатный режим трекира можно определить по светодиодам, работу Питона можно вычислить после нажатия кнопки "Запустить" в опентреке - по осьминожке. Вот бы еще свернуть GlovePIE и все было бы в ажуре. Только одного опентрека пнуть вручную и можно играть. :)  Внимание, вопрос: как свернуть GlovePIE? :lol:

Нашел!!!

C GlovePIE вопрос снят! Оказывается есть ключик у самой программы /tray  = start minimized to system tray

 

start /D %GLOVEPIE_DIR% "" PIEFree.exe /tray -%GLOVEPIE_SCRIPT%

 

Все получилось. При запуске АОМ вижу только окно открытого опентрека для его запуска. Остальное свернуто и работает. :dance:

Edited by =SF=Thresher
  • Like 1
Link to comment
Share on other sites

1 час назад, oraclenok сказал:

start /D %PYTHON_DIR% /MIN "" python -m %PYTHON_SCRIPT%

А для меня автоматическое смещение по Х - обязательно. Я ещё планирую сделать перенос нажатием кнопки взгляда назад без поворота головы. И не только назад.

Я уже всё попробовал и сделал. Придется добавить ось X в автосмещения, раз это для некоторых интересно...Твои коэффициенты по осям выше весьма неплохи...

1 час назад, oraclenok сказал:

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

ЗЫ. Да, теперь всё можно сделать в АОМ, и для каждого самолёта в БзС настраивать не придется... Но я в проектировании остановился на двух видах на шесть (настроить нужно только с одной стороны, второй автоматом вылазит). Остальные виды как таковые не нужны, для этого всё же голова есть.... Избыток кнопок в обзоре тоже не есть хорошо, особенно для истребителя...

В выходные постараюсь всё-же запилить видео.

48 минут назад, =SF=Thresher сказал:

start /D %GLOVEPIE_DIR% "" PIEFree.exe -%GLOVEPIE_SCRIPT%    - вот этот бы заставить свернуться. Не поддается он  на /MIN

start /D %GLOVEPIE_DIR% "" PIEFree.exe -%GLOVEPIE_SCRIPT% /tray - угу, а я в конце дописал, тоже работает

1 час назад, oraclenok сказал:

Для сворачивания используется ключ /MIN. Попробуй так:

Спасибо получилось.

Edited by 72AG_Olega
Link to comment
Share on other sites

18 минут назад, 72AG_Olega сказал:

Остальные виды как таковые не нужны, для этого всё же голова есть

Мне нужен взгляд вверх, чтобы не задирать голову в бою. Также я задумываюсь над процедурой поиска противника в спокойном полёте, когда взгляд последовательно перемещается по определённым секторам. 

Link to comment
Share on other sites

Только что, oraclenok сказал:

Также я задумываюсь над процедурой поиска противника в спокойном полёте, когда взгляд последовательно перемещается по определённым секторам.

Это больше годится для обучалки. Но сделать можо и легко, вот только надо ли...

Link to comment
Share on other sites

59 минут назад, oraclenok сказал:

когда взгляд последовательно перемещается по определённым секторам. 

и при обнаружении противника включалось самонаведение и огневое поражение ? )

  • Haha 2
Link to comment
Share on other sites

Желательно, чтобы издавался звуковой сигнал с сообщением свой-чужой, но пока это не достижимо.

Link to comment
Share on other sites

Текущий код для автоматических и ручных смещений (под спойлером). Специально для oraclenok и других, кто разбирается

 

Скрытый текст

if starting then
PIE.FrameRate = 250 ; частота выполнения скрипта, должна быть равна или выше частоты камеры TrackIR5 (т.е 120 Гц и выше)
debug = '0:' + joystick0.Name + ', 1:' + joystick1.Name + ', 2:' + joystick2.Name + ', 3:' + joystick3.Name + ', 4:' + joystick4.Name
//-----Текущие номера джойстиков (в случае переназначения их ID операционной системой, необходимо поменять номера джойстиков во всём коде)
;0: VKB-Sim Gunfighter Modern Combat Pro
;1: VKB-Sim Gunfighter Modern Combat Pro
;2: PPJoy Virtual Joystick 1
;3: L3
;4: Throttle - HOTAS Warthog
//=======Пресет смещений и угла для вида на шесть: Истребители=======
var.deltaX1 = 1050 // начальный делитель для автоматическое смещение по оси X
var.deltaY1 = 3310 // начальный делитель для автоматическое смещение по оси Y
var.deltaX2 = 6.7 cm // ручное смещение по оси X
var.deltaY2 = 6.7 cm // ручное смещение по оси Y; смещение для вида на шесть
var.deltaX3 = 6.7 cm // смещение по оси X для вида на шесть
var.deltaY3 = 6.7 cm // смещение по оси Y для вида на шесть
var.deltaZ3 = 5 cm // смещение по Z для вида на шесть
var.cornerYawSix = 14.16 // угол по Yaw для фиксированного вида на шесть
var.autoCorner = 18 // угол по Yaw начала срабатывания автоматических смещений по X и Y в задней полусфере.
var.yUpVSyDown = 0.5 //
//=======Конец пресета===================================
//---Установка начальных значений логических флагов смещений----------
var.flagDeltaX1 = false // флаг автоматического смещения X1
var.flagDeltaX2 = false // флаг ручного смещения X2
var.flagDeltaX3 = false // флаг смещения X3 для вида на шесть
var.flagDeltaY1 = false // флаг автоматического смещения Y1
var.flagDeltaY2 = false // флаг ручного смещения Y2
var.flagDeltaY3 = false // флаг смещения Y3 для вида на шесть
var.flagDeltaZ3 = false // флаг смещения Z3 для вида на шесть
var.flagScrollLock = false //
var.t1 = 200 // время работы таймера, задержка от многократного срабатывания клавиши ScrollLock
var.timer1 = 0
Keyboard.RepeatFakeKeys = False
end if

//=============БЛОКИРОВКА ЦЕНТРОВКИ ВО ВРЕМЯ РАБОТЫ РУЧНЫХ СМЕЩЕНИЙ (Цетровку TrackIR и Opentrack нужно назначить на F7)
if joystick0.Button13 = true and joystick4.Button3 = false and joystick0.Button20 = false and joystick0.Button19 = false then
   key.F7 = true
end if
if joystick0.Button13 = false then key.F7 = false
end if

//-------------------- Работа таймеров ----------------------------------------------------------
if var.timer1 < var.t1 then var.timer1 += 1 //работа таймера t1 - для кнопки ScrollLock
end if
//-------------------- Конец блока таймеров------------------------------------------------------

//==========Блок клавиш настройки смещений=======================
//------Рокерный переключатель для ScrollLock---------
if (key.ScrollLock = true and var.timer1 = var.t1 and var.flagScrollLock = false) then
    var.flagScrollLock = true
    var.timer1 = 0
end if
if (key.ScrollLock = true and var.timer1 = var.t1 and var.flagScrollLock = true) then
    var.flagScrollLock = false
    var.timer1 = 0
end if
//-----------Назначения действий на клавиши----------
if var.flagScrollLock = true then
   if End               and Shift=false and Alt=false     then var.deltaX1 +=1
   if Delete            and Shift=false and Alt=false     then var.deltaX1 -=1
   if End       +Shift  and Alt=false                     then var.deltaX2 -=0.002 cm
   if Delete    +Shift  and Alt=false                     then var.deltaX2 +=0.002 cm
   if End       +Alt    and Shift=false                   then var.deltaX3 -=0.002 cm
   if Delete    +Alt    and Shift=false                   then var.deltaX3 +=0.002 cm

   if PageUp            and Shift=false and Alt=false     then var.deltaY1 -=1
   if PageDown          and Shift=false and Alt=false     then var.deltaY1 +=1
   if PageUp    +Shift  and Alt=false                     then var.deltaY2 -=0.002 cm
   if PageDown  +Shift  and Alt=false                     then var.deltaY2 +=0.002 cm
   if PageUp    +Alt    and Shift=false                   then var.deltaY3 -=0.002 cm
   if PageDown  +Alt    and Shift=false                   then var.deltaY3 +=0.002 cm

   if Insert            and Shift=false and Alt=false     then var.deltaZ3 -=0.1 cm
   if Home              and Shift=false and Alt=false     then var.deltaZ3 +=0.1 cm

   if End       +Alt+Shift                                then var.cornerYawSix +=0.005
   if Delete    +Alt+Shift                                then var.cornerYawSix -=0.005

;   var.flagYaxis = false
;   var.flagXaxis = false
;   var.flagZaxis = false
end if
//--------Выкл/Вкл осей X, Y, Z, для режима настройки смещений
if var.flagScrollLock = false then // ScrollLock не нажата, - оси X, Y, Z  включены
   var.flagYaxis = true
   var.flagXaxis = true
   var.flagZaxis = true
end if
if var.flagScrollLock = true then // ScrollLock нажата, - оси X, Y, Z выключены
   var.flagYaxis = false
   var.flagXaxis = false
   var.flagZaxis = false
end if
//==========Конец блока клавиш настройки смещений=======================


//------вкл/выкл автоматического смещения по Y и X
if joystick4.Button18 = true then var.flagAutoX = true
end if
if joystick4.Button18 = false then var.flagAutoX = false
end if
if joystick4.Button19 = true then var.flagAutoY = true
end if
if joystick4.Button19 = false then var.flagAutoY = false
end if

//-----автоматическое смещение по X и Y при повороте по Yaw больше, чем var.autoCorner ---
if (TrackIR1.RealYaw < -var.autoCorner) or (TrackIR1.RealYaw > var.autoCorner) then
    var.autoX = ((TrackIR1.RealYaw)/var.deltaX1)^5
end if
if (TrackIR1.RealYaw < -var.autoCorner) or (TrackIR1.RealYaw > var.autoCorner) then
    var.autoY = ((TrackIR1.RealYaw)/var.deltaY1)^4
end if
if -var.autoCorner < TrackIR1.RealYaw and TrackIR1.RealYaw < var.autoCorner then
    var.autoX = 0
    var.autoY = 0
end if
//==============виды на шесть-слева, на шесть справа=============================
if joystick4.x = -1 then
   var.flagYaw = false // отключаем и обнуляем ось Yaw Трекир5
   var.corner = -1 * var.cornerYawSix // устанавливаем фиксированный угол на "шесть"
   var.invert = -1 // инвертируем оси X и Z
   var.deltaX3 = -1 * |var.deltaX3| // присваиваем нужный знак смещению по X
;   var.deltaY3 = |var.deltaY3| // присваиваем смещению по Y на шесть значение ручного смещения
   var.flagDeltaX3 = true // включаем смещение по X для вида на "шесть"
   var.flagDeltaY3 = true // включаем смещение по Y для вида на "шесть"
   var.flagDeltaZ3 = true // включаем максимальное удаление бронеспинки вида на "шесть"
end if
if joystick4.x = 1 then
   var.flagYaw = false // отключаем и обнуляем ось Yaw Трекир5
   var.corner = 1 * var.cornerYawSix // устанавливаем фиксированный угол на "шесть"
   var.invert = -1 // инвертируем оси X и Z
   var.deltaX3 = |var.deltaX3| // присваиваем нужный знак смещению по X
;   var.deltaY3 = |var.deltaY3| // присваиваем смещению по Y на шесть значение ручного смещения
   var.flagDeltaX3 = true // включаем смещение по X для вида на "шесть"
   var.flagDeltaY3 = true  // включаем смещение по Y для вида на "шесть"
   var.flagDeltaZ3 = true  // включаем максимальное удаление бронеспинки вида на "шесть"
end if
if -1 < joystick4.x < 1 then
   var.flagYaw = true // включаем ось Yaw Трекир5
   var.corner = 0 * var.cornerYawSix// обнуляем фиксированный угол на "шесть"
   var.invert = 1 // отменяем инвертирование оси X и Z
   var.flagDeltaX3 = false // выключаем смещение по X для вида на "шесть"
   var.flagDeltaY3 = false // выключаем смещение по Y для вида на "шесть"
   var.flagDeltaZ3 = false // выключаем максимальное удаление бронеспинки вида на "шесть"
end if
//=============конец блока видов на "шесть"=======================================

//-----------ручное смещение по X (deltaX)----------------------------------------
if joystick4.Button3 = true and TrackIR1.RealYaw < 0 then
   var.flagDeltaX2 = true
   var.deltaX2 = -1 * |var.deltaX2|
end if
if joystick4.Button3 = true and 0 < TrackIR1.RealYaw then
   var.flagDeltaX2 = true
   var.deltaX2 = 1 * |var.deltaX2|
end if
if joystick4.Button3 = false then
   var.flagDeltaX2 = false
end if
//-------------ручное смещение по Y (вверх и вниз)--------------------------------
if joystick0.Button20 = true then
   var.deltaY = |var.deltaY2|
   var.flagDeltaY2 = true
end if
if joystick0.Button19 = true then
   var.deltaY = -var.yUpVSyDown * |var.deltaY2|
   var.flagDeltaY2 = true
end if
if (joystick0.Button20 = false and joystick0.Button19 = false) then
   var.flagDeltaY2 = false
end if

//------------------------------------------------------
FakeTrackir.yaw = (TrackIR1.RealYaw in degrees)/10 * int(var.flagYaw)+ var.corner
FakeTrackir.pitch = (TrackIR1.RealPitch in radians)
FakeTrackir.roll = (TrackIR1.RealRoll in degrees)
var.FakeTrackir.x = (TrackIR1.RealX in cm) * int(var.flagYaxis)* var.invert  + var.autoX  * int(var.flagAutoX)+ var.deltaX2 * int(var.flagDeltaX2) + var.deltaX3 * int(var.flagDeltaX3)
var.FakeTrackir.y = (TrackIR1.RealY in cm) * int(var.flagYaxis)              + var.autoY  * int(var.flagAutoY)+ var.deltaY  * int(var.flagDeltaY2) + var.deltaY3 * int(var.flagDeltaY3)
var.FakeTrackir.z = (TrackIR1.RealZ in cm) * int(var.flagZaxis)* var.invert                                                                        + var.deltaZ3 * int(var.flagDeltaZ3)

//отправка данных в UDP сервер Python для их переcылки оттуда в Opentrack
SendOsc('localhost', 6666, "/glovepie/pithon", FakeTrackir.yaw, FakeTrackir.pitch, FakeTrackir.roll, var.FakeTrackir.x, var.FakeTrackir.y, var.FakeTrackir.z)


;--знаки для копирования в код: | ^

 

  • Like 1
  • Thanks 3
Link to comment
Share on other sites

 

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

Edited by 72AG_Olega
  • Thanks 1
Link to comment
Share on other sites

автоматические смещение проверил - норм работают

 

хочу допилить правильную центральную МЗ через этот скрипт. Сейчас центральная МЗ выставляется в трекире по двум осям, и если по одной из осей взгляд уже ушел из зоны действия, то по второй - присутствует. Например - поворот головы влево или вправо на угол больше 10 гр не убирает МЗ по вертикали. Также как и подъем-опускание взгляда не убирает центральную МЗ по горизонтали. Хочу попробовать, чтобы эта МЗ работала только в центральной части по логике "И".

  • Thanks 1
Link to comment
Share on other sites

31 минуту назад, Void сказал:

автоматические смещение проверил - норм работают

 

хочу допилить правильную центральную МЗ через этот скрипт. Сейчас центральная МЗ выставляется в трекире по двум осям, и если по одной из осей взгляд уже ушел из зоны действия, то по второй - присутствует. Например - поворот головы влево или вправо на угол больше 10 гр не убирает МЗ по вертикали. Также как и подъем-опускание взгляда не убирает центральную МЗ по горизонтали. Хочу попробовать, чтобы эта МЗ работала только в центральной части по логике "И".

Не, там не так надо бы. Я уже думал над этим. Надо МЗ вообще везде убирать и в Трекире и в Опентрек и пилить её в самом Гловпай (там есть механизм) с учётом условий её применения по углу Yaw в узком переднем секторе.

 

ЗЫ: с оверлеем всё получается, пока для прописных кнопок, но это уже большой плюс будет.

Link to comment
Share on other sites

на скорую руку только получиться триггер на +- 10гр по горизонту и +-2 гр по вертикали. Действие - множитель обеих осей на 0. Либо 1, если вне ЦМЗ.

не очень выходит. Нужна функция плавного входа в ЦМЗ. Скачкообразно и есть ошибка сдвига центровки.

Link to comment
Share on other sites

Вопрос то серъёзный. На скорую руку не получится. Всё продумать надо...чтоб нормально получилось, особенно при входе/выходе из МЗ.

1 час назад, Void сказал:

автоматические смещение проверил - норм работают

Я старался. Думаю большего не надо. И автоматические опционально отключаются, если не нужны. Вот принципы настройки смещений:

 

"Border - текущей границей смещения назовем границу, дальше которой пилот в кабине не сможет двигать головой в силу ограничения игры при текущем режиме движения самолёта. Есть три границы:

1.       BorderMax - Фонарь открыт, самолёт находится на аэродроме, он не на разбеге при взлете или пробеге при посадке.

2.       BorderMiddle - Фонарь открыт, скорость самолёта около сваливания или самолёт на разбеге или самолёт на планировании/пробеге

3.       BorderMin - Фонарь закрыт.

Ручные смещения не должны быть настроены больше, чем BorderMax, но могут быть настроены и на BorderMiddle значения по желанию пользователя.

Автоматическое смещение по X и Y не должны быть настроено больше, чем возможное для BorderMin, это его оптимальное значение.

Величины BorderMax и BorderMin могут быть разными для разных самолётов, особенно большие отличия будут в BorderMax между одномоторным и двухмоторным самолётами."

Edited by 72AG_Olega
Link to comment
Share on other sites

Скрытый текст
  • fc1_gold_en.png
  • tccap_green_en.png
  • bon_gold_ru.png
  •  38
  • 40 публикаций

Немного модифицировал у себя скрипт AOM_10-1-Yaw_Trackir-Opentrack.PIE (изменения выделены жирным шрифтом) , чтобы при повороте назад голова автоматически смещалась вверх и в сторону взгляда. Мне понравилось. Кто хочет, может попробовать.

 

if starting then
PIE.FrameRate = 250 // частота выполнения скрипта (the frequency of script execution)
//она должна быть равна или выше частоты камеры TrackIR5, то есть 120 Гц или выше
//(it must be equal to or higher than the TrackIR 5 camera frequency, i.e. 120 Hz or higher)

debug = '0:' + joystick0.Name + ', 1:' + joystick1.Name + ', 2:' + joystick2.Name + ', 3:' + joystick3.Name + ', 4:' + joystick4.Name + ', 5:' + joystick5.Name + ', 6:' + joystick6.Name
//отображение номеров джойстиков, установленных на компьютере (displaying the numbers of joysticks installed on the computer)
//номера джойстиков используются для обращения к ним в коде скрипта (joystick numbers are used to refer to them in the script code)

var.DeltaYaw = 0
var.DeltaX = 0
var.DeltaY = 0

end if

//---здесь может быть ваш код (your code may be here)

 

var.DeltaYaw = (TrackIR1.RealYaw in degrees)/10
var.DeltaY = (var.DeltaYaw/2000)**2
var.DeltaX = (var.DeltaYaw/300)**3

 

//блок назначения осей (block assignment of the axes)
FakeTrackir.yaw = (TrackIR1.RealYaw in degrees)/10
FakeTrackir.pitch = (TrackIR1.RealPitch in radians)
FakeTrackir.roll = (TrackIR1.RealRoll in degrees)
var.FakeTrackir.x = (TrackIR1.RealX in cm) + var.DeltaX
var.FakeTrackir.y = (TrackIR1.RealY in cm) + var.DeltaY
var.FakeTrackir.z = (TrackIR1.RealZ in cm)

Где в этом коде можно отрегулировать чтобы сдвиг был только при крайнем положении головы? Сейчас у меня сдвиг начинается с 90 градусов .

Edited by 154_Viktor
Link to comment
Share on other sites

7 часов назад, 72AG_Olega сказал:

Текущий код для автоматических и ручных смещений (под спойлером). Специально для oraclenok и других, кто разбирается

 

  Скрыть содержимое

if starting then
PIE.FrameRate = 250 ; частота выполнения скрипта, должна быть равна или выше частоты камеры TrackIR5 (т.е 120 Гц и выше)
debug = '0:' + joystick0.Name + ', 1:' + joystick1.Name + ', 2:' + joystick2.Name + ', 3:' + joystick3.Name + ', 4:' + joystick4.Name
//-----Текущие номера джойстиков (в случае переназначения их ID операционной системой, необходимо поменять номера джойстиков во всём коде)
;0: VKB-Sim Gunfighter Modern Combat Pro
;1: VKB-Sim Gunfighter Modern Combat Pro
;2: PPJoy Virtual Joystick 1
;3: L3
;4: Throttle - HOTAS Warthog
//=======Пресет смещений и угла для вида на шесть: Истребители=======
var.deltaX1 = 1050 // начальный делитель для автоматическое смещение по оси X
var.deltaY1 = 3310 // начальный делитель для автоматическое смещение по оси Y
var.deltaX2 = 6.7 cm // ручное смещение по оси X
var.deltaY2 = 6.7 cm // ручное смещение по оси Y; смещение для вида на шесть
var.deltaX3 = 6.7 cm // смещение по оси X для вида на шесть
var.deltaY3 = 6.7 cm // смещение по оси Y для вида на шесть
var.deltaZ3 = 5 cm // смещение по Z для вида на шесть
var.cornerYawSix = 14.16 // угол по Yaw для фиксированного вида на шесть
var.autoCorner = 18 // угол по Yaw начала срабатывания автоматических смещений по X и Y в задней полусфере.
var.yUpVSyDown = 0.5 //
//=======Конец пресета===================================
//---Установка начальных значений логических флагов смещений----------
var.flagDeltaX1 = false // флаг автоматического смещения X1
var.flagDeltaX2 = false // флаг ручного смещения X2
var.flagDeltaX3 = false // флаг смещения X3 для вида на шесть
var.flagDeltaY1 = false // флаг автоматического смещения Y1
var.flagDeltaY2 = false // флаг ручного смещения Y2
var.flagDeltaY3 = false // флаг смещения Y3 для вида на шесть
var.flagDeltaZ3 = false // флаг смещения Z3 для вида на шесть
var.flagScrollLock = false //
var.t1 = 200 // время работы таймера, задержка от многократного срабатывания клавиши ScrollLock
var.timer1 = 0
Keyboard.RepeatFakeKeys = False
end if

//=============БЛОКИРОВКА ЦЕНТРОВКИ ВО ВРЕМЯ РАБОТЫ РУЧНЫХ СМЕЩЕНИЙ (Цетровку TrackIR и Opentrack нужно назначить на F7)
if joystick0.Button13 = true and joystick4.Button3 = false and joystick0.Button20 = false and joystick0.Button19 = false then
   key.F7 = true
end if
if joystick0.Button13 = false then key.F7 = false
end if

//-------------------- Работа таймеров ----------------------------------------------------------
if var.timer1 < var.t1 then var.timer1 += 1 //работа таймера t1 - для кнопки ScrollLock
end if
//-------------------- Конец блока таймеров------------------------------------------------------

//==========Блок клавиш настройки смещений=======================
//------Рокерный переключатель для ScrollLock---------
if (key.ScrollLock = true and var.timer1 = var.t1 and var.flagScrollLock = false) then
    var.flagScrollLock = true
    var.timer1 = 0
end if
if (key.ScrollLock = true and var.timer1 = var.t1 and var.flagScrollLock = true) then
    var.flagScrollLock = false
    var.timer1 = 0
end if
//-----------Назначения действий на клавиши----------
if var.flagScrollLock = true then
   if End               and Shift=false and Alt=false     then var.deltaX1 +=1
   if Delete            and Shift=false and Alt=false     then var.deltaX1 -=1
   if End       +Shift  and Alt=false                     then var.deltaX2 -=0.002 cm
   if Delete    +Shift  and Alt=false                     then var.deltaX2 +=0.002 cm
   if End       +Alt    and Shift=false                   then var.deltaX3 -=0.002 cm
   if Delete    +Alt    and Shift=false                   then var.deltaX3 +=0.002 cm

   if PageUp            and Shift=false and Alt=false     then var.deltaY1 -=1
   if PageDown          and Shift=false and Alt=false     then var.deltaY1 +=1
   if PageUp    +Shift  and Alt=false                     then var.deltaY2 -=0.002 cm
   if PageDown  +Shift  and Alt=false                     then var.deltaY2 +=0.002 cm
   if PageUp    +Alt    and Shift=false                   then var.deltaY3 -=0.002 cm
   if PageDown  +Alt    and Shift=false                   then var.deltaY3 +=0.002 cm

   if Insert            and Shift=false and Alt=false     then var.deltaZ3 -=0.1 cm
   if Home              and Shift=false and Alt=false     then var.deltaZ3 +=0.1 cm

   if End       +Alt+Shift                                then var.cornerYawSix +=0.005
   if Delete    +Alt+Shift                                then var.cornerYawSix -=0.005

;   var.flagYaxis = false
;   var.flagXaxis = false
;   var.flagZaxis = false
end if
//--------Выкл/Вкл осей X, Y, Z, для режима настройки смещений
if var.flagScrollLock = false then // ScrollLock не нажата, - оси X, Y, Z  включены
   var.flagYaxis = true
   var.flagXaxis = true
   var.flagZaxis = true
end if
if var.flagScrollLock = true then // ScrollLock нажата, - оси X, Y, Z выключены
   var.flagYaxis = false
   var.flagXaxis = false
   var.flagZaxis = false
end if
//==========Конец блока клавиш настройки смещений=======================


//------вкл/выкл автоматического смещения по Y и X
if joystick4.Button18 = true then var.flagAutoX = true
end if
if joystick4.Button18 = false then var.flagAutoX = false
end if
if joystick4.Button19 = true then var.flagAutoY = true
end if
if joystick4.Button19 = false then var.flagAutoY = false
end if

//-----автоматическое смещение по X и Y при повороте по Yaw больше, чем var.autoCorner ---
if (TrackIR1.RealYaw < -var.autoCorner) or (TrackIR1.RealYaw > var.autoCorner) then
    var.autoX = ((TrackIR1.RealYaw)/var.deltaX1)^5
end if
if (TrackIR1.RealYaw < -var.autoCorner) or (TrackIR1.RealYaw > var.autoCorner) then
    var.autoY = ((TrackIR1.RealYaw)/var.deltaY1)^4
end if
if -var.autoCorner < TrackIR1.RealYaw and TrackIR1.RealYaw < var.autoCorner then
    var.autoX = 0
    var.autoY = 0
end if
//==============виды на шесть-слева, на шесть справа=============================
if joystick4.x = -1 then
   var.flagYaw = false // отключаем и обнуляем ось Yaw Трекир5
   var.corner = -1 * var.cornerYawSix // устанавливаем фиксированный угол на "шесть"
   var.invert = -1 // инвертируем оси X и Z
   var.deltaX3 = -1 * |var.deltaX3| // присваиваем нужный знак смещению по X
;   var.deltaY3 = |var.deltaY3| // присваиваем смещению по Y на шесть значение ручного смещения
   var.flagDeltaX3 = true // включаем смещение по X для вида на "шесть"
   var.flagDeltaY3 = true // включаем смещение по Y для вида на "шесть"
   var.flagDeltaZ3 = true // включаем максимальное удаление бронеспинки вида на "шесть"
end if
if joystick4.x = 1 then
   var.flagYaw = false // отключаем и обнуляем ось Yaw Трекир5
   var.corner = 1 * var.cornerYawSix // устанавливаем фиксированный угол на "шесть"
   var.invert = -1 // инвертируем оси X и Z
   var.deltaX3 = |var.deltaX3| // присваиваем нужный знак смещению по X
;   var.deltaY3 = |var.deltaY3| // присваиваем смещению по Y на шесть значение ручного смещения
   var.flagDeltaX3 = true // включаем смещение по X для вида на "шесть"
   var.flagDeltaY3 = true  // включаем смещение по Y для вида на "шесть"
   var.flagDeltaZ3 = true  // включаем максимальное удаление бронеспинки вида на "шесть"
end if
if -1 < joystick4.x < 1 then
   var.flagYaw = true // включаем ось Yaw Трекир5
   var.corner = 0 * var.cornerYawSix// обнуляем фиксированный угол на "шесть"
   var.invert = 1 // отменяем инвертирование оси X и Z
   var.flagDeltaX3 = false // выключаем смещение по X для вида на "шесть"
   var.flagDeltaY3 = false // выключаем смещение по Y для вида на "шесть"
   var.flagDeltaZ3 = false // выключаем максимальное удаление бронеспинки вида на "шесть"
end if
//=============конец блока видов на "шесть"=======================================

//-----------ручное смещение по X (deltaX)----------------------------------------
if joystick4.Button3 = true and TrackIR1.RealYaw < 0 then
   var.flagDeltaX2 = true
   var.deltaX2 = -1 * |var.deltaX2|
end if
if joystick4.Button3 = true and 0 < TrackIR1.RealYaw then
   var.flagDeltaX2 = true
   var.deltaX2 = 1 * |var.deltaX2|
end if
if joystick4.Button3 = false then
   var.flagDeltaX2 = false
end if
//-------------ручное смещение по Y (вверх и вниз)--------------------------------
if joystick0.Button20 = true then
   var.deltaY = |var.deltaY2|
   var.flagDeltaY2 = true
end if
if joystick0.Button19 = true then
   var.deltaY = -var.yUpVSyDown * |var.deltaY2|
   var.flagDeltaY2 = true
end if
if (joystick0.Button20 = false and joystick0.Button19 = false) then
   var.flagDeltaY2 = false
end if

//------------------------------------------------------
FakeTrackir.yaw = (TrackIR1.RealYaw in degrees)/10 * int(var.flagYaw)+ var.corner
FakeTrackir.pitch = (TrackIR1.RealPitch in radians)
FakeTrackir.roll = (TrackIR1.RealRoll in degrees)
var.FakeTrackir.x = (TrackIR1.RealX in cm) * int(var.flagYaxis)* var.invert  + var.autoX  * int(var.flagAutoX)+ var.deltaX2 * int(var.flagDeltaX2) + var.deltaX3 * int(var.flagDeltaX3)
var.FakeTrackir.y = (TrackIR1.RealY in cm) * int(var.flagYaxis)              + var.autoY  * int(var.flagAutoY)+ var.deltaY  * int(var.flagDeltaY2) + var.deltaY3 * int(var.flagDeltaY3)
var.FakeTrackir.z = (TrackIR1.RealZ in cm) * int(var.flagZaxis)* var.invert                                                                        + var.deltaZ3 * int(var.flagDeltaZ3)

//отправка данных в UDP сервер Python для их переcылки оттуда в Opentrack
SendOsc('localhost', 6666, "/glovepie/pithon", FakeTrackir.yaw, FakeTrackir.pitch, FakeTrackir.roll, var.FakeTrackir.x, var.FakeTrackir.y, var.FakeTrackir.z)


;--знаки для копирования в код: | ^

 

Или в этом коде.

Link to comment
Share on other sites

15 минут назад, 154_Viktor сказал:

Или в этом коде.

var.autoCorner = 18 // угол по Yaw начала срабатывания автоматических смещений по X и Y в задней полусфере. Забыл на клавиши настройку назначить, нужно вручную подбирать с шагом +0.5 где-то.

Link to comment
Share on other sites

Только что, 154_Viktor сказал:

Просьба  сделать  кнопку как в старичке (смотреть через прицел) .

Будет. Когда передней полусферой займусь. По плану после видео про заднюю..(этот код)

Link to comment
Share on other sites

2 часа назад, 154_Viktor сказал:

Просьба  сделать  кнопку как в старичке (смотреть через прицел) .

Попробуй на вкладке Опентрека Настройки\Горячие клавиши назначить кнопку на "Центр при удержании". Оно?

  • Like 1
Link to comment
Share on other sites

7 часов назад, 154_Viktor сказал:

Или в этом коде.

 

кусок, отвечающий за автосмещение в задней полусфере:

//=======Пресет смещений и угла для вида на шесть: Истребители=======
var.deltaX1 = 1050 // начальный делитель для автоматическое смещение по оси X
var.deltaY1 = 3310 // начальный делитель для автоматическое смещение по оси Y
var.autoCorner = 18 // угол по Yaw начала срабатывания автоматических смещений по X и Y в задней полусфере.
//=======Конец пресета===================================

//-----автоматическое смещение по X и Y при повороте по Yaw больше, чем var.autoCorner ---
if (TrackIR1.RealYaw < -var.autoCorner) or (TrackIR1.RealYaw > var.autoCorner) then
    var.autoX = ((TrackIR1.RealYaw)/var.deltaX1)^5
end if
if (TrackIR1.RealYaw < -var.autoCorner) or (TrackIR1.RealYaw > var.autoCorner) then
    var.autoY = ((TrackIR1.RealYaw)/var.deltaY1)^4
end if
if -var.autoCorner < TrackIR1.RealYaw and TrackIR1.RealYaw < var.autoCorner then
    var.autoX = 0
    var.autoY = 0
end if

//------------------------------------------------------
var.FakeTrackir.x = (TrackIR1.RealX in cm) + var.autoX
var.FakeTrackir.y = (TrackIR1.RealY in cm) + var.autoY

  • Thanks 2
Link to comment
Share on other sites

  • 2 weeks later...

Работа над оптимизацией смещений идет. Уже в третий раз буду переписывать код, не сразу пришли простые решения в голову, к сожалению у меня это по жизни. Но теперь вроде окончательный вариант нарисовался. Параллельно узнаЮ новое для себя. Всем кто пользуется АОМ очень рекомендую пока изменить в скрипте следующую строчку:

Стоит:              FakeTrackir.yaw = (TrackIR1.RealYaw in degrees)/10

Изменить на: FakeTrackir.yaw = (TrackIR1.RealYaw in degrees) * 0.1

Операцию умножения компьютер делает намного быстрее, чем операцию деления! Это небольшая, но очень важная оптимизация, - плавность обзора должна еще немного улучшиться. Выход видео по смещениям запланировал на след выходные. После опубликования, вероятно, будет просьба =SF=Thresher заняться составлением мануала.

 

 

  • Upvote 1
Link to comment
Share on other sites

72AG_SerWolf

Не перепутайте только точку с запятой :)

  • Like 1
Link to comment
Share on other sites

3 часа назад, 72AG_Olega сказал:

Стоит:              FakeTrackir.yaw = (TrackIR1.RealYaw in degrees)/10

Изменить на: FakeTrackir.yaw = (TrackIR1.RealYaw in degrees) * 0.1

А где это всё искать? Поясни для чайников..

  • Upvote 1
Link to comment
Share on other sites

Кстати, а не проще в плане оптимизации кода использовать If-then-elseif-endif, а не набор нескольких if-then-endif?

Я для двух вариантов значений вообще перед условием присваиваю одно значение, в условии проверяю, надо ли присвоить другое значение. Примерно так:

var.autoX = 0
var.autoy = 0
var.autoZ = 0

if (|var.LR| > var.autoCorner) and var.FlagSix = 1 then
    var.autoX = (((|var.LR|-var.autoCorner)/var.deltaX)^5)*Sign(var.LR) 
    var.autoY = (((|var.LR|-var.autoCorner)/var.deltaY)^4)*Sign(var.LR)
    var.autoZ = (var.FlagSix*((|var.LR|-var.autoCorner)/var.deltaZ^2))
end if

 

ну и для проверки условия, где применимо, использую модуль значения переменной.

 

Link to comment
Share on other sites

=19GvFAB=Ahtuba

Это всего лишь "стиль письма", суть не меняется ))

16 минут назад, =989ShAP=Ahtuba сказал:

Это всего лишь "стиль письма", суть не меняется ))

Там в модуле операторов то пять с половинкой штук, для компилятора это ерунда ))

 

Link to comment
Share on other sites

Мне с некоторых пор не нравятся конструкции условий с продожением else if... Там второе условие обязательно проверяется, и с ним бывают накладки. Можно чуть сэкономить, если это второе условие (которое обязательное) не упоминать вообще, оставив только первое. ☺️

8 часов назад, Void сказал:

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

Стараюсь операции присваивания заменить на проверку логических флагов, она происходит раз в десять быстрее. Я уже напоролся с операциями присваивания на сглаживание Опентрека съедающее малые приращения.😬

 

ЗЫ: третий раз код с новыми идеями не зашел.(Тот, что выкладывал выше это был первый вариант)  Откатился на второй вариант. На неделе буду облётывать...

Link to comment
Share on other sites

Олег, в англоязычной версии мануала ошибка:

C:\Users\Olega\AppData\Local\Programs\Python\Python37>python -m pip install python-os

 

отсутствует "С" в конце. Траблшутили сейчас с камрадом )

Link to comment
Share on other sites

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

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...