[Plugin] PSMove input - OSX and Windows x64

The UE4 4.9 release Document said: The HTC Vive controller is currently supported, with more (such as the PlayStation Move) to come soon.

So PS Move will supported in 4.9.1 release?

I hope it could work fine on the Mac.Will it?

Had a chance to try this plugin over the weekend. Bought 2x PSMove, BT, Camera, and charging station to test the move accuracy and ease of use in comparison to Hydra/Touch/Lighthouse.

Here are some thoughts:
First, the setup is pretty long, but I understand the need for all the pieces given the unofficial route. Your instructions are very clear and I had the camera driver installed and both moves paired and calibrated to the camera within about 30min. Using the test_opengl.exe I was able to see both controllers tracked pretty quickly and accurately. The dk2 co-registration is pretty darn cool, where is all of this calibration information stored?

The first thing that is apparent when I started using the moves is the very limited tracking volume at short distances, you really need to place the camera far away and I haven’t found a setup where I can really stretch my hands yet. The second thing that didn’t hit me until I had both of the moves in my hand, is that they do not have any joysticks/dpads, you could use the other buttons to emulate this but it’s a limitation of the device as I believe it is normally paired with another controller which has them.

After testing tracking, I tried to replicate it using the plugin in UE4 and the instructions were again pretty clear, but one thing that tripped me up was that your motion controllers emit global tracking positions and expect you to place the controllers in world space. It means I wasn’t able to have them emit from a player pawn position correctly, though I imagine you can use a workaround to get the positions in actor origin space.

When you hit play, the eye camera will start detecting the controllers by blinking (you need both in view and it will blink one at a time) which takes about 10 seconds to complete for two controllers. Sometimes this detection will last throughout end play and you won’t have to repeat this until you restart the editor, but most of the times it won’t and you’ll have to repeat this each time you hit play and I’m unsure as to when that is the case.

Even though both of the moves are paired and track using the opengl example, I could not get both controllers to track in UE4, it would always just pick one (I did duplicate the motion controller and psmove components and change the left/right to reflect each hand). The plugin probably needs a code fix to support both.

The tracking in the plugin jumps between samples more than the opengl example, it seems your move frametime is relatively very long (20-40ms?) and could use some optimization or interpolation to get smoother tracking.

Overall I would say the accuracy of the move when it is tracked is really good (maybe a little too infrequent), but both the limited fov of the camera, occlusion and setup procedure makes this mostly a developer device. I would rank a hydra higher than the move, but both are obviously lower than both the Touch and Lighthouse. The wireless nature and charging stations are a very nice touch though.

There are some code fixes that would in my opinion get the end user experience closer to ideal:
-Ensure the tracking lasts throughout PIE sessions so you don’t have to redo device detection on each begin play (most important fix, helps development iteration)
-Emit tracking centered from component parent origin
-Support for 2+ controllers
-Wrap all PSMove Motion Controller logic into a plugin module, it will allow you to skip adding PSMove components. You can determine left/right using the detection step based on left/right of actor center when it first tracks. As it is, the setup is not fully hardware agnostic.
-Stop updating motion controller position/orientation and return false when not tracking, allowing interplay with other devices.
-Optimize the tracking capture time, you should be able to have the psmove thread capture <13ms which would allow it to be streamed to the game thread in sync with the DK2. If you can’t get below that time, you can instead issue two threads and cycle between them to get more samples.
-Streamlining the initial setup, can some of these *.exe steps be combined into the co-registration one with instructions?
-(Maybe) Auto-calibration using another device could allow you to skip co-registration, e.g. leap motion to auto-calibrate the move, I’ve had recent success with this for hydras, but I haven’t tested this for the move or the potential interference they could have, in theory it should work. That said coregistration is “a once per camera move” setup so its probably a better approach if you can get within 1cm of 1:1 feeling in VR.

This is more of a suggestion wish list atm and I currently don’t have any free development time, but maybe next year I’ll have some for pull requests :slight_smile:

