Added two loops: tower and spread out
This commit is contained in:
		
							parent
							
								
									c507a58a36
								
							
						
					
					
						commit
						09619236ef
					
				
							
								
								
									
										222
									
								
								demo.py
									
									
									
									
									
								
							
							
						
						
									
										222
									
								
								demo.py
									
									
									
									
									
								
							| @ -224,6 +224,192 @@ class UR5Demo(object): | |||||||
|         self.controller.robot.stopj(acc) |         self.controller.robot.stopj(acc) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  |     def run_loop3(self): | ||||||
|  |         vel = self.loop_speed | ||||||
|  |         acc = 1.1*vel | ||||||
|  |         dtheta = 0.5*config.BLOCK_DIM/config.R_LVL0 + math.pi/128 #small gap | ||||||
|  |         edge_left = config.THETA_EDGE_LEFT | ||||||
|  |         edge_right = config.THETA_EDGE_RIGHT | ||||||
|  |          | ||||||
|  |         moves = [] | ||||||
|  |         #level 1 | ||||||
|  |         moves.append(self.controller.blocklevel2move(1.5, 0, 0, acc, vel, 0)) | ||||||
|  |         moves += self.controller.pick_block(1, edge_left, 2, acc, vel) | ||||||
|  |         moves.append(self.controller.blocklevel2move(1.1, (edge_left-dtheta)/2, 2.5, acc, vel, 0.15)) | ||||||
|  |         moves += self.controller.place_block(0, -dtheta, 0, acc, vel) | ||||||
|  | 
 | ||||||
|  |         moves.append(self.controller.blocklevel2move(1.1, (edge_right-dtheta)/2, 2.0, acc, vel, 0.15)) | ||||||
|  |         moves += self.controller.pick_block(1, edge_right, 2, acc, vel) | ||||||
|  |         moves.append(self.controller.blocklevel2move(1.1, (edge_right+dtheta)/2, 2.5, acc, vel, 0.15)) | ||||||
|  |         moves += self.controller.place_block(0, dtheta, 0, acc, vel) | ||||||
|  | 
 | ||||||
|  |         #level 2 | ||||||
|  |         moves.append(self.controller.blocklevel2move(1.1, (edge_left+dtheta)/2, 2.0, acc, vel, 0.15)) | ||||||
|  |         moves += self.controller.pick_block(0, edge_left, 2, acc, vel) | ||||||
|  |         moves.append(self.controller.blocklevel2move(0.1, (edge_left-dtheta)/2, 2.5, acc, vel, 0.15)) | ||||||
|  |         moves += self.controller.place_block(0, -dtheta, 1, acc, vel) | ||||||
|  | 
 | ||||||
|  |         moves.append(self.controller.blocklevel2move(1.1, (edge_right-dtheta)/2, 2.0, acc, vel, 0.15)) | ||||||
|  |         moves += self.controller.pick_block(0, edge_right, 2, acc, vel) | ||||||
|  |         moves.append(self.controller.blocklevel2move(0.1, (edge_right+dtheta)/2, 2.5, acc, vel, 0.15)) | ||||||
|  |         moves += self.controller.place_block(0, dtheta, 1, acc, vel) | ||||||
|  | 
 | ||||||
|  |         #level 3 | ||||||
|  |         moves.append(self.controller.blocklevel2move(1.1, (edge_left+dtheta)/2, 1.5, acc, vel, 0.15)) | ||||||
|  |         moves += self.controller.pick_block(1, edge_left, 1, acc, vel) | ||||||
|  |         moves.append(self.controller.blocklevel2move(1.1, (edge_left-dtheta)/2, 2.5, acc, vel, 0.15)) | ||||||
|  |         moves += self.controller.place_block(0, -dtheta, 2, acc, vel) | ||||||
|  | 
 | ||||||
