19 from rclpy.duration
import Duration
22 Basic item picking demo. In this demonstration, the expectation
23 is that there is a person at the item shelf to put the item on the robot
24 and at the pallet jack to remove it
25 (probably with some kind of button for 'got item, robot go do next task').
30 'shelf_A': [8.21, 1.3, 1.57],
31 'shelf_B': [11.6, 1.3, -1.57],
32 'shelf_C': [12.6, 4.0, -1.57],
33 'shelf_D': [19.0, 4.0, 1.57],
37 shipping_destinations = {
38 'frieght_bay_1': [-6.0, 5.0, 3.14],
39 'frieght_bay_2': [-6.0, 0.0, 3.14],
40 'frieght_bay_3': [-6.0, -5.0, 3.14],
49 request_item_location =
'shelf_A'
50 request_destination =
'frieght_bay_3'
55 navigator = BasicNavigator()
58 initial_pose = PoseStamped()
59 initial_pose.header.frame_id =
'map'
60 initial_pose.header.stamp = navigator.get_clock().now().to_msg()
61 initial_pose.pose.position.x = 0.0
62 initial_pose.pose.position.y = 0.0
63 initial_pose.pose.orientation.z = 0.0
64 initial_pose.pose.orientation.w = 1.0
65 navigator.setInitialPose(initial_pose)
68 navigator.waitUntilNav2Active()
70 shelf_item_pose = PoseStamped()
71 shelf_item_pose.header.frame_id =
'map'
72 shelf_item_pose.header.stamp = navigator.get_clock().now().to_msg()
73 shelf_item_pose.pose.position.x = shelf_positions[request_item_location][0]
74 shelf_item_pose.pose.position.y = shelf_positions[request_item_location][1]
76 if shelf_positions[request_item_location][2] > 0:
77 shelf_item_pose.pose.orientation.z = 0.707
78 shelf_item_pose.pose.orientation.w = 0.707
80 shelf_item_pose.pose.orientation.z = -0.707
81 shelf_item_pose.pose.orientation.w = 0.707
82 print(f
'Received request for item picking at {request_item_location}.')
83 go_to_pose_task = navigator.goToPose(shelf_item_pose)
89 while not navigator.isTaskComplete(task=go_to_pose_task):
91 feedback = navigator.getFeedback(task=go_to_pose_task)
92 if feedback
and i % 5 == 0:
94 'Estimated time of arrival at '
95 + request_item_location
98 Duration.from_msg(feedback.estimated_time_remaining).nanoseconds
104 result = navigator.getResult()
105 if result == TaskResult.SUCCEEDED:
108 + request_item_location
109 +
'! Bringing product to shipping destination ('
110 + request_destination
113 shipping_destination = PoseStamped()
114 shipping_destination.header.frame_id =
'map'
115 shipping_destination.header.stamp = navigator.get_clock().now().to_msg()
116 shipping_destination.pose.position.x = shipping_destinations[
119 shipping_destination.pose.position.y = shipping_destinations[
122 shipping_destination.pose.orientation.z = 1.0
123 shipping_destination.pose.orientation.w = 0.0
124 go_to_pose_task = navigator.goToPose(shipping_destination)
126 elif result == TaskResult.CANCELED:
128 f
'Task at {request_item_location} was canceled. Returning to staging point...'
130 initial_pose.header.stamp = navigator.get_clock().now().to_msg()
131 navigator.goToPose(initial_pose)
133 elif result == TaskResult.FAILED:
134 (error_code, error_msg) = navigator.getTaskError()
135 print(f
'Task at {request_item_location} failed!:'
136 f
'{error_code}:{error_msg}')
139 while not navigator.isTaskComplete(task=go_to_pose_task):
145 if __name__ ==
'__main__':