Mercurial > cortex
view org/integration.org @ 197:16cbce075a0b
reorganizing for website
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Sun, 05 Feb 2012 06:55:41 -0700 |
parents | deac7b708750 |
children | 305439cec54d |
line wrap: on
line source
1 #+title: First attempt at a creature!2 #+author: Robert McIntyre3 #+email: rlm@mit.edu4 #+description:5 #+keywords: simulation, jMonkeyEngine3, clojure6 #+SETUPFILE: ../../aurellem/org/setup.org7 #+INCLUDE: ../../aurellem/org/level-0.org12 * Intro13 So far, I've made the following senses --14 - Vision15 - Hearing16 - Touch17 - Proprioception19 And one effector:20 - Movement22 However, the code so far has only enabled these senses, but has not23 actually implemented them. For example, there is still a lot of work24 to be done for vision. I need to be able to create an /eyeball/ in25 simulation that can be moved around and see the world from different26 angles. I also need to determine weather to use log-polar or cartesian27 for the visual input, and I need to determine how/wether to28 disceritise the visual input.30 I also want to be able to visualize both the sensors and the31 effectors in pretty pictures. This semi-retarted creature will be my32 first attempt at bringing everything together.34 * The creature's body36 Still going to do an eve-like body in blender, but due to problems37 importing the joints, etc into jMonkeyEngine3, I'm going to do all38 the connecting here in clojure code, using the names of the individual39 components and trial and error. Later, I'll maybe make some sort of40 creature-building modifications to blender that support whatever41 discritized senses I'm going to make.43 #+name: integration44 #+begin_src clojure45 (ns cortex.integration46 "let's play!"47 {:author "Robert McIntyre"}48 (:use (cortex world util body49 hearing touch vision sense proprioception movement))50 (:import (com.jme3.math ColorRGBA Vector3f))51 (:import com.jme3.audio.AudioNode)52 (:import com.aurellem.capture.RatchetTimer))54 (def hand "Models/creature1/one.blend")56 (def worm "Models/creature1/try-again.blend")58 (defn test-creature [thing]59 (let [x-axis60 (box 1 0.01 0.01 :physical? false :color ColorRGBA/Red)61 y-axis62 (box 0.01 1 0.01 :physical? false :color ColorRGBA/Green)63 z-axis64 (box 0.01 0.01 1 :physical? false :color ColorRGBA/Blue)66 me (sphere 0.5 :color ColorRGBA/Blue :physical? false)67 bell (AudioNode. (asset-manager)68 "Sounds/pure.wav" false)70 fix-display71 (runonce (fn [world]72 (add-camera! world (.getCamera world) no-op)))73 creature (doto (load-blender-model thing) (body!))75 ;;;;;;;;;;;; Sensors/Effectors ;;;;;;;;;;;;;;;;;;;;;;;;;;;;76 touch (touch! creature)77 touch-display (view-touch)79 vision (vision! creature)80 vision-display (view-vision)82 hearing (hearing! creature)83 hearing-display (view-hearing)85 prop (proprioception! creature)86 prop-display (view-proprioception)88 muscle-exertion (atom 0)89 muscles (movement! creature)90 muscle-display (view-movement)]92 (apply93 world94 (with-movement95 (.getChild creature "worm-21")96 ["key-r" "key-t"97 "key-f" "key-g"98 "key-v" "key-b"]99 [10 10 10 10 1 1]100 [(nodify [creature101 (box 10 2 10 :position (Vector3f. 0 -9 0)102 :color ColorRGBA/Gray :mass 0)103 x-axis y-axis z-axis104 me])105 (merge standard-debug-controls106 {"key-return"107 (fn [_ value]108 (if value109 (do110 (println-repl "play-sound")111 (.play bell))))112 "key-h"113 (fn [_ value]114 (if value115 (swap! muscle-exertion (partial + 20))))116 "key-n"117 (fn [_ value]118 (if value119 (swap! muscle-exertion (fn [v] (- v 20)))))})120 (fn [world]121 (light-up-everything world)122 (enable-debug world)123 (add-camera! world124 (add-eye! creature125 (.getChild126 (.getChild creature "eyes") "eye"))127 (comp (view-image) BufferedImage!))128 (.setTimer world (RatchetTimer. 60))129 (speed-up world)130 (set-gravity world (Vector3f. 0 0 0))131 (comment132 (com.aurellem.capture.Capture/captureVideo133 world (file-str "/home/r/proj/ai-videos/hand"))))134 (fn [world tpf]135 (prop-display (prop))136 (touch-display (map #(% (.getRootNode world)) touch))137 (vision-display (map #(% world) vision))138 (hearing-display (map #(% world) hearing))139 (muscle-display (map #(% @muscle-exertion) muscles))140 (.setLocalTranslation me (.getLocation (.getCamera world)))141 (fix-display world))]))))142 #+end_src144 #+results: body-1145 : #'cortex.silly/follow-test148 * COMMENT purgatory149 #+begin_src clojure151 (defn bullet-trans* []152 (let [obj-a (box 1.5 0.5 0.5 :color ColorRGBA/Red153 :position (Vector3f. 5 0 0)154 :mass 90)155 obj-b (sphere 0.5 :color ColorRGBA/Blue156 :position (Vector3f. -5 0 0)157 :mass 0)158 control-a (.getControl obj-a RigidBodyControl)159 control-b (.getControl obj-b RigidBodyControl)160 move-up? (atom nil)161 move-down? (atom nil)162 move-left? (atom nil)163 move-right? (atom nil)164 roll-left? (atom nil)165 roll-right? (atom nil)166 force 100167 swivel168 (.toRotationMatrix169 (doto (Quaternion.)170 (.fromAngleAxis (/ Math/PI 2)171 Vector3f/UNIT_X)))172 x-move173 (doto (Matrix3f.)174 (.fromStartEndVectors Vector3f/UNIT_X175 (.normalize (Vector3f. 1 1 0))))177 timer (atom 0)]178 (doto179 (ConeJoint.180 control-a control-b181 (Vector3f. -8 0 0)182 (Vector3f. 2 0 0)183 ;;swivel swivel184 ;;Matrix3f/IDENTITY Matrix3f/IDENTITY185 x-move Matrix3f/IDENTITY186 )187 (.setCollisionBetweenLinkedBodys false)188 (.setLimit (* 1 (/ Math/PI 4)) ;; twist189 (* 1 (/ Math/PI 4)) ;; swing span in X-Y plane190 (* 0 (/ Math/PI 4)))) ;; swing span in Y-Z plane191 (world (nodify192 [obj-a obj-b])193 (merge standard-debug-controls194 {"key-r" (fn [_ pressed?] (reset! move-up? pressed?))195 "key-t" (fn [_ pressed?] (reset! move-down? pressed?))196 "key-f" (fn [_ pressed?] (reset! move-left? pressed?))197 "key-g" (fn [_ pressed?] (reset! move-right? pressed?))198 "key-v" (fn [_ pressed?] (reset! roll-left? pressed?))199 "key-b" (fn [_ pressed?] (reset! roll-right? pressed?))})201 (fn [world]202 (enable-debug world)203 (set-gravity world Vector3f/ZERO)204 )206 (fn [world _]208 (if @move-up?209 (.applyForce control-a210 (Vector3f. force 0 0)211 (Vector3f. 0 0 0)))212 (if @move-down?213 (.applyForce control-a214 (Vector3f. (- force) 0 0)215 (Vector3f. 0 0 0)))216 (if @move-left?217 (.applyForce control-a218 (Vector3f. 0 force 0)219 (Vector3f. 0 0 0)))220 (if @move-right?221 (.applyForce control-a222 (Vector3f. 0 (- force) 0)223 (Vector3f. 0 0 0)))225 (if @roll-left?226 (.applyForce control-a227 (Vector3f. 0 0 force)228 (Vector3f. 0 0 0)))229 (if @roll-right?230 (.applyForce control-a231 (Vector3f. 0 0 (- force))232 (Vector3f. 0 0 0)))234 (if (zero? (rem (swap! timer inc) 100))235 (.attachChild236 (.getRootNode world)237 (sphere 0.05 :color ColorRGBA/Yellow238 :physical? false :position239 (.getWorldTranslation obj-a)))))240 )241 ))243 (defn test-joint [joint]244 (let [[origin top bottom floor] (world-setup joint)245 control (.getControl top RigidBodyControl)246 move-up? (atom false)247 move-down? (atom false)248 move-left? (atom false)249 move-right? (atom false)250 roll-left? (atom false)251 roll-right? (atom false)252 timer (atom 0)]254 (world255 (nodify [top bottom floor origin])256 (merge standard-debug-controls257 {"key-r" (fn [_ pressed?] (reset! move-up? pressed?))258 "key-t" (fn [_ pressed?] (reset! move-down? pressed?))259 "key-f" (fn [_ pressed?] (reset! move-left? pressed?))260 "key-g" (fn [_ pressed?] (reset! move-right? pressed?))261 "key-v" (fn [_ pressed?] (reset! roll-left? pressed?))262 "key-b" (fn [_ pressed?] (reset! roll-right? pressed?))})264 (fn [world]265 (light-up-everything world)266 (enable-debug world)267 (set-gravity world (Vector3f. 0 0 0))268 )270 (fn [world _]271 (if (zero? (rem (swap! timer inc) 100))272 (do273 ;; (println-repl @timer)274 (.attachChild (.getRootNode world)275 (sphere 0.05 :color ColorRGBA/Yellow276 :position (.getWorldTranslation top)277 :physical? false))278 (.attachChild (.getRootNode world)279 (sphere 0.05 :color ColorRGBA/LightGray280 :position (.getWorldTranslation bottom)281 :physical? false))))283 (if @move-up?284 (.applyTorque control285 (.mult (.getPhysicsRotation control)286 (Vector3f. 0 0 10))))287 (if @move-down?288 (.applyTorque control289 (.mult (.getPhysicsRotation control)290 (Vector3f. 0 0 -10))))291 (if @move-left?292 (.applyTorque control293 (.mult (.getPhysicsRotation control)294 (Vector3f. 0 10 0))))295 (if @move-right?296 (.applyTorque control297 (.mult (.getPhysicsRotation control)298 (Vector3f. 0 -10 0))))299 (if @roll-left?300 (.applyTorque control301 (.mult (.getPhysicsRotation control)302 (Vector3f. -1 0 0))))303 (if @roll-right?304 (.applyTorque control305 (.mult (.getPhysicsRotation control)306 (Vector3f. 1 0 0))))))))308 (defn follow-test309 "Show a camera that stays in the same relative position to a blue cube."310 []311 (let [camera-pos (Vector3f. 0 30 0)312 rock (box 1 1 1 :color ColorRGBA/Blue313 :position (Vector3f. 0 10 0)314 :mass 30315 )316 rot (.getWorldRotation rock)318 table (box 3 1 10 :color ColorRGBA/Gray :mass 0319 :position (Vector3f. 0 -3 0))]321 (world322 (nodify [rock table])323 standard-debug-controls324 (fn [world]325 (let326 [cam (doto (.clone (.getCamera world))327 (.setLocation camera-pos)328 (.lookAt Vector3f/ZERO329 Vector3f/UNIT_X))]330 (bind-sense rock cam)332 (.setTimer world (RatchetTimer. 60))333 (add-camera! world cam (comp (view-image) BufferedImage!))334 (add-camera! world (.getCamera world) no-op))335 )336 (fn [_ _] (println-repl rot)))))337 #+end_src340 * COMMENT generate source341 #+begin_src clojure :tangle ../src/cortex/integration.clj342 <<integration>>343 #+end_src