Моделирование восприятия

Вы хотите создать автоматический тест для приложения? Вы хотите, чтобы ваши тесты выходят за рамки модульного тестирования на уровне компонентов и действительно выполняют комплексное выполнение приложения? Имитация восприятия — это то, что вы ищете. Библиотека имитации восприятия отправляет в приложение входные данные о людях и мире, чтобы вы могли автоматизировать тесты. Например, можно имитировать входные данные человека, который смотрит на определенную, повторяемую позицию, а затем использовать жест или контроллер движения.

Имитация восприятия может отправлять имитированные входные данные в физический объект HoloLens, эмулятор HoloLens (первого поколения), эмулятор HoloLens 2 или компьютер с установленным порталом Смешанная реальность. Имитация восприятия обходит динамические датчики на Смешанная реальность устройстве и отправляет имитированные входные данные в приложения, работающие на устройстве. Приложения получают эти события ввода через те же API, которые они всегда используют, и не могут определить разницу между выполнением с реальными датчиками и имитацией восприятия. Имитация восприятия — это та же технология, которая используется эмуляторами HoloLens для отправки имитированных входных данных на виртуальную машину HoloLens.

Чтобы начать использовать имитацию в коде, создайте объект IPerceptionSimulationManager. Из этого объекта можно выполнять команды для управления свойствами имитированного "человека", включая положение головы, положение руки и жесты. Вы также можете включить контроллеры движения и управлять ими.

Настройка проекта Visual Studio для имитации восприятия

  1. Установите эмулятор HoloLens на компьютере разработки . Эмулятор включает библиотеки, используемые для имитации восприятия.

  2. Создайте новый классический проект Visual Studio C# (консольный проект отлично подходит для начала работы).

  3. Добавьте следующие двоичные файлы в проект в качестве ссылок (Project-Add-Reference>>...). Их можно найти в папке %ProgramFiles(x86)%\Microsoft XDE\(version), например %ProgramFiles(x86)%\Microsoft XDE\10.0.18362.0 для эмулятора HoloLens 2.

    Примечание

    Хотя двоичные файлы являются частью эмулятора HoloLens 2, они также работают для Windows Mixed Reality на рабочем столе.)

    а. PerceptionSimulationManager.Interop.dll — управляемая оболочка C# для имитации восприятия.
    b. PerceptionSimulationRest.dll — библиотека для настройки канала связи через веб-сокет для HoloLens или эмулятора.
    c. SimulationStream.Interop.dll — общие типы для моделирования.

  4. Добавление двоичного PerceptionSimulationManager.dll реализации в проект

    а. Сначала добавьте его в качестве двоичного файла в проект (Project-Add-Existing>> Item...). Сохраните его как ссылку, чтобы не копировать его в исходную папку проекта.
    Добавление PerceptionSimulationManager.dll в проект в виде ссылки

    b. Затем убедитесь, что он копируется в выходную папку при сборке. Он находится на странице свойств двоичного файла.
    Пометка PerceptionSimulationManager.dll для копирования в выходной каталог

  5. Задайте для активной платформы решения значение x64. (Используйте Configuration Manager, чтобы создать запись Платформы для x64, если она еще не существует.)

Создание объекта IPerceptionSimulation Manager

Чтобы управлять имитацией, вы будете выпускать обновления для объектов, полученных из объекта IPerceptionSimulationManager. Первым шагом является получение этого объекта и его подключение к целевому устройству или эмулятору. Вы можете получить IP-адрес эмулятора, нажав кнопку Портал устройств на панели инструментов.

Значок открыть портал устройствОткрыть портал устройств: откройте портал устройств Windows для ОС HoloLens в эмуляторе. Для Windows Mixed Reality его можно получить в приложении "Параметры" в разделе "Обновление & безопасность", а затем "Для разработчиков" в разделе "Подключение с помощью:" в разделе "Включить портал устройств". Обязательно запишите IP-адрес и порт.

Сначала вызовите RestSimulationStreamSink.Create, чтобы получить объект RestSimulationStreamSink. Это целевое устройство или эмулятор, которым вы будете управлять http-подключением. Ваши команды будут переданы и обработаны порталом устройств Windows , работающим на устройстве или эмуляторе. Четыре параметра, необходимые для создания объекта:

  • URI — IP-адрес целевого устройства (например, "https://123.123.123.123" или "https://123.123.123.123:50080")
  • Учетные данные System.Net.NetworkCredential — имя пользователя или пароль для подключения к порталу устройств Windows на целевом устройстве или эмуляторе. Если вы подключаетесь к эмулятору по его локальному адресу (например, 168... *) на том же компьютере будут приняты все учетные данные.
  • bool normal — true для нормального приоритета, false — для низкого приоритета. Обычно требуется задать для этого параметра значение true для тестовых сценариев, что позволяет тесту управлять. Эмулятор и Windows Mixed Reality имитация используют низкоприоритетные подключения. Если тест также использует низкоприоритетное подключение, последнее установленное подключение будет контролироваться.
  • Токен System.Threading.CancellationToken — маркер для отмены асинхронной операции.

Во-вторых, вы создадите IPerceptionSimulationManager. Это объект, используемый для управления имитацией. Это также необходимо сделать в асинхронном методе.

Управление имитируемым человеком

IPerceptionSimulationManager имеет свойство Human, которое возвращает объект ISimulatedHuman. Чтобы управлять имитируемым человеком, выполните операции с этим объектом. Пример:

manager.Human.Move(new Vector3(0.1f, 0.0f, 0.0f))

