39 #include <gtest/gtest.h>
43 #include <sensor_msgs/JointState.h>
45 #include <dynamic_reconfigure/client.h>
46 #include <dynamic_robot_state_publisher/DynamicRobotStateConfig.h>
57 std::string baseRobotDescription, moreRobotDescription;
58 ASSERT_TRUE(nh.
getParam(
"robot_description", baseRobotDescription));
59 ASSERT_TRUE(nh.
getParam(
"more_robot_description", moreRobotDescription));
65 dynamic_reconfigure::Client<DynamicRobotStateConfig> reconfigClient(
"test",
NodeHandle(nh,
"dynamic_pub"));
66 DynamicRobotStateConfig config;
67 auto spin = [](
size_t num = 10,
double duration = 0.1) {
68 for (
size_t i = 0; i < num; ++i) {
74 ASSERT_TRUE(reconfigClient.getCurrentConfiguration(config,
ros::Duration(1.0)));
75 ASSERT_EQ(baseRobotDescription, config.robot_description);
77 ROS_INFO(
"Publishing joint state to robot state publisher");
81 sensor_msgs::JointState js_msg;
82 js_msg.name.push_back(
"joint1");
83 js_msg.position.push_back(M_PI);
85 auto publishJointStates = [&]() {
86 for (
unsigned int i = 0; i < 10; i++) {
94 auto spinUntilFrame = [&](
const std::string& frame,
size_t num = 10,
double duration = 0.1) {
95 for (
size_t i = 0; i < num && !buffer.
canTransform(
"link1", frame,
Time()); ++i) {
100 spinUntilFrame(
"link2");
105 EXPECT_NEAR(t.transform.translation.x, 5.0,
EPS);
106 EXPECT_NEAR(t.transform.translation.y, 0.0,
EPS);
107 EXPECT_NEAR(t.transform.translation.z, 0.0,
EPS);
113 config.robot_description = moreRobotDescription;
114 ASSERT_TRUE(reconfigClient.setConfiguration(config));
116 ASSERT_TRUE(reconfigClient.getCurrentConfiguration(config,
ros::Duration(1.0)));
118 publishJointStates();
119 spinUntilFrame(
"link3");
123 EXPECT_EQ(moreRobotDescription, config.robot_description);
126 EXPECT_NEAR(t.transform.translation.x, 5.0,
EPS);
127 EXPECT_NEAR(t.transform.translation.y, 0.0,
EPS);
128 EXPECT_NEAR(t.transform.translation.z, 0.0,
EPS);
131 EXPECT_NEAR(t.transform.translation.x, 5.0,
EPS);
132 EXPECT_NEAR(t.transform.translation.y, 5.0,
EPS);
133 EXPECT_NEAR(t.transform.translation.z, 0.0,
EPS);
139 config.robot_description = baseRobotDescription;
140 ASSERT_TRUE(reconfigClient.setConfiguration(config));
142 ASSERT_TRUE(reconfigClient.getCurrentConfiguration(config,
ros::Duration(1.0)));
144 publishJointStates();
145 spinUntilFrame(
"link2");
149 EXPECT_EQ(baseRobotDescription, config.robot_description);
152 int main(
int argc,
char** argv)
154 testing::InitGoogleTest(&argc, argv);
155 ros::init(argc, argv,
"test_dynamic_publisher");
156 return RUN_ALL_TESTS();