In OSX, pushing the globe against the iSight camera automatically lowers its exposure, so that works.
When using the PS3Eye in Windows or OSX, tracking only works in low-light conditions. I think many people get this problem. See #141
in psmove_tracker_new_with_camera(int camera), there is a call to psmove_tracker_set_exposure(tracker, Exposure_LOW);
In psmove_tracker_set_exposure(PSMoveTracker *tracker, enum PSMoveTracker_Exposure exposure), target_luminance is set depending on the exposure input, with Exposure_LOW yielding target_luminance = 0;
Then it calls
tracker->exposure = psmove_tracker_adapt_to_light(tracker, target_luminance);
That function has an algorithm to adapt the exposure setting to yield the target_luminance. When target_luminance==0, it immediately returns with minimum_exposure: 2051;
Then
camera_control_set_parameters(tracker->cc, 0, 0, 0, tracker->exposure, 0, 0xffff, 0xffff, 0xffff, -1, -1);
For reference, here's the function declaration.
camera_control_set_parameters(CameraControl* cc, int autoE, int autoG, int autoWB, int exposure, int gain, int wbRed, int wbGreen, int wbBlue, int contrast, int brightness)
That function is platform specific. In Windows, using the PSEYE, it sets a registry key with these values, then restarts camera capture with openCV. This calls cvCreateCameraCapture( cameraID );
As far as I can tell, this function does not care what's in the registry.
In OSX, we just get a warning: psmove_WARNING("Unimplemented: Setting of PS3EYEDriver parameters\n");
In OSX, pushing the globe against the iSight camera automatically lowers its exposure, so that works.
When using the PS3Eye in Windows or OSX, tracking only works in low-light conditions. I think many people get this problem. See #141
in
psmove_tracker_new_with_camera(int camera), there is a call topsmove_tracker_set_exposure(tracker, Exposure_LOW);In
psmove_tracker_set_exposure(PSMoveTracker *tracker, enum PSMoveTracker_Exposure exposure),target_luminanceis set depending on the exposure input, with Exposure_LOW yieldingtarget_luminance = 0;Then it calls
tracker->exposure = psmove_tracker_adapt_to_light(tracker, target_luminance);That function has an algorithm to adapt the exposure setting to yield the target_luminance. When target_luminance==0, it immediately returns with minimum_exposure: 2051;
Then
camera_control_set_parameters(tracker->cc, 0, 0, 0, tracker->exposure, 0, 0xffff, 0xffff, 0xffff, -1, -1);For reference, here's the function declaration.
camera_control_set_parameters(CameraControl* cc, int autoE, int autoG, int autoWB, int exposure, int gain, int wbRed, int wbGreen, int wbBlue, int contrast, int brightness)That function is platform specific. In Windows, using the PSEYE, it sets a registry key with these values, then restarts camera capture with openCV. This calls
cvCreateCameraCapture( cameraID );As far as I can tell, this function does not care what's in the registry.
In OSX, we just get a warning:
psmove_WARNING("Unimplemented: Setting of PS3EYEDriver parameters\n");