Базовый пример консольного приложения C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.PerceptionSimulation;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Task.Run(async () =>
            {
                RestSimulationStreamSink sink = null;
                CancellationToken token = new System.Threading.CancellationToken();

                try
                {
                    sink = await RestSimulationStreamSink.Create(
                        // use the IP address for your device/emulator
                        new Uri("https://169.254.227.115"),
                        // no credentials are needed for the emulator
                        new System.Net.NetworkCredential("", ""),
                        // normal priorty
                        true,
                        // cancel token
                        token);

                    IPerceptionSimulationManager manager = PerceptionSimulationManager.CreatePerceptionSimulationManager(sink);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                }

                // Always close the sink to return control to the previous application.
                if (sink != null)
                {
                    await sink.Close(token);
                }
            });

            // If main exits, the process exits.  
            Console.WriteLine("Press any key to exit...");
            Console.ReadLine();
        }
    }
}

Расширенный пример консольного приложения C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.PerceptionSimulation;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            RestSimulationStreamSink sink = null;
            CancellationToken token = new System.Threading.CancellationToken();

            Task.Run(async () =>
            {
                try
                {
                    sink = await RestSimulationStreamSink.Create(
                        // use the IP address for your device/emulator
                        new Uri("https://169.254.227.115"),
                        // no credentials are needed for the emulator
                        new System.Net.NetworkCredential("", ""),
                        // normal priorty
                        true,
                        // cancel token
                        token);

                    IPerceptionSimulationManager manager = PerceptionSimulationManager.CreatePerceptionSimulationManager(sink);

                    // Now, we'll simulate a sequence of actions.
                    // Sleeps in-between each action give time to the system
                    // to be able to properly react.
                    // This is just an example. A proper automated test should verify
                    // that the app has behaved correctly
                    // before proceeding to the next step, instead of using Sleeps.

                    // Activate the right hand
                    manager.Human.RightHand.Activated = true;

                    // Simulate Bloom gesture, which should cause Shell to disappear
                    manager.Human.RightHand.PerformGesture(SimulatedGesture.Home);
                    Thread.Sleep(2000);

                    // Simulate Bloom gesture again... this time, Shell should reappear
                    manager.Human.RightHand.PerformGesture(SimulatedGesture.Home);
                    Thread.Sleep(2000);

                    // Simulate a Head rotation down around the X axis
                    // This should cause gaze to aim about the center of the screen
                    manager.Human.Head.Rotate(new Rotation3(0.04f, 0.0f, 0.0f));
                    Thread.Sleep(300);

                    // Simulate a finger press & release
                    // Should cause a tap on the center tile, thus launching it
                    manager.Human.RightHand.PerformGesture(SimulatedGesture.FingerPressed);
                    Thread.Sleep(300);
                    manager.Human.RightHand.PerformGesture(SimulatedGesture.FingerReleased);
                    Thread.Sleep(2000);

                    // Simulate a second finger press & release
                    // Should activate the app that was launched when the center tile was clicked
                    manager.Human.RightHand.PerformGesture(SimulatedGesture.FingerPressed);
                    Thread.Sleep(300);
                    manager.Human.RightHand.PerformGesture(SimulatedGesture.FingerReleased);
                    Thread.Sleep(5000);

                    // Simulate a Head rotation towards the upper right corner
                    manager.Human.Head.Rotate(new Rotation3(-0.14f, 0.17f, 0.0f));
                    Thread.Sleep(300);

                    // Simulate a third finger press & release
                    // Should press the Remove button on the app
                    manager.Human.RightHand.PerformGesture(SimulatedGesture.FingerPressed);
                    Thread.Sleep(300);
                    manager.Human.RightHand.PerformGesture(SimulatedGesture.FingerReleased);
                    Thread.Sleep(2000);

                    // Simulate Bloom gesture again... bringing the Shell back once more
                    manager.Human.RightHand.PerformGesture(SimulatedGesture.Home);
                    Thread.Sleep(2000);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                }
            });

            // If main exits, the process exits.  
            Console.WriteLine("Press any key to exit...");
            Console.ReadLine();

            // Always close the sink to return control to the previous application.
            if (sink != null)
            {
                sink.Close(token);
            }
        }
    }
}

Примечание на контроллерах 6 DOF

Перед вызовом каких-либо свойств методов на имитированном контроллере 6 DOF необходимо активировать контроллер. Если этого не сделать, возникнет исключение. Начиная с обновление Windows 10 за май 2019 г. можно установить и активировать имитированные 6-DOF-контроллеры, задав для свойства Status объекта ISimulatedSixDofController значение SimulatedSixDofControllerStatus.Active. В обновление Windows 10 за октябрь 2018 г. и более ранних версиях необходимо отдельно установить имитированный контроллер 6-DOF, вызвав средство PerceptionSimulationDevice, расположенное в папке \Windows\System32. Этот инструмент используется следующим образом:

    PerceptionSimulationDevice.exe <action> 6dof <instance>

Например.

    PerceptionSimulationDevice.exe i 6dof 1

Поддерживаемые действия:

  • i = install
  • q = запрос
  • r = удалить

Поддерживаемые экземпляры:

  • 1 = левый контроллер 6 DOF
  • 2 = правильный контроллер 6 DOF

Код завершения процесса будет указывать на успешное (нулевое возвращаемое значение) или сбой (ненулевое возвращаемое значение). При использовании действия q для запроса на установку контроллера возвращаемое значение будет равно нулю (0), если контроллер еще не установлен, или одному (1) при установке контроллера.

При удалении контроллера на обновление Windows 10 за октябрь 2018 г. или более ранней версии сначала установите для него состояние Выкл. через API, а затем вызовите средство PerceptionSimulationDevice.

Это средство должно быть запущено от имени администратора.

Справочник по API

Microsoft.PerceptionSimulation.SimulatedDeviceType

Описание имитированного типа устройства

public enum SimulatedDeviceType
{
    Reference = 0
}

Microsoft.PerceptionSimulation.SimulatedDeviceType.Reference

Вымышленное эталонное устройство, значение по умолчанию для PerceptionSimulationManager

Microsoft.PerceptionSimulation.HeadTrackerMode

Описание режима отслеживания головы

