C++ 使用YAML cpp错误分析YAML文件
我正在尝试将带有摄像头校准的.yaml文件中的信息解析为ROS中的“sensor_msgs::CameraInfo”消息 我设法解析int和string,但在使用双向量/矩阵时遇到了问题 这是我的密码: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
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>>();