-
Немного об Optitrack SDK и TrackIR
Дата: Апрель 24th, 2010 Neill Комментариев нетВ этой записи я расскажу немного об опыте работы с Optitrack SDK и подключении устройства TrackIR.
Особенности TrackIR с Optitrack SDK
Данным девайсом можно управлять из Optitrack SDK, однако есть некоторые особенности:
- вектор возвращает определяемое положение 6DOF для устройства или используемого TrackClip. Причем возможно получение только одного вектора за кадр.
- каждый кадр при работе с TrackIR не имеет индектификатора, точнее id всегда равен 0, в отличие от Optitrack камер.
- TrackIR имеет фиксированный фпс и при его смене вовсе возвращается значение -1 без ошибки выполнения функции. Так что лучше так даже и не делать.
Лаг передачи данных
При работе с Optitrack SDK в передаче данных присутствовал лаг, отставание данных от производимых действий. Причиной этого стало использование сглаживания вектора, хотя подобная операция и была добавлена по документации к Optitrack SDK. Но все же информацию всегда можно профильтровать, а иногда нужно получить их с как можно большей точностью.
Само же сглаживание выполняется через интерфейс INPSmoothing
CComPtr<INPSmoothing> m_spSmoothingDot;
CComPtr<INPSmoothing> m_spSmoothingYaw;
CComPtr<INPSmoothing> m_spSmoothingPitch;
CComPtr<INPSmoothing> m_spSmoothingRoll;
CComPtr<INPSmoothing> m_spSmoothingX;
CComPtr<INPSmoothing> m_spSmoothingY;
CComPtr<INPSmoothing> m_spSmoothingZ;
и сам код
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16// now smooth the values
m_spSmoothingYaw->Update(varYaw, varEmpty);
m_spSmoothingPitch->Update(varPitch, varEmpty);
m_spSmoothingRoll->Update(varRoll, varEmpty);
m_spSmoothingX->Update(varX, varEmpty);
m_spSmoothingY->Update(varY, varEmpty);
m_spSmoothingZ->Update(varZ, varEmpty);
// get the smoothed data
m_spSmoothingYaw->get_X(&varYaw);
m_spSmoothingPitch->get_X(&varPitch);
m_spSmoothingRoll->get_X(&varRoll);
m_spSmoothingX->get_X(&varX);
m_spSmoothingY->get_X(&varY);
m_spSmoothingZ->get_X(&varZ);
// now smooth the values m_spSmoothingYaw->Update(varYaw, varEmpty); m_spSmoothingPitch->Update(varPitch, varEmpty); m_spSmoothingRoll->Update(varRoll, varEmpty); m_spSmoothingX->Update(varX, varEmpty); m_spSmoothingY->Update(varY, varEmpty); m_spSmoothingZ->Update(varZ, varEmpty);
// get the smoothed data m_spSmoothingYaw->get_X(&varYaw); m_spSmoothingPitch->get_X(&varPitch); m_spSmoothingRoll->get_X(&varRoll); m_spSmoothingX->get_X(&varX); m_spSmoothingY->get_X(&varY); m_spSmoothingZ->get_X(&varZ);Постоянная передача данных
По умолчанию так настроено, что при отсутствии данных в области видимости камеры, кадр не обрабатывается. Это не всегда может быть удобно, на это нужно рассчитывать скажем так. Переключение данного режима в постоянную работу даже при отсутсвии данных выполняется следующим методом:
Программирование device, Optitrack, SDK, Tips, TrackIR1
2
3
4
5CComVariant var = (bool) true;
// don't skip empty frames
m_spCamera->SetOption( NP_OPTION_SEND_EMPTY_FRAMES, var );Добавить комментарий


Свежие комментарии