public enum HeadTrackerMode
{
    Default = 0,
    Orientation = 1,
    Position = 2
}

Microsoft.PerceptionSimulation.HeadTrackerMode.Default

Отслеживание головы по умолчанию. Это означает, что система может выбрать оптимальный режим отслеживания головы в зависимости от условий выполнения.

Microsoft.PerceptionSimulation.HeadTrackerMode.Orientation

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

Microsoft.PerceptionSimulation.HeadTrackerMode.Position

Отслеживание позиционной головы. Это означает, что положение и ориентация отслеживаемой головы являются надежными.

Microsoft.PerceptionSimulation.SimulatedGesture

Описание имитированного жеста

public enum SimulatedGesture
{
    None = 0,
    FingerPressed = 1,
    FingerReleased = 2,
    Home = 4,
    Max = Home
}

Microsoft.PerceptionSimulation.SimulatedGesture.None

Значение sentinel, используемое для указания отсутствия жестов.

Microsoft.PerceptionSimulation.SimulatedGesture.FingerPressed

Жест нажатия пальца.

Microsoft.PerceptionSimulation.SimulatedGesture.FingerReleased

Жест отпускания пальца.

Microsoft.PerceptionSimulation.SimulatedGesture.Home

Жест домашней или системной страницы.

Microsoft.PerceptionSimulation.SimulatedGesture.Max

Максимально допустимый жест.

Microsoft.PerceptionSimulation.SimulatedSixDofControllerStatus

Возможные состояния имитированного контроллера 6-DOF.

public enum SimulatedSixDofControllerStatus
{
    Off = 0,
    Active = 1,
    TrackingLost = 2,
}

Microsoft.PerceptionSimulation.SimulatedSixDofControllerStatus.Off

Контроллер 6-DOF отключен.

Microsoft.PerceptionSimulation.SimulatedSixDofControllerStatus.Active

Контроллер 6-DOF включен и отслеживается.

Microsoft.PerceptionSimulation.SimulatedSixDofControllerStatus.TrackingLost

Контроллер 6-DOF включен, но его невозможно отслеживать.

Microsoft.PerceptionSimulation.SimulatedSixDofControllerButton

Поддерживаемые кнопки на имитированном контроллере 6 DOF.

public enum SimulatedSixDofControllerButton
{
    None = 0,
    Home = 1,
    Menu = 2,
    Grip = 4,
    TouchpadPress = 8,
    Select = 16,
    TouchpadTouch = 32,
    Thumbstick = 64,
    Max = Thumbstick
}

Microsoft.PerceptionSimulation.SimulatedSixDofControllerButton.None

Значение sentinel, используемое для указания отсутствия кнопок.

Microsoft.PerceptionSimulation.SimulatedSixDofControllerButton.Home

Нажата кнопка Домой.

Microsoft.PerceptionSimulation.SimulatedSixDofControllerButton.Menu

Нажата кнопка Меню.

Microsoft.PerceptionSimulation.SimulatedSixDofControllerButton.Grip

Нажата кнопка Захвата.

Microsoft.PerceptionSimulation.SimulatedSixDofControllerButton.TouchpadPress

Нажата сенсорная панель.

Microsoft.PerceptionSimulation.SimulatedSixDofControllerButton.Select

Нажата кнопка Выбрать.

Microsoft.PerceptionSimulation.SimulatedSixDofControllerButton.TouchpadTouch

Касание сенсорной панели.

Microsoft.PerceptionSimulation.SimulatedSixDofControllerButton.Thumbstick

Нажата клавиша Thumbstick.

Microsoft.PerceptionSimulation.SimulatedSixDofControllerButton.Max

Максимально допустимая кнопка.

Microsoft.PerceptionSimulation.SimulatedEyesCalibrationState

Состояние калибровки смоделированных глаз

public enum SimulatedGesture
{
    Unavailable = 0,
    Ready = 1,
    Configuring = 2,
    UserCalibrationNeeded = 3
}

Microsoft.PerceptionSimulation.SimulatedEyesCalibrationState.Unavailable

Калибровка глаз недоступна.

Microsoft.PerceptionSimulation.SimulatedEyesCalibrationState.Ready

Глаза были откалиброваны. Это значение по умолчанию.

Microsoft.PerceptionSimulation.SimulatedEyesCalibrationState.Configuring

Глаза откалибровываются.

Microsoft.PerceptionSimulation.SimulatedEyesCalibrationState.UserCalibrationNeeded

Глаза должны быть откалиброваны.

Microsoft.PerceptionSimulation.SimulatedHandJointTrackingAccuracy

Точность отслеживания соединения руки.

public enum SimulatedHandJointTrackingAccuracy
{
    Unavailable = 0,
    Approximate = 1,
    Visible = 2
}

Microsoft.PerceptionSimulation.SimulatedHandJointTrackingAccuracy.Unavailable

Сустав не отслеживается.

Microsoft.PerceptionSimulation.SimulatedHandJointTrackingAccuracy.Approximate

Определяется положение суставов.

Microsoft.PerceptionSimulation.SimulatedHandJointTrackingAccuracy.Visible

Сустав полностью отслеживается.

Microsoft.PerceptionSimulation.SimulatedHandPose

Точность отслеживания соединения руки.

public enum SimulatedHandPose
{
    Closed = 0,
    Open = 1,
    Point = 2,
    Pinch = 3,
    Max = Pinch
}

Microsoft.PerceptionSimulation.SimulatedHandPose.Closed

Суставы пальцев руки настроены для отражения закрытой позы.

Microsoft.PerceptionSimulation.SimulatedHandPose.Open

Суставы пальцев руки настроены для отражения открытой позы.

Microsoft.PerceptionSimulation.SimulatedHandPose.Point

Суставы пальцев руки настроены для отражения положения указателя.

Microsoft.PerceptionSimulation.SimulatedHandPose.Pinch

