11import pigpio
2+ import numpy as np
3+ import UDPComms
4+ import time
25from src .Controller import step_controller , Controller
36from src .HardwareInterface import send_servo_commands , initialize_pwm
47from src .PupperConfig import (
912 ServoParams ,
1013 PWMParams ,
1114)
12- import time
13- import numpy as np
14- import UDPComms
15+ from src .UserInput import UserInputs , get_input , update_controller
1516
1617
1718def main ():
1819 """Main program
1920 """
2021 pi_board = pigpio .pi ()
2122 pwm_params = PWMParams ()
23+ initialize_pwm (pi_board , pwm_params )
24+
2225 servo_params = ServoParams ()
2326
2427 controller = Controller ()
@@ -34,68 +37,31 @@ def main():
3437 controller .stance_params = StanceParams ()
3538 controller .stance_params .delta_y = 0.08
3639 controller .gait_params = GaitParams ()
37- controller .gait_params .dt = 0.01
3840
39- initialize_pwm ( pi_board , pwm_params )
41+ user_input = UserInputs ( )
4042
41- values = UDPComms .Subscriber (8830 , timeout = 0.3 )
4243 last_loop = time .time ()
4344 now = last_loop
4445 start = time .time ()
4546
46- gait_mode = 0 # 0 for non-walking, 1 for walking
47- prev_gait_toggle = 0
48-
49- non_walking_gait = np .array (
50- [[1 , 1 , 1 , 1 ], [1 , 1 , 1 , 1 ], [1 , 1 , 1 , 1 ], [1 , 1 , 1 , 1 ]]
51- )
52- walking_gait = np .array ([[1 , 1 , 1 , 0 ], [1 , 0 , 1 , 1 ], [1 , 0 , 1 , 1 ], [1 , 1 , 1 , 0 ]])
53-
5447 for i in range (60000 ):
5548 last_loop = time .time ()
56- step_controller (controller )
57- send_servo_commands (pi_board , pwm_params , servo_params , controller .joint_angles )
58-
59- try :
60- msg = values .get ()
61- except UDPComms .timeout :
62- print ("timeout" )
63- msg = {
64- "x" : 0 ,
65- "y" : 0 ,
66- "twist" : 0 ,
67- "pitch" : 0 ,
68- "gait_toggle" : 0 ,
69- "stance_movement" : 0 ,
70- }
71- x_vel = msg ["y" ] / 7.0
72- y_vel = - msg ["x" ] / 7.0
73- yaw_rate = - msg ["twist" ] * 0.8
74- gait_toggle = msg ["gait_toggle" ]
75- stance_movement = msg ["stance_movement" ]
76-
77- # Check for gait toggle
78- if prev_gait_toggle == 0 and gait_toggle == 1 :
79- gait_mode = not gait_mode
80- prev_gait_toggle = gait_toggle
49+
50+ # Parse the udp joystick commands and then update the robot controller's parameters
51+ get_input (user_input )
52+ update_controller (controller , user_input )
8153
82- pitch = msg ["pitch" ] * 30.0 * np .pi / 180.0
83-
84- controller .movement_reference .v_xy_ref = np .array ([x_vel , y_vel ])
85- controller .movement_reference .wz_ref = yaw_rate
86- controller .movement_reference .pitch = pitch
87-
88- if gait_mode == 0 :
89- controller .gait_params .contact_phases = non_walking_gait
90- else :
91- controller .gait_params .contact_phases = walking_gait
54+ # Step the controller forward by dt
55+ step_controller (controller )
9256
93- # Note this is negative since it is the feet relative to the body
94- controller . movement_reference . z_ref -= 0.001 * stance_movement
57+ # Update the pwm widths going to the servos
58+ send_servo_commands ( pi_board , pwm_params , servo_params , controller . joint_angles )
9559
60+ # Wait until it's time to execute again
9661 while now - last_loop < controller .gait_params .dt :
9762 now = time .time ()
9863 # print("Time since last loop: ", now - last_loop)
64+
9965 end = time .time ()
10066 print ("seconds per loop: " , (end - start ) / 1000.0 )
10167
0 commit comments