Canonical USD example for MuJoCo Physics. This contains three items:

floor - a static floor centered at origin of sides 100m x 100m

two_cubes - a standard example where 2 cubes have a hinge joint between them.

two_cubes_scene - a scene made up of the floor at (0, 0, 0) and two_cubes at (0, 0, 30).

PiperOrigin-RevId: 607809323
Change-Id: I9931d89441653ce7aaf5145ee42c71c0c8f9ffcb
This commit is contained in:
Matthew Bennice
2024-02-16 14:55:27 -08:00
committed by Copybara-Service
parent 1b93226fb0
commit dbf7afaeaa
12 changed files with 288 additions and 0 deletions
+19
View File
@@ -0,0 +1,19 @@
#usda 1.0
(
defaultPrim = "root"
upAxis = "Z"
)
def Xform "root" () {
def "floor_geo" (
prepend references = [@./Floor_geo.usda@]
)
{
}
def "floor_collision" (
prepend references = [@./Floor_physics.usda@]
)
{
}
}
+16
View File
@@ -0,0 +1,16 @@
#usda 1.0
(
defaultPrim = "root"
metersPerUnit = 1.0
upAxis = "Z"
)
def Cube "root" ()
{
color3f[] primvars:displayColor = [(0.5, 0.5, 0.5)]
double size = 100
quatf xformOp:orient = (1, 0, 0, 0)
float3 xformOp:scale = (1, 1, 0.01)
double3 xformOp:translate = (0, 0, -0.5)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
}
+20
View File
@@ -0,0 +1,20 @@
#usda 1.0
(
defaultPrim = "root"
metersPerUnit = 1.0
upAxis = "Z"
)
def Cube "root" (
prepend apiSchemas = ["PhysicsCollisionAPI"]
)
{
double size = 100
bool physics:collisionEnabled = 1
double size = 1.0
quatf xformOp:orient = (1, 0, 0, 0)
float3 xformOp:scale = (1, 1, 0.01)
double3 xformOp:translate = (0, 0, -0.5)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
token visibility = "invisible"
}
+27
View File
@@ -0,0 +1,27 @@
#usda 1.0
(
defaultPrim = "root"
upAxis = "Z"
)
def Xform "root"(
assetInfo = {
asset identifier = @./FirstCube.usda@
string name = "FirstCube"
}
kind = "component"
prepend apiSchemas = ["PhysicsRigidBodyAPI"]
)
{
def "FirstCube_geometry" (
prepend references = [@./FirstCube_geo.usda@]
)
{
}
def "FirstCube_collision" (
prepend references = [@./FirstCube_physics.usda@]
)
{
}
}
+16
View File
@@ -0,0 +1,16 @@
#usda 1.0
(
defaultPrim = "root"
metersPerUnit = 1.0
upAxis = "Z"
)
def Cube "root" ()
{
color3f[] primvars:displayColor = [(1.0, 0, 0)]
double size = 1.0
quatf xformOp:orient = (1, 0, 0, 0)
float3 xformOp:scale = (1.0, 1.0, 1.0)
double3 xformOp:translate = (0, 0, 0)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
}
+23
View File
@@ -0,0 +1,23 @@
#usda 1.0
(
defaultPrim = "root"
metersPerUnit = 1.0
upAxis = "Z"
kilogramsPerUnit = 1.0
)
def Cube "root" (
prepend apiSchemas = ["PhysicsCollisionAPI", "PhysicsMassAPI"]
)
{
color3f[] primvars:displayColor = [(1.0, 1.0, 0)]
float physics:mass = 1
bool physics:collisionEnabled = 1
double size = 1.0
quatf xformOp:orient = (1, 0, 0, 0)
float3 xformOp:scale = (1.0, 1.0, 1.0)
double3 xformOp:translate = (0, 0, 0)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
token visibility = "invisible"
}
+26
View File
@@ -0,0 +1,26 @@
#usda 1.0
(
defaultPrim = "root"
upAxis = "Z"
)
def Xform "root"(
assetInfo = {
asset identifier = @./SecondCube.usda@
string name = "SecondCube"
}
kind = "component"
)
{
def "SecondCube_geometry" (
prepend references = [@./SecondCube_geo.usda@]
)
{
}
def "SecondCube_collision" (
prepend references = [@./SecondCube_physics.usda@]
)
{
}
}
+16
View File
@@ -0,0 +1,16 @@
#usda 1.0
(
defaultPrim = "root"
metersPerUnit = 1.0
upAxis = "Z"
)
def Cube "root" ()
{
color3f[] primvars:displayColor = [(0, 0, 1)]
double size = 1.0
quatf xformOp:orient = (1, 0, 0, 0)
float3 xformOp:scale = (1.0, 1.0, 1.0)
double3 xformOp:translate = (0.0, 0, 0)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
}
+23
View File
@@ -0,0 +1,23 @@
#usda 1.0
(
defaultPrim = "root"
metersPerUnit = 1.0
upAxis = "Z"
kilogramsPerUnit = 1.0
)
def Cube "root" (
prepend apiSchemas = ["PhysicsCollisionAPI", "PhysicsMassAPI"]
)
{
color3f[] primvars:displayColor = [(0, 1, 1)]
float physics:mass = 1
bool physics:collisionEnabled = 1
double size = 1.0
quatf xformOp:orient = (1, 0, 0, 0)
float3 xformOp:scale = (1.0, 1.0, 1.0)
double3 xformOp:translate = (0.0, 0, 0)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
token visibility = "invisible"
}
+40
View File
@@ -0,0 +1,40 @@
#usda 1.0
# Two Cubes linked together with a single hinge joint at the top of the two
# cubes.
# USD Quaternions are WXYZ
# X=Right, Y=Forward, Z=Up
(
defaultPrim = "root"
upAxis = "Z"
metersPerUnit = 1.0
kilogramsPerUnit = 1.0
subLayers = [
@./TwoCubes_physics.usda@,
]
)
def Xform "root"(
assetInfo = {
asset identifier = @./TwoCubes.usda@
string name = "TwoCubes"
}
kind = "component"
)
{
def "first_cube" (
prepend references = [@./FirstCube.usda@]
)
{
}
def "second_cube" (
prepend references = [@./SecondCube.usda@]
)
{
quatf xformOp:orient = (1, 0, 0, 0)
float3 xformOp:scale = (1.0, 1.0, 1.0)
double3 xformOp:translate = (1.0, 0, 0)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
}
}
+34
View File
@@ -0,0 +1,34 @@
#usda 1.0
(
defaultPrim = "root"
upAxis = "Z"
metersPerUnit = 1.0
)
over "root" {
def Scope "Joints"
{
def PhysicsJoint "two_cubes_joint" (
prepend apiSchemas = ["PhysicsLimitAPI", "PhysicsLimitAPI:transY", "PhysicsLimitAPI:transZ", "PhysicsLimitAPI:rotX", "PhysicsLimitAPI:rotY", "PhysicsDriveAPI:rotZ"]
)
{
rel physics:body0 = </root/first_cube>
rel physics:body1 = </root/second_cube>
float limit:rotX:physics:high = 0
float limit:rotX:physics:low = 0
float limit:rotY:physics:high = 0
float limit:rotY:physics:low = -2
float limit:rotZ:physics:high = 0
float limit:rotZ:physics:low = 0
float limit:transX:physics:high = 0
float limit:transX:physics:low = 0
float limit:transY:physics:high = 0
float limit:transY:physics:low = 0
float limit:transZ:physics:high = 0
float limit:transZ:physics:low = 0
point3f physics:localPos0 = (0, 1.0, 0)
point3f physics:localPos1 = (-0.5, 0, 0.5)
quatf physics:localRot0 = (1, 0, 0, 0)
quatf physics:localRot1 = (1, 0, 0, 0)
}
}
}
+28
View File
@@ -0,0 +1,28 @@
#usda 1.0
(
defaultPrim = "root"
metersPerUnit = 1.0
upAxis = "Z"
kilogramsPerUnit = 1.0
)
def Xform "root"(
kind = "assembly"
)
{
def "Floor" (
prepend references = [@../floor/Floor.usda@]
)
{
}
def "TwoCubes" (
prepend references = [@../two_cubes/TwoCubes.usda@]
)
{
double3 xformOp:translate = (0, 0, 30.0)
quatf xformOp:orient = (1, 0, 0, 0)
float3 xformOp:scale = (1.0, 1.0, 1.0)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
}
}