Суставы пальцев руки настроены таким образом, чтобы отразить позу сжатия.

Microsoft.PerceptionSimulation.SimulatedHandPose.Max

Максимально допустимое значение для SimulatedHandPose.

Microsoft.PerceptionSimulation.PlaybackState

Описывает состояние воспроизведения.

public enum PlaybackState
{
    Stopped = 0,
    Playing = 1,
    Paused = 2,
    End = 3,
}

Microsoft.PerceptionSimulation.PlaybackState.Stopped

Запись сейчас остановлена и готова к воспроизведению.

Microsoft.PerceptionSimulation.PlaybackState.Playing

Запись в настоящее время воспроизводит.

Microsoft.PerceptionSimulation.PlaybackState.Paused

Запись в настоящее время приостановлена.

Microsoft.PerceptionSimulation.PlaybackState.End

Запись подошла к концу.

Microsoft.PerceptionSimulation.Vector3

Описывает вектор из трех компонентов, который может описывать точку или вектор в трехмерном пространстве.

public struct Vector3
{
    public float X;
    public float Y;
    public float Z;
    public Vector3(float x, float y, float z);
}

Microsoft.PerceptionSimulation.Vector3.X

Координата X вектора.

Microsoft.PerceptionSimulation.Vector3.Y

Координата Y вектора.

Microsoft.PerceptionSimulation.Vector3.Z

Координата Z вектора.

Microsoft.PerceptionSimulation.Vector3.#ctor(System.Single,System.Single,System.Single)

Создайте новый Vector3.

Параметры

  • x — компонент x вектора.
  • y — компонент y вектора.
  • z — компонент z вектора.

Microsoft.PerceptionSimulation.Rotation3

Описывает смену трех компонентов.

public struct Rotation3
{
    public float Pitch;
    public float Yaw;
    public float Roll;
    public Rotation3(float pitch, float yaw, float roll);
}

Microsoft.PerceptionSimulation.Rotation3.Pitch

Компонент Шаг поворота вниз по оси X.

Microsoft.PerceptionSimulation.Rotation3.Yaw

Компонент Yaw поворота прямо вокруг оси Y.

Microsoft.PerceptionSimulation.Rotation3.Roll

Компонент Roll в повороте, прямо вокруг оси Z.

Microsoft.PerceptionSimulation.Rotation3.#ctor(System.Single,System.Single,System.Single)

Создайте новый объект Rotation3.

Параметры

  • pitch — компонент поворота.
  • yaw — компонент поворота.
  • roll — компонент поворота.

Microsoft.PerceptionSimulation.SimulatedHandJointConfiguration

Описывает конфигурацию соединения на имитированной руке.

public struct SimulatedHandJointConfiguration
{
    public Vector3 Position;
    public Rotation3 Rotation;
    public SimulatedHandJointTrackingAccuracy TrackingAccuracy;
}

Microsoft.PerceptionSimulation.SimulatedHandJointConfiguration.Position

Положение суставов.

Microsoft.PerceptionSimulation.SimulatedHandJointConfiguration.Rotation

Поворот суставов.

Microsoft.PerceptionSimulation.SimulatedHandJointConfiguration.TrackingAccuracy

Точность отслеживания соединения.

Microsoft.PerceptionSimulation.Frustum

Описывает режим просмотра, который обычно используется камерой.

public struct Frustum
{
    float Near;
    float Far;
    float FieldOfView;
    float AspectRatio;
}

Microsoft.PerceptionSimulation.Frustum.Near

Минимальное расстояние, содержащееся в frustum.

Microsoft.PerceptionSimulation.Frustum.Far

Максимальное расстояние, содержащееся в frustum.

Microsoft.PerceptionSimulation.Frustum.FieldOfView

Горизонтальное поле зрения frustum в радианах (меньше ПИ).

Microsoft.PerceptionSimulation.Frustum.AspectRatio

Отношение горизонтального поля зрения к вертикальному полю зрения.

Microsoft.PerceptionSimulation.SimulatedDisplayConfiguration

Описывает конфигурацию дисплея имитированной гарнитуры.

public struct SimulatedDisplayConfiguration
{
    public Vector3 LeftEyePosition;
    public Rotation3 LeftEyeRotation;
    public Vector3 RightEyePosition;
    public Rotation3 RightEyeRotation;
    public float Ipd;
    public bool ApplyEyeTransforms;
    public bool ApplyIpd;
}

Microsoft.PerceptionSimulation.SimulatedDisplayConfiguration.LeftEyePosition

Преобразование из центра головы в левый глаз для стерео отрисовки.

Microsoft.PerceptionSimulation.SimulatedDisplayConfiguration.LeftEyeRotation

Поворот левого глаза для стерео отрисовки.

Microsoft.PerceptionSimulation.SimulatedDisplayConfiguration.RightEyePosition

Преобразование от центра головы к правому глазу для стерео отрисовки.

Microsoft.PerceptionSimulation.SimulatedDisplayConfiguration.RightEyeRotation

Поворот правого глаза для стерео отрисовки.

Microsoft.PerceptionSimulation.SimulatedDisplayConfiguration.Ipd

Значение IPD, сообщаемое системой для стерео отрисовки.

Microsoft.PerceptionSimulation.SimulatedDisplayConfiguration.ApplyEyeTransforms

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

Microsoft.PerceptionSimulation.SimulatedDisplayConfiguration.ApplyIpd

Должно ли значение, указанное для ipd, считаться допустимым и применяться к работающей системе.

Microsoft.PerceptionSimulation.IPerceptionSimulationManager

Root для создания пакетов, используемых для управления устройством.

public interface IPerceptionSimulationManager
{   
    ISimulatedDevice Device { get; }
    ISimulatedHuman Human { get; }
    void Reset();
}

Microsoft.PerceptionSimulation.IPerceptionSimulationManager.Device