|  |         moves.append(self.controller.blocklevel2move(1.1, (edge_right-dtheta)/2, 1.5, acc, vel, 0.15)) | ||||||
|  |         moves += self.controller.pick_block(1, edge_right, 1, acc, vel) | ||||||
|  |         moves.append(self.controller.blocklevel2move(1.1, (edge_right+dtheta)/2, 2.5, acc, vel, 0.15)) | ||||||
|  |         moves += self.controller.place_block(0, dtheta, 2, acc, vel) | ||||||
|  | 
 | ||||||
|  |         #level 4 | ||||||
|  |         moves.append(self.controller.blocklevel2move(1.1, (edge_left+dtheta)/2, 1.5, acc, vel, 0.15)) | ||||||
|  |         moves += self.controller.pick_block(0, edge_left, 1, acc, vel) | ||||||
|  |         moves.append(self.controller.blocklevel2move(0.1, (edge_left-dtheta)/2, 3.5, acc, vel, 0.15)) | ||||||
|  |         moves += self.controller.place_block(0, -dtheta, 3, acc, vel) | ||||||
|  | 
 | ||||||
|  |         moves.append(self.controller.blocklevel2move(1.1, (edge_right-dtheta)/2, 1.5, acc, vel, 0.15)) | ||||||
|  |         moves += self.controller.pick_block(0, edge_right, 1, acc, vel) | ||||||
|  |         moves.append(self.controller.blocklevel2move(0.1, (edge_right+dtheta)/2, 3.5, acc, vel, 0.15)) | ||||||
|  |         moves += self.controller.place_block(0, dtheta, 3, acc, vel) | ||||||
|  | 
 | ||||||
|  |         #level 5 | ||||||
|  |         moves.append(self.controller.blocklevel2move(1.1, (edge_left+dtheta)/2, 1.0, acc, vel, 0.15)) | ||||||
|  |         moves += self.controller.pick_block(1, edge_left, 0, acc, vel) | ||||||
|  |         moves.append(self.controller.blocklevel2move(1.1, (edge_left-dtheta)/2, 4.5, acc, vel, 0.15)) | ||||||
|  |         moves += self.controller.place_block(0, -dtheta, 4, acc, vel) | ||||||
|  | 
 | ||||||
|  |         moves.append(self.controller.blocklevel2move(1.1, (edge_right-dtheta)/2, 1.0, acc, vel, 0.15)) | ||||||
|  |         moves += self.controller.pick_block(1, edge_right, 0, acc, vel) | ||||||
|  |         moves.append(self.controller.blocklevel2move(1.1, (edge_right+dtheta)/2, 4.5, acc, vel, 0.15)) | ||||||
|  |         moves += self.controller.place_block(0, dtheta, 4, acc, vel) | ||||||
|  | 
 | ||||||
|  |         #level 6 | ||||||
|  |         moves.append(self.controller.blocklevel2move(1.1, (edge_left+dtheta)/2, 1.5, acc, vel, 0.15)) | ||||||
|  |         moves += self.controller.pick_block(0, edge_left, 0, acc, vel) | ||||||
|  |         moves.append(self.controller.blocklevel2move(0.1, (edge_left-dtheta)/2, 5.5, acc, vel, 0.15)) | ||||||
|  |         moves += self.controller.place_block(0, -dtheta, 5, acc, vel) | ||||||
|  | 
 | ||||||
|  |         moves.append(self.controller.blocklevel2move(1.1, (edge_right-dtheta)/2, 1.5, acc, vel, 0.15)) | ||||||
|  |         moves += self.controller.pick_block(0, edge_right, 0, acc, vel) | ||||||
|  |         moves.append(self.controller.blocklevel2move(0.1, (edge_right+dtheta)/2, 5.5, acc, vel, 0.15)) | ||||||
|  |         moves += self.controller.place_block(0, dtheta, 5, acc, vel) | ||||||
|  | 
 | ||||||
|  |         #end | ||||||
|  |         moves.append(self.controller.blocklevel2move(1.1, 2*dtheta, 0.5, acc, vel, 0)) | ||||||
|  | 
 | ||||||
