Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

Calling setModelConfiguration service within a gazebo plugin/controller

Hi, I'm trying to modify the gazebo_ros_laser plugin simply adding a function (just before the PutLaserData() method) to move the joint in a way that the sensor can tilt a certain angle and I'm using the gazebo set_model_configuration service cause I don't need dynamics. If a create a stand-alone node or I try from the command line it works, but when I try within the controller source file gazebo gets stuck or fails to call the service. If I try with:

this->client_ = this->rosnode_->serviceClient<gazebo_msgs::SetModelConfiguration>("set_model_configuration");

the call fails. With:

this->client_ = this->rosnode_->serviceClient<gazebo_msgs::SetModelConfiguration>("/gazebo/set_model_configuration");

gazebo gets stuck. The function I'm using is this:

void MyClass::UpdateJointPos()
{
  unsigned int index = 0;
  gazebo_msgs::SetModelConfiguration srv;
  srv.request.model_name = this->modelParent->GetName();
  srv.request.urdf_param_name = "robot_description";
  srv.request.joint_names.assign(1, this->modelParent->GetJoint(index)->GetName());
  srv.request.joint_positions.assign(1, this->jpositions[count]);

  if (!this->client_.call(srv)) ROS_ERROR("Failed to call the service");
}

I printed the value I send and they are correct. I wonder if I use an incorrect name to call the service but I tried every combination. I tried even to set the joint position by this->modelParent->GetJoint(index)->..something but there is no SetPosition() function or similar. I really need your help.