Извлеките объект имитированного устройства, который интерпретирует имитированного человека и имитированный мир.

Microsoft.PerceptionSimulation.IPerceptionSimulationManager.Human

Получите объект, который управляет имитируемым человеком.

Microsoft.PerceptionSimulation.IPerceptionSimulationManager.Reset

Сбрасывает симуляцию в состояние по умолчанию.

Microsoft.PerceptionSimulation.ISimulatedDevice

Интерфейс, описывающий устройство, которое интерпретирует имитированный мир и имитированного человека

public interface ISimulatedDevice
{
    ISimulatedHeadTracker HeadTracker { get; }
    ISimulatedHandTracker HandTracker { get; }
    void SetSimulatedDeviceType(SimulatedDeviceType type);
}

Microsoft.PerceptionSimulation.ISimulatedDevice.HeadTracker

Получите средство отслеживания головы из имитированного устройства.

Microsoft.PerceptionSimulation.ISimulatedDevice.HandTracker

Получите средство отслеживания рук из имитированного устройства.

Microsoft.PerceptionSimulation.ISimulatedDevice.SetSimulatedDeviceType(Microsoft.PerceptionSimulation.SimulatedDeviceType)

Задайте свойства имитированного устройства в соответствии с указанным типом устройства.

Параметры

  • type — новый тип имитированного устройства.

Microsoft.PerceptionSimulation.ISimulatedDevice2

Дополнительные свойства доступны путем приведения ISimulatedDevice к ISimulatedDevice2

public interface ISimulatedDevice2
{
    bool IsUserPresent { [return: MarshalAs(UnmanagedType.Bool)] get; [param: MarshalAs(UnmanagedType.Bool)] set; }
    SimulatedDisplayConfiguration DisplayConfiguration { get; set; }

};

Microsoft.PerceptionSimulation.ISimulatedDevice2.IsUserPresent

Получение или установка того, будет ли имитированный человек активно носить гарнитуру.

Microsoft.PerceptionSimulation.ISimulatedDevice2.DisplayConfiguration

Получение или задание свойств имитированного дисплея.

Microsoft.PerceptionSimulation.ISimulatedHeadTracker

Интерфейс, описывающий часть имитированного устройства, которая отслеживает голову имитированного человека.

public interface ISimulatedHeadTracker
{
    HeadTrackerMode HeadTrackerMode { get; set; }
};

Microsoft.PerceptionSimulation.ISimulatedHeadTracker.HeadTrackerMode

Извлекает и задает текущий режим отслеживания головы.

Microsoft.PerceptionSimulation.ISimulatedHandTracker

Интерфейс, описывающий часть имитированного устройства, которая отслеживает руки имитированного человека

public interface ISimulatedHandTracker
{
    Vector3 WorldPosition { get; }
    Vector3 Position { get; set; }
    float Pitch { get; set; }
    bool FrustumIgnored { [return: MarshalAs(UnmanagedType.Bool)] get; [param: MarshalAs(UnmanagedType.Bool)] set; }
    Frustum Frustum { get; set; }
}

Microsoft.PerceptionSimulation.ISimulatedHandTracker.WorldPosition

Получение положения узла по отношению к миру в метрах.

Microsoft.PerceptionSimulation.ISimulatedHandTracker.Position

Получение и установка положения смоделированного средства отслеживания рук относительно центра головы.

Microsoft.PerceptionSimulation.ISimulatedHandTracker.Pitch

Извлеките и задайте нисходящий шаг имитированного средства отслеживания рук.

Microsoft.PerceptionSimulation.ISimulatedHandTracker.FrustumIgnored

Извлекает и задает, игнорируется ли значение frustum имитированного средства отслеживания рук. При игнорировании обе руки всегда видны. Если они не игнорируются (по умолчанию), руки видны только в том случае, если они находятся в пределах рамки средства отслеживания рук.

Microsoft.PerceptionSimulation.ISimulatedHandTracker.Frustum

Извлеките и задайте свойства frustum, используемые для определения видимости рук для имитированного средства отслеживания рук.

Microsoft.PerceptionSimulation.ISimulatedHuman

Интерфейс верхнего уровня для управления имитируемым человеком.

public interface ISimulatedHuman 
{
    Vector3 WorldPosition { get; set; }
    float Direction { get; set; }
    float Height { get; set; }
    ISimulatedHand LeftHand { get; }
    ISimulatedHand RightHand { get; }
    ISimulatedHead Head { get; }s
    void Move(Vector3 translation);
    void Rotate(float radians);
}

Microsoft.PerceptionSimulation.ISimulatedHuman.WorldPosition

Получение и установка положения узла по отношению к миру в метрах. Положение соответствует точке в центре ног человека.

Microsoft.PerceptionSimulation.ISimulatedHuman.Direction

Извлеките и задайте направление смоделированных человеческих лиц в мире. 0 радианов обращены вниз по отрицательной оси Z. Положительные радианы вращаются по часовой стрелке вокруг оси Y.

Microsoft.PerceptionSimulation.ISimulatedHuman.Height

Получение и установка высоты имитированного человека в метрах.

Microsoft.PerceptionSimulation.ISimulatedHuman.LeftHand

Извлеките левую руку имитированного человека.

Microsoft.PerceptionSimulation.ISimulatedHuman.RightHand

Получение правой руки имитированного человека.

Microsoft.PerceptionSimulation.ISimulatedHuman.Head

Получение головы имитированного человека.

Microsoft.PerceptionSimulation.ISimulatedHuman.Move(Microsoft.PerceptionSimulation.Vector3)

Перемещение имитированного человека относительно его текущего положения в метрах.

Параметры

  • translation — перевод для перемещения относительно текущей позиции.

Microsoft.PerceptionSimulation.ISimulatedHuman.Rotate(System.Single)

Поворот имитированного человека относительно его текущего направления по часовой стрелке вокруг оси Y

