23 Basic navigation demo to using the route server.
27 def toPoseStamped(pt: Pose, header: Header) -> PoseStamped:
29 pose.pose.position.x = pt.x
30 pose.pose.position.y = pt.y
38 node = rclpy.create_node(
'route_example')
40 node.declare_parameter(
'start_pose.x', 0.0)
41 node.declare_parameter(
'start_pose.y', 0.0)
42 node.declare_parameter(
'start_pose.yaw', 0.0)
44 node.declare_parameter(
'goal_pose.x', 0.0)
45 node.declare_parameter(
'goal_pose.y', 0.0)
46 node.declare_parameter(
'goal_pose.yaw', 0.0)
48 start_x = node.get_parameter(
'start_pose.x').value
49 start_y = node.get_parameter(
'start_pose.y').value
50 start_yaw = node.get_parameter(
'start_pose.yaw').value
52 goal_x = node.get_parameter(
'goal_pose.x').value
53 goal_y = node.get_parameter(
'goal_pose.y').value
54 goal_yaw = node.get_parameter(
'goal_pose.yaw').value
58 navigator = BasicNavigator()
61 initial_pose = PoseStamped()
62 initial_pose.header.frame_id =
'map'
63 initial_pose.header.stamp = navigator.get_clock().now().to_msg()
64 initial_pose.pose.position.x = start_x
65 initial_pose.pose.position.y = start_y
66 initial_pose.pose.orientation = euler_to_quaternion(0.0, 0.0, start_yaw)
67 navigator.setInitialPose(initial_pose)
75 navigator.waitUntilNav2Active()
86 goal_pose = PoseStamped()
87 goal_pose.header.frame_id =
'map'
88 goal_pose.header.stamp = navigator.get_clock().now().to_msg()
89 goal_pose.pose.position.x = goal_x
90 goal_pose.pose.position.y = goal_y
91 goal_pose.pose.orientation = euler_to_quaternion(0.0, 0.0, goal_yaw)
98 route_tracking_task = navigator.getAndTrackRoute(initial_pose, goal_pose)
102 task_canceled =
False
104 follow_path_task = RunningTask.NONE
105 while not navigator.isTaskComplete(task=route_tracking_task):
113 feedback = navigator.getFeedback(task=route_tracking_task)
114 while feedback
is not None:
115 if not last_feedback
or \
116 (feedback.last_node_id != last_feedback.last_node_id
or
117 feedback.next_node_id != last_feedback.next_node_id):
118 print(
'Passed node ' + str(feedback.last_node_id) +
119 ' to next node ' + str(feedback.next_node_id) +
120 ' along edge ' + str(feedback.current_edge_id) +
'.')
122 last_feedback = feedback
124 if feedback.rerouted:
126 print(
'Passing new route to controller!')
127 follow_path_task = navigator.followPath(feedback.path)
138 feedback = navigator.getFeedback(task=route_tracking_task)
142 if navigator.isTaskComplete(task=follow_path_task):
143 print(
'Controller or waypoint follower server completed its task!')
144 navigator.cancelTask()
149 while not navigator.isTaskComplete(task=follow_path_task)
and not task_canceled:
153 result = navigator.getResult()
154 if result == TaskResult.SUCCEEDED:
155 print(
'Goal succeeded!')
156 elif result == TaskResult.CANCELED:
157 print(
'Goal was canceled!')
158 elif result == TaskResult.FAILED:
159 print(
'Goal failed!')
161 print(
'Goal has an invalid return status!')
163 navigator.lifecycleShutdown()
168 if __name__ ==
'__main__':