예제 #1
0
    async void OnUbiiNodeInitialized()
    {
        ubiiSpecs = new Ubii.Devices.Component
        {
            Name          = NAME,
            Description   = DESCRIPTION,
            MessageFormat = MESSAGE_FORMAT,
            IoType        = Ubii.Devices.Component.Types.IOType.Subscriber,
            Topic         = GetTopicTargetVelocities()
        };
        ubiiSpecs.Tags.AddRange(TAGS);

        tokenTargetVelocities = await ubiiNode.SubscribeTopic(this.ubiiSpecs.Topic, (Ubii.TopicData.TopicDataRecord record) =>
        {
            for (int i = 0; i < record.Object3DList.Elements.Count; i++)
            {
                string boneString = record.Object3DList.Elements[i].Id;
                HumanBodyBones bone;
                if (HumanBodyBones.TryParse(boneString, out bone))
                {
                    Ubii.DataStructure.Pose3D pose = record.Object3DList.Elements[i].Pose;
                    Vector3 linear  = new Vector3((float)pose.Position.X, (float)pose.Position.Y, (float)pose.Position.Z);
                    Vector3 angular = new Vector3((float)pose.Euler.X, (float)pose.Euler.Y, (float)pose.Euler.Z);
                    SetTargetVelocity(bone, linear, angular);
                }
            }
        });

        ubiiReady = true;
    }
예제 #2
0
    private async void StartTest()
    {
        if (ubiiNode == null)
        {
            Debug.LogError("UbiiClient not found!");
            return;
        }

        await ubiiNode.WaitForConnection();

        CreateUbiiSpecs();

        Ubii.Services.ServiceReply deviceRegistrationReply = await ubiiNode.RegisterDevice(ubiiDevice);

        if (deviceRegistrationReply.Device != null)
        {
            ubiiDevice = deviceRegistrationReply.Device;
        }

        this.subToken = await ubiiNode.SubscribeTopic(topicTestPublishSubscribe,
                                                      (Ubii.TopicData.TopicDataRecord record) =>
        {
            testPosition.Set((float)record.Vector3.X, (float)record.Vector3.Y, (float)record.Vector3.Z);
        });

        testRunning = true;
    }
예제 #3
0
 async void InitCurrentPoseListTopic()
 {
     tokenCurrentPoseList = await ubiiNode.SubscribeTopic(ubiiComponentAvatarCurrentPose.GetTopicCurrentPoseList(), (Ubii.TopicData.TopicDataRecord record) =>
     {
         Google.Protobuf.Collections.RepeatedField <Ubii.DataStructure.Object3D> objects = record.Object3DList.Elements;
         for (int i = 0; i < record.Object3DList.Elements.Count; i++)
         {
             string boneString = record.Object3DList.Elements[i].Id;
             HumanBodyBones bone;
             if (HumanBodyBones.TryParse(boneString, out bone))
             {
                 Ubii.DataStructure.Pose3D pose = record.Object3DList.Elements[i].Pose;
                 UbiiPose3D newMapPose          = new UbiiPose3D
                 {
                     position = new Vector3((float)pose.Position.X, (float)pose.Position.Y, (float)pose.Position.Z),
                     rotation = new Quaternion((float)pose.Quaternion.X, (float)pose.Quaternion.Y, (float)pose.Quaternion.Z, (float)pose.Quaternion.W)
                 };
                 if (mapBone2CurrentPose.ContainsKey(bone))
                 {
                     mapBone2CurrentPose[bone] = newMapPose;
                 }
                 else
                 {
                     mapBone2CurrentPose.Add(bone, newMapPose);
                 }
             }
         }
     });
 }