Параметры

  • radians — величина, вращаемая вокруг оси Y.

Microsoft.PerceptionSimulation.ISimulatedHuman2

Дополнительные свойства доступны путем приведения ISimulatedHuman к ISimulatedHuman2

public interface ISimulatedHuman2
{
    /* New members in addition to those available on ISimulatedHuman */
    ISimulatedSixDofController LeftController { get; }
    ISimulatedSixDofController RightController { get; }
}

Microsoft.PerceptionSimulation.ISimulatedHuman2.LeftController

Получите левый контроллер 6 DOF.

Microsoft.PerceptionSimulation.ISimulatedHuman2.RightController

Получите правильный контроллер 6 DOF.

Microsoft.PerceptionSimulation.ISimulatedHand

Интерфейс, описывающий руку имитированного человека

public interface ISimulatedHand
{
    Vector3 WorldPosition { get; }
    Vector3 Position { get; set; }
    bool Activated { [return: MarshalAs(UnmanagedType.Bool)] get; [param: MarshalAs(UnmanagedType.Bool)] set; }
    bool Visible { [return: MarshalAs(UnmanagedType.Bool)] get; }
    void EnsureVisible();
    void Move(Vector3 translation);
    void PerformGesture(SimulatedGesture gesture);
}

Microsoft.PerceptionSimulation.ISimulatedHand.WorldPosition

Получение положения узла по отношению к миру в метрах.

Microsoft.PerceptionSimulation.ISimulatedHand.Position

Получение и установка положения имитированной руки относительно человека в метрах.

Microsoft.PerceptionSimulation.ISimulatedHand.Activated

Получение и установка того, активирована ли рука в данный момент.

Microsoft.PerceptionSimulation.ISimulatedHand.Visible

Получение сведений о том, является ли рука видимой в данный момент для SimulatedDevice (то есть находится ли она в положении для обнаружения HandTracker).

Microsoft.PerceptionSimulation.ISimulatedHand.EnsureVisible

Переместите руку таким образом, чтобы она была видна для SimulatedDevice.

Microsoft.PerceptionSimulation.ISimulatedHand.Move(Microsoft.PerceptionSimulation.Vector3)

Перемещение положения смоделированной руки относительно текущего положения в метрах.

Параметры

  • translation — сумма для перевода имитированной руки.

Microsoft.PerceptionSimulation.ISimulatedHand.PerformGesture(Microsoft.PerceptionSimulation.SimulatedGesture)

Выполните жест с помощью имитированной руки. Он будет обнаружен системой, только если рука включена.

Параметры

  • жест — жест для выполнения.

Microsoft.PerceptionSimulation.ISimulatedHand2

Дополнительные свойства доступны путем приведения ISimulatedHand к ISimulatedHand2.

public interface ISimulatedHand2
{
    /* New members in addition to those available on ISimulatedHand */
    Rotation3 Orientation { get; set; }
}

Microsoft.PerceptionSimulation.ISimulatedHand2.Orientation

Получение или установка поворота имитированной руки. Положительные радианы вращаются по часовой стрелке при поиске вдоль оси.

Microsoft.PerceptionSimulation.ISimulatedHand3

Дополнительные свойства доступны путем приведения ISimulatedHand к ISimulatedHand3

public interface ISimulatedHand3
{
    /* New members in addition to those available on ISimulatedHand and ISimulatedHand2 */
    GetJointConfiguration(SimulatedHandJoint joint, out SimulatedHandJointConfiguration jointConfiguration);
    SetJointConfiguration(SimulatedHandJoint joint, SimulatedHandJointConfiguration jointConfiguration);
    SetHandPose(SimulatedHandPose pose, bool animate);
}

Microsoft.PerceptionSimulation.ISimulatedHand3.GetJointConfiguration

Получите конфигурацию соединения для указанного соединения.

Microsoft.PerceptionSimulation.ISimulatedHand3.SetJointConfiguration

Задайте конфигурацию соединения для указанного соединения.

Microsoft.PerceptionSimulation.ISimulatedHand3.SetHandPose

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

Microsoft.PerceptionSimulation.ISimulatedHead

Интерфейс, описывающий голову имитированного человека.

public interface ISimulatedHead
{
    Vector3 WorldPosition { get; }
    Rotation3 Rotation { get; set; }
    float Diameter { get; set; }
    void Rotate(Rotation3 rotation);
}

Microsoft.PerceptionSimulation.ISimulatedHead.WorldPosition

Получение положения узла по отношению к миру в метрах.

Microsoft.PerceptionSimulation.ISimulatedHead.Rotation

Получение поворота имитированной головы. Положительные радианы вращаются по часовой стрелке при поиске вдоль оси.

Microsoft.PerceptionSimulation.ISimulatedHead.Diameter

Получение диаметра смоделированной головы. Это значение используется для определения центра головы (точки поворота).

Microsoft.PerceptionSimulation.ISimulatedHead.Rotate(Microsoft.PerceptionSimulation.Rotation3)

Поворачивайте имитированную голову относительно текущего поворота. Положительные радианы вращаются по часовой стрелке при поиске вдоль оси.

Параметры

  • rotation — величина для поворота.

Microsoft.PerceptionSimulation.ISimulatedHead2

Дополнительные свойства доступны путем приведения ISimulatedHead к ISimulatedHead2

public interface ISimulatedHead2
{
    /* New members in addition to those available on ISimulatedHead */
    ISimulatedEyes Eyes { get; }
}

Microsoft.PerceptionSimulation.ISimulatedHead2.Eyes

Получение глаз имитированного человека.

Microsoft.PerceptionSimulation.ISimulatedSixDofController

Интерфейс, описывающий контроллер 6 DOF, связанный с имитируемым человеком.