|  |         loopcount = 0.0 | ||||||
|  |         self._disptxt(["Running loop \"tower\"", "Loopcount: %d" % math.floor(loopcount)]) | ||||||
|  |         self.controller.exec_moves(moves, wait=False) | ||||||
|  |         running = True | ||||||
|  |         while running: | ||||||
|  |             pressed = pygame.key.get_pressed() | ||||||
|  |             for e in pygame.event.get(): | ||||||
|  |                 if e.type == pygame.QUIT: | ||||||
|  |                    self.sig_quit = True | ||||||
|  |             if pressed[pygame.K_ESCAPE] or self.sig_quit: | ||||||
|  |                 running = False | ||||||
|  | 
 | ||||||
|  |             if not self.controller.is_looping(1.0): | ||||||
|  |                 moves.reverse() | ||||||
|  |                 self.controller.exec_moves(moves, wait=False) # try-catch? | ||||||
|  |                 loopcount += 0.5 | ||||||
|  |                 self._disptxt(["Running loop \"tower\"", "Loopcount: %d" % math.floor(loopcount)]) | ||||||
|  | 
 | ||||||
|  |             #self.clock.tick(config.MENU_FPS) # we dont need this here, check loop blocks for 1 sec | ||||||
|  |         self.controller.robot.stopj(acc) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     def run_loop4(self): | ||||||
|  |         vel = self.loop_speed | ||||||
|  |         acc = 1.1*vel | ||||||
|  |         nblocks = 12 | ||||||
|  |         edge_left = config.THETA_EDGE_LEFT | ||||||
|  |         edge_right = config.THETA_EDGE_RIGHT | ||||||
|  |         theta0 = config.THETA_EDGE_LEFT | ||||||
|  |         dtheta = (edge_right-edge_left) / (nblocks-1) | ||||||
|  |          | ||||||
|  |         moves = [] | ||||||
|  |         moves.append(self.controller.blocklevel2move(1.5, 0, 0, acc, vel, 0)) | ||||||
|  |         moves += self.controller.pick_block(1, edge_left, 1, acc, vel) | ||||||
|  |         theta_next = theta0 + 5*dtheta | ||||||
|  |         moves.append(self.controller.blocklevel2move(1.1, (edge_left+theta_next)/2, 1.5, acc, vel, 0.15)) | ||||||
|  |         moves += self.controller.place_block(0, theta_next, 0, acc, vel) | ||||||
|  |         moves += self.controller.pick_block(0, theta_next, 1, acc, vel) | ||||||
|  |         theta_next += dtheta | ||||||
|  |         moves.append(self.controller.blocklevel2move(0, theta_next, 1.8, acc, vel, 0.03)) | ||||||
|  |         moves += self.controller.place_block(0, theta_next, 0, acc, vel) | ||||||
|  | 
 | ||||||
|  |         moves.append(self.controller.blocklevel2move(1.8, (edge_right+theta_next)/2, 1.5, acc, vel, 0.15)) | ||||||
|  |         moves += self.controller.pick_block(1, edge_right, 1, acc, vel) | ||||||
|  |         theta_next = theta0 + 7*dtheta | ||||||
|  |         moves.append(self.controller.blocklevel2move(1.1, (edge_right+theta_next)/2, 1.5, acc, vel, 0.15)) | ||||||
|  |         moves += self.controller.place_block(0, theta_next, 0, acc, vel) | ||||||
|  |         moves += self.controller.pick_block(0, theta_next, 1, acc, vel) | ||||||
|  |         theta_next -= 3*dtheta | ||||||
|  |         moves.append(self.controller.blocklevel2move(0, theta_next, 1.8, acc, vel, 0.03)) | ||||||
|  |         moves += self.controller.place_block(0, theta_next, 0, acc, vel) | ||||||
|  | 
 | ||||||