예제 #4
0
    public async void OnUbiiInitialized()
    {
        topicFrequencyCounter          = "/" + ubiiNode.GetID() + "/test/pm_frequency_counter";
        topicFrequencyCounterTickValue = "/" + ubiiNode.GetID() + "/test/pm_frequency_counter/tick_value";

        expectedCounter = 0;
        tickValue       = 2;
        ubiiNode.PublishImmediately(new TopicDataRecord
        {
            Topic = topicFrequencyCounterTickValue,
            Int32 = tickValue
        });
        //await Task.Delay(2000);

        testFailure = false;
        await ubiiNode.SubscribeTopic(topicFrequencyCounter, (TopicDataRecord record) =>
        {
            expectedCounter += tickValue;
            testFailure      = record.Int32 != expectedCounter;
            if (testFailure)
            {
                Debug.LogError("counter from PM expected to be " + expectedCounter + " but was actually " + record.Int32);
            }
        });

        ubiiSession = new Ubii.Sessions.Session {
            Name = "Test Processing Modules Counter"
        };

        ubiiSession.ProcessingModules.Add(new Ubii.Processing.ProcessingModule
        {
            Name = TestPMFrequencyCounter.specs.Name
        });

        Ubii.Sessions.IOMapping ioMapping = new Ubii.Sessions.IOMapping();
        ioMapping.ProcessingModuleName = TestPMFrequencyCounter.specs.Name;
        ioMapping.InputMappings.Add(new Ubii.Sessions.TopicInputMapping
        {
            InputName = "counterTick",
            Topic     = topicFrequencyCounterTickValue
        });
        ioMapping.OutputMappings.Add(new Ubii.Sessions.TopicOutputMapping
        {
            OutputName = "outCounter",
            Topic      = topicFrequencyCounter
        });
        ubiiSession.IoMappings.Add(ioMapping);

        RunTest();
    }
예제 #5
0
    async void InitIKTopics()
    {
        foreach (IK_TARGET ikTarget in Enum.GetValues(typeof(IK_TARGET)))
        {
            GameObject ikTargetObject = new GameObject("IK-Target PoseEstimator " + ikTarget.ToString());
            mapIKTargetTransforms.Add(ikTarget, ikTargetObject.transform);
            mapIKTarget2UbiiPose.Add(ikTarget, new UbiiPose3D
            {
                position = new Vector3(),
                rotation = new Quaternion()
            });
        }

        tokenIkTargetPose = await ubiiNode.SubscribeTopic(ubiiComponentIkTargets.GetTopicIKTargets(), (Ubii.TopicData.TopicDataRecord record) =>
        {
            for (int i = 0; i < record.Object3DList.Elements.Count; i++)
            {
                string ikTargetString            = record.Object3DList.Elements[i].Id;
                Ubii.DataStructure.Pose3D pose3D = record.Object3DList.Elements[i].Pose;
                IK_TARGET ikTarget;
                if (IK_TARGET.TryParse(ikTargetString, out ikTarget))
                {
                    UbiiPose3D pose = mapIKTarget2UbiiPose[ikTarget];
                    pose.position.Set(
                        (float)pose3D.Position.X,
                        (float)pose3D.Position.Y,
                        (float)pose3D.Position.Z);
                    pose.rotation.Set(
                        (float)pose3D.Quaternion.X,
                        (float)pose3D.Quaternion.Y,
                        (float)pose3D.Quaternion.Z,
                        (float)pose3D.Quaternion.W);
                    mapIKTarget2UbiiPose[ikTarget] = pose;
                }
            }
        });

        initialized = true;
    }
예제 #6
0
    async private void RunTestSubscribePublish()
    {
        await ubiiNode.WaitForConnection();

        string topic   = "/" + ubiiNode.GetID() + "/unity3D_client/test/subcribe_publish_simple";
        bool   success = false;

        Action <TopicDataRecord> callback = (TopicDataRecord record) =>
        {
            success = record.Bool;
        };

        SubscriptionToken subToken = await ubiiNode.SubscribeTopic(topic, callback);

        ubiiNode.Publish(new Ubii.TopicData.TopicDataRecord {
            Topic = topic, Bool = true
        });

        await Task.Delay(1000).ContinueWith(async(Task t) =>
        {
            bool successUnsubscribe = await ubiiNode.Unsubscribe(subToken);
            if (!successUnsubscribe)
            {
                Debug.LogError("RunTestSubscribePublish Unsubscribe() FAILURE!");
            }

            if (success)
            {
                Debug.Log("RunTestSubscribePublish SUCCESS!");
            }
            else
            {
                Debug.LogError("RunTestSubscribePublish FAILURE!");
            }
        });
    }