33 #include <geometry_msgs/Twist.h>
34 #include <sensor_msgs/Joy.h>
35 #include <std_msgs/Int32.h>
37 #include <gtest/gtest.h>
49 void cbCmdVel(
const geometry_msgs::Twist::ConstPtr& msg)
63 for (
size_t i = 0; i < 100; ++i)
75 geometry_msgs::Twist cmd_vel_out;
76 cmd_vel_out.linear.x = lin;
77 cmd_vel_out.angular.z = ang;
90 joy.buttons.resize(2);
91 joy.buttons[0] = button;
92 joy.buttons[1] = high_speed;
108 for (
size_t i = 0; i < 25; ++i)
110 publishCmdVel(0.1, 0.2);
112 publishJoy(0, 0, 0, 0, 0, 0);
114 publishJoy(0, 0, 1, 1, 0, 0);
116 publishJoy(0, 0, 0, 0, 1, 1);
118 publishJoy(0, 1, 1, 1, 0, 0);
120 publishJoy(0, 1, 0, 0, 1, 1);
126 ASSERT_TRUE(
static_cast<bool>(cmd_vel_));
127 ASSERT_NEAR(cmd_vel_->linear.x, 0.1, 1e-3);
128 ASSERT_NEAR(cmd_vel_->angular.z, 0.2, 1e-3);
136 for (
size_t i = 0; i < 25; ++i)
138 publishCmdVel(0.1, 0.2);
140 publishJoy(0, 0, 0, 0, 0, 0);
142 publishJoy(1, 0, 1, 0, 0, 0);
144 publishJoy(1, 0, 0, 0, 1, 0);
146 publishJoy(1, 0, 0, 1, 0, 0);
148 publishJoy(1, 0, 0, 0, 0, 1);
154 ASSERT_TRUE(
static_cast<bool>(cmd_vel_));
157 ASSERT_NEAR(cmd_vel_->linear.x, 0.1, 1e-3);
158 ASSERT_NEAR(cmd_vel_->angular.z, 0.2, 1e-3);
162 ASSERT_NEAR(cmd_vel_->linear.x, 1.0, 1e-3);
163 ASSERT_NEAR(cmd_vel_->angular.z, 0.0, 1e-3);
167 ASSERT_NEAR(cmd_vel_->linear.x, 0.0, 1e-3);
168 ASSERT_NEAR(cmd_vel_->angular.z, 1.0, 1e-3);
180 for (
size_t i = 0; i < 20; ++i)
183 publishJoy(0, 0, 0, 0, 0, 0);
185 publishJoy(1, 0, 1, 0.5, 0, 0);
187 publishJoy(0, 0, 1, 0, 0, 0);
189 publishJoy(0, 0, 0, 0.5, 0, 0);
195 ASSERT_TRUE(
static_cast<bool>(cmd_vel_));
198 ASSERT_NEAR(cmd_vel_->linear.x, 0, 1e-3);
199 ASSERT_NEAR(cmd_vel_->angular.z, 0, 1e-3);
203 ASSERT_NEAR(cmd_vel_->linear.x, 1.0, 1e-3);
204 ASSERT_NEAR(cmd_vel_->angular.z, 0.5, 1e-3);
208 ASSERT_NEAR(cmd_vel_->linear.x, 0, 1e-3);
209 ASSERT_NEAR(cmd_vel_->angular.z, 0, 1e-3);
218 for (
size_t i = 0; i < 25; ++i)
220 publishCmdVel(0.1, 0.2);
222 publishJoy(0, 0, 0, 0, 0, 0);
224 publishJoy(1, 1, 1, 0, 0, 0);
226 publishJoy(1, 1, 0, 0, 1, 0);
228 publishJoy(1, 1, 0, 1, 0, 0);
230 publishJoy(1, 1, 0, 0, 0, 1);
236 ASSERT_TRUE(
static_cast<bool>(cmd_vel_));
239 ASSERT_NEAR(cmd_vel_->linear.x, 0.1, 1e-3);
240 ASSERT_NEAR(cmd_vel_->angular.z, 0.2, 1e-3);
244 ASSERT_NEAR(cmd_vel_->linear.x, 2.0, 1e-3);
245 ASSERT_NEAR(cmd_vel_->angular.z, 0.0, 1e-3);
249 ASSERT_NEAR(cmd_vel_->linear.x, 0.0, 1e-3);
250 ASSERT_NEAR(cmd_vel_->angular.z, 2.0, 1e-3);
264 const int high_speed,
272 sensor_msgs::Joy joy;
274 joy.buttons.resize(2);
275 joy.buttons[0] = button;
276 joy.buttons[1] = high_speed;
282 joy.axes[4] = lin_y0;
283 joy.axes[5] = lin_y1;
292 for (
size_t i = 0; i < 25; ++i)
294 publishCmdVel(0.1, 0.2);
296 publishJoy(0, 0, 0, 0, 0, 0, 0, 0);
298 publishJoy(1, 0, 0.5, 0, 0, 0, 0, 0);
300 publishJoy(1, 0, 0.5, 0, 0, -1, 0, 0);
302 publishJoy(1, 0, 0, 0.3, 0, 0, 0, 0);
304 publishJoy(1, 0, 0, 0.3, 0, 0, 1, 0);
306 publishJoy(1, 0, 0, 0, -0.7, 0, 0, 0);
308 publishJoy(1, 0, 0, 0, -0.7, 0, 0, 1);
314 ASSERT_TRUE(
static_cast<bool>(cmd_vel_));
317 ASSERT_NEAR(cmd_vel_->linear.x, 0.1, 1e-3);
318 ASSERT_NEAR(cmd_vel_->linear.y, 0.0, 1e-3);
319 ASSERT_NEAR(cmd_vel_->angular.z, 0.2, 1e-3);
323 ASSERT_NEAR(cmd_vel_->linear.x, 0.5, 1e-3);
324 ASSERT_NEAR(cmd_vel_->linear.y, 0.0, 1e-3);
325 ASSERT_NEAR(cmd_vel_->angular.z, 0.0, 1e-3);
329 ASSERT_NEAR(cmd_vel_->linear.x, -1.0, 1e-3);
330 ASSERT_NEAR(cmd_vel_->linear.y, 0.0, 1e-3);
331 ASSERT_NEAR(cmd_vel_->angular.z, 0.0, 1e-3);
335 ASSERT_NEAR(cmd_vel_->linear.x, 0.0, 1e-3);
336 ASSERT_NEAR(cmd_vel_->linear.y, 0.15, 1e-3);
337 ASSERT_NEAR(cmd_vel_->angular.z, 0.0, 1e-3);
341 ASSERT_NEAR(cmd_vel_->linear.x, 0.0, 1e-3);
342 ASSERT_NEAR(cmd_vel_->linear.y, 0.5, 1e-3);
343 ASSERT_NEAR(cmd_vel_->angular.z, 0.0, 1e-3);
347 ASSERT_NEAR(cmd_vel_->linear.x, 0.0, 1e-3);
348 ASSERT_NEAR(cmd_vel_->linear.y, 0.0, 1e-3);
349 ASSERT_NEAR(cmd_vel_->angular.z, -0.7, 1e-3);
353 ASSERT_NEAR(cmd_vel_->linear.x, 0.0, 1e-3);
354 ASSERT_NEAR(cmd_vel_->linear.y, 0.0, 1e-3);
355 ASSERT_NEAR(cmd_vel_->angular.z, 1.0, 1e-3);
369 std_msgs::Int32::ConstPtr
msg_;
371 void cbMsg(
const std_msgs::Int32::ConstPtr& msg)
385 for (
size_t i = 0; i < 100; ++i)
396 for (
size_t i = 0; i < 100; ++i)
406 std_msgs::Int32 msg_out;
412 std_msgs::Int32 msg_out;
418 sensor_msgs::Joy joy;
420 joy.buttons.resize(1);
421 joy.buttons[0] = button;
426 sensor_msgs::Joy joy;
437 for (
int btn = 0; btn < 2; ++btn)
442 for (
int i = 0; i < 15; ++i)
454 ASSERT_TRUE(
static_cast<bool>(msg_)) <<
"button: " << btn;
457 ASSERT_NEAR(-i, msg_->data, 2) <<
"button: " << btn;
461 ASSERT_NEAR(i, msg_->data, 2) <<
"button:" << btn;
521 int main(
int argc,
char** argv)
523 testing::InitGoogleTest(&argc, argv);
524 ros::init(argc, argv,
"test_joystick_interrupt");
526 return RUN_ALL_TESTS();