Hey there! Currently, I’m utilizing Isaac Sim for simulating an excavator. Let me share a challenge I’ve encountered with the excavator. All the tracks’ chains are interconnected using revolute joints, and the collision mesh is set up as an SDF mesh. Everything operates smoothly when utilizing these joints. However, things took a turn when I introduced articulation to the undercarriage_frame_390f. An error popped up, stating, “Invalid PhysX transform detected for /world/catepillar_390f_lme/sub_all/substructure/left_track/front_idler_390f_2.”
I attempted to resolve this issue by enabling the “Exclude from Articulation” flag for all the revolute joints between the chains, but unfortunately, it didn’t resolve the problem. Additionally, I noticed that when I removed all the chains, the simulation ran smoothly. This led me to believe that there might be some issues with the chains themselves. But I do not know how to fix this problem. In addition, I am not sure whether I am simulating the chains of track in the right way. Do I need to add other joints (like rack and pinion joint) between the chains and drive sprocket? Thanks a lot.
Hi,
looks like we struggle to simulate the asset out of the box, there can be issues with objects colliding witch each other or not enough simulation iterations.
Please would it be possible to share the asset so that we can take a look at the simulation and suggest a solution.
Sorry about the trouble,
Regards,
Ales
Hi,
I had a look at the caterpillar model. It looks like the articulation does not converge well with many joints connected to it. Increasing the number of position iterations (can be configured in the articulation root api) or using a higher simulation frequency (configurable in the physics scene object) improve the situation but the framerate goes significantly down. Therefore I would recommend to remove the roller revolute joints from the articulation using the exclude from articulation flag. Or even exclude all revolute joints from the caterpillar from the articulation. The articulation will still be beneficial because all revolute joint of the upper part (which is not in the model but I assume it will get added) and the fixed joints connecting the caterpillars to the center frame will benefit from the articulation. One of the main applications for articulations are robot arms where few revolute joints are connected in a sequential fashion. The excavators arm matches this configuration quite well while the rollers for the caterpillars do not.
Also note that having the exclude from articulation flag on the joints connecting the segments that touch the ground is not really required (but it won’t harm either). Only joints with a connection chain consisting of other rigid bodies and joints that can reach the articulation root belong to the articulation.
I will inform the person maintaining articulations such that they can have a look to see if we can improve the convergence.
Regards
Tobi
I followed your advice and removed all the revolute joints from ‘sub_all’, and it works. Thank you so much. However, I have three questions:
When I combine it with the upper part of the excavator, I encounter another issue: ‘Invalid PhysX transformation detected for/world/cat_390/tiping_link_r’. I’m not sure how to resolve this. Could you please help me take a look?
Is it possible to control robots using Python code without relying on articulations? I haven’t come across any demonstration code yet. It seems like I might need to convert joints into articulations before I can use the code to control them.
I positioned the articulation root on ‘cat_390/sub_all/substrage_Frame_On_390f’. Is this placement correct?
The entire excavator model ( caterpillar-390_v4.usd) can be found at
git@git.doit.wisc.edu:LIQUN.XU/cat390_usd.git
Hi,
unfortunately we cannot access the git link you shared. Could you maybe share the model using a different method?
About the other questions:
Invalid PhysX transform can mean that the transform contains shear for some reason. PhysX only supports translation, rotation and non uniform scale bot no shear. You could try to print your transforms using python but debugging this kind of issue can be a bit tricky.
Yes, you can control robots through python. Usually you apply an angular or linear drive api to a revolute or whatever kind of joint. On the drive api, you set a high damping (in the range of 1e5 if using cm units) if you want to set a fixed velocity. A non-zero stiffness is required on the drive if you want to control the target position.
I think the excavator’s base frame is the right place for the articulation root. Often it does not matter that much where the articulation root is placed. But as mentioned we have some problems with articulations that we are currently trying to fix.
I was trying to import a URDF that I found online and was breaking my head on why it was giving the invalid PhysX transform warning. Turns out some of the links had 0.0 mass and triggered the warning. Hope this helps someone.