;;;--- HPARAM >		-*- package: user; mode: lisp; base: 10. -*-

; INITIALIZATIONS:

(setq SHOW-LIST '(XXX YYY ZZZ WIND SERVO GRAVITY TIMESTEP SHOW-EVAL? ERASE-COUNT ROBOT-SCALE
		      MOUSE-SCALE DISPLAY-TIME DISPLAY-MODE MOUSELIST-MODE)
      
      ROD-ARRAY-COMPONENTS '(CM-X CM-X-VELOC CM-X-ACCEL
				  CM-Y CM-Y-VELOC CM-Y-ACCEL
				  ANGLE ANGLE-VELOC ANGLE-ACCEL
				  LOWER-X LOWER-X-VELOC LOWER-X-ACCEL
				  LOWER-Y LOWER-Y-VELOC LOWER-Y-ACCEL
				  UPPER-X UPPER-X-VELOC UPPER-X-ACCEL
				  UPPER-Y UPPER-Y-VELOC UPPER-Y-ACCEL
				  COSANGLE SINANGLE LXF LYF UXF UYF
				  APPLIED-TORQUE
				  M1 M2 M3 MASS MOI LCM UCM LTOT
				  ROD-FRAME ROBOT-FRAME)
      
      TEST-FCN-LIST '( ))


; FRAMES:

(setq ROD1 `(ROD1
	      (ROD-ARRAY . ,(make-rod))		; State-Variable and Parameter array
	      (LTOT . 0.4s0)			; Total Length of rod
	      (M1 . 18.0s0)			; Mass at lower end
	      (M2 . 2.0s0)			; Mass at CM
	      (M3 . 8.0s0)			; Mass at upper end
	      (SAVE-ANGLE . 0.0s0)		; Angle: horiz to CM-to-UPPER line
	      (SAVE-LOWER-X . -0.5s0)
	      (SAVE-LOWER-Y . 0.0s0)
	      )
      
      ROD2 `(ROD2
	      (ROD-ARRAY . ,(make-rod))		; State-Variable and Parameter array
	      (LTOT . 1.0s0)			; Total Length of rod
	      (M1 . 3.0s0)			; Mass at lower end
	      (M2 . 1.0s0)			; Mass at CM
	      (M3 . 4.0s0)			; Mass at upper end
	      (SAVE-ANGLE . 0.0s0)		; Angle: horiz to CM-to-UPPER line
	      (SAVE-LOWER-X . -0.1s0)
	      (SAVE-LOWER-Y . 0.0s0)
	      )

      ONE-LEGGED-ROBOT `(ONE-LEGGED-ROBOT
			  (ROD-FRAME-LIST ,ROD1 ,ROD2)
			  (ROD-ARRAY-LIST ,(get-frame ROD1 'ROD-ARRAY)
					  ,(get-frame ROD2 'ROD-ARRAY))
			  (CONTROL-LIST)
			  (BODY))

      ROBOT-FRAME ONE-LEGGED-ROBOT)

      
(setq CF0 `(CF0
	     (FSCONTROL . SERVO-TORQUE))
      
      CF1 `(CF1
	     (FSCONTROL . SERVO-ACCELERATION))
      
      CF2 `(CF2
	     (FSCONTROL . SERVO-VELOCITY))
      
      CF3 `(CF3
	     (FSCONTROL . SERVO-ANGLE))
      
      CF4 `(CF4
	     (FSCONTROL . SERVO-BALANCE))
      
      CF5 `(CF5
	     (FSCONTROL . SERVO-BALANCE-ANGLE))
      
      CF6 nil
      CF7 nil
      CF8 nil
      CF9 nil

      CONTROL-FRAME CF3)


; FLOOR and BODY PARAMETERS:

(setq FLOOR-ELASTICITY 35.0s3			; Half of Lagrangian value
      FLOOR-DAMPING  350.0s0			; ditto
      JOINT-ELASTICITY 600.0s0
      JOINT-DAMPING 60.0s0)


; DIGIT-COMMANDS:

(setq NUMBER-SET-LIST

      (list '(setq ONE '(SPEED 1.)			; User-Break Command: - 1
		   TWO '(SPEED 2.)
		   THREE '(SPEED 5.)
		   FOUR '(SPEED 10.)
		   FIVE '(SPEED 20.)
		   SIX '(SPEED 50.)
		   SEVEN '(SPEED 100)
		   EIGHT '(SPEED 200.)
		   NINE '(SPEED 500.)
		   ZERO '(SPEED))

	    '(setq ONE '(setq CONTROL-FRAME CF1)	; User-Break Command: - 2
		   TWO '(setq CONTROL-FRAME CF2)
		   THREE '(setq CONTROL-FRAME CF3)
		   FOUR '(setq CONTROL-FRAME CF4)
		   FIVE '(setq CONTROL-FRAME CF5)
		   SIX '(setq CONTROL-FRAME CF6)
		   SEVEN '(setq CONTROL-FRAME CF7)
		   EIGHT '(setq CONTROL-FRAME CF8)
		   NINE '(setq CONTROL-FRAME CF9)
		   ZERO '(setq CONTROL-FRAME CF0))))


; MISCELLANEOUS PARAMETERS:

(setq TIMESTEP 10.				; Milliseconds
      SERVO 'J-ANGLE
      BREAK-ON-ERROR? nil
      MOUSE-SCALE 0.0015s0
      FACTOR 1.1s0
      CYCLES 1.0s0
      FRICTION 2.0s0
      WIND 0.0s0		; Good windy value: 100.0s0
				; Negative value: use ABS of it as constant wind.
				; Positive value: use random value with this P-P value.
      GRAVITY 9.8s0
      MOUSELIST-MODE nil)


; DISPLAY PARAMETERS:

(setq DISPLAY-LIST '(F1 "UXF-1" F2 "UYF-1" F3 "LXF-2" F4 "LYF-2"
			X1 "X-Accel-Correction" Y1 "Y-Accel-Correction")
      MDV-LIST1 '(X1 "X-Accel-Correction" 400. Y1 "Y-Accel-Correction" 430.)
      MDV-LIST2 '(X1 "X-Accel-Correction" 828. Y1 "Y-Accel-Correction" 845.)
      )

(setq PRINT-VAL? nil
      DISPLAY-TIME (* TIMESTEP 2.)
      DISPLAY-MODE 3.
      SCOPE-TOP 354.
      GRATE 1.
      FREERUN? t
      SHOW-EVAL? t
      ERASE-COUNT 0.
      ROBOT-SCALE 70.0s0
      GRAPHICS-SCREEN-HEIGHT 300.
      STATE-SPACE-GRAPH-LIST '(nil nil nil)
      STATE-SPACE-GRAPH-LIST-LEN (- (length STATE-SPACE-GRAPH-LIST)))


; INTERPRETED FUNCTION DEFINITION:

(defun r (&optional (n JOINT-ELASTICITY) (m JOINT-DAMPING))
  (sett JOINT-ELASTICITY n JOINT-DAMPING m))


; INITIALIZATIONS:

(or (boundp 'ONE) (eval (first NUMBER-SET-LIST)))

(cond ((< STATE-SPACE-GRAPH-LIST-LEN 0.)
       (setq STATE-SPACE-GRAPH-LIST-LEN (- STATE-SPACE-GRAPH-LIST-LEN))
       (rplacd (last STATE-SPACE-GRAPH-LIST) STATE-SPACE-GRAPH-LIST)
       "STATE-SPACE-GRAPH-LIST circularized."))

(cond ((not (boundp 'GRAPHICS-WINDOW))
       (setq GRAPHICS-WINDOW (tv:window-create
			       'TV:LISP-LISTENER
			       ':EDGES-FROM `(0. 0. 767. ,(+ GRAPHICS-SCREEN-HEIGHT 20.))))
       (<- GRAPHICS-WINDOW ':SET-DEEXPOSED-TYPEOUT-ACTION ':PERMIT)
       (setq GRAPHICS-WINDOW-ARRAY (tv:SHEET-SCREEN-ARRAY GRAPHICS-WINDOW))))

(set-normalization t)


;;; End.
