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()
49 initial_pose = PoseStamped()
50 initial_pose.header.frame_id =
'map'
51 initial_pose.header.stamp = navigator.get_clock().now().to_msg()
52 initial_pose.pose.position.x = 3.45
53 initial_pose.pose.position.y = 2.15
54 initial_pose.pose.orientation.z = 1.0
55 initial_pose.pose.orientation.w = 0.0
56 navigator.setInitialPose(initial_pose)
59 navigator.waitUntilNav2Active()
66 pose.header.frame_id =
'map'
67 pose.header.stamp = navigator.get_clock().now().to_msg()
68 pose.pose.orientation.w = 1.0
69 for pt
in security_route:
70 pose.pose.position.x = pt[0]
71 pose.pose.position.y = pt[1]
72 route_poses.append(deepcopy(pose))
73 navigator.goThroughPoses(route_poses)
78 while not navigator.isTaskComplete():
80 feedback = navigator.getFeedback()
81 if feedback
and i % 5 == 0:
82 print(
'Estimated time to complete current route: ' +
'{0:.0f}'.format(
83 Duration.from_msg(feedback.estimated_time_remaining).nanoseconds / 1e9)
87 if Duration.from_msg(feedback.navigation_time) > Duration(seconds=180.0):
88 print(
'Navigation has exceeded timeout of 180s, canceling request.')
89 navigator.cancelTask()
92 security_route.reverse()
94 result = navigator.getResult()
95 if result == TaskResult.SUCCEEDED:
96 print(
'Route complete! Restarting...')
97 elif result == TaskResult.CANCELED:
98 print(
'Security route was canceled, exiting.')
100 elif result == TaskResult.FAILED:
101 print(
'Security route failed! Restarting from other side...')
106 if __name__ ==
'__main__':