Я пытаюсь проанализировать информацию из файла .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]
Кто-нибудь знает, что я делаю не так?