You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							90 lines
						
					
					
						
							2.7 KiB
						
					
					
				
			
		
		
	
	
							90 lines
						
					
					
						
							2.7 KiB
						
					
					
				| #!/usr/bin/env python
 | |
| from common.numpy_fast import clip
 | |
| from common.params import Params
 | |
| from copy import copy
 | |
| from cereal import car, log
 | |
| import cereal.messaging as messaging
 | |
| from selfdrive.car.car_helpers import get_car, get_one_can
 | |
| from selfdrive.boardd.boardd import can_list_to_can_capnp
 | |
| 
 | |
| PandaType = log.HealthData.PandaType
 | |
| 
 | |
| 
 | |
| def steer_thread():
 | |
|   poller = messaging.Poller()
 | |
| 
 | |
|   logcan = messaging.sub_sock('can')
 | |
|   joystick_sock = messaging.sub_sock('testJoystick', conflate=True, poller=poller)
 | |
| 
 | |
|   carstate = messaging.pub_sock('carState')
 | |
|   carcontrol = messaging.pub_sock('carControl')
 | |
|   sendcan = messaging.pub_sock('sendcan')
 | |
| 
 | |
|   button_1_last = 0
 | |
|   enabled = False
 | |
| 
 | |
|   # wait for CAN packets
 | |
|   print("Waiting for CAN messages...")
 | |
|   get_one_can(logcan)
 | |
| 
 | |
|   CI, CP = get_car(logcan, sendcan)
 | |
|   Params().put("CarParams", CP.to_bytes())
 | |
| 
 | |
|   CC = car.CarControl.new_message()
 | |
| 
 | |
|   while True:
 | |
| 
 | |
|     # send
 | |
|     joystick = messaging.recv_one(joystick_sock)
 | |
|     can_strs = messaging.drain_sock_raw(logcan, wait_for_one=True)
 | |
|     CS = CI.update(CC, can_strs)
 | |
| 
 | |
|     # Usually axis run in pairs, up/down for one, and left/right for
 | |
|     # the other.
 | |
|     actuators = car.CarControl.Actuators.new_message()
 | |
| 
 | |
|     if joystick is not None:
 | |
|       axis_3 = clip(-joystick.testJoystick.axes[3] * 1.05, -1., 1.)          # -1 to 1
 | |
|       actuators.steer = axis_3
 | |
|       actuators.steeringAngleDeg = axis_3 * 43.   # deg
 | |
|       axis_1 = clip(-joystick.testJoystick.axes[1] * 1.05, -1., 1.)          # -1 to 1
 | |
|       actuators.gas = max(axis_1, 0.)
 | |
|       actuators.brake = max(-axis_1, 0.)
 | |
| 
 | |
|       pcm_cancel_cmd = joystick.testJoystick.buttons[0]
 | |
|       button_1 = joystick.testJoystick.buttons[1]
 | |
|       if button_1 and not button_1_last:
 | |
|         enabled = not enabled
 | |
| 
 | |
|       button_1_last = button_1
 | |
| 
 | |
|       #print "enable", enabled, "steer", actuators.steer, "accel", actuators.gas - actuators.brake
 | |
| 
 | |
|       hud_alert = 0
 | |
|       if joystick.testJoystick.buttons[3]:
 | |
|         hud_alert = "steerRequired"
 | |
| 
 | |
|     CC.actuators.gas = actuators.gas
 | |
|     CC.actuators.brake = actuators.brake
 | |
|     CC.actuators.steer = actuators.steer
 | |
|     CC.actuators.steeringAngleDeg = actuators.steeringAngleDeg
 | |
|     CC.hudControl.visualAlert = hud_alert
 | |
|     CC.hudControl.setSpeed = 20
 | |
|     CC.cruiseControl.cancel = pcm_cancel_cmd
 | |
|     CC.enabled = enabled
 | |
|     can_sends = CI.apply(CC)
 | |
|     sendcan.send(can_list_to_can_capnp(can_sends, msgtype='sendcan'))
 | |
| 
 | |
|     # broadcast carState
 | |
|     cs_send = messaging.new_message('carState')
 | |
|     cs_send.carState = copy(CS)
 | |
|     carstate.send(cs_send.to_bytes())
 | |
| 
 | |
|     # broadcast carControl
 | |
|     cc_send = messaging.new_message('carControl')
 | |
|     cc_send.carControl = copy(CC)
 | |
|     carcontrol.send(cc_send.to_bytes())
 | |
| 
 | |
| 
 | |
| if __name__ == "__main__":
 | |
|   steer_thread()
 | |
| 
 |