This ended up a bit longer than I thought, but I hope my feedback helps!

You’re referring to official support for PSMove, which means PS4 only and only available to developers developing for that platform under what I assume is an NDA. This plugin is separate from that, it already support Motion Controllers, with the instructions given here.

Just wanted to report back that I got a proper charging station and after using that instead of the usb cable to charge, everything has now fallen in place.
In my previous frustration I got myself a Leap but after fiddeling with that for a little bit I figured my better bet was to try again with the psmove. To me this seems a better solution for now. Fingers crossed I can get one of those Vive kits when they release the first batch.

Cheers,

Is there a way to get the raw tracking data without any interference from the tracking and transform of the HMD and other things?

I am looking for positional and rotational data that after a ‘Reset Yaw’ and ‘Reset Position’ gives me values moving off 0 and does not get affected by the hmd tracking.
At the moment I have made a setup that substracts out the HMD positional tracking to ‘stabilize’ the psmove tracking as the psmove location otherwise lock-tracked with the hmd itself. Ie if I held the controller static in space and moved my HMD the in game psmove tracking would also move. This I don’t want.

Also there seem to be some orientational offset or something that I haven’t really figured out. I have taken the ‘hmd carrier’ pawns orientation and added the inverse of that to try and get world space zeroed tracking position/translation.
Then it seemed to align better but I still get hmd move creeping into the controller tracking so I am not sure really what is happening under the hood.

I have done the co-registration successfully and it looked good there.

If anyone knows what I mean and know of a way to achieve this please let me know.

Cheers,

Hello and thanks a lot for the plugin. After a day for trying,I finnally got it to work with the demo project! :smiley:
For me win10 is easier to pair than win7.
But there is still one problem. When I press W key, my character move back with double speed not forward. And when I press D key, it move left. This only happen with VR preview mode.I dont know what im missing.
thank you so much.

Hello. First of all, You made my day!

I’m currently working on the project with PSMove and UE4 and I was trying to implement it with “moveframework” but it is using the CLEyeMulticam which is not 64bit and… well, I was kinda downed when I realized that I came across a wall…
But after more deeper reaserch I found Your project! So it is possible! Awesome!

Now there is more work to do for me (unfortunatelly the psmoveapi project looks less user friendly than moveframework) but I’m surely gonna try Your plugin and try to dig around the code by myself.

Just stepping by to thans for bringing hope back to my project :smiley:

Cheers!

Build under 4.12:
C: est\SimpleUE4PSMove2\Plugins\PSMovePlugin\Source\PSMove\Private\FPSMove.cpp(67): error C2039: ‘MotionControllerDevices’: is not a member of ‘UEngine’
C:\Program Files (x86)\Epic Games\4.12\Engine\Source\Runtime\Engine\Classes\Engine/Engine.h(544): note: see declaration of ‘UEngine’
C: est\SimpleUE4PSMove2\Plugins\PSMovePlugin\Source\PSMove\Private\FPSMove.cpp(72): error C2039: ‘MotionControllerDevices’: is not a member of ‘UEngine’
C:\Program Files (x86)\Epic Games\4.12\Engine\Source\Runtime\Engine\Classes\Engine/Engine.h(544): note: see declaration of ‘UEngine’
C: est\SimpleUE4PSMove2\Plugins\PSMovePlugin\Source\PSMove\Private\FPSMove.cpp(183): error C2259: ‘FPSMoveInputManager’: cannot instantiate abstract class
Is anybody know how to correct this problem?

Hi, thanks for the report.
I’m not working on this plugin anymore. If you read the README and the description on the page then you’d see that it is obsolete and is being replaced by PSMoveService. PSMoveService already has an OpenVR driver so you can use it with VR right away. If your intention is to use it outside the context of VR then you may still need a plugin, but this plugin will be a client for PSMoveService, not the plugin as it exists currently.