C++ 使用YAML cpp错误分析YAML文件

C++ 使用YAML cpp错误分析YAML文件,c++,yaml,ros,yaml-cpp,C++,Yaml,Ros,Yaml Cpp,我正在尝试将带有摄像头校准的.yaml文件中的信息解析为ROS中的“sensor_msgs::CameraInfo”消息 我设法解析int和string,但在使用双向量/矩阵时遇到了问题 这是我的密码: sensor_msgs::CameraInfo yamlToCameraInfo(std::string leftOrRightCam) { YAML::Node camera_info_yaml = YAML::LoadFile(leftOrRightCam + ".yaml"); s

我正在尝试将带有摄像头校准的.yaml文件中的信息解析为ROS中的“sensor_msgs::CameraInfo”消息

我设法解析int和string,但在使用双向量/矩阵时遇到了问题

这是我的密码:

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;

}
传感器\u msgs::Cameranfo YamlToCameranfo(标准::字符串leftOrRightCam)
{
YAML::Node camera_info_YAML=YAML::LoadFile(leftOrRightCam+“.YAML”);
传感器\u msgs::Cameranfo摄像头\u信息\u msg;
camera_info_msg.width=camera_info_yaml[“图像宽度”].as();
camera_info_msg.height=camera_info_yaml[“image_height”].as();
camera_info_msg.transformation_model=camera_info_yaml[“Transformation_model”].as();
camera_info_msg.D=camera_info_yaml[“失真系数”]。as();
camera_info_msg.K=camera_info_yaml[“camera_matrix”].as();
返回摄像头信息消息;
}
我得到的错误是:

错误:“运算符=”不匹配(操作数类型为 'sensor_msgs::CameraInfo::_D_type{aka std::vector>}'和'double')
摄像头信息信息消息D= 摄像机信息yaml[“失真系数”]。as()

cameraInfo消息的文档位于以下位置:

yaml cpp包教程:

yaml文件的“失真系数”部分如下所示:

失真系数:
行数:1
cols:5
数据:[-0.167477,0.023595,0.004069,-0.002996,0.000000]


有人知道我做错了什么吗?

这一行的错误:

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

这里的
畸变系数
节点是一个映射。我想您需要遍历
扭曲系数
节点并获得itemsys。问题是D确实是一个向量。我没有让您的特定代码行工作,但是我已经使用了这个位“for(std::size\u ti=0;I
camera_info_msg.D = camera_info_yaml["distortion_coefficients"].as<std::vector<double>>();