Releases: psmoveservice/PSMoveService
Alpha Release #7.1.1
Added a parallel version of test_camera (by Zelmon)
The cameras are now operated in parallel so that they can have
completely independent frame rates (entered by the user at the
start). Previously it was limited by the slowest rate. All other settings
are also unique to each camera and can be set by clicking on it's window
and a list of the controlls is given after entering the frame rates.
The camera limit has been raised to 30 for experimentation.
Added a semi-automatic colour calibration (by Zelmon)
There are now automation options for changing the colour, controller and
tracker after setting the colour preset with a right-click. The automation
is prioritised as colour then controller then tracker. When cycling
through the colours the presets are automatically saved (the controller
and mouse must remain overlapped to be succesful).
Buttons have also been added to the colour configuration window to be able
to manually cycle through the controllers and trackers with out leaving
the window. A main menu button has also been added. The trailing zeros of
the frame rate, exposure and gain have been removed.
The buttons for changing the tracker in the tracker setting window are now
looped such that the first and last trackers can be switch to from one
another with a single click.
Revert commit 54ae764 (by HipsterSloth)
"Don't show tracking debug rendering unless we are in test_tracking or test_tracker config tools"
Instead of using a flag to hide the debug overlay the cross hair will just
be shrunk in proportion to the circle outline of the detected orb.
Modified the cross hairs shrink along with the size of the tracked orb (by Zelmon)
The cross hairs are now bound by the size of the marker they are drawn
within.
Changed the numbering of the trackers in the verification step of tracker
pose calibration because it was the only the had a "+1" so that it didn't
start at zero like normal.
Also added buttons to the test tracking video feeds to more easily switch
between them.
Added instructions and a user prompt for the frame rate (by Zelmon)
People were not realising that the initial frame rate was 15 fps rather
than the values set by the config files. To overcome this the initial
frame rate must now be specified by the user at the start.
Added the option to hide the setting windows during colour calibration (by Zelmon)
In some circumstances the setting windows may hide the controller or other
detected objects. To overcome this the windows can now be hidded by
pressing the space bar. Since this then removes direct access to some of
the funtions (like changing the filter) keyboard shortcuts have been added
to the more important ones (the letter used has been placed in square brackets).
Added controller specific SteamVR button mapping (by Zelmon)
Added a section to steamvr.vrsettings for controller specific button
mapping based on the controller's Id (eg. add "_0" to the "psmove" section to
make it controller 0 specific). This also applies to the touchpad section
psmove_touchpad_directions. Coding the Id int to convert into a char was
problematic so it was done using if statements for values 0 to 9.
The controller Id parameter was added to the end of LoadButtonMapping with
a default value of -1 so that if it is not specified this new mapping
feature will be ignored. It is also ignored for Ids larger than 9.
Alpha Release #7.0.10
Added the ability to set the frame rate (by Zelmon)
- Updated to the current master of PS3EYEDriver and added the ability to set the frame rate of each camera. The frame rates are now stored in the configuration files and can be configured using PSMoveConfigTool (changed the UI window sizes accordingly). test_camera also has the ability to change the frame rate of the opened cameras with the y and h keys and check the current setting with the space bar. The initialisation frame rate was changed to 15 fps from 60 fps to avoid bandwidth issues at the start.
Fixed SteamVR icons for OpenVR SDK 1.0.6 (by Zelmon)
- Need to update the icon path for the latest steamvr update
Added new checks to test_camera and a fix in setting the properties (by Zelmon)
- Added a readout of the real frame rate as well as checking the other variables without changing them.
- The frame rate was getting changed at the same time as the exposure because the cases in the setProperty function were missing breaks.
Don't show tracking debug rendering unless we are in test_tracking or test_tracker config tools
- Fixes issue with tracking cross hair cutting into color calibration or tracker pose calibration tools
Adding "Turn on all bulbs" flag to color configuration
- Useful for debugging color bleed between controllers of two different tracking color types
Added bulk transfer cleanup timeout in USBDeviceManager
- Fixes infinite loop that can sometimes occur on PSMoveService shutdown
USBManager debugging improvements
- Added NullUSBApi implementation used for testing (a No-Op USB implementation)
- Added USBManagerConfig(USBManagerConfig.json) for usb manager settings
- Added "usb_api_name" config parameter that lets use select USBApi (LibUSB or NullUSB)
- Added "enable_usb_transfers" used to turn of all usb transfers but allow opening, closing and enumeration of USB devices on the USBManager (useful for testing)
Adding "platform_api_enabled" flag to ControllerManagerConfig.json
- used for disabling device hotplug connection.
Alpha Release #7.0.8
HOTFIX: Fixed steamvr icon path
- The icon path should be
../drivers/psmove/resources/icons
(Thanks for the tip Zelmon!) - controller and tracker icons now show up correctly (Thanks for the icons iamapie!)
HOTFIX: Fixed issue with gain setting modifications not getting saved
- handle_request__set_tracker_gain wasn't reading the save setting flag correctly
- Thanks for the debugging help ChrisDaley!
HOTFIX: PSMove controllers not showing up in steamvr
- Adding missing psmove_controller.json
PSNavi controller is now supported
- USB direct connection via libusb
- Bluetooth connection via ScpToolkit and libstem_gamepad
- See the PSNavi Setup Wiki for details about how to connect the PSNavi Controller.
Exposing the server address and port as configurable values
- You can run PSMoveService on a different machines than the client (steamvr or the config tool)
- Can set which port PSMoveService runs on with "server_port" value in NetworkManagerConfig.json
- Adding "psmoveservice":"server_port" and "server_address" config values in the steamvr.vrsettings.
- Updating the config tool to take in a server address and port on connect
- All tools that use a video stream are disabled when connecting to a remote instance
Added "working_directory" command line option on PSMoveService.
- This is intended to help with issue #350 when running as a service.
- open a command prompt in the PSMoveService install directory
- run: PSMoveService -u to uninstall an existing service
- run PSMoveService -c to check that the service is now NOT installed
- run PSMoveService -i --working_directory "path to psmoveservice install folder" to install the new version of the service
- run PSMoveService -c to check that the new service is installed
- Launch the windows services tool tool
- Verify that the command line arguments look something like the the below image and then launch the service
Ported over USBDeviceManager from ps4_camera branch
- Consolidates all libusb access to a single location
- Manages all transfer requests asynchronously on another thread
- Transfer request queue is lock-free
- Current support transfer request types are bulk, control, and interrupt
- Support async and blocking (main thread) transfer api
- Updated ControllerLibUSBDeviceEnumerator and TrackerDeviceEnumerator to use USBDeviceManager
- Updated PSNaviController to use USBDeviceManager
- Updated test_navi_controller to setup/dispose USBDeviceManager
Added "DevicePlatformManager" for managing OS specific device management API
- Added device hotplugin notifications
- Can now detect if controller or camera is unplugged or plugged in rather than having to poll (win32 only)
- Updated device managers to use new hotplugin callbacks
- Moved older usb driver parameter query code into new DevicePlatformAPIWin32 class
Alpha Release #6.0.10
Fix for crash with ROI box clamping (Issue #348)
- Wasn't adjusting width and height to make sure x+width < frameWidth and y+height < frameHeight
SteamVR plugin improvements
- Syncing openvr submodule to v1.0.5
- First pass at adding proper controller and tracker icons in steamvr.
- Still doesn't appear to work yet, but I have everything in place.
- Added "use_orientation_in_alignment" flag in "psmove_settings" in steamvr.vrsettings that decides whether or not to take the controllers current yaw into account when aligning the SteamVR and PSMove tracking spaces. Default is set to true (old behavior). Consider setting to false if you are having trouble with alignment in RiftCat setups.
Controller Re-centering improvements
- Added common pose re-centering button handling in the ClientControllerView
- Updated GyroscopeCalibration, MagnetometerCalibration, OpticalCalibration and TestTracking to use this common button handler
- Updated steamvr plugin to support hmd recentering for the ds4 controller.
- On reset orientation, clear the orientation filter error state as well in the KalmanOrientationFilter.
- This seems to fix the occasional error I was getting where the orientation would invert on orientation reset
Camera Triangulation Fixes
- fix for exclude_opposed_cameras when tracked only by opposed cameras
- If all valid tracker pairs are opposing cameras, use single camera pose estimation using the camera that can see the tracker best (largest projection)
- Added "ignore_pose_from_one_tracker" flag in tracker manager config to throw out poses when only one camera can see the controller
Controller Physics
- improved algorithm for simple exponential velocity / throwing
DualShock4 improvements
- Added a new stereo camera pose calibration method
- Can now select between old calibration mat method and new stereo camera method
- Updating the controller pairing UI to giving different instructions for the DS4
- Added test_ds4_controller console test program for validating DualShockController button state
- Added controller specific language in pair controller window.
- Decoupled dependency of PSDualShock4Controller.cpp on DeviceManager class
- Moved bluetooth_get_host_address() into BluetoothQueriesWin32.cpp
- Maded bluetooth_get_host_address() cache it's result in a static var (since the call is super slow)
- Wrap minEnclosingTriangle in an exception handler
- Added new DS4 Kalman filter flags on controller settings
- "use_linear_acceleration" - Use the linear acceleration extracted from the accelerometer to predict velocity
- "apply_gravity_mask" - mask out linear accelerations in the direction of the predicted gravity vector to eliminate phantom drift when there are errors in the orientation
- These code paths already existed before but were hidden behind #define constants
- Currently these flags only work for the DS4
UI Fixes
- Making disable_command_interface on the Morpheus config default to true.
- Fixing the test_tracking_settings tool to respect the selected controller.
- Added "Trust me, it's stable" button to the magnetometer calibration
- Adding "Trust me, it's stable button to gyroscope calibration.
- Updating the PS3eye Model in psmoveconfigtool to include the texture.
Alpha Release #6.0.9
HOTFIX - Fixed incorrect lens distortion calibration defaults
- Only manifested on new trackers or trackers that changed USB ports
- Added "lens_calibration_version" to config to force config update to the new distortion settings
Fixed Issue #322 (Memory spike at opening service)
- Shared memory mapped files now opened in "shared_mem" folder adjacent PSMoveService.exe
- This fixes occasional weird issues with trying to open temp folders in c:\ProgramData\boost_interprocess
SteamVR driver fixes
- Fix issue with the wrong controller model showing up (set controller version type at creation time)
- Added protocol version check that verifies the plugin isn't trying to connect to the wrong version of the service.
Added notion of "protocol version"
- SteamVR client will fail with "Version Mismatch" log if the plugin version doesn't match service version
- Version displayed at the top of the config tool window and at start of PSMoveService.log
Zero'ing out all angular velocity and acceleration results from all orientation filters
- Orientation prediction in SteamVR using this data was too noisy
- Except kalman filter, which is less noisy
Alpha Release #6.0.7
"Region of Interest" (ROI) optimization is now enabled by default
- NOTE: If you already ran the alpha 6.0.6 build then you'll need to manually set "disable_roi" to false in your TrackerManagerConfig.json file since the old default has already been saved out.
Fixes for ROI
- Checking against the wrong flag to see if the previous frames projection was valid
- Don't modify trackerPoseEstimateRef.bCurrentlyTracking until after call to tracker->computeProjectionForController
- Fixed projection area calculation to use pixels instead of normalized screen coords for ellipse
- Made min ROI size 32 pixels instead of 10
- Added "min_valid_projection_area" config value to tracker manager config
- contours smaller than this size (pixels^2) are rejected if an ROI region smaller than the screen is used
Assorted Crash/Assert Fixes
- Fixed uninitialized trackingColorType in compute tracker poses tool
- Fixed divide by zero issue with cv:moments in tracker code
- Fixing slightly un-normalized quaternions in LightBar optical orientation quaternions
Assorted Fixes for DS4 support (in progress)
- Enable LightBar tracking in orientation test for DualShock4
- Optical weight calculation in OrientationFilterComplementaryOpticalARG was completely broken
- Yaw blending doesn't seem to be working correctly in OrientationFilterComplementaryOpticalARG,, reverted to pure quaternion blending for the moment
Alpha Release #6.0.6
This release contains a ton of new code, some of which has been in progress since mid July. Several parts aren't completely done yet, but it was becoming painful to maintain many separate branches with so much churn in the master branch. So we decided to merge everything in its current state together now we are at a better merge point.
Multiple Controllers and Tracker PoV in tracking test tool
When testing tracking you can now see all connected controllers at once with the their associated bulb color and tracking id displayed:
You can also see the tracker point of view (PoV) for each tracker. This is useful for testing at a glance why tracking might be failing for a given tracker.
"Region-of-Interest" or ROI optimization
The most expensive part of the service by far is the image processing work to extract the tracking blobs from the video feed. The best way to deal with this is to have a model of where you think the controller will show up on screen and then search in a bounding box around that location. Since you are processing way fewer pixels you can typically see large performance gains from this. Chad was awesome and implemented this over the last few weeks.
This feature is currently disabled by default, but can be turned on by setting "disable_roi" to "false" in TrackerManagerConfig.json:
{
"version": "2",
"optical_tracking_timeout": "100",
"use_bgr_to_hsv_lookup_table": "true",
"tracker_sleep_ms": "1",
"excluded_opposed_cameras": "false",
"disable_roi": "false", <--- This is true by default
You can see the ROI region in the tracking PoV (select the "tracker video" button in the trst tracking tool). In that view you'll see the ROI box following the controller around.
One important bug with ROI. When tracking starts, if there is some other light source that could be considered the controller when the actual controller is out of view, the ROI will lock on to that light source. It won't track the actual controller when it comes into frame because it thinks it already sees the controller. You have to "displace" the imposter by moving the controller into the ROI box that the imposter is occupying. You can get around this issue by making sure the controller is in frame when tracking starts.
Lens Distortion Compensation
Every web cam lens has some amount of barrel distortion. Until now we haven't been correcting for it. This leads to small inaccuracies in position new the edges of the tracking frame. In order to compute the barrel distortion parameters we know have a calibration tool that you show a calibration pattern in several positions. Once enough samples have been captured we can compute the focal length and distortion parameters for the camera.
You don't actually need to run this tool for the PS3EYE since we now have the focal lengths and distortion parameters baked in. However this was an essential tool to add for support multiple camera types, which we want to support soon.
If you are really curious and want to run the tool look for the "distortion calibration" button on the tracker settings panel. The distortion calibration tool looks like this:
You'll need to print out the calibration mat found here:
https://github.com/cboulay/PSMoveService/blob/master/docs/Distortion/TrackerCalibrationPattern.png
The tool will ask you to measure the distance between the squares on the calibration mat. Usually this is around 24mm.
New Orientation and Position filter framework
You can now select between different orientation and position filters in the controller config. You can also reset to defaults if you forgot what the default filter settings were. The most important new filters are the Kalman Orientation and Position filter. We've spent months trying to get a version of these filters working. They are essential for smoothing out noisy optical tracking, which allows the DS4 to work at all.
Unfortunately the position Kalman filter still has some issues dealing with the accelerometer bias and extracting gravity from the signal, so for moment the Kalman position filter only smooths the optical tracking position. This results in the Kalman position filter feeling more latent than it should. Hopefully I can get the final kinks with this part of the filter worked out in the coming weeks.
If you do use the Kalman position or orientation filter I strongly recommend running the new optical noise calibration tool first. This tool measures how much noise we get from the raw position (and orientation in the case of the DS4) optical tracking. This is turn tells the Kalman filter how much to trust the optical measurements for a given tracking blob size. The optical noise calibration tool has pretty clear instructions. Basically you'll hold the controller in place at 10 different distances from the camera and then it will compute a best fit curve to the data it records. If you don't run this tool there are reasonable defaults in place.
Client CAPI
Current the client api is written in C++. This make psmove service trickier to interface with other programming languages (python, C#). We have a new client C api that wraps the C++ api. This still has some work to do, but is largely in place now. Over the coming months I'll be switching over the PSMoveConfig tool and SteamVR plugin to the C-API. Once that is done I'll rip out the C++ api that that we dont have to maintain two different client interfaces.
Intial PSVR headset work
Nothing to see here... move along...
https://www.youtube.com/watch?v=srRy6ZPwwYA
https://www.youtube.com/watch?v=1vYQvS2acpo
In all seriousness, there is some initial work I have in place for supporting the PSVR headset. This is still in very early development. I don't have optical tracking working yet. Don't bother poking around in this and hoping to do anything fun/useful with it yet. It's only in this release because we merged together some other branches. Once I have a chance to get more interesting work done on this I'll post some documentation on how to use this.
No more 32-bit releases
You can still build a 32-bit version of the project. But I'm not going to include the 32-bit version in the releases anymore. It's a pain to build both versions due to the manual build creation process I have at the moment. If you really do wan't the 32-bit version of the releases, please let me know in the google group.
Alpha Release #5.5.3
PR #273 by gb2111 Ignore opposing cameras in camera triangulation
- Can reduce tracking jitter cause by bad triangulation between camera pairs that are facing each other
- Useful with 3 or 4 camera configuration
- Enabled with "excluded_opposed_cameras" flag in TrackerManagerConfig.json
- Set to false by default
Fixed issue with recenter button not respecting the 250ms delay
- Holding SELECT for >= 250ms should trigger a controller recenter
- However there was a bug in the button logic (PRESS and DOWN were swapped) that caused the delay to be ignored
- This is problematic if you had SELECT mapped to other actions
Alpha Release #5.5.2
5.5.2 FEATURE - PR #272 by gb2111 - Use native image flip on ps3eye to save on CPU
5.5.2 HOTFIX - Fixed broken time delay on recenter (select button)
5.5.1 HOTFIX - Fixed broken virtual touchpad feature (spatial offset mode)
Added a configurable sleep time for PSMoveService (by gb2111)
- Used to throttle update rate in main loop
- Useful if you are having CPU related issues
- Edit the "tracker_sleep_ms" value in
%appdata%\PSMoveService\TrackerManagerConfig.json
- Default is "1", which is a 1ms sleep in the main loop
- If having CPU issues, try setting it to "20"
- This will effectively cause you to ignore every other tracking camera frame
- Almost halves CPU load at the cost of tracking responsiveness
Support for PSMoveController without a magnetometer
- Controllers with newer firmware have the magnetometer disabled :(
- Magnetometer will show up as disabled in the config tool if this is the case
- Added orientation reset
- Point the controller forward and hold down the select button for a 1/4 second
- You should see the controller snap forward if it had drifted
- Can be performed as many times as you want in either SteamVR or the Orientation test tool
Virtual touchpad fixes (by gb2111)
- Don't send virtual touchpad movements if a virtual touchpad button (up/down/left/right) event has been sent (for a small time period)
- Don't send virtual touch pad button events mapped to start/select buttons if the start+select button combo was pressed
Logging fixes
- PSMoveService now saves logs to "PSMoveService.log"
- Fixed missing new lines in the console logs
Adding logging for debugging Magnetometer issues
- Added output to magnetometer calibration showing raw magnetometer stream
- Added stream flag logging to server request handler
Fixed issue with trigger not working in some games (Serious Sam)
- Switched trigger button event to using a thresholded trigger value
- Fixed mis-labeled controller axes in steamvr plugin:
- Axis 0 is now the touchpad axis
- Axis 1 is now the trigger axis
Fixed issue where controllers wouldn't connect in Win8.1
- Upgraded to latest version of HIDapi
- Fixing uses of hid_get_feature_report to take into account +1 feature report size.
Alpha Release #5.4
Merged PR #237 by gb2111 (Selected controller tracking + tracking status)
-Test Tracking menu now works for selected controller, not first controller
-Added display in the UI to show the tracking status for each tracker
-Camera volume color is rendered in either green or red color depending if tracking or not.
Merged PR #245 by gb2111 (Tracker Setting improvements)
- Controller color type displayed for selected controller in tracker settings
- Use the color of the selected controller when entering the color settings tool
Fixes for issues #239 and #238 (SteamVR lock up issues)
- Switched from using ShellExecuteA to CreateProcessA when spawning monitor_psmove.exe
- Added a bunch of logging to driver_psmoveservice.cpp
- Added check in monitor_psmoveservice.cpp to make sure only one instance of the process is running (Windows only)
- Switch back to using resource path passed into monitor_psmove.exe rather than using GetModuleFileNameA