public interface ISimulatedSixDofController
{
    Vector3 WorldPosition { get; }
    SimulatedSixDofControllerStatus Status { get; set; }
    Vector3 Position { get; }
    Rotation3 Orientation { get; set; }
    void Move(Vector3 translation);
    void PressButton(SimulatedSixDofControllerButton button);
    void ReleaseButton(SimulatedSixDofControllerButton button);
    void GetTouchpadPosition(out float x, out float y);
    void SetTouchpadPosition(float x, float y);
}

Microsoft.PerceptionSimulation.ISimulatedSixDofController.WorldPosition

Получение положения узла по отношению к миру в метрах.

Microsoft.PerceptionSimulation.ISimulatedSixDofController.Status

Получение или установка текущего состояния контроллера. Состояние контроллера должно иметь значение, отличное от Выкл., прежде чем все вызовы для перемещения, поворота или нажатия кнопок будут успешно выполнены.

Microsoft.PerceptionSimulation.ISimulatedSixDofController.Position

Получение или установка положения имитированного контроллера относительно человека в метрах.

Microsoft.PerceptionSimulation.ISimulatedSixDofController.Orientation

Получение или установка ориентации имитированного контроллера.

Microsoft.PerceptionSimulation.ISimulatedSixDofController.Move(Microsoft.PerceptionSimulation.Vector3)

Перемещение положения имитированного контроллера относительно его текущего положения в метрах.

Параметры

  • translation — сумма для преобразования имитированного контроллера.

Microsoft.PerceptionSimulation.ISimulatedSixDofController.PressButton(SimulatedSixDofControllerButton)

Нажмите кнопку на имитированном контроллере. Он будет обнаружен системой, только если контроллер включен.

Параметры

  • button — кнопка для нажатия.

Microsoft.PerceptionSimulation.ISimulatedSixDofController.ReleaseButton(SimulatedSixDofControllerButton)

Отпустите кнопку на имитированном контроллере. Он будет обнаружен системой, только если контроллер включен.

Параметры

  • button — кнопка, отпустимая.

Microsoft.PerceptionSimulation.ISimulatedSixDofController.GetTouchpadPosition(out float, out float)

Получение положения имитированного пальца на сенсорной панели имитированного контроллера.

Параметры

  • x — горизонтальное положение пальца.
  • y — вертикальное положение пальца.

Microsoft.PerceptionSimulation.ISimulatedSixDofController.SetTouchpadPosition(float, float)

Задайте положение имитированного пальца на сенсорной панели имитированного контроллера.

Параметры

  • x — горизонтальное положение пальца.
  • y — вертикальное положение пальца.

Microsoft.PerceptionSimulation.ISimulatedSixDofController2

Дополнительные свойства и методы доступны путем приведения ISimulatedSixDofController к ISimulatedSixDofController2

public interface ISimulatedSixDofController2
{
    /* New members in addition to those available on ISimulatedSixDofController */
    void GetThumbstickPosition(out float x, out float y);
    void SetThumbstickPosition(float x, float y);
    float BatteryLevel { get; set; }
}

Microsoft.PerceptionSimulation.ISimulatedSixDofController2.GetThumbstickPosition(out float, out float)

Получение положения имитированного стик на имитированном контроллере.

Параметры

  • x — горизонтальное положение стик.
  • y — вертикальное положение стик.

Microsoft.PerceptionSimulation.ISimulatedSixDofController2.SetThumbstickPosition(float, float)

Установите положение имитированного стик на имитированном контроллере.

Параметры

  • x — горизонтальное положение стик.
  • y — вертикальное положение стик.

Microsoft.PerceptionSimulation.ISimulatedSixDofController2.BatteryLevel

Получение или установка уровня заряда имитированного контроллера. Значение должно быть больше 0,0 и меньше или равно 100,0.

Microsoft.PerceptionSimulation.ISimulatedEyes

Интерфейс, описывающий глаза имитированного человека.

public interface ISimulatedEyes
{
    Rotation3 Rotation { get; set; }
    void Rotate(Rotation3 rotation);
    SimulatedEyesCalibrationState CalibrationState { get; set; }
    Vector3 WorldPosition { get; }
}

Microsoft.PerceptionSimulation.ISimulatedEyes.Rotation

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

Microsoft.PerceptionSimulation.ISimulatedEyes.Rotate(Microsoft.PerceptionSimulation.Rotation3)

Вращайте имитированные глаза относительно текущего поворота. Положительные радианы вращаются по часовой стрелке при взгляде вдоль оси.

Параметры

  • rotation — величина поворота.

Microsoft.PerceptionSimulation.ISimulatedEyes.CalibrationState

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

Microsoft.PerceptionSimulation.ISimulatedEyes.WorldPosition

Получение положения узла относительно мира в метрах.

Microsoft.PerceptionSimulation.ISimulationRecording

Интерфейс для взаимодействия с одной записью, загруженной для воспроизведения.

public interface ISimulationRecording
{
    StreamDataTypes DataTypes { get; }
    PlaybackState State { get; }
    void Play();
    void Pause();
    void Seek(UInt64 ticks);
    void Stop();
};

Microsoft.PerceptionSimulation.ISimulationRecording.DataTypes

Извлекает список типов данных в записи.

Microsoft.PerceptionSimulation.ISimulationRecording.State

Извлекает текущее состояние записи.

Microsoft.PerceptionSimulation.ISimulationRecording.Play

Запустите воспроизведение. Если запись приостановлена, воспроизведение возобновится из приостановленного расположения; Если значение остановлено, воспроизведение начнется в начале. Если этот вызов уже выполняется, этот вызов игнорируется.

Microsoft.PerceptionSimulation.ISimulationRecording.Pause

Приостанавливает воспроизведение в текущем расположении. Если запись остановлена, вызов игнорируется.

Microsoft.PerceptionSimulation.ISimulationRecording.Seek(System.UInt64)

