You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

91 lines
2.8 KiB

from fixture_utils import *
X_COLL_POSITION = 9.8
X_PASS_POSITION = 10.2
LARGE_VEL = -80
SMALL_VEL = -70
DEFAULT_GRAVITY = -9.8
DEFAULT_TIMESTEP = 0.05
DEFAULT_BARRIER_EPS = 0.1
def generate_scene(yvel, xpos) -> dict:
return {
"max_iterations": 4,
"timestep": DEFAULT_TIMESTEP,
"scene_type": "distance_barrier_rb_problem",
"distance_barrier_constraint": {
"initial_barrier_activation_distance": DEFAULT_BARRIER_EPS,
"detection_method": "hash_grid",
"use_distance_hashgrid": True,
"custom_hashgrid_cellsize": -1
},
"barrier_solver": {
"e_b": 1E-8,
"m": 1,
"t_init": 1,
"t_inc": 20,
"c": 0.01,
"inner_solver": "newton_solver"
},
"newton_solver": {
"max_iterations": 1000
},
"rigid_body_problem": {
"coefficient_restitution":
1.0,
"gravity": [0.0, DEFAULT_GRAVITY, 0.0],
"rigid_bodies": [{
"oriented": True,
"vertices": [[-1, -1], [1, -1], [1, 1], [-1, 1]],
"edges": [[0, 1], [1, 2], [2, 3], [3, 0]],
"position": [xpos, 10],
"theta": 0,
"velocity": [0.0, yvel, 0.0],
"is_dof_fixed": [False, False, False]
}, {
"oriented":
True,
"vertices": [[-10, 0], [10, 0], [10, 0.1], [-10, 0.1]],
"edges": [[0, 1], [1, 2], [2, 3], [3, 0]],
"position": [0, 0],
"velocity": [0.0, 0.0, 0.0],
"is_dof_fixed": [True, True, True]
}]
}
}
def main():
parser = argparse.ArgumentParser()
parser.add_argument("--scene",
type=int,
required=True,
help="0:pass 1:left 2:slower")
parser.add_argument("--out-path",
metavar="path/to/output.json",
type=pathlib.Path,
default=None,
help="path to save the fixture")
args = parser.parse_args()
if args.out_path is None:
directory = (pathlib.Path(__file__).resolve().parents[1] / "fixtures" /
"bypass")
args.out_path = (directory /
"bypass_case={:d}.json".format(args.scene))
args.out_path.parent.mkdir(parents=True, exist_ok=True)
print_args(args)
if args.scene == 0:
fixture = generate_scene(LARGE_VEL, X_PASS_POSITION)
elif args.scene == 1:
fixture = generate_scene(LARGE_VEL, X_COLL_POSITION)
else:
fixture = generate_scene(SMALL_VEL, X_PASS_POSITION)
save_fixture(fixture, args.out_path)
if __name__ == "__main__":
main()