TEST_F(DiffDriveControllerTest, testLinearVelocityLimits) { // wait for ROS while(!isControllerAlive()) { ros::Duration(0.1).sleep(); } // zero everything before test geometry_msgs::Twist cmd_vel; cmd_vel.linear.x = 0.0; cmd_vel.angular.z = 0.0; publish(cmd_vel); ros::Duration(2.0).sleep(); // get initial odom nav_msgs::Odometry old_odom = getLastOdom(); // send a big command cmd_vel.linear.x = 10.0; publish(cmd_vel); // wait for a while ros::Duration(5.0).sleep(); nav_msgs::Odometry new_odom = getLastOdom(); // check if the robot speed is now 1.0 m.s-1, the limit EXPECT_LT(fabs(new_odom.twist.twist.linear.x - old_odom.twist.twist.linear.x), 1.0 + VELOCITY_TOLERANCE); EXPECT_LT(fabs(new_odom.twist.twist.angular.z - old_odom.twist.twist.angular.z), EPS); cmd_vel.linear.x = 0.0; publish(cmd_vel); }
TEST_F(DiffDriveControllerTest, testOdomTopic) { // wait for ROS while(!isControllerAlive()) { ros::Duration(0.1).sleep(); } // get an odom message nav_msgs::Odometry odom_msg = getLastOdom(); // check its frame_id ASSERT_STREQ(odom_msg.header.frame_id.c_str(), "new_odom"); }
TEST_F(DiffDriveControllerTest, testNewOdomFrame) { // wait for ROS while(!isControllerAlive()) { ros::Duration(0.1).sleep(); } // set up tf listener tf::TransformListener listener; ros::Duration(2.0).sleep(); // check the new_odom frame does exist EXPECT_TRUE(listener.frameExists("new_odom")); }