Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
first commit
- Loading branch information
0 parents
commit 9cb410f
Showing
604 changed files
with
171,971 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
A physics simulation of bipedal walking robots. Still *very much* a work in progress. | ||
Uses: | ||
JigLibJS2 port of the JigLib physics engine by bartdeboer: https://github.com/bartdeboer/JigLibJS2 | ||
THREE.js by mr.doob for visualization with webgl: https://github.com/mrdoob/three.js/ | ||
|
||
run the test server with: | ||
npm install | ||
coffee server.coffee |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,104 @@ | ||
<!DOCTYPE html> | ||
<html> | ||
<head> | ||
<title>Walking</title> | ||
<link rel="stylesheet" type="text/css" href="/style.css" /> | ||
<script src="/jquery.min.js" type="text/javascript"></script> | ||
|
||
<!-- Three.js --> | ||
<script src="/three.min.js" type="text/javascript"></script> | ||
<script src="/requestAnimationFrame.js" type="text/javascript"></script> | ||
|
||
<!-- JigLibJS2 --> | ||
<script src="/JigLibJS2/geom/glMatrix.js"></script> | ||
<script src="/JigLibJS2/jiglib.js"></script> | ||
<script src="/JigLibJS2/geom/Vector3d.js"></script> | ||
<script src="/JigLibJS2/geom/Matrix3d.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/math/JMatrix3D.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/math/JMath3D.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/math/JNumber3D.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/cof/JConfig.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/data/CollOutData.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/data/ContactData.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/data/PlaneData.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/data/EdgeData.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/data/TerrainData.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/data/OctreeCell.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/data/CollOutBodyData.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/data/TriangleVertexIndices.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/data/SpanData.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/physics/MaterialProperties.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/collision/CollPointInfo.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/collision/CollisionInfo.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/collision/CollDetectInfo.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/collision/CollDetectFunctor.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/collision/CollDetectBoxTerrain.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/collision/CollDetectSphereMesh.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/collision/CollDetectCapsuleBox.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/collision/CollDetectSphereCapsule.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/collision/CollDetectCapsuleTerrain.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/collision/CollDetectSphereBox.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/collision/CollDetectSphereTerrain.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/collision/CollDetectBoxBox.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/collision/CollDetectBoxMesh.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/collision/CollDetectBoxPlane.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/collision/CollDetectCapsuleCapsule.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/collision/CollDetectSphereSphere.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/collision/CollDetectSpherePlane.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/collision/CollDetectCapsulePlane.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/collision/CollisionSystemAbstract.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/collision/CollisionSystemGridEntry.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/collision/CollisionSystemGrid.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/collision/CollisionSystemBrute.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/geometry/JIndexedTriangle.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/geometry/JOctree.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/geometry/JRay.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/geometry/JAABox.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/geometry/JTriangle.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/geometry/JSegment.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/events/JCollisionEvent.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/physics/CachedImpulse.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/physics/BodyPair.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/physics/PhysicsSystem.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/physics/PhysicsController.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/physics/constraint/JConstraint.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/physics/constraint/JConstraintMaxDistance.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/physics/constraint/JConstraintWorldPoint.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/physics/constraint/JConstraintPoint.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/physics/HingeJoint.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/physics/BodyPair.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/physics/PhysicsState.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/physics/RigidBody.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/geometry/JSphere.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/geometry/JTriangleMesh.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/geometry/JPlane.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/geometry/JTerrain.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/geometry/JBox.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/geometry/JCapsule.js"></script> | ||
<script type="text/javascript" src="/JigLibJS2/debug/Stats.js"></script> | ||
|
||
<!-- Simulation --> | ||
<script src="/legs.js" type="text/javascript"></script> | ||
<script src="/simulation.js" type="text/javascript"></script> | ||
|
||
</head> | ||
<body> | ||
<div id="menu"> | ||
<a id="pushLeft">push left</a> | ||
<a id="pushRight">push right</a> | ||
<a id="pushForward">push forward</a> | ||
<a id="pushBack">push back</a> | ||
<a id="pushUp">push up</a> | ||
<a id="reset">reset</a> | ||
<select id="pushBody"> | ||
<option value="hip" selected>hip</option> | ||
<option value="leftFoot">left foot</option> | ||
<option value="leftCrus">left crus</option> | ||
<option value="leftThigh">left thigh</option> | ||
<option value="rightFoot">right foot</option> | ||
<option value="rightCrus">right crus</option> | ||
<option value="rightThigh">right thigh</option> | ||
</select> | ||
</div> | ||
</body> | ||
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,110 @@ | ||
window.Robot = {} | ||
|
||
#A rigid box | ||
class Box | ||
constructor: (@system, @scene, length, width, height, density = 1, color = 0x666666) -> | ||
geometry = new THREE.CubeGeometry length, width, height | ||
material = new THREE.MeshLambertMaterial color: color | ||
@mesh = new THREE.Mesh geometry, material | ||
@mesh.matrixAutoUpdate = false | ||
@mesh.overdraw = true | ||
scene.add @mesh | ||
|
||
body = new jiglib.JBox null, length, height, width | ||
body.set_mass body.getVolume() * density | ||
system.addBody body | ||
@mesh.rigidBody = body | ||
|
||
setPosition: (x, y, z) -> | ||
@mesh.position = new THREE.Vector3 x, y, z | ||
@mesh.updateMatrix() | ||
@mesh.rigidBody.moveTo(new Vector3D x, y, z) | ||
this | ||
|
||
setRotation: (x, y, z) -> | ||
@mesh.rotation = new THREE.Vector3 x, y, z | ||
@mesh.updateMatrix() | ||
|
||
matrix3D = new Matrix3D() | ||
matrix3D.appendRotation x, Vector3D.X_AXIS | ||
matrix3D.appendRotation y, Vector3D.Y_AXIS | ||
matrix3D.appendRotation z, Vector3D.Z_AXIS | ||
@mesh.rigidBody.setOrientation matrix3D | ||
this | ||
|
||
#A single axis joint | ||
class Joint | ||
sidewaysSlack: 0.001 | ||
damping: 0.0 | ||
### | ||
box0 and box1 are the two boxes being joined | ||
hingeAxis is the axis of rotation of the hinge | ||
hingePosRel0 is the offset of the hinge from the center of box0 | ||
hingeFwdAngle and hingeBckAngle are the angles of rotation of the joint | ||
### | ||
constructor: (box0, box1, hingeAxis, hingePosRel0, hingeHalfWidth, hingeFwdAngle, hingeBckAngle) -> | ||
@joint = new jiglib.HingeJoint(box0.mesh.rigidBody, box1.mesh.rigidBody, hingeAxis, hingePosRel0, hingeHalfWidth, hingeFwdAngle, hingeBckAngle, @sidewaysSlack, @damping) | ||
|
||
angle: -> | ||
body0State = @joint._body0.get_currentState() | ||
body1State = @joint._body1.get_currentState() | ||
hingePosition = body0State.position.add(body0State.orientation.transformVector(@joint._hingePosRel0)) | ||
|
||
""" | ||
<p>body0 position: (#{body0State.position.x.toFixed(3)}, #{body0State.position.y.toFixed(3)}, #{body0State.position.z.toFixed(3)})</p> | ||
<p>body1 position: (#{body1State.position.x.toFixed(3)}, #{body1State.position.y.toFixed(3)}, #{body1State.position.z.toFixed(3)})</p> | ||
<p>hingePosition: (#{hingePosition.x.toFixed(3)}, #{hingePosition.y.toFixed(3)}, #{hingePosition.z.toFixed(3)})</p> | ||
""" | ||
|
||
class Robot.Legs | ||
constructor: (@system, @scene) -> | ||
@components = {} | ||
@joints = {} | ||
|
||
@initialize() | ||
|
||
remove: -> | ||
component.remove() for compenent in @components | ||
joint.remove() for joint in @joints | ||
|
||
addComponent: (name, component) -> | ||
@components[name] = component | ||
component | ||
|
||
addJoint: (name, joint) -> | ||
@joints[name] = joint | ||
joint | ||
|
||
initialize: -> | ||
#left leg | ||
leftFoot = @addComponent("leftFoot", new Box @system, @scene, 4, 10, 2, 1, 0x001166).setPosition -10, 2, 1 | ||
leftCrus = @addComponent("leftCrus", new Box @system, @scene, 2, 4, 20, 1, 0x999999).setPosition -7, 0, 11 | ||
leftThigh = @addComponent("leftThigh", new Box @system, @scene, 2, 4, 20, 1, 0x0066CC).setPosition -9, 0, 29 | ||
leftHipAdapter = @addComponent("leftHipAdapter", new Box @system, @scene, 4, 4, 4, 1, 0x001166).setPosition -6, 0, 37 | ||
#right leg | ||
rightFoot = @addComponent("rightFoot", new Box @system, @scene, 4, 10, 2, 1, 0x001166).setPosition 10, 2, 1 | ||
rightCrus = @addComponent("rightCrus", new Box @system, @scene, 2, 4, 20, 1, 0x999999).setPosition 7, 0, 11 | ||
rightThigh = @addComponent("rightThigh", new Box @system, @scene, 2, 4, 20, 1, 0x0066CC).setPosition 9, 0, 29 | ||
rightHipAdapter = @addComponent("rightHipAdapter", new Box @system, @scene, 4, 4, 4, 1, 0x001166).setPosition 6, 0, 37 | ||
#body | ||
hip = @addComponent("hip", new Box @system, @scene, 8, 6, 8, 4, 0x999999).setPosition 0, 0, 43 | ||
|
||
#joints | ||
@addJoint "leftAnkle", new Joint(leftFoot, leftCrus, Vector3D.X_AXIS, new Vector3D(2, -2, 1), 2, 90, 30) | ||
@addJoint "rightAnkle", new Joint(rightFoot, rightCrus, Vector3D.X_AXIS, new Vector3D(-2, -2, 1), 2, 90, 30) | ||
@addJoint "leftKnee", new Joint(leftCrus, leftThigh, Vector3D.X_AXIS, new Vector3D(-1, 0, 9), 2, 120, 0) | ||
@addJoint "rightKnee", new Joint(rightCrus, rightThigh, Vector3D.X_AXIS, new Vector3D(1, 0, 9), 2, 90, 0) | ||
@addJoint "leftHipFlexor", new Joint(leftThigh, leftHipAdapter, Vector3D.X_AXIS, new Vector3D(1, 0, 9), 2, 0, 90) | ||
@addJoint "rightHipFlexor", new Joint(rightThigh, rightHipAdapter, Vector3D.X_AXIS, new Vector3D(-1, 0, 9), 2, 0, 90) | ||
@addJoint "leftHipAbductor1", new Joint(leftHipAdapter, hip, Vector3D.Y_AXIS, new Vector3D(2, 2, 2), 1, 180, 0) | ||
@addJoint "leftHipAbductor2", new Joint(leftHipAdapter, hip, Vector3D.Y_AXIS, new Vector3D(2, -2, 2), 1, 180, 0) | ||
@addJoint "rightHipAbductor1", new Joint(rightHipAdapter, hip, Vector3D.Y_AXIS, new Vector3D(-2, 2, 2), 2, 180, 180) | ||
@addJoint "rightHipAbductor2", new Joint(rightHipAdapter, hip, Vector3D.Y_AXIS, new Vector3D(-2, -2, 2), 2, 180, 180) | ||
|
||
getState: -> | ||
@joints.leftKnee.angle() | ||
|
||
applyTorques: (torques) -> | ||
|
||
push: (body, x, y, z) -> | ||
@components[body].mesh.rigidBody.addBodyForce new Vector3D(x, y, z), new Vector3D(0,0,0) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
{ | ||
'name':'walking', | ||
'description':'A physics simulation of bipedal walking robots using THREE.js for visualization. Still *very much* a work in progress.', | ||
'author':'Charlie Schwabacher <charlieschwabacher@gmail.com>', | ||
'version':'0.0.1', | ||
'dependencies': { | ||
'express':'>= 2.5.2', | ||
'coffee-script':'>= 1.1.3' | ||
}, | ||
'engine':'node 0.6.5' | ||
} |
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
Following the principles of JigLibJS this is a new Javascript port of JiglibFlash (which is a port of c++ JigLib). The code is generated automatically from the AS3 code so all functionality should work exactly like the AS3 version. | ||
|
||
JigLibJS2: http://www.brokstuk.com/jiglibjs2/ | ||
|
||
Other links: | ||
|
||
JiglibFlash: http://www.jiglibflash.com/ | ||
Original c++ JigLib: http://www.rowlhouse.co.uk/jiglib/ | ||
Original JigLibJS port: https://github.com/supereggbert/JigLibJS | ||
glmatrix: http://code.google.com/p/glmatrix/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
|
||
(function(jiglib) { | ||
|
||
|
||
var JConfig = function() | ||
{ | ||
} | ||
|
||
JConfig.solverType = "ACCUMULATED"; // String | ||
JConfig.rotationType = "DEGREES"; // String | ||
JConfig.doShockStep = false; // Boolean | ||
JConfig.allowedPenetration = 0.01; // Number | ||
JConfig.collToll = 0.05; // Number | ||
JConfig.velThreshold = 0.5; // Number | ||
JConfig.angVelThreshold = 0.5; // Number | ||
JConfig.posThreshold = 0.2; // Number | ||
JConfig.orientThreshold = 0.2; // Number | ||
JConfig.deactivationTime = 0.5; // Number | ||
JConfig.numPenetrationRelaxationTimesteps = 10; // Number | ||
JConfig.numCollisionIterations = 1; // Number | ||
JConfig.numContactIterations = 2; // Number | ||
JConfig.numConstraintIterations = 2; // Number | ||
|
||
|
||
jiglib.JConfig = JConfig; | ||
|
||
})(jiglib); | ||
|
Oops, something went wrong.