16 from copy
import deepcopy
21 from rclpy.duration
import Duration
24 Basic security route patrol demo. In this demonstration, the expectation
25 is that there are security cameras mounted on the robots recording or being
26 watched live by security staff.
33 navigator = BasicNavigator()
46 initial_pose = PoseStamped()
47 initial_pose.header.frame_id =
'map'
48 initial_pose.header.stamp = navigator.get_clock().now().to_msg()
49 initial_pose.pose.position.x = 0.0
50 initial_pose.pose.position.y = 0.0
51 initial_pose.pose.orientation.z = 0.0
52 initial_pose.pose.orientation.w = 1.0
53 navigator.setInitialPose(initial_pose)
56 navigator.waitUntilNav2Active()
63 pose.header.frame_id =
'map'
64 pose.header.stamp = navigator.get_clock().now().to_msg()
65 pose.pose.orientation.w = 1.0
66 for pt
in security_route:
67 pose.pose.position.x = pt[0]
68 pose.pose.position.y = pt[1]
69 route_poses.append(deepcopy(pose))
70 go_through_poses_task = navigator.goThroughPoses(route_poses)
75 while not navigator.isTaskComplete(task=go_through_poses_task):
77 feedback = navigator.getFeedback(task=go_through_poses_task)
78 if feedback
and i % 5 == 0:
80 'Estimated time to complete current route: '
82 Duration.from_msg(feedback.estimated_time_remaining).nanoseconds
89 if Duration.from_msg(feedback.navigation_time) > Duration(
92 print(
'Navigation has exceeded timeout of 180s, canceling request.')
93 navigator.cancelTask()
96 security_route.reverse()
98 result = navigator.getResult()
99 if result == TaskResult.SUCCEEDED:
100 print(
'Route complete! Restarting...')
101 elif result == TaskResult.CANCELED:
102 print(
'Security route was canceled, exiting.')
104 elif result == TaskResult.FAILED:
105 (error_code, error_msg) = navigator.getTaskError()
106 print(f
'Security route failed!:{error_code}:{error_msg}')
107 print(
'Restarting from other side...')
112 if __name__ ==
'__main__':