|  |         moves.append(self.controller.blocklevel2move(1.1, (edge_left+theta_next)/2, 1.5, acc, vel, 0.15)) | ||||||
|  |         moves += self.controller.pick_block(0, edge_left, 1, acc, vel) | ||||||
|  |         theta_next = theta0 + 3*dtheta | ||||||
|  |         moves.append(self.controller.blocklevel2move(0.1, (edge_left+theta_next)/2, 1.2, acc, vel, 0.1)) | ||||||
|  |         moves += self.controller.place_block(0, theta_next, 0, acc, vel) | ||||||
|  |         moves += self.controller.pick_block(0, theta_next, 1, acc, vel) | ||||||
|  |         theta_next += 5*dtheta | ||||||
|  |         moves.append(self.controller.blocklevel2move(0, theta_next, 1.8, acc, vel, 0.03)) | ||||||
|  |         moves += self.controller.place_block(0, theta_next, 0, acc, vel) | ||||||
|  | 
 | ||||||
|  |         moves.append(self.controller.blocklevel2move(1.2, (edge_right+theta_next)/2, 1.5, acc, vel, 0.1)) | ||||||
|  |         moves += self.controller.pick_block(0, edge_right, 1, acc, vel) | ||||||
|  |         theta_next = theta0 + 9*dtheta | ||||||
|  |         moves.append(self.controller.blocklevel2move(0.1, (edge_right+theta_next)/2, 1.5, acc, vel, 0.1)) | ||||||
|  |         moves += self.controller.place_block(0, theta_next, 0, acc, vel) | ||||||
|  |         moves += self.controller.pick_block(0, theta_next, 1, acc, vel) | ||||||
|  |         theta_next -= 7*dtheta | ||||||
|  |         moves.append(self.controller.blocklevel2move(0, theta_next, 1.8, acc, vel, 0.03)) | ||||||
|  |         moves += self.controller.place_block(0, theta_next, 0, acc, vel) | ||||||
|  | 
 | ||||||
|  |         moves.append(self.controller.blocklevel2move(2.0, (edge_left+theta_next)/2, 0.0, acc, vel, 0.15)) | ||||||
|  |         moves += self.controller.pick_block(1, edge_left, 0, acc, vel) | ||||||
|  |         theta_next = theta0 + dtheta | ||||||
|  |         moves.append(self.controller.blocklevel2move(1.2, theta_next, 0.5, acc, vel, 0.03)) | ||||||
|  |         moves += self.controller.place_block(0, theta_next, 0, acc, vel) | ||||||
|  |          | ||||||
|  |         moves.append(self.controller.blocklevel2move(1.1, (edge_right+theta_next)/2, 0.0, acc, vel, 0.15)) | ||||||
|  |         theta_next += 9*dtheta | ||||||
|  |         moves += self.controller.pick_block(1, edge_right, 0, acc, vel) | ||||||
|  |         moves.append(self.controller.blocklevel2move(1.2, theta_next, 0.5, acc, vel, 0.03)) | ||||||
|  |         moves += self.controller.place_block(0, theta_next, 0, acc, vel) | ||||||
|  | 
 | ||||||
|  |         moves.append(self.controller.blocklevel2move(1.5, 0, 0, acc, vel, 0)) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         loopcount = 0.0 | ||||||
|  |         self._disptxt(["Running loop \"spread out\"", "Loopcount: %d" % math.floor(loopcount)]) | ||||||
|  |         self.controller.exec_moves(moves, wait=False) | ||||||
|  |         running = True | ||||||
|  |         while running: | ||||||
|  |             pressed = pygame.key.get_pressed() | ||||||
|  |             for e in pygame.event.get(): | ||||||
|  |                 if e.type == pygame.QUIT: | ||||||
|  |                    self.sig_quit = True | ||||||
|  |             if pressed[pygame.K_ESCAPE] or self.sig_quit: | ||||||
|  |                 running = False | ||||||
|  | 
 | ||||||
|  |             if not self.controller.is_looping(1.0): | ||||||
|  |                 moves.reverse() | ||||||
|  |                 self.controller.exec_moves(moves, wait=False) # try-catch? | ||||||
|  |                 loopcount += 0.5 | ||||||
|  |                 self._disptxt(["Running loop \"spread out\"", "Loopcount: %d" % math.floor(loopcount)]) | ||||||
|  | 
 | ||||||
