raisimTech / raisimLib

Visit www.raisim.com
http://www.raisim.com
Other
335 stars 90 forks source link

Seg fault of contact.getImpulse() #581

Closed Czworldy closed 2 months ago

Czworldy commented 2 months ago

Hi, @jhwangbo I meet a problem when i use function contact.getImpulse(). here is gdb info, i dont kown why the pointer impulse_ is setted to 0x0, that's will cause seg fault.

146             contactForceLF += contact.getImpulse().e() / dt;
(gdb) l
141           // if (&contact.getImpulse() == nullptr) {
142           //   std::cerr << ">>>>>>>>>>contact.getImpulse() == nullptr<<<<<<<<\n";
143           //   continue;
144           // } //
145           if (contact.getlocalBodyIndex() == robot.getBodyIdx("LF_SHANK")) {
146             contactForceLF += contact.getImpulse().e() / dt;
147           } if (contact.getlocalBodyIndex() == robot.getBodyIdx("LH_SHANK")) {
148             contactForceLH += contact.getImpulse().e() / dt;
149           } if (contact.getlocalBodyIndex() == robot.getBodyIdx("RF_SHANK")) {
150             contactForceRF += contact.getImpulse().e() / dt;
(gdb) p contact
$1 = (const raisim::Contact &) @0x555555f470f0: {
  frame_ = {<raisim::MatExpr<raisim::Mat<3, 3> >> = {<No data fields>}, {
      alignment_only = {<No data fields>}, v = {1, 0, 0, -0, 1, 
        2.2204460492503131e-16, 0, -2.2204460492503131e-16, 1}}}, 
  position_ = {<raisim::MatExpr<raisim::Mat<3, 1> >> = {<No data fields>}, {
      alignment_only = {<No data fields>}, v = {0.27849376922992164, 
        0.19935138958786158, -0.00041639438321613558}}}, 
  normal_ = {<raisim::MatExpr<raisim::Mat<3, 1> >> = {<No data fields>}, {
      alignment_only = {<No data fields>}, v = {0, 2.2204460492503131e-16, 
        1}}}, 
  Minv_ = {<raisim::MatExpr<raisim::Mat<3, 3> >> = {<No data fields>}, {
      alignment_only = {<No data fields>}, v = {3.948209013710037, 
        0.00025260222756042313, 1.7667659368442636, 0.00025260222756032951, 
        2.4010417226149863, -0.049120674016925096, 1.7667659368442632, 
        -0.049120674016925006, 2.6058906461885476}}}, impulse_ = 0x0, 
  impactVel_ = 0.00012499515744865945, depth_ = -0.00041639438321675742, 
  contactIndexInObject_ = 0, pairObjectIndex_ = 1, 
  pairContactIndexInPairObject_ = 0, contactProblemIndex_ = 0, 
  localBodyIndex_ = 3, isSelfCollision_ = false, skip_ = false, 
  objectA_ = true, pairObjectBodyType_ = raisim::BodyType::STATIC, 
  colA_ = 0x555555cc7370, colB_ = 0x555555d61800}
(gdb) p contact.impulse_
$2 = (raisim::Vec *) 0x0

And i do NOTHING but update the raisim from 1.1.7 to 1.1.8.

        libraisimd.so.1.1.8 => /usr/local/lib/libraisimd.so.1.1.8 (0x00007f0847d07000)
        libraisimPng.so => /usr/local/lib/libraisimPng.so (0x00007f0846b34000)
        libraisimODE.so.1.1.8 => /usr/local/lib/libraisimODE.so.1.1.8 (0x00007f0846a6f000)
        libraisimMine.so => /usr/local/lib/libraisimMine.so (0x00007f0846a58000)
        libraisimPngd.so => /usr/local/lib/libraisimPngd.so (0x00007f08467b1000)
        libraisimODEd.so.1.1.8 => /usr/local/lib/libraisimODEd.so.1.1.8 (0x00007f0846603000)
        libraisimMined.so => /usr/local/lib/libraisimMined.so (0x00007f08465c6000)
        libraisimZd.so => /usr/local/lib/libraisimZd.so (0x00007f08465a5000)
        libraisimZ.so => /usr/local/lib/libraisimZ.so (0x00007f0845ec6000)

I dont kown what happens inside the raisim, if you need more info. plz contact me. Thanks a lot!

Czworldy commented 2 months ago

Will world.integrate1() set the impulse_ to 0x0?

jhwangbo commented 2 months ago

yes. Impulse_ is recreated every time step. There is no "same contact" in raisim. New contacts are created in every time step