16 from copy
import deepcopy
18 from geometry_msgs.msg
import PoseStamped
22 from rclpy.duration
import Duration
26 Basic security route patrol demo. In this demonstration, the expectation
27 is that there are security cameras mounted on the robots recording or being
28 watched live by security staff.
35 navigator = BasicNavigator()
48 initial_pose = PoseStamped()
49 initial_pose.header.frame_id =
'map'
50 initial_pose.header.stamp = navigator.get_clock().now().to_msg()
51 initial_pose.pose.position.x = 0.0
52 initial_pose.pose.position.y = 0.0
53 initial_pose.pose.orientation.z = 0.0
54 initial_pose.pose.orientation.w = 1.0
55 navigator.setInitialPose(initial_pose)
58 navigator.waitUntilNav2Active()
65 pose.header.frame_id =
'map'
66 pose.header.stamp = navigator.get_clock().now().to_msg()
67 pose.pose.orientation.w = 1.0
68 for pt
in security_route:
69 pose.pose.position.x = pt[0]
70 pose.pose.position.y = pt[1]
71 route_poses.append(deepcopy(pose))
72 navigator.goThroughPoses(route_poses)
77 while not navigator.isTaskComplete():
79 feedback = navigator.getFeedback()
80 if feedback
and i % 5 == 0:
82 'Estimated time to complete current route: '
84 Duration.from_msg(feedback.estimated_time_remaining).nanoseconds
91 if Duration.from_msg(feedback.navigation_time) > Duration(
94 print(
'Navigation has exceeded timeout of 180s, canceling request.')
95 navigator.cancelTask()
98 security_route.reverse()
100 result = navigator.getResult()
101 if result == TaskResult.SUCCEEDED:
102 print(
'Route complete! Restarting...')
103 elif result == TaskResult.CANCELED:
104 print(
'Security route was canceled, exiting.')
106 elif result == TaskResult.FAILED:
107 print(
'Security route failed! Restarting from other side...')
112 if __name__ ==
'__main__':