c++ - 如何在ROS中高效加载大量参数?

标签 c++ ros

与以下相比,在 ROS 中加载许多参数的更好方法是什么:

double default_maxvel_xy = 3;
double default_maxvel_z = 1.5;
double default_maxvel_c = 1;
double default_maxacc_xy = 2;
double default_maxacc_z = 1;
double default_maxacc_c = 1;
double default_maxjerk_xy = 1;
double default_maxjerk_z = 1;
double default_maxjerk_c = 1;
n.param<double>("default_maxvel_xy", default_maxvel_xy, 3);
n.param<double>("default_maxvel_z", default_maxvel_z, 1.5);
n.param<double>("default_maxvel_c", default_maxvel_c, 1);
n.param<double>("default_maxacc_xy", default_maxacc_xy, 2);
n.param<double>("default_maxacc_z", default_maxacc_z, 1);
n.param<double>("default_maxacc_c", default_maxacc_c, 1);
n.param<double>("default_maxjerk_xy", default_maxjerk_xy, 1);
n.param<double>("default_maxjerk_z", default_maxjerk_z, 1);
n.param<double>("default_maxjerk_c", default_maxjerk_c, 1);

m_waypoint.max_dynamics.vel_max.linear.x = default_maxvel_xy;
m_waypoint.max_dynamics.vel_max.linear.y = default_maxvel_xy;
m_waypoint.max_dynamics.vel_max.linear.z = default_maxvel_z;
m_waypoint.max_dynamics.vel_max.angular.x = default_maxvel_c;
m_waypoint.max_dynamics.vel_max.angular.y = default_maxvel_c;
m_waypoint.max_dynamics.vel_max.angular.z = default_maxvel_c;

m_waypoint.max_dynamics.acc_max.linear.x = default_maxacc_xy;
m_waypoint.max_dynamics.acc_max.linear.y = default_maxacc_xy;
m_waypoint.max_dynamics.acc_max.linear.z = default_maxacc_z;
m_waypoint.max_dynamics.acc_max.angular.x = default_maxacc_c;
m_waypoint.max_dynamics.acc_max.angular.y = default_maxacc_c;
m_waypoint.max_dynamics.acc_max.angular.z = default_maxacc_c;

m_waypoint.max_dynamics.jerk_max.linear.x = default_maxjerk_xy;
m_waypoint.max_dynamics.jerk_max.linear.y = default_maxjerk_xy;
m_waypoint.max_dynamics.jerk_max.linear.z = default_maxjerk_z;
m_waypoint.max_dynamics.jerk_max.angular.x = default_maxjerk_c;
m_waypoint.max_dynamics.jerk_max.angular.y = default_maxjerk_c;
m_waypoint.max_dynamics.jerk_max.angular.z = default_maxjerk_c;

代码太多,容易出错。 我可以知道如何在 yaml 中创建自定义类型并将其作为一个整体加载吗?

最佳答案

字典(在 Python 中的意思)可以作为 map 加载,例如 map 。列表(在 Python 中的含义)可以作为 vector 加载,例如 map 。

例子:

std::map<std::string, double> parameter_map;
ros::param::get("~my_parameter_map", parameter_map);

关于c++ - 如何在ROS中高效加载大量参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44133078/

相关文章:

c++ - std::random_shuffle 到底有多随机?

c++ - 如何在 ROS Indigo 下正确链接 opencv3(使用 CMake)?

c++ - 创建并编译一个基类以在其他 C++ 项目 (ROS) 中使用

c++ - Eigen 从 Affine3d 3x3 旋转矩阵中提取的四元数是否被归一化?

ubuntu - 在 Ubuntu 上安装 ROS

c++ - 使用yaml-cpp错误解析YAML文件

c++ - 双簧管异步音频提取

c++ - 如何使用指针用对象填充 vector

c++ - C++ 中全局 `operator delete` 的两种变体是什么?

c++ - 仅头文件库的好处