Разбор файла YAML с использованием ошибки yaml-cpp - PullRequest
0 голосов
/ 03 мая 2018

Я пытаюсь проанализировать информацию из файла .yaml с калибровкой камеры в сообщение «sensor_msgs :: CameraInfo» в ROS.

Мне удается проанализировать как INT, так и строки, но у меня возникают проблемы, когда я получаю двойной вектор / матрицу.

Вот мой код:

sensor_msgs::CameraInfo yamlToCameraInfo(std::string leftOrRightCam)
{
  YAML::Node camera_info_yaml = YAML::LoadFile(leftOrRightCam + ".yaml");
  sensor_msgs::CameraInfo camera_info_msg;
  camera_info_msg.width = camera_info_yaml["image_width"].as<uint32_t>();
  camera_info_msg.height = camera_info_yaml["image_height"].as<uint32_t>();
  camera_info_msg.distortion_model = camera_info_yaml["distortion_model"].as<std::string>();
  camera_info_msg.D = camera_info_yaml["distortion_coefficients"].as<double>();
  camera_info_msg.K = camera_info_yaml["camera_matrix"].as<double>();

  return camera_info_msg;

}

Я получаю следующую ошибку:

ошибка: нет совпадения для 'operator =' (типы операндов 'sensor_msgs :: CameraInfo_> :: _ D_type {aka std :: vector>} 'и' double ')
camera_info_msg.D = camera_info_yaml [ "distortion_coefficients"] как ();.

Документация к сообщению cameraInfo находится здесь: http://docs.ros.org/api/sensor_msgs/html/msg/CameraInfo.html

Учебник для пакета yaml-cpp: https://github.com/jbeder/yaml-cpp/wiki/Tutorial

Часть "Коэффициенты искажения" моего файла yaml выглядит так:

distortion_coefficients:
ряды: 1
столбцы: 5
данные: [-0,167477, 0,023595, 0,004069, -0,002996, 0,000000]

Кто-нибудь знает, что я делаю не так?

1 Ответ

0 голосов
/ 04 мая 2018

Ошибка в этой строке:

camera_info_msg.D = camera_info_yaml["distortion_coefficients"].as<double>();

предполагает, что левая сторона - std::vector<double>, тогда как правая сторона - double. Вместо этого:

camera_info_msg.D = camera_info_yaml["distortion_coefficients"].as<std::vector<double>>();
...