|  |             #self.clock.tick(config.MENU_FPS) # we dont need this here, check loop blocks for 1 sec | ||||||
|  |         self.controller.robot.stopj(acc) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|     def loop_init(self, block_init_msg, loopnum): |     def loop_init(self, block_init_msg, loopnum): | ||||||
|         msg = [ |         msg = [ | ||||||
|             "Current loop speed is %.2f m/s" % self.loop_speed, |             "Current loop speed is %.2f m/s" % self.loop_speed, | ||||||
| @ -242,6 +428,10 @@ class UR5Demo(object): | |||||||
|                     self.run_loop1() |                     self.run_loop1() | ||||||
|                 elif loopnum == 2: |                 elif loopnum == 2: | ||||||
|                     self.run_loop2() |                     self.run_loop2() | ||||||
|  |                 elif loopnum == 3: | ||||||
|  |                     self.run_loop3() | ||||||
|  |                 elif loopnum == 4: | ||||||
|  |                     self.run_loop4() | ||||||
|                 running = False |                 running = False | ||||||
| 
 | 
 | ||||||
|             if pressed[pygame.K_ESCAPE] or self.sig_quit: |             if pressed[pygame.K_ESCAPE] or self.sig_quit: | ||||||
| @ -335,6 +525,8 @@ class UR5Demo(object): | |||||||
|             "Adjust loop [s]peed", |             "Adjust loop [s]peed", | ||||||
|             "Start loop [1]: four blocks high", |             "Start loop [1]: four blocks high", | ||||||
|             "Start loop [2]: small pyramid", |             "Start loop [2]: small pyramid", | ||||||
|  |             "Start loop [3]: tower", | ||||||
|  |             "Start loop [4]: spread out", | ||||||
|             "Manual [c]ontrol", |             "Manual [c]ontrol", | ||||||
|             "[q]uit" |             "[q]uit" | ||||||
|         ] |         ] | ||||||
| @ -381,6 +573,36 @@ class UR5Demo(object): | |||||||
|                 self.loop_init(_instr, 2) |                 self.loop_init(_instr, 2) | ||||||
|                 self._disptxt(menu) |                 self._disptxt(menu) | ||||||
| 
 | 
 | ||||||
|  |             elif pressed[pygame.K_3]: | ||||||
|  |                 _instr = [ | ||||||
|  |                     "Initital block configuration for loop \"tower\":", | ||||||
|  |                     "On each side", | ||||||
|  |                     "    (r0, edge, z0)", | ||||||
|  |                     "    (r1, edge, z0)", | ||||||
|  |                     "    (r0, edge, z1)", | ||||||
|  |                     "    (r1, edge, z1)", | ||||||
|  |                     "    (r0, edge, z2)", | ||||||
|  |                     "    (r1, edge, z2)", | ||||||
|  |                     " " | ||||||
|  |                 ] | ||||||
|  |                 self.loop_init(_instr, 3) | ||||||
|  |                 self._disptxt(menu) | ||||||
|  | 
 | ||||||
|  |             elif pressed[pygame.K_4]: | ||||||
|  |                 _instr = [ | ||||||
|  |                     "Initital block configuration for loop \"spread out\":", | ||||||
|  |                     "On each side", | ||||||
|  |                     "    (r0, edge, z0)", | ||||||
|  |                     "    (r1, edge, z0)", | ||||||
|  |                     "    (r0, edge, z1)", | ||||||
|  |                     "    (r1, edge, z1)", | ||||||
|  |                     "    (r0, edge, z2)", | ||||||
|  |                     "    (r1, edge, z2)", | ||||||
|  |                     " " | ||||||
|  |                 ] | ||||||
|  |                 self.loop_init(_instr, 4) | ||||||
|  |                 self._disptxt(menu) | ||||||
|  | 
 | ||||||
|             elif pressed[pygame.K_c]: |             elif pressed[pygame.K_c]: | ||||||
|                 if self.gamepad: |                 if self.gamepad: | ||||||
|                     self.gamepad_control() |                     self.gamepad_control() | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user