Hi
I want to manually set a joint position in my plugin for Ignition and trying to figure out how to do it. I've tried to set it through the JointPosition component but with no success.
What I did:
Found joint by the name
Created JointPosition component for this joint
Used SetData() to set new joint position
Used SetChanged to force an update on the client side
Entity joint = _ecm.EntityByComponents( components::ParentEntity(this->ownerEntity), components::Name(jointName), components::Joint());
auto jointPosComp = _ecm.Componentcomponents::JointPosition(joint); if (jointPosComp == nullptr) {
_ecm.CreateComponent(joint,components::JointPosition()); ignmsg << "jointPosComp created" << std::endl; _ecm.CreateComponent(joint, components::JointVelocity()); return; }ignerr << "jointPosComp: " << jointPosComp->Data()[0] << std::endl;
jointPosComp->SetData(std::vector{newJointPos}, [](const std::vector &, const std::vector &) -> bool { // No check for equality - always return false return false; }); _ecm.SetChanged(this->ownerEntity,components::JointPosition::typeId,ComponentState::OneTimeChange);
When I run it in PreUpdate section, even though I change JointPosition, I still get a JointPosition of 0 on the next iteration.
Any suggestions how to manually change joint position?
Thx
Originally posted by temero on Gazebo Answers with karma: 15 on 2021-08-16
Post score: 0