19 from rclpy.duration
import Duration
22 Basic navigation demo to go to poses.
29 navigator = BasicNavigator()
32 initial_pose = PoseStamped()
33 initial_pose.header.frame_id =
'map'
34 initial_pose.header.stamp = navigator.get_clock().now().to_msg()
35 initial_pose.pose.position.x = 0.0
36 initial_pose.pose.position.y = 0.0
37 initial_pose.pose.orientation.z = 0.0
38 initial_pose.pose.orientation.w = 1.0
39 navigator.setInitialPose(initial_pose)
47 navigator.waitUntilNav2Active()
59 goal_pose1 = PoseStamped()
60 goal_pose1.header.frame_id =
'map'
61 goal_pose1.header.stamp = navigator.get_clock().now().to_msg()
62 goal_pose1.pose.position.x = 10.15
63 goal_pose1.pose.position.y = -0.77
64 goal_pose1.pose.orientation.w = 1.0
65 goal_pose1.pose.orientation.z = 0.0
66 goal_poses.append(goal_pose1)
69 goal_pose2 = PoseStamped()
70 goal_pose2.header.frame_id =
'map'
71 goal_pose2.header.stamp = navigator.get_clock().now().to_msg()
72 goal_pose2.pose.position.x = 17.86
73 goal_pose2.pose.position.y = -0.77
74 goal_pose2.pose.orientation.w = 1.0
75 goal_pose2.pose.orientation.z = 0.0
76 goal_poses.append(goal_pose2)
77 goal_pose3 = PoseStamped()
78 goal_pose3.header.frame_id =
'map'
79 goal_pose3.header.stamp = navigator.get_clock().now().to_msg()
80 goal_pose3.pose.position.x = 21.58
81 goal_pose3.pose.position.y = -3.5
82 goal_pose3.pose.orientation.w = 1.0
83 goal_pose3.pose.orientation.z = 0.0
84 goal_poses.append(goal_pose3)
89 nav_through_poses_task = navigator.goThroughPoses(goal_poses)
92 while not navigator.isTaskComplete(task=nav_through_poses_task):
101 feedback = navigator.getFeedback(task=nav_through_poses_task)
102 if feedback
and i % 5 == 0:
104 'Estimated time of arrival: '
106 Duration.from_msg(feedback.estimated_time_remaining).nanoseconds
113 'Distance remaining: '
114 +
'{:.2f}'.format(feedback.distance_remaining)
120 +
'{:.2f}'.format(feedback.position_tracking_error)
126 +
'{:.2f}'.format(feedback.heading_tracking_error)
131 if Duration.from_msg(feedback.navigation_time) > Duration(seconds=600.0):
132 navigator.cancelTask()
135 if Duration.from_msg(feedback.navigation_time) > Duration(seconds=35.0):
136 goal_pose4 = PoseStamped()
137 goal_pose4.header.frame_id =
'map'
138 goal_pose4.header.stamp = navigator.get_clock().now().to_msg()
139 goal_pose4.pose.position.x = 0.0
140 goal_pose4.pose.position.y = 0.0
141 goal_pose4.pose.orientation.w = 1.0
142 goal_pose4.pose.orientation.z = 0.0
143 navigator.goThroughPoses([goal_pose4])
146 result = navigator.getResult()
147 if result == TaskResult.SUCCEEDED:
148 print(
'Goal succeeded!')
149 elif result == TaskResult.CANCELED:
150 print(
'Goal was canceled!')
151 elif result == TaskResult.FAILED:
152 (error_code, error_msg) = navigator.getTaskError()
153 print(
'Goal failed!{error_code}:{error_msg}')
155 print(
'Goal has an invalid return status!')
157 navigator.lifecycleShutdown()
162 if __name__ ==
'__main__':