C++ 如何从带有ROS的yaml文件中读取元组数组?

C++ 如何从带有ROS的yaml文件中读取元组数组?,c++,yaml,ros,C++,Yaml,Ros,我有这样一个yaml文件: object_0: - v: 1.55 - t_x: 110.281 - t_y: 367.959 - traj_const_dist: 1.0 - trajectory: [[117, 356], [116, 356], [115, 356], [114, 356], [113, 356], [113, 357], [113, 358], [113, 359], [113, 360]] 参数轨迹的定义如下:std::vector tracks

我有这样一个yaml文件:

object_0:
  - v: 1.55
  - t_x: 110.281
  - t_y: 367.959
  - traj_const_dist: 1.0
  - trajectory: [[117, 356], [116, 356], [115, 356], [114, 356], [113, 356], [113, 357], [113, 358], [113, 359], [113, 360]]
参数
轨迹
的定义如下:
std::vector tracks

当我读入参数时:

ros::NodeHandle nh_;
nh_.param<std::vector<std::pair<double, double>>>(obj_topic, trajectory_, std::vector<std::pair<double, double>>());
ros::NodeHandle nhu;
参数(对象主题,轨迹,标准::向量();
。。。我得到这个错误:

error: no matching function for call to ‘ros::NodeHandle::getParam(const string&, std::vector<std::pair<double, double> >&) const’
       if (getParam(param_name, param_val))
错误:调用“ros::NodeHandle::getParam(const string&,std::vector&)const”时没有匹配的函数
if(getParam(参数名称,参数值))
如果你给我一些建议,那会有帮助的。数据类型是否不正确


(对不起,这是一个巨大的项目,很难制作一个小的可编译的示例。如果您坚持的话,我会做一个小的示例。)

根据这个示例,没有任何函数
getParam
来获取向量对的向量或向量的向量。因此,您需要更改YAML文件并仅使用现有函数
getParam

,这可以通过使用XmlRpc::XmlRpcValue来完成

假设yaml文件中的参数已加载到parameter server,则可以使用以下代码段:

XmlRpc::XmlRpcValue trajectory;
nh_.getParam("/param_name", trajectory);
   
/*To ensure the reading will happen if the data is provided in right format*/
if (trajectory.getType() == XmlRpc::XmlRpcValue::TypeArray)
{
    for (int i = 0; i < trajectory.size(); i++)
    {
        XmlRpc::XmlRpcValue trajectoryObject = trajectory[i];

        /*Individual coordinate points in trajectory*/

        int xCoordinate = trajectoryObject[0];
        int yCoordinate = trajectoryObject[1];
        ROS_INFO("The %d  th coordinate values are : %d and %d", ixCoordinate, yCoordinate);
    }
}
XmlRpc::XmlRpc值轨迹;
nh_u.getParam(“/param_name”,轨迹);
/*确保以正确的格式提供数据时进行读取*/
if(traction.getType()==XmlRpc::XmlRpcValue::TypeArray)
{
对于(int i=0;i
如果单击函数
param()
,则可以在库中看到一个
getParam
。库中出现此错误。@j35t3r
param()
是一个模板函数,根据模板类型调用
getParam()
。但是
getParam()
的签名集有限。因此,您需要在
param()
中使用与现有
getParam()
相对应的类型。“错误:没有匹配的函数”表示对应的函数不存在。