使用yaml-cpp错误解析YAML文件
Parsing YAML file using yaml-cpp error
我正在尝试将带有相机校准的 .yaml 文件中的信息解析为 ROS 中的 "sensor_msgs::CameraInfo" 消息。
我设法解析了 INT 和字符串,但在解析双精度时遇到了问题 vector/matrix。
这是我的代码:
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;
}
我得到的错误是这样的:
error: no match for 'operator=' (operand types are
'sensor_msgs::CameraInfo_ >::_D_type {aka
std::vector >}' and 'double')
camera_info_msg.D =
camera_info_yaml["distortion_coefficients"].as();
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" 部分如下所示:
distortion_coefficients:
rows: 1
cols: 5
data: [-0.167477, 0.023595, 0.004069, -0.002996, 0.000000]
有人知道我做错了什么吗?
这一行的错误:
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>>();
我正在尝试将带有相机校准的 .yaml 文件中的信息解析为 ROS 中的 "sensor_msgs::CameraInfo" 消息。
我设法解析了 INT 和字符串,但在解析双精度时遇到了问题 vector/matrix。
这是我的代码:
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;
}
我得到的错误是这样的:
error: no match for 'operator=' (operand types are 'sensor_msgs::CameraInfo_ >::_D_type {aka std::vector >}' and 'double')
camera_info_msg.D = camera_info_yaml["distortion_coefficients"].as();
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" 部分如下所示:
distortion_coefficients:
rows: 1
cols: 5
data: [-0.167477, 0.023595, 0.004069, -0.002996, 0.000000]
有人知道我做错了什么吗?
这一行的错误:
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>>();