Поделиться через


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

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

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

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

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

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

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

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

    Примечание.

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

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

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

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

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

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

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

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

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

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

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

Во-вторых, вы создадите 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 = установка
  • q = запрос
  • r = remove

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

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

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

При удалении контроллера на обновление Windows 10 за октябрь 2018 г. или более ранних версий задайте для него значение Off через 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

Нажата палка.

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.Недоступно

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

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.Остановлено

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

Microsoft.PerceptionSimulation.PlayState.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,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,System.Single)

Создайте новый поворот3.

Параметры

  • шаг - Компонент шага поворота.
  • 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

Описывает представление 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 в радианах (меньше PI).

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

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

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)

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

Параметры

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

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 имитированного средства отслеживания рук. При пропусках обе руки всегда видны. Если руки не игнорируются (по умолчанию), они видны только в том случае, если они находятся в пределах 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)

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

Параметры

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

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

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

Параметры

  • радианы — величина поворота вокруг оси 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

Извлеките, отображается ли рука в настоящее время в имитированномdDevice (т. е. находится ли оно в состоянии, которое должно быть обнаружено handTracker).

Microsoft.PerceptionSimulation.ISimulatedHand.EnsureVisible

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

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

Перемещение позиции имитированной руки относительно текущей позиции в метрах.

Параметры

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

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)

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

Параметры

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

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

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

Microsoft.PerceptionSimulation.ISimulatedSixDofController.Position

Извлеките или задайте положение имитированного контроллера относительно человека в метрах.

Microsoft.PerceptionSimulation.ISimulatedSixDofController.Orientation

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

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

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

Параметры

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

Microsoft.PerceptionSimulation.ISimulatedSixDofController.PressButton(SimulatedSixDofControllerButton)

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

Параметры

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

Microsoft.PerceptionSimulation.ISimulatedSixDofController.ReleaseButton(SimulatedSixDofControllerButton)

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

Параметры

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

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)

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

Параметры

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

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-nanoseconds) и приостанавливается в этом расположении. Если время выходит за пределы записи, оно приостановлено на последнем кадре.

Параметры

  • галочки - время, к которому нужно искать.

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)

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

Параметры

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

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

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

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

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

Параметры

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

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

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

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

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

Параметры

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

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

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

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

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

Параметры

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

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

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

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)

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

Параметры

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

Microsoft.PerceptionSimulation.ISimulationStreamSinkFactory

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

public interface ISimulationStreamSinkFactory
{
    ISimulationStreamSink CreateSimulationStreamSink();
}

Microsoft.PerceptionSimulation.ISimulationStreamSinkFactory.CreateSimulationStreamSink()

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

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

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