Ищет запись до указанного времени (в интервале 100 наносекунд от начала) и приостанавливается в этом месте. Если время выходит за пределы конца записи, оно приостанавливается на последнем кадре.

Параметры

  • ticks — время, к которому следует искать.

Microsoft.PerceptionSimulation.ISimulationRecording.Stop

Останавливает воспроизведение и сбрасывает позицию до начала.

Microsoft.PerceptionSimulation.ISimulationRecordingCallback

Интерфейс для получения изменений состояния во время воспроизведения.

public interface ISimulationRecordingCallback
{
    void PlaybackStateChanged(PlaybackState newState);
};

Microsoft.PerceptionSimulation.ISimulationRecordingCallback.PlaybackStateChanged(Microsoft.PerceptionSimulation.PlaybackState)

Вызывается при изменении состояния воспроизведения ISimulationRecording.

Параметры

  • newState — новое состояние записи.

Microsoft.PerceptionSimulation.PerceptionSimulationManager

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

public static class PerceptionSimulationManager
{
    public static IPerceptionSimulationManager CreatePerceptionSimulationManager(ISimulationStreamSink sink);
    public static ISimulationStreamSink CreatePerceptionSimulationRecording(string path);
    public static ISimulationRecording LoadPerceptionSimulationRecording(string path, ISimulationStreamSinkFactory factory);
    public static ISimulationRecording LoadPerceptionSimulationRecording(string path, ISimulationStreamSinkFactory factory, ISimulationRecordingCallback callback);

Microsoft.PerceptionSimulation.PerceptionSimulationManager.CreatePerceptionSimulationManager(Microsoft.PerceptionSimulation.ISimulationStreamSink)

Создайте в объекте для создания имитированных пакетов и их доставки в предоставленный приемник.

Параметры

  • sink — приемник, который будет получать все созданные пакеты.

Возвращаемое значение

Созданный диспетчер.

Microsoft.PerceptionSimulation.PerceptionSimulationManager.CreatePerceptionSimulationRecording(System.String)

Создайте приемник, в котором все полученные пакеты хранятся в файле по указанному пути.

Параметры

  • path — путь к создаваемому файлу.

Возвращаемое значение

Созданный приемник.

Microsoft.PerceptionSimulation.PerceptionSimulationManager.LoadPerceptionSimulationRecording(System.String,Microsoft.PerceptionSimulation.ISimulationStreamSinkFactory)

Загрузите запись из указанного файла.

Параметры

  • path — путь к файлу для загрузки.
  • factory — фабрика, используемая записью для создания ISimulationStreamSink при необходимости.

Возвращаемое значение

Загруженная запись.

Microsoft.PerceptionSimulation.PerceptionSimulationManager.LoadPerceptionSimulationRecording(System.String,Microsoft.PerceptionSimulation.ISimulationStreamSinkFactory,Microsoft.PerceptionSimulation.ISimulationRecordingCallback)

Загрузите запись из указанного файла.

Параметры

  • path — путь к файлу для загрузки.
  • factory — фабрика, используемая записью для создания ISimulationStreamSink при необходимости.
  • callback — обратный вызов, который получает обновления, обновляющие состояние записи.

Возвращаемое значение

Загруженная запись.

Microsoft.PerceptionSimulation.StreamDataTypes

Описывает различные типы потоковых данных.

public enum StreamDataTypes
{
    None = 0x00,
    Head = 0x01,
    Hands = 0x02,
    SpatialMapping = 0x08,
    Calibration = 0x10,
    Environment = 0x20,
    SixDofControllers = 0x40,
    Eyes = 0x80,
    DisplayConfiguration = 0x100
    All = None | Head | Hands | SpatialMapping | Calibration | Environment | SixDofControllers | Eyes | DisplayConfiguration
}

Microsoft.PerceptionSimulation.StreamDataTypes.None

Значение sentinel, используемое для указания отсутствия потоковых типов данных.

Microsoft.PerceptionSimulation.StreamDataTypes.Head

Поток данных для положения и ориентации головы.

Microsoft.PerceptionSimulation.StreamDataTypes.Hands

Поток данных для положения и жестов рук.

Microsoft.PerceptionSimulation.StreamDataTypes.SpatialMapping

Поток данных для пространственного сопоставления среды.

Microsoft.PerceptionSimulation.StreamDataTypes.Calibration

Поток данных для калибровки устройства. Пакеты калибровки принимаются системой только в удаленном режиме.

Microsoft.PerceptionSimulation.StreamDataTypes.Environment

Поток данных для среды устройства.

Microsoft.PerceptionSimulation.StreamDataTypes.SixDofControllers

Поток данных для контроллеров движения.

Microsoft.PerceptionSimulation.StreamDataTypes.Eyes

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

Microsoft.PerceptionSimulation.StreamDataTypes.DisplayConfiguration

Поток данных с конфигурацией отображения устройства.

Microsoft.PerceptionSimulation.StreamDataTypes.All

Значение sentinel, используемое для указания всех записанных типов данных.

Microsoft.PerceptionSimulation.ISimulationStreamSink

Объект , получающий пакеты данных из потока имитации.

public interface ISimulationStreamSink
{
    void OnPacketReceived(uint length, byte[] packet);
}

Microsoft.PerceptionSimulation.ISimulationStreamSink.OnPacketReceived(uint length, byte[] packet)

Получает один пакет, который имеет внутренний тип и версию.

Параметры

  • length — длина пакета.
  • packet — данные пакета.

Microsoft.PerceptionSimulation.ISimulationStreamSinkFactory

Объект, создающий ISimulationStreamSink.

public interface ISimulationStreamSinkFactory
{
    ISimulationStreamSink CreateSimulationStreamSink();
}

Microsoft.PerceptionSimulation.ISimulationStreamSinkFactory.CreateSimulationStreamSink()

Создает один экземпляр ISimulationStreamSink.

Возвращаемое значение

Созданный приемник.