diff --git a/src/ros_joint_state.cpp b/src/ros_joint_state.cpp index acc482ff3da7d6abfa62b93e59dd4e216ca9ea69..d28002cda3ef9b8d572f51b27d0b1d2ff3c8b778 100644 --- a/src/ros_joint_state.cpp +++ b/src/ros_joint_state.cpp @@ -6,6 +6,19 @@ #include "ros_joint_state.hh" #include "sot_to_ros.hh" +//FIXME: this is very very wrong but we need to update abstract-robot-dynamics +// to publish joint names. +static const char* dof_names[] = + { + "RLEG_JOINT0", "RLEG_JOINT1", "RLEG_JOINT2", "RLEG_JOINT3", "RLEG_JOINT4", "RLEG_JOINT5", + "LLEG_JOINT0", "LLEG_JOINT1", "LLEG_JOINT2", "LLEG_JOINT3", "LLEG_JOINT4", "LLEG_JOINT5", + "CHEST_JOINT0", "CHEST_JOINT1", + "HEAD_JOINT0", "HEAD_JOINT1", + "RARM_JOINT0", "RARM_JOINT1", "RARM_JOINT2", "RARM_JOINT3", "RARM_JOINT4", "RARM_JOINT5", "RARM_JOINT6", + "LARM_JOINT0", "LARM_JOINT1", "LARM_JOINT2", "LARM_JOINT3", "LARM_JOINT4", "LARM_JOINT5", "LARM_JOINT6", + 0 + }; + namespace dynamicgraph { DYNAMICGRAPH_FACTORY_ENTITY_PLUGIN(RosJointState, "RosJointState"); @@ -52,7 +65,9 @@ namespace dynamicgraph if (dt > rate_ && publisher_.trylock ()) { lastPublicated_ = ros::Time::now (); - std::size_t s = state_.access (t).size (); + + // State size without the free floating. + std::size_t s = state_.access (t).size () - 6; // Update header. ++jointState_.header.seq; @@ -64,20 +79,19 @@ namespace dynamicgraph // Fill names if needed. if (jointState_.name.size () != s) { - boost::format fmtFreeFlyer ("free-flyer-%s"); - boost::format fmtJoint ("joint-%s"); jointState_.name.resize (s); for (std::size_t i = 0; i < s; ++i) - if (i < 6) - jointState_.name[i] = (fmtFreeFlyer % i).str (); - else - jointState_.name[i] = (fmtJoint % (i - 6)).str (); + { + if (dof_names[i] == 0) + break; + jointState_.name[i] = dof_names[i]; + } } // Fill position. jointState_.position.resize (s); for (std::size_t i = 0; i < s; ++i) - jointState_.position[i] = state_.access (t) (i); + jointState_.position[i] = state_.access (t) (i + 6); publisher_.msg_ = jointState_; publisher_.unlockAndPublish ();