nphysics icon indicating copy to clipboard operation
nphysics copied to clipboard

MultiBody with FreeJoint causes a panic when it has no Collider with a set density

Open Kritzefitz opened this issue 5 years ago • 0 comments

While experimenting with MultiBodies I discovered that FreeJoints and FixedJoints apparently cause a panic when the MultiBodies attached to the joint don't have colliders with a set density. Specifically this program runs fine:

let mut world = World::new();

let shape = ShapeHandle::new(Cuboid::new(Vector3::repeat(0.5)));
let collider = ColliderDesc::new(shape)
    .density(1.0);

// Using FixedJoint instead seems to have the same problems.
let top_joint = FreeJoint::new(Isometry3::identity());
let mut body_desc = MultibodyDesc::new(top_joint)
    .collider(&collider)
    .parent_shift(Vector3::repeat(1.0));
let sub_joint = PrismaticJoint::new(Vector3::x_axis(), 0.0);
body_desc.add_child(sub_joint)
    .set_parent_shift(Vector3::repeat(1.0))
    .add_collider(&collider);

body_desc.build(&mut world);

Testbed::new(world).run()

But when I remove the call to density(1.0) or one any of the calls to add_collider(&collider) I get the following panic right after I run the executable:

thread 'main' panicked at 'assertion failed: self.inv_augmented_mass.solve_mut(&mut self.accelerations)', /home/sven/.cargo/registry/src/github.com-1ecc6299db9ec823/nphysics3d-0.11.1/src/object/multibody.rs:324:9
stack backtrace:
   0: std::sys::unix::backtrace::tracing::imp::unwind_backtrace
   1: std::sys_common::backtrace::print
   2: std::panicking::default_hook::{{closure}}
   3: std::panicking::default_hook
   4: std::panicking::rust_panic_with_hook
   5: std::panicking::begin_panic
             at /usr/src/rustc-1.34.2/src/libstd/panicking.rs:412
   6: <nphysics3d::object::multibody::Multibody<N>>::update_acceleration
             at ./<::std::macros::panic macros>:3
   7: <nphysics3d::object::multibody::Multibody<N> as nphysics3d::object::body::Body<N>>::update_acceleration
             at /home/sven/.cargo/registry/src/github.com-1ecc6299db9ec823/nphysics3d-0.11.1/src/object/multibody.rs:845
   8: <nphysics3d::world::world::World<N>>::step
             at /home/sven/.cargo/registry/src/github.com-1ecc6299db9ec823/nphysics3d-0.11.1/src/world/world.rs:248
   9: <nphysics_testbed3d::testbed::Testbed as kiss3d::window::state::State>::step
             at /home/sven/.cargo/registry/src/github.com-1ecc6299db9ec823/nphysics_testbed3d-0.5.0/src/testbed.rs:552
  10: kiss3d::window::window::Window::do_render_with_state
             at /home/sven/.cargo/registry/src/github.com-1ecc6299db9ec823/kiss3d-0.19.0/src/window/window.rs:597
  11: kiss3d::window::window::Window::render_loop::{{closure}}
             at /home/sven/.cargo/registry/src/github.com-1ecc6299db9ec823/kiss3d-0.19.0/src/window/window.rs:581
  12: <kiss3d::window::gl_canvas::GLCanvas as kiss3d::window::canvas::AbstractCanvas>::render_loop
             at /home/sven/.cargo/registry/src/github.com-1ecc6299db9ec823/kiss3d-0.19.0/src/window/gl_canvas.rs:67
  13: kiss3d::window::canvas::Canvas::render_loop
             at /home/sven/.cargo/registry/src/github.com-1ecc6299db9ec823/kiss3d-0.19.0/src/window/canvas.rs:31
  14: kiss3d::window::window::Window::render_loop
             at /home/sven/.cargo/registry/src/github.com-1ecc6299db9ec823/kiss3d-0.19.0/src/window/window.rs:581
  15: nphysics_testbed3d::testbed::Testbed::run
             at /home/sven/.cargo/registry/src/github.com-1ecc6299db9ec823/nphysics_testbed3d-0.5.0/src/testbed.rs:243
  16: reproduce::main
             at src/reproduce.rs:26
  17: std::rt::lang_start::{{closure}}
             at /usr/src/rustc-1.34.2/src/libstd/rt.rs:64
  18: std::panicking::try::do_call
  19: __rust_maybe_catch_panic
  20: std::rt::lang_start_internal
  21: std::rt::lang_start
             at /usr/src/rustc-1.34.2/src/libstd/rt.rs:64
  22: main
  23: __libc_start_main
  24: _start

Kritzefitz avatar Jun 29 '19 17:06 Kritzefitz