Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

added repitition to robot_description reading #53

Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions include/robot_state_publisher/joint_state_listener.h
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,12 @@ class JointStateListener {
/// Destructor
~JointStateListener();

// Default value for number of attempts to read robot_description from parameter server
static const int default_description_read_repetitions_;
Copy link
Contributor

@sloretz sloretz Feb 8, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think adding these two constants to the JointStateListener class breaks ABI, which would block merging into kinetic-devel. Since these are only used in main(), how about they be local variables there?


// Default value for delay between the attempts to read robot_description
static const double default_description_read_delay_;

protected:
virtual void callbackJointState(const JointStateConstPtr& state);
virtual void callbackFixedJoint(const ros::TimerEvent& e);
Expand Down
32 changes: 32 additions & 0 deletions src/joint_state_listener.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@ using namespace std;
using namespace ros;
using namespace KDL;
using namespace robot_state_publisher;
const int JointStateListener::default_description_read_repetitions_ = 0;
const double JointStateListener::default_description_read_delay_ = 0.5;

JointStateListener::JointStateListener(const KDL::Tree& tree, const MimicMap& m, const urdf::Model& model)
: state_publisher_(tree, model), mimic_(m)
Expand Down Expand Up @@ -161,6 +163,36 @@ int main(int argc, char** argv)
ROS_WARN("The 'state_publisher' executable is deprecated. Please use 'robot_state_publisher' instead");
///////////////////////////////////////// end deprecation warning

// Checks if the robot_description is present on the parameter server
// If not, it will repeat the check for description_read_repetitions times with
// description_read_delay seconds delay between the checks (both are read from parameter server).
int description_read_repetitions;
node.param("description_read_repetitions", description_read_repetitions,
JointStateListener::default_description_read_repetitions_);
if (description_read_repetitions < 0) {
ROS_WARN_STREAM("Parameter description_read_repetitions is smaller than 0. Default value of " <<
JointStateListener::default_description_read_repetitions_ << " will be used.");
description_read_repetitions = JointStateListener::default_description_read_repetitions_;
}
double description_read_delay;
node.param("description_read_delay", description_read_delay, JointStateListener::default_description_read_delay_);
if (description_read_delay <= 0) {
ROS_WARN_STREAM("Parameter description_read_delay is smaller than or equal 0. Default value of " <<
JointStateListener::default_description_read_delay_ << " seconds will be used.");
description_read_delay = JointStateListener::default_description_read_delay_;
}
for (size_t i = 0; i < description_read_repetitions; ++i) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please add a test for this code.

if (!node.hasParam("robot_description")) {
ROS_WARN_STREAM("No robot_description parameter in namespace " << node.getNamespace() <<
". Will try " << description_read_repetitions - i << " more times with " <<
description_read_delay << " second(s) delay between repetitions.");
ros::Duration(description_read_delay).sleep();
}
else {
break;
}
}

// gets the location of the robot description on the parameter server
urdf::Model model;
if (!model.initParam("robot_description"))
Expand Down