The custom calibration scheme works a bit like "mccalibrate" from linmctool, but has (at the moment) a bit simpler algorithm (taking the average over 200 sensor readings). The new calibration tool that I wrote (c/calibrate.c) can detect if you have moved your controller too much while the readings were taken, and will ask you to do the given position again. A custom calibration could look like this (I've moved the controller a lot for the first "buttons up" reading to demo the move detector code):
~S/psmove/psmoveapi% build/calibrate Serial number: 04:76:6e:XX:XX:XX Put the controller in the position 'bulb up' and press the Move button All readings done for bulb up. bulb up: a (avg: 1 | 4359 | 188) a (dev: 20 | 13 | 43) m (avg: 2 | -8 | -421) m (dev: 4 | 8 | 5) Put the controller in the position 'bulb down' and press the Move button All readings done for bulb down. bulb down: a (avg: -165 | -4379 | -113) a (dev: 30 | 20 | 48) m (avg: -69 | 287 | -435) m (dev: 5 | 10 | 5) Put the controller in the position 'buttons up' and press the Move button All readings done for buttons up. buttons up: a (avg: 177 | 62 | 4173) a (dev: 3940 | 2079 | 987) m (avg: -34 | 57 | -250) m (dev: 22 | 16 | 6) DEVIATION TOO HIGH - PLEASE RETRY Put the controller in the position 'buttons up' and press the Move button All readings done for buttons up. buttons up: a (avg: -41 | 358 | 4362) a (dev: 22 | 19 | 19) m (avg: -29 | 77 | -250) m (dev: 5 | 10 | 5) Put the controller in the position 'buttons down' and press the Move button All readings done for buttons down. buttons down: a (avg: -128 | 422 | -4343) a (dev: 28 | 21 | 25) m (avg: -61 | 84 | -515) m (dev: 5 | 10 | 7) Put the controller in the position 'buttons left' and press the Move button All readings done for buttons left. buttons left: a (avg: 4252 | 188 | 63) a (dev: 38 | 41 | 49) m (avg: 96 | 76 | -392) m (dev: 4 | 13 | 8) Put the controller in the position 'buttons right' and press the Move button All readings done for buttons right. buttons right: a (avg: -4458 | 338 | -82) a (dev: 26 | 24 | 35) m (avg: -187 | 85 | -369) m (dev: 5 | 13 | 6)
Now that we have done a calibration run, we need a tool to display the results (also, we need a tool that reads the data from USB and stores it): Enter "dump_calibration". This tool will read and persist all calibration blobs of connected USB controllers (the "calibrate" tool will only store custom calibration, and only for Bluetooth controllers). When run with a Bluetooth controller (and again assuming that you have already done the USB fetching part), you can get output like this:
~S/psmove/psmoveapi% build/dump_calibration File: /Users/thp/.psmoveapi/04_76_6e_XX_XX_XX.calibration.txt Flags: 3 Have USB calibration: 10 00 67 07 4f 7f a4 7f c2 90 68 6e 25 80 05 80 60 7f 10 80 bf 6e 75 90 c6 7f c5 7f c1 7f bb 90 33 80 47 7f c7 6e 90 7f d2 08 db 7f 57 80 47 80 d7 07 d2 7f 58 80 4b 80 00 00 00 00 00 00 00 00 00 01 ce 08 e0 01 04 97 53 80 5b 80 e0 01 cc 7f 7b 90 39 80 e0 01 dd 7f 4d 80 64 94 f4 07 d1 d7 12 41 72 fc d0 c0 c9 3e 0d c2 a4 1c 6f 3f a9 90 7b 3f 37 5c 71 3f 02 1d 32 3f 87 69 a1 3d 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # Orientation #0: ( -177 | -92 | 4290) # Orientation #1: (-4504 | 37 | 5) # Orientation #2: ( -160 | 16 | -4417) # Orientation #3: ( 4213 | -58 | -59) # Orientation #4: ( -63 | 4283 | 51) # Orientation #5: ( -185 | -4409 | -112) # Gyro X, 80 rpm: ( 5892 | 83 | 91) # Gyro Y, 80 rpm: ( -52 | 4219 | 57) # Gyro Z, 80 rpm: ( -35 | 77 | 5220) # byte at 0x3F: 00 Have custom calibration: ax ay az mx my mz #0: 1.27 4359.10 187.74 2.04 -8.18 -421.33 #1: -164.57 -4378.57 -112.98 -69.21 286.53 -435.20 #2: -41.38 358.21 4361.73 -28.52 77.03 -249.96 #3: -127.78 421.94 -4342.93 -61.33 83.87 -514.74 #4: 4251.81 187.99 62.83 95.57 75.67 -391.71 #5: -4458.25 338.40 -81.67 -187.27 85.35 -369.02
This calibration file can be used by the new PSMoveCalibration API that wraps a PSMove object and provides calibration features on top of it. The function that users will probably use most is psmove_calibration_map() - it takes as input 3, 6 or 9 integer values and converts them into corresponding float values that have been normalized.
With the tumble test ("custom calibration"), we only get values for the accelerometer and magnetometer - for calibrating the gyro, we would need to have access to a turntable and control its speed - something that's not impossible to do, but very hard. Thanks to the research done by other MoveOnPC people, we can extract the information from the USB calibration blob - it stores the expected readings for 80 rotations/minute (according to the wiki page).
You can find the new code on github.com/thp/psmoveapi - expect some rough edges and more updates in the coming days and weeks :)
Slashed a particular section on the archive folder by 50 percent (view graphic within kept). https://imgur.com/a/RtdowSH https://imgur.com/a/nryvTKD https://imgur.com/a/45dTahO https://imgur.com/a/qLS52nW https://imgur.com/a/CtYtLuu https://imgur.com/a/ipBFafk https://imgur.com/a/RJNMz6p
AntwortenLöschen