NaoCamera::NaoCamera(const char* device, CameraInfo::Camera camera, int width, int height, bool flip,
                     const CameraSettings::CameraSettingsCollection& settings, const Matrix5uc& autoExposureWeightTable) :
  camera(camera),
  WIDTH(width),
  HEIGHT(height)
{
  VERIFY((fd = open(device, O_RDWR | O_NONBLOCK)) != -1);

  mapBuffers();
  queueBuffers();

  setImageFormat();
  setFrameRate(1, 30);

  checkSettingsAvailability();

  specialSettings.horizontalFlip.value = flip ? 1 : 0;
  setControlSetting(specialSettings.horizontalFlip);
  specialSettings.verticalFlip.value = flip ? 1 : 0;
  setControlSetting(specialSettings.verticalFlip);
  setSettings(settings, autoExposureWeightTable);
  writeCameraSettings();
  readCameraSettings();

  startCapturing();
}
Exemple #2
0
void NaoCamera::setCameraParams() {
    std::cout << "NaoCamera: Setting Camera Parameters (on the fly)" << std::endl;

    // if(!setControlSetting(V4L2_CID_AUTO_WHITE_BALANCE, camera_params_.kCameraAutoWhiteBalance)) std::cerr << "Error setting auto white balance: " << errno << "\n";
    // if(!setControlSetting(V4L2_CID_EXPOSURE_AUTO, camera_params_.kCameraExposureAuto)) std::cerr << "Error setting exposure auto: " << errno << "\n";
    // if(!setControlSetting(V4L2_CID_BACKLIGHT_COMPENSATION, camera_params_.kCameraBacklightCompensation)) std::cerr << "Error setting backlight compensation: " << errno << "\n";

    if(!setControlSetting(V4L2_CID_BRIGHTNESS, camera_params_.kCameraBrightness)) std::cerr << "Error setting brightness: " << errno << "\n"; //ONLY VALUE
    if(!setControlSetting(V4L2_CID_CONTRAST, camera_params_.kCameraContrast)) std::cerr << "Error setting contrast: " << errno << "\n"; //0-53
    if(!setControlSetting(V4L2_CID_SATURATION, camera_params_.kCameraSaturation)) std::cerr << "Error setting saturation: " << errno << "\n"; //0-255
    if(!setControlSetting(V4L2_CID_HUE, camera_params_.kCameraHue)) std::cerr << "Error setting hue: " << errno << "\n"; // ONLY VALUE
    //if(!setControlSetting(V4L2_CID_EXPOSURE, camera_params_.kCameraExposure)) std::cerr << "Error setting exposure: " << errno << "\n"; // ONLY VALUE
    //if(!setControlSetting(V4L2_CID_GAIN, camera_params_.kCameraGain)) std::cerr << "Error setting gain: " << errno << "\n"; // ONLY VALUE
    if(!setControlSetting(V4L2_CID_SHARPNESS, camera_params_.kCameraSharpness)) std::cerr << "Error setting sharpness: " << errno << "\n"; //0-4
}
Exemple #3
0
bool NaoCamera::setControlSettings(std::list<CameraSettingsBH::V4L2Setting> controlsettings,
                                   std::list<CameraSettingsBH::V4L2Setting> appliedControlSettings)
{
  std::list<CameraSettingsBH::V4L2Setting>::iterator ait = appliedControlSettings.begin();
  std::list<CameraSettingsBH::V4L2Setting>::const_iterator it = controlsettings.begin();
  std::list<CameraSettingsBH::V4L2Setting>::const_iterator end = controlsettings.end();
  bool success = true;
  int counter = 0;
  for(; it != end && timeStamp - lastCameraSettingTimestamp >= cameraSettingApplicationRate; ++it, ++ait, counter++)
  {
    if(it->value == ait->value)
    {
      continue; // This setting has successfully been applied, so we don't have to deal with it.
    }

    if(!setControlSetting(it->command, it->value))
    {
      OUTPUT_WARNING("NaoCamera: Setting camera control value failed: " << it->command);
      success = false; // The settings should have been set but wasn't => no success.
    }
    else
    {
      appliedSettings.setSetting(*it);
      lastCameraSettingTimestamp = timeStamp;
    }
  }
  return success;
}
Exemple #4
0
unsigned char NaoCamera::switchCamera (  unsigned char camera)
{
	unsigned char cmd[2] =  {camera, 0};
	int flip = camera == NAO_UPPER_CAMERA ? 1 : 0;
	int type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
	// disable streaming
	assert (ioctl (fd, VIDIOC_STREAMOFF, &type) != -1);
	// switch camera
	int i2cfd = openI2CAdapter();
	assert (i2c_smbus_write_block_data (i2cfd, 220, 1, cmd) != -1);
	closeI2CAdapter (i2cfd);
	setControlSetting (V4L2_CID_VFLIP, flip);
	setControlSetting (V4L2_CID_HFLIP, flip);
	// enable streaming
	assert (ioctl (fd, VIDIOC_STREAMON, &type) != -1);
	currentCamera = camera;
	return camera;
}
Exemple #5
0
void NaoCamera::initDefaultControlSettings()
{
	// make sure automatic stuff is off
	int flip = currentCamera == NAO_UPPER_CAMERA ? 1 : 0;
	setControlSetting (V4L2_CID_HFLIP, flip);
	setControlSetting (V4L2_CID_VFLIP, flip);
	//std::list<CameraSettings::V4L2Setting> v4l2settings = settings.getInitSettings();
	//assert(setControlSettings(v4l2settings));
	setControlSetting (V4L2_CID_AUTOEXPOSURE , 0);
	setControlSetting (V4L2_CID_AUTO_WHITE_BALANCE, 0);
	setControlSetting (V4L2_CID_AUTOGAIN, 0);
	setControlSetting (V4L2_CID_EXPOSURE_AUTO, V4L2_EXPOSURE_MANUAL);
	setControlSetting (V4L2_CID_GAIN, 0xF0);
	setControlSetting (V4L2_CID_BACKLIGHT_COMPENSATION, 0);
	setControlSetting (V4L2_CID_SAT_AUTO, 0);
	setControlSetting (V4L2_CID_HUE_AUTO, 0);
	setControlSetting (V4L2_CID_AUTO_CONTRAST_CENTER, 0);
	setControlSetting (V4L2_CID_POWER_LINE_FREQUENCY, V4L2_CID_POWER_LINE_FREQUENCY_DISABLED);
	setControlSetting (V4L2_CID_HUE, 0);
	setControlSetting (V4L2_CID_SATURATION, 255);
	setControlSetting (V4L2_CID_BRIGHTNESS, 128);
	setControlSetting (V4L2_CID_CONTRAST, 96);
	setControlSetting (V4L2_CID_AWB_G_CHANNEL_GAIN, 64);
	setControlSetting (V4L2_CID_RED_BALANCE, 128 ); //128
	setControlSetting (V4L2_CID_BLUE_BALANCE, 128);
	usleep (300 * 1000);
}
Exemple #6
0
void NaoCamera::setDefaultSettings() {
    std::cout << "NaoCamera: Initializing Camera Parameters to default" << std::endl;
    if(!setControlSetting(V4L2_CID_HFLIP, hflip_)) std::cerr << "Error setting hflip: " << errno << "\n";
    if(!setControlSetting(V4L2_CID_VFLIP, vflip_)) std::cerr << "Error setting vflip: " << errno << "\n";

    if(!setControlSetting(V4L2_CID_AUTO_WHITE_BALANCE, 0)) std::cerr << "Error setting auto white balance: " << errno << "\n";
    if(!setControlSetting(V4L2_CID_EXPOSURE_AUTO, 1)) std::cerr << "Error setting exposure auto: " << errno << "\n";
    if(!setControlSetting(V4L2_CID_BACKLIGHT_COMPENSATION, 0x00)) std::cerr << "Error backlight compensation brightness: " << errno << "\n";

    if(!setControlSetting(V4L2_CID_BRIGHTNESS, 220)) std::cerr << "Error setting brightness: " << errno << "\n"; //ONLY VALUE
    if(!setControlSetting(V4L2_CID_CONTRAST, 53)) std::cerr << "Error setting contrast: " << errno << "\n"; //20-53
    if(!setControlSetting(V4L2_CID_SATURATION, 128)) std::cerr << "Error setting saturation: " << errno << "\n"; //0-255
    if(!setControlSetting(V4L2_CID_HUE, 0)) std::cerr << "Error setting hue: " << errno << "\n"; // ONLY VALUE
    if(!setControlSetting(V4L2_CID_EXPOSURE, 0)) std::cerr << "Error setting exposure: " << errno << "\n"; // SETS IT TO ARBITRARY DEFAULT
    if(!setControlSetting(V4L2_CID_GAIN, 32)) std::cerr << "Error setting gain: " << errno << "\n"; // 0-255
    if(!setControlSetting(V4L2_CID_SHARPNESS, 0)) std::cerr << "Error setting sharpness: " << errno << "\n"; //0-7
}
Exemple #7
0
void NaoCamera::initDefaultControlSettings(bool flip)
{
  setControlSetting(V4L2_CID_HFLIP, flip ? 1 : 0);
  setControlSetting(V4L2_CID_VFLIP, flip ? 1 : 0);
}
Exemple #8
0
void ImageTranscriber::initSettings()
{
    // DO NOT SCREW UP THE ORDER BELOW

    setControlSetting(V4L2_CID_HFLIP, settings.hflip);
    setControlSetting(V4L2_CID_VFLIP, settings.vflip);

    // Auto exposure on (buggy driver, blah)
    setControlSetting(V4L2_CID_EXPOSURE_AUTO, 1);

    // Set most settings with auto exposure off
    setControlSetting(V4L2_CID_BRIGHTNESS, settings.brightness);
    setControlSetting(V4L2_CID_CONTRAST, settings.contrast);
    setControlSetting(V4L2_CID_SATURATION, settings.saturation);
    setControlSetting(V4L2_CID_HUE, settings.hue);
    setControlSetting(V4L2_CID_SHARPNESS, settings.sharpness);

    // Auto white balance and backlight comp off!
    setControlSetting(V4L2_CID_AUTO_WHITE_BALANCE,
                      settings.auto_whitebalance);
    setControlSetting(V4L2_CID_BACKLIGHT_COMPENSATION,
                      settings.backlight_compensation);

    // Auto exposure back off
    setControlSetting(V4L2_CID_EXPOSURE_AUTO, settings.auto_exposure);

    setControlSetting(V4L2_CID_EXPOSURE, settings.exposure);
    setControlSetting(V4L2_CID_GAIN, settings.gain);

    // This is actually just the white balance setting!
    setControlSetting(V4L2_CID_DO_WHITE_BALANCE, settings.white_balance);
}
Exemple #9
0
void ImageTranscriber::initSettings()
{
    // DO NOT SCREW UP THE ORDER BELOW
    setControlSetting(V4L2_CID_HFLIP, settings.hflip);
    setControlSetting(V4L2_CID_VFLIP, settings.vflip);

    // Still need to turn this on to change brightness, grumble grumble
    setControlSetting(V4L2_CID_EXPOSURE_AUTO, 1);

    setControlSetting(V4L2_CID_BRIGHTNESS, settings.brightness);
    setControlSetting(V4L2_CID_CONTRAST, settings.contrast);
    setControlSetting(V4L2_CID_SATURATION, settings.saturation);
    setControlSetting(V4L2_CID_HUE, settings.hue);
    setControlSetting(V4L2_CID_SHARPNESS, settings.sharpness);

    // Auto white balance, exposure,  and backlight comp off!
    setControlSetting(V4L2_CID_AUTO_WHITE_BALANCE,
                      settings.auto_whitebalance);
    setControlSetting(V4L2_CID_BACKLIGHT_COMPENSATION,
                      settings.backlight_compensation);
    setControlSetting(V4L2_CID_EXPOSURE_AUTO, settings.auto_exposure);

    setControlSetting(V4L2_CID_EXPOSURE, settings.exposure);
    setControlSetting(V4L2_CID_GAIN, settings.gain);

    // This is actually just the white balance setting!
    setControlSetting(V4L2_CID_DO_WHITE_BALANCE, settings.white_balance);
    setControlSetting(V4L2_MT9M114_FADE_TO_BLACK, settings.fade_to_black);
}