raisimTech / raisimLib

Visit www.raisim.com
http://www.raisim.com
Other
341 stars 91 forks source link

SIGSEGV when robot collides with an object #486

Closed Kukhokuhle closed 1 year ago

Kukhokuhle commented 1 year ago

Hi all.

I am simulating a quadruped/robot in raisim. Everything has been running well, however, recently I am having an issue with collisions. I have imported a height map. When the robot collides with the stairs represented by the height map, I get a segmentation fault (I get the error: Thread 3 "testExe" received signal SIGSEGV, Segmentation fault.)

The gdb backtrace is as follows:

0 0x000055555558c260 in raisim::RaisimServer::update() ()

1 0x000055555558df58 in raisim::RaisimServer::processRequests() ()

2 0x000055555558e98e in raisim::RaisimServer::loop() ()

3 0x00007ffff4308a93 in std::execute_native_thread_routine (__p=)

at ../../../../../libstdc++-v3/src/c++11/thread.cc:82

4 0x00007ffff7e29609 in start_thread (arg=) at pthread_create.c:477

5 0x00007ffff3e42133 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

May you please help me figure out what the issue is here? Thank you.

jhwangbo commented 1 year ago

I guess the code was not compiled in debug mode. Can you do that and copy-paste the gdb backtrace?

Kukhokuhle commented 1 year ago

Hi Jemin,

In debug mode, the simulation does not even begin to run. Instead, it stops with a SIGSEGV fault again and gdb prints:

Thread 1 "testExe" received signal SIGSEGV, Segmentation fault. 0x00005555555d6b77 in _mm_load_pd (__P=0x8) at /usr/lib/gcc/x86_64-linux-gnu/9/include/emmintrin.h:124 124 return (__m128d )__P;

Then backtrace produces a really long response, as follows:

0 0x00005555555d6b77 in _mm_load_pd (__P=0x8) at /usr/lib/gcc/x86_64-linux-gnu/9/include/emmintrin.h:124

1 Eigen::internal::pload<double __vector(2)>(Eigen::internal::unpacket_traits<double __vector(2)>::type const*) (from=0x8)

at /home/kukhokuhle/anaconda3/envs/cbf_oa/include/eigen3/Eigen/src/Core/arch/SSE/PacketMath.h:716

2 0x0000555555621c44 in Eigen::internal::ploadt<double __vector(2), 16>(Eigen::internal::unpacket_traits<double __vector(2)>::type const*) (from=0x8)

at /home/kukhokuhle/anaconda3/envs/cbf_oa/include/eigen3/Eigen/src/Core/GenericPacketMath.h:967

3 Eigen::internal::evaluator<Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > >::packet<16, double __vector(2)>(long) const (this=0x7ffffffaf148, index=0)

at /home/kukhokuhle/anaconda3/envs/cbf_oa/include/eigen3/Eigen/src/Core/CoreEvaluators.h:245

4 0x00007ffff3fef98b in double vector(2) Eigen::internal::evaluator_wrapper_base<Eigen::ArrayWrapper<Eigen::Matrix<double, -1, -1, 0, -1, -1> const> >::packet<16, double vector(2)>(long) const ()

from //home/kukhokuhle/raisim_workspace/cbf_obstacle_avoidance/dependencies/networks_minimal/lib/libnetworks_minimal.so

5 0x00007ffff3ff10a4 in double __vector(2) Eigen::internal::binary_evaluator<Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::ArrayWrapper<Eigen::Matrix<double, -1, -1, 0, -1, -1> const> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op, Eigen::Array<double, -1, -1, 0, -1, -1> const> const>, Eigen::internal::IndexBased, Eigen::internal::IndexBased, double, double>::packet<16, double __vector(2)>(long) const () from //home/kukhokuhle/raisim_workspace/cbf_obstacle_avoidance/dependencies/networks_minimal/lib/libnetworks_minimal.so

6 0x00007ffff3ff07b7 in double __vector(2) Eigen::internal::unary_evaluator<Eigen::CwiseUnaryOp<Eigen::internal::scalar_exp_op, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::ArrayWrapper<Eigen::Matrix<double, -1, -1, 0, -1, -1> const> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op, Eigen::Array<double, -1, -1, 0, -1, -1> const> const> const>, Eigen::internal::IndexBased, double>::packet<16, double __vector(2)>(long) const ()

from //home/kukhokuhle/raisim_workspace/cbf_obstacle_avoidance/dependencies/networks_minimal/lib/libnetworks_minimal.so

7 0x00007ffff3fefc7a in double __vector(2) Eigen::internal::binary_evaluator<Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double, double>, Eigen::CwiseUnaryOp<Eigen::internal::scalar_exp_op, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::ArrayWrapper<Eigen::Matrix<double, -1, -1, 0, -1, -1> const> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op, Eigen::Array<double, -1, -1, 0, -1, -1> const> const> const> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op, Eigen::Array<double, -1, -1, 0, -1, -1> const> const>, Eigen::internal::IndexBased, Eigen::internal::IndexBased, double, double>::packet<16, double __vector(2)>(long) const ()

from //home/kukhokuhle/raisim_workspace/cbf_obstacle_avoidance/dependencies/networks_minimal/lib/libnetworks_minimal.so

8 0x00007ffff3fef09b in double __vector(2) Eigen::internal::binary_evaluator<Eigen::CwiseBinaryOp<Eigen::internal::scalar_quotient_op<double, double>, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op, Eigen::Array<double, -1, -1, 0, -1, -1> const> const, Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double, double>, Eigen::CwiseUnaryOp<Eigen::internal::scalar_exp_op, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::ArrayWrapper<Eigen::Matrix<double, -1, -1, 0, -1, -1> const> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op, Eigen::Array<double, -1, -1, 0, -1, -1> const> const> const> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op, Eigen::Array<double, -1, -1, 0, -1, -1> const> const> const>, Eigen::internal::IndexBased, Eigen::internal::IndexBased, double, double>::packet<16, double __vector(2)>(long) const ()

from //home/kukhokuhle/raisim_workspace/cbf_obstacle_avoidance/dependencies/networks_minimal/lib/libnetworks_minimal.so

9 0x00007ffff3fee31e in void Eigen::internal::generic_dense_assignment_kernel<Eigen::internal::evaluator<Eigen::Matrix<double, -1, -1, 0, -1, -1> >, Eigen::internal::evaluator<Eigen::CwiseBinaryOp<Eigen::internal::scalar_quotient_op<double, double>, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op, Eigen::Array<double, -1, -1, 0, -1, -1> const> const, Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double, double>, Eigen::CwiseUnaryOp<Eigen::internal::scalar_exp_op, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::ArrayWrapper<Eigen::Matrix<double, -1, -1, 0, -1, -1> const> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op, Eigen::Array<double, -1, -1, 0, -1, -1> const> const> const> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op, Eigen::Array<double, -1, -1, 0, -1, -1> const> const> const> >, Eigen::internal::assign_op<double, double>, 0>::assignPacket<16, 16, double __vector(2)>(long) ()

from //home/kukhokuhle/raisim_workspace/cbf_obstacle_avoidance/dependencies/networks_minimal/lib/libnetworks_minimal.so

10 0x00007ffff3fed2b1 in Eigen::internal::dense_assignment_loop<Eigen::internal::generic_dense_assignment_kernel<Eigen::internal::evaluator<Eigen::Matrix<double, -1, -1, 0, -1, -1> >, Eigen::internal::evaluator<Eigen::CwiseBinaryOp<Eigen::internal::scalar_quotient_op<double, double>, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op, Eigen::Array<double, -1, -1, 0, -1, -1> const> const, Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double, double>, Eigen::CwiseUnaryOp<Eigen::internal::scalar_exp_op, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::ArrayWrapper<Eigen::Matrix<double, -1, -1, 0, -1, -1> const> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op, Eigen::Array<double, -1, -1, 0, -1, -1> const> const> const> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op, Eigen::Array<double, -1, -1, 0, -1, -1> const> const> const> >, Eigen::internal::assign_op<double, double>, 0>, 3, 0>::run(Eigen::internal::generic_dense_assignment_kernel<Eigen::internal::evaluator<Eigen::Matrix<double, -1, -1, 0, -1, -1> >, Eigen::internal::evaluator<Eigen::CwiseBinaryOp<Eigen::internal::scalar_quotient_op<double, double>, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op, Eigen::Array<double, -1, -1, 0, -1, -1> const> const, Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double, double>, Eigen::CwiseUnaryOp<Eigen::internal::scalar_exp_op, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::ArrayWrapper<Eigen::Matrix<double, -1, -1, 0, -1, -1> const> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op, Eigen::Array<double, -1, -1, 0, -1, -1> const> const> const> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op, Eigen::Array<double, -1, -1, 0, -1, -1> const> const> const> >, Eigen::internal::assign_op<double, double>, 0>&) ()

from //home/kukhokuhle/raisim_workspace/cbf_obstacle_avoidance/dependencies/networks_minimal/lib/libnetworks_minimal.so

11 0x00007ffff3febca3 in void Eigen::internal::call_dense_assignment_loop<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::CwiseBinaryOp<Eigen::internal::scalar_quotient_op<double, double>, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op, Eigen::Array<double, -1, -1, 0, -1, -1> const> const, Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double, double>, Eigen::CwiseUnaryOp<Eigen::internal::scalar_exp_op, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::ArrayWrapper<Eigen::Matrix<double, -1, -1, 0, -1, -1> const> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op, Eigen::Array<double, -1, -1, 0, -1, -1> const> const> const> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op, Eigen::Array<double, -1, -1, 0, -1, -1> const> const> const>, Eigen::internal::assign_op<double, double> >(Eigen::Matrix<double, -1, -1, 0, -1, -1>&, Eigen::CwiseBinaryOp<Eigen::internal::scalar_quotient_op<double, double>, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op, Eigen::Array<double, -1, -1, 0, -1, -1> const> const, Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double, double>, Eigen::CwiseUnaryOp<Eigen::internal::scalar_exp_op, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::ArrayWrapper<Eigen::Matrix<double, -1, -1, 0, -1, -1> const> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op, Eigen::Array<double, -1, -1, 0, -1, -1> const> const> const> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op, Eigen::Array<double, -1, -1, 0, -1, -1> const> const> const> const&, Eigen::internal::assign_op<double, double> const&) ()

from //home/kukhokuhle/raisim_workspace/cbf_obstacle_avoidance/dependencies/networks_minimal/lib/libnetworks_minimal.so

jhwangbo commented 1 year ago

That backtrace is very useful.

What is libnetwork_minimal? Is this your package?

This bug is probably not in Raisim because you dont see any raisim method in the bt.

Kukhokuhle commented 1 year ago

Yes, libnetwork_minimal is our package. It is part of the controller we're executing for the robot.

Do you have any idea what could be wrong with this package, based on the backtrace?

jhwangbo commented 1 year ago

It is probably due to the alignment problem. I cannot be 100 percent sure on this without reviewing your code but this link might help you

https://github.com/isl-org/Open3D/issues/653

Read the eigen issue links. Also try to compile your code with cpp17 or higher. If that doesnt help, compile your library with simd instruction sets disabled

jhwangbo commented 1 year ago

I'll close this issue because it's not related to Raisim