# HG changeset patch # User Robert McIntyre # Date 1329415462 25200 # Node ID 1eed471e2ebf0846db5a33187394536f3ac27020 # Parent 67a4e92d4628eea22c63be22cb989aaae7c0e1c6 first version of a mini motor-control script language diff -r 67a4e92d4628 -r 1eed471e2ebf assets/Models/test-creature/hand.blend Binary file assets/Models/test-creature/hand.blend has changed diff -r 67a4e92d4628 -r 1eed471e2ebf org/integration.org --- a/org/integration.org Thu Feb 16 09:59:44 2012 -0700 +++ b/org/integration.org Thu Feb 16 11:04:22 2012 -0700 @@ -31,10 +31,77 @@ (def output-base (File. "/home/r/proj/cortex/render/hand")) +(defn motor-control-program + "Create a function which will execute the motor script" + [muscle-positions + script] + (let [current-frame (atom -1) + keyed-script (group-by first script) + current-forces (atom {}) ] + (fn [effectors] + (let [indexed-effectors (vec effectors)] + (dorun + (for [[_ part force] (keyed-script (swap! current-frame inc))] + (swap! current-forces (fn [m] (assoc m part force))))) + (doall (map (fn [effector power] + (effector (int power))) + effectors + (map #(@current-forces % 0) muscle-positions))))))) + +(def muscle-positions + [:pointer-2-e + :pointer-2-f + :thumb-1 + :thumb-1 + :pointer-1-e + :pointer-1-f + :thumb-2-e + :thumb-2-f + :middle-1-e + :middle-1-f + :pointer-3-f + :pointer-3-e + :middle-2-e + :middle-2-f + :middle-3-f + :middle-3-e + :pinky-2-e + :pinky-2-f + :pinky-3-f + :pinky-3-e + :ring-3-e + :ring-3-f + :ring-2-f + :ring-2-e + :ring-1-e + :ring-1-f + :thumb-1-e + :thumb-1-f + :pinky-1-f + :pinky-1-e]) + +(def full 9001) +;; the systax here is [keyframe body-part force] +(def wiggle-each-finger-tip + [[200 :pointer-3-f full] + [200 :pointer-3-f 40] + + [400 :middle-3-f full] + [401 :middle-3-f 40] + + [600 :ring-3-f full] + [601 :ring-3-f 40] + + [800 :pinky-3-f full] + [801 :pinky-3-f 40]]) + + + + (def control-list [ 0 ;;pointer-21 # - 1 ;;pointer-21 # + 0 ;;pointer-21 # 0 ;;thumb-11 # 0 ;;thumb-11 # 0 ;;pointer-11 # @@ -43,7 +110,7 @@ 0 ;;thumb-2.0011 # 0 ;;middle-11 # 0 ;;middle-11 # - 0 ;;pointer-31 # + 1 ;;pointer-31 # 0 ;;pointer-31 # 0 ;;middle-21 # 0 ;;middle-21 # @@ -51,7 +118,8 @@ 0 ;;middle-31 # 0 ;;pinky-21 # 0 ;;pinky-21 # - 0 ;;pinky-31 # + 0 ;;pinky-31 # + 0 ;;pinky-31 # 0 ;;ring-31 # 0 ;;ring-31 # 0 ;;ring-21 # @@ -87,7 +155,8 @@ prop (proprioception! creature) prop-display (view-proprioception) - muscle-exertion (atom 0) + control-script (motor-control-program + muscle-positions wiggle-each-finger-tip) muscles (movement! creature) muscle-display (view-movement) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -102,15 +171,8 @@ {"key-return" (fn [_ value] (if value - (.play bell))) - "key-h" - (fn [_ value] - (if value - (swap! muscle-exertion (partial + 20)))) - "key-n" - (fn [_ value] - (if value - (swap! muscle-exertion (fn [v] (- v 20)))))}) + (.play bell)))}) + (fn [world] (.setTimer world (RatchetTimer. 60)) (light-up-everything world) @@ -127,11 +189,9 @@ ;;(vision-display (map #(% world) vision)) ;;(hearing-display (map #(% world) hearing)) - (muscle-display - (map (fn [effector control] - (effector (int (* @muscle-exertion control)))) - muscles - control-list)) + ;;(muscle-display + (control-script muscles) + ;;) (.setLocalTranslation me (.getLocation (.getCamera world))) (fix-display world)))))) diff -r 67a4e92d4628 -r 1eed471e2ebf org/movement.org --- a/org/movement.org Thu Feb 16 09:59:44 2012 -0700 +++ b/org/movement.org Thu Feb 16 11:04:22 2012 -0700 @@ -118,15 +118,14 @@ pool (motor-pool muscle) pool-integral (reductions + pool) - force-index + forces (vec (map #(float (* strength (/ % (last pool-integral)))) pool-integral)) control (.getControl target RigidBodyControl)] - (println-repl "adding muscle to" (.getName target)) - (println-repl "points" axis) + (println-repl (.getName target) axis) (fn [n] (let [pool-index (max 0 (min n (dec (count pool)))) - force (force-index pool-index)] + force (forces pool-index)] (.applyTorque control (.mult axis force)) (float (/ force strength))))))