我试图使用 InverseKinematics 来解决 MultibodyPlant 的 IK。我试图为其添加一些位置约束,然后执行求解器。
drake::multibody::InverseKinematics kinsol(plant);
auto world = plant.world_frame();
Eigen::Ref<const Eigen::Vector3d> p_BQ;
Eigen::Ref<const Eigen::Vector3d> p_AQ_lower;
Eigen::Ref<const Eigen::Vector3d> p_AQ_upper;
auto COM = plant.GetFrameByName("hip_mass");
p_BQ << ...
p_AQ_lower << ...
p_AQ_upper << ...
auto pos1 = kinsol.AddPositionConstraint(COM, p_BQ, world, p_AQ_lower, p_AQ_upper);
drake::solvers::MathematicalProgramResult result = drake::solvers::Solve(kinsol.prog());
auto result_vec = result.GetSolution();
但是编译器给出了错误
error: call to deleted constructor of 'drake::multibody::BodyFrame<double>'
auto world = plant.world_frame();
^ ~~~~~~~~~~~~~~~~~
bazel-out/k8-py2-opt/bin/multibody/tree/_virtual_includes/multibody_tree_core/drake/multibody/tree/body.h:68:35: note: 'BodyFrame' has been explicitly marked deleted here
DRAKE_NO_COPY_NO_MOVE_NO_ASSIGN(BodyFrame)
error: no matching constructor for initialization of 'Eigen::Ref<const Eigen::Vector3d>' (aka 'Ref<const Matrix<double, 3, 1> >')
Eigen::Ref<const Eigen::Vector3d> p_BQ;
error: variable type 'drake::multibody::Frame<double>' is an abstract class
auto COM = plant.GetFrameByName("hip_mass");
我不确定我是否正确使用了 InverseKinematics。有人对此有解决方案吗?或者也许其他方法来为 RigidbodyTree 做 IK?