From 7b1d264fb1beb6169219c51b237e236877a27f91 Mon Sep 17 00:00:00 2001 From: Matthew Hansen <matthew.k.hansen@intel.com> Date: Tue, 28 May 2019 16:34:37 -0700 Subject: [PATCH] Update bt_navigator system test for lifecycle --- .../src/system/test_system_launch.py | 3 +- .../src/system/test_system_node.py | 37 ++++++++++++++----- 2 files changed, 30 insertions(+), 10 deletions(-) diff --git a/nav2_system_tests/src/system/test_system_launch.py b/nav2_system_tests/src/system/test_system_launch.py index b262752f..4a90ed54 100755 --- a/nav2_system_tests/src/system/test_system_launch.py +++ b/nav2_system_tests/src/system/test_system_launch.py @@ -104,7 +104,8 @@ def generate_launch_description(): node_name='lifecycle_manager', output='screen', parameters=[{'node_names': ['map_server', 'amcl', 'world_model', - 'dwb_controller', 'navfn_planner', 'simple_navigator']}, {'autostart': True}]), + 'dwb_controller', 'navfn_planner', 'bt_navigator']}, + {'autostart': True}]), ]) diff --git a/nav2_system_tests/src/system/test_system_node.py b/nav2_system_tests/src/system/test_system_node.py index 7a34dcde..6fe8f602 100755 --- a/nav2_system_tests/src/system/test_system_node.py +++ b/nav2_system_tests/src/system/test_system_node.py @@ -22,6 +22,7 @@ from geometry_msgs.msg import PoseStamped from geometry_msgs.msg import PoseWithCovarianceStamped import rclpy from rclpy.node import Node +from lifecycle_msgs.srv import GetState class NavTester(Node): @@ -92,6 +93,27 @@ class NavTester(Node): self.get_logger().error("Error couldn't set use_sim_time param on: " + nav2_node + ' retrying...') + def wait_for_bt_active(self): + # wait for the bt_navigator to be in active state + state_client = self.create_client(GetState, '/bt_navigator/get_state') + while not state_client.wait_for_service(timeout_sec=1.0): + print('bt_navigator/get_state service not available, waiting again...') + # empty request + req = GetState.Request() + future = state_client.call_async(req) + state = 'Unknown' + retries = 10 + while (state != 'active' and retries > 0): + self.get_logger().info('Getting bt_navigator state...') + rclpy.spin_until_future_complete(self, future) + retries = retries - 1 + if future.result() is not None: + self.get_logger().info('Result of get_state: %s' % future.result().current_state.label) + state = future.result().current_state.label + else: + self.get_logger().error('Exception while calling service: %r' % future.exception()) + time.sleep(5) + def test_InitialPose(test_robot, timeout): # Set initial pose to the Turtlebot3 starting position -2, 0, 0, facing towards positive X @@ -103,13 +125,13 @@ def test_InitialPose(test_robot, timeout): initial_pose.orientation.y = 0.0 initial_pose.orientation.z = 0.0 initial_pose.orientation.w = 1.0 - test_robot.get_logger().info('Setting initial pose') test_robot.initial_pose_received = False - test_robot.setInitialPose(initial_pose) quit_time = time.time() + timeout - test_robot.get_logger().info('Waiting for initial pose to be received') while not test_robot.initial_pose_received and time.time() < quit_time: - rclpy.spin_once(test_robot) # wait for poseCallback + test_robot.get_logger().info('Setting initial pose') + test_robot.setInitialPose(initial_pose) + test_robot.get_logger().info('Waiting for initial pose to be received') + rclpy.spin_once(test_robot, timeout_sec=1) # wait for poseCallback if (test_robot.initial_pose_received): test_robot.get_logger().info('test_InitialPose PASSED') @@ -138,12 +160,9 @@ def test_all(test_robot): result = True if (result): result = test_InitialPose(test_robot, 10) - test_robot.setSimTime() if (result): - result = test_RobotMovesToGoal(test_robot) - if (not result): - # retry the test one more time - test_robot.get_logger().info('Test failed, retrying...') + test_robot.setSimTime() + test_robot.wait_for_bt_active() result = test_RobotMovesToGoal(test_robot) # Add more tests here if desired -- GitLab