45 namespace joint_feedback_relay_handler
49 std::map<int, RobotGroup> &robot_groups)
52 bool rtn =
JointRelayHandler::init(connection, static_cast<int>(StandardMsgTypes::JOINT_FEEDBACK), robot_groups);
60 std::vector<std::string> &joint_names)
63 bool rtn =
JointRelayHandler::init(connection, static_cast<int>(StandardMsgTypes::JOINT_FEEDBACK), joint_names);
74 control_msgs::FollowJointTrajectoryFeedback* control_state,
75 sensor_msgs::JointState* sensor_state)
89 control_msgs::FollowJointTrajectoryFeedback* control_state,
90 sensor_msgs::JointState* sensor_state,
int robot_id)
92 DynamicJointsGroup all_joint_state;
95 LOG_ERROR(
"Failed to convert SimpleMessage");
99 DynamicJointsGroup xform_joint_state;
100 if (!
transform(all_joint_state, &xform_joint_state))
102 LOG_ERROR(
"Failed to transform joint state");
107 DynamicJointsGroup pub_joint_state;
108 std::vector<std::string> pub_joint_names;
109 if (!
select(xform_joint_state, robot_groups_[robot_id].get_joint_names(), &pub_joint_state, &pub_joint_names))
111 LOG_ERROR(
"Failed to select joints for publishing");
115 *control_state = control_msgs::FollowJointTrajectoryFeedback();
117 control_state->joint_names = pub_joint_names;
118 control_state->actual.positions = pub_joint_state.positions;
119 control_state->actual.velocities = pub_joint_state.velocities;
120 control_state->actual.accelerations = pub_joint_state.accelerations;
121 control_state->actual.time_from_start = pub_joint_state.time_from_start;
123 *sensor_state = sensor_msgs::JointState();
125 sensor_state->name = pub_joint_names;
126 sensor_state->position = pub_joint_state.positions;
127 sensor_state->velocity = pub_joint_state.velocities;
129 this->pub_controls_[robot_id].publish(*control_state);
130 this->pub_states_[robot_id].publish(*sensor_state);
138 if (!joint_feedback_msg.
init(msg_in))
140 LOG_ERROR(
"Failed to initialize joint feedback message");
150 if (!joint_feedback_msg.
init(msg_in))
152 LOG_ERROR(
"Failed to initialize joint feedback message");
160 std::vector<double> &vec,
165 LOG_ERROR(
"Failed to copy JointData. Len (%d) out of range (0 to %d)",
171 for (
int i = 0; i < len; ++i)
181 int num_jnts = robot_groups_[robot_id].get_joint_names().size();
187 LOG_ERROR(
"Failed to parse position data from JointFeedbackMessage");
192 joint_state->positions.clear();
199 LOG_ERROR(
"Failed to parse velocity data from JointFeedbackMessage");
204 joint_state->velocities.clear();
211 LOG_ERROR(
"Failed to parse acceleration data from JointFeedbackMessage");
216 joint_state->accelerations.clear();
238 LOG_ERROR(
"Failed to parse position data from JointFeedbackMessage");
243 joint_state->positions.clear();
250 LOG_ERROR(
"Failed to parse velocity data from JointFeedbackMessage");
255 joint_state->velocities.clear();
262 LOG_ERROR(
"Failed to parse acceleration data from JointFeedbackMessage");
267 joint_state->accelerations.clear();
280 const std::vector<std::string>& all_joint_names,
281 DynamicJointsGroup* pub_joint_state, std::vector<std::string>* pub_joint_names)
283 ROS_ASSERT(all_joint_state.positions.size() == all_joint_names.size());
285 *pub_joint_state = DynamicJointsGroup();
286 pub_joint_names->clear();
289 for (
size_t i = 0; i < all_joint_names.size(); ++i)
291 if (all_joint_names[i].empty())
293 pub_joint_names->push_back(all_joint_names[i]);
294 if (!all_joint_state.positions.empty())
295 pub_joint_state->positions.push_back(all_joint_state.positions[i]);
296 if (!all_joint_state.velocities.empty())
297 pub_joint_state->velocities.push_back(all_joint_state.velocities[i]);
298 if (!all_joint_state.accelerations.empty())
299 pub_joint_state->accelerations.push_back(all_joint_state.accelerations[i]);
301 pub_joint_state->time_from_start = all_joint_state.time_from_start;
virtual bool transform(const DynamicJointsGroup &state_in, DynamicJointsGroup *state_out)
Transform joint state before publishing. Can be overridden to implement, e.g. robot-specific joint co...
industrial::shared_types::shared_int getRobotID()
bool init(industrial::smpl_msg_connection::SmplMsgConnection *connection, std::vector< std::string > &joint_names)
bool getPositions(industrial::joint_data::JointData &dest)
bool create_messages(SimpleMessage &msg_in, control_msgs::FollowJointTrajectoryFeedback *control_state, sensor_msgs::JointState *sensor_state)
Convert joint message into publish message-types.
std::vector< double > values
virtual bool create_messages(JointMessage &msg_in, control_msgs::FollowJointTrajectoryFeedback *control_state, sensor_msgs::JointState *sensor_state)
bool init(industrial::simple_message::SimpleMessage &msg)
virtual bool convert_message(SimpleMessage &msg_in, JointTrajectoryPoint *joint_state)
Convert joint message into intermediate message-type.
static bool JointDataToVector(const industrial::joint_data::JointData &joints, std::vector< double > &vec, int len)
#define LOG_ERROR(format,...)
bool getJoint(industrial::shared_types::shared_int index, industrial::shared_types::shared_real &value) const
bool getTime(industrial::shared_types::shared_real &time)
virtual bool select(const DynamicJointsGroup &all_joint_state, const std::vector< std::string > &all_joint_names, DynamicJointsGroup *pub_joint_state, std::vector< std::string > *pub_joint_names)
bool getVelocities(industrial::joint_data::JointData &dest)
bool param(const std::string ¶m_name, T ¶m_val, const T &default_val) const
virtual bool init(SmplMsgConnection *connection, std::vector< std::string > &joint_names)
Class initializer.
int getMaxNumJoints() const
std::vector< std::string > all_joint_names_
bool getAccelerations(industrial::joint_data::JointData &dest)