Gazebo Answers logo


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:

  1. Found joint by the name

  2. Created JointPosition component for this joint

  3. Used SetData() to set new joint position

  4. 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?


Originally posted by temero on Gazebo Answers with karma: 15 on 2021-08-16

Post score: 0


1 Answer 1


Gazebo Answers logo

It's generally not recommended to the set the joint position on a continual basis since it can cause the physics engine to misbehave. If you want to set the position at the beginning of simulation, you can use the JointPositionReset component.

The JointPosition component contains the current position of the joint and is updated by the Physics system.

Originally posted by azeey with karma: 704 on 2021-08-16

This answer was ACCEPTED on the original site

Post score: 1

Original comments

Comment by temero on 2021-08-23:
JointPositionReset is working fine. Thank you.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.