Restrict joint limits: constructed JointModelGroup doesn't have a kinematics solver?
With the same premise as my previous question, while building my updated JointModelGroup
i tried first testing what would happen using basically a copy of the original, with this code:
std::unique_ptr<moveit::core::JointModelGroup> MyClass::createRestrictedJointModelGroup(
moveit::core::JointModelGroup joint_model_group_copy, XmlRpc::XmlRpcValue joint_limits)
{
auto joint_vector = joint_model_group_copy.getJointModels();
// this is where the joint limits updating code goes
return std::make_unique<moveit::core::JointModelGroup>( joint_model_group_copy.getName()
, joint_model_group_copy.getConfig()
, joint_vector
, &joint_model_group_copy.getParentModel());
}
By using the created JointModelGroup
I get no robot motion, and this error: No kinematics solver instantiated for group 'panda_arm'
. Using JointModelGroup::printGroupInfo()
in both the original and the newly created objects, I found (as could be expected) that everything is the same except for a missing couple lines:
* Kinematics solver bijection:
0 1 2 3 4 5 6
Looking at the class header I found there is no setter, and looking through to where it gets instantiated I see a RoboModel::setKinematicsAllocators which leads me to think it's the robot model's job to create this.
So I'm left confused, since I'm giving the address of the same robot model I was using (&joint_model_group_copy.getParentModel())
returns the same address as move_group_.getRobotModel().get()
where move_group_
is the class' instance of MoveGroupInterface
), the kinematics solver should be gotten from there, shouldn't it?