104 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """
 | |
| Sets up the robot in init position, you control the head with the xbox controller
 | |
| """
 | |
| 
 | |
| import time
 | |
| import numpy as np
 | |
| from mini_bdx_runtime.rustypot_position_hwi import HWI
 | |
| from mini_bdx_runtime.duck_config import DuckConfig
 | |
| from mini_bdx_runtime.xbox_controller import XBoxController
 | |
| 
 | |
| 
 | |
| from mini_bdx_runtime.eyes import Eyes
 | |
| from mini_bdx_runtime.sounds import Sounds
 | |
| from mini_bdx_runtime.antennas import Antennas
 | |
| from mini_bdx_runtime.projector import Projector
 | |
| 
 | |
| duck_config = DuckConfig()
 | |
| 
 | |
| xbox_controller = XBoxController(50, only_head_control=True)
 | |
| 
 | |
| if duck_config.speaker:
 | |
|     sounds = Sounds(volume=1.0, sound_directory="../mini_bdx_runtime/assets/")
 | |
| if duck_config.antennas:
 | |
|     antennas = Antennas()
 | |
| if duck_config.eyes:
 | |
|     eyes = Eyes()
 | |
| if duck_config.projector:
 | |
|     projector = Projector()
 | |
| 
 | |
| hwi = HWI(duck_config)
 | |
| 
 | |
| kps = [8] * 14
 | |
| kds = [0] * 14
 | |
| 
 | |
| hwi.set_kps(kps)
 | |
| hwi.set_kds(kds)
 | |
| hwi.turn_on()
 | |
| 
 | |
| limits = {
 | |
|     "neck_pitch": [-20, 60],
 | |
|     "head_pitch": [-60, 45],
 | |
|     "head_yaw": [-60, 60],
 | |
|     "head_roll": [-20, 20],
 | |
| }
 | |
| 
 | |
| try:
 | |
|     while True:
 | |
| 
 | |
|         last_commands, buttons, left_trigger, right_trigger = (
 | |
|             xbox_controller.get_last_command()
 | |
|         )
 | |
| 
 | |
|         l_x = last_commands[5]
 | |
|         l_y = last_commands[4]
 | |
|         r_x = last_commands[6]
 | |
|         # r_y = last_commands[3]
 | |
| 
 | |
|         head_yaw_deg = (
 | |
|             l_x * (limits["head_yaw"][1] - limits["head_yaw"][0]) / 2
 | |
|             + (limits["head_yaw"][1] + limits["head_yaw"][0]) / 2
 | |
|         )
 | |
|         head_yaw_pos_rad = np.deg2rad(head_yaw_deg)
 | |
| 
 | |
|         head_roll_deg = (
 | |
|             r_x * (limits["head_roll"][1] - limits["head_roll"][0]) / 2
 | |
|             + (limits["head_roll"][1] + limits["head_roll"][0]) / 2
 | |
|         )
 | |
|         head_roll_pos_rad = np.deg2rad(head_roll_deg)
 | |
| 
 | |
|         head_pitch_deg = (
 | |
|             l_y * (limits["head_pitch"][1] - limits["head_pitch"][0]) / 2
 | |
|             + (limits["head_pitch"][1] + limits["head_pitch"][0]) / 2
 | |
|         )
 | |
|         head_pitch_pos_rad = np.deg2rad(head_pitch_deg)
 | |
| 
 | |
|         # neck_pitch_deg = (
 | |
|         #     -r_y * (limits["neck_pitch"][1] - limits["neck_pitch"][0]) / 2
 | |
|         #     + (limits["neck_pitch"][1] + limits["neck_pitch"][0]) / 2
 | |
|         # )
 | |
|         # neck_pitch_pos_rad = np.deg2rad(neck_pitch_deg)
 | |
| 
 | |
|         hwi.set_position("head_yaw", head_yaw_pos_rad)
 | |
|         hwi.set_position("head_roll", head_roll_pos_rad)
 | |
|         hwi.set_position("head_pitch", head_pitch_pos_rad)
 | |
|         # hwi.set_position("neck_pitch", neck_pitch_pos_rad)
 | |
| 
 | |
|         if duck_config.antennas:
 | |
|             antennas.set_position_left(right_trigger)
 | |
|             antennas.set_position_right(left_trigger)
 | |
| 
 | |
|         if buttons.B.triggered:
 | |
|             if duck_config.speaker:
 | |
|                 sounds.play_random_sound()
 | |
| 
 | |
|         if buttons.X.triggered:
 | |
|             if duck_config.projector:
 | |
|                 projector.switch()
 | |
| 
 | |
|         # pygame.event.pump()  # process event queue
 | |
|         time.sleep(1 / 60)
 | |
| except KeyboardInterrupt:
 | |
|     if duck_config.antennas:
 | |
|         antennas.stop()
 |