Robot sometimes(!) driving through obstacles

Hi,

I am spawning a number of obstacles using FixedCuboid and FixedCylinder. Then wrapping them in a view as

RigidPrimView(prim_paths_expr=prim_paths_expr, 
                             name=name, 
                             reset_xform_properties=False,
                             **view_kwargs)

and adding this view to the scene.

While the collisions work correctly around 80% of the time, from time to time the robot is just able to drive through the obstacle as shown in the images below. The part of the obstacle outside the robot-base is still being detected in the lidar. But the base just drives through it and get_physx_simulation_interface().get_contact_report() does not detect any collisions either.

This seemed to work fine in version 2022.1.1, but since changing to 2022.2.1 I see this happening quite often.

I have already tried to increase the buffer sizes etc, following the values from OmniIsaacGym. I use the following values for defaults, the robot and the obstacles:

physx:
    worker_thread_count: 4
    solver_type: 1
    use_gpu: True # set to False to run on CPU
    solver_position_iteration_count: 12
    solver_velocity_iteration_count: 1
    contact_offset: 0.005
    rest_offset: 0.0
    bounce_threshold_velocity: 0.2
    friction_offset_threshold: 0.04
    friction_correlation_distance: 0.025
    enable_sleeping: True
    enable_stabilization: True
    max_depenetration_velocity: 1000.0

    # GPU buffers
    gpu_max_rigid_contact_count: 1048576
    gpu_max_rigid_patch_count: 33554432
    gpu_found_lost_pairs_capacity: 20971520
    gpu_found_lost_aggregate_pairs_capacity: 20971520
    gpu_total_aggregate_pairs_capacity: 20971520
    gpu_max_soft_body_contacts: 1048576
    gpu_max_particle_contacts: 1048576
    gpu_heap_capacity: 33554432
    gpu_temp_buffer_capacity: 16777216
    gpu_max_num_partitions: 8

  robot_params:
    # -1 to use default values
    override_usd_defaults: False
    enable_self_collisions: False
    enable_gyroscopic_forces: True
    # also in stage params
    # per-actor
    solver_position_iteration_count: 12
    solver_velocity_iteration_count: 1
    sleep_threshold: 0.005
    stabilization_threshold: 0.001
    # per-body
    density: -1
    max_depenetration_velocity: 1000.0
    # per-shape
    contact_offset: 0.005
    rest_offset: 0.0
  obstacle:
    # -1 to use default values
    override_usd_defaults: False
    enable_self_collisions: False
    enable_gyroscopic_forces: True
    # also in stage params
    # per-actor
    solver_position_iteration_count: 12
    solver_velocity_iteration_count: 1
    sleep_threshold: 0.005
    stabilization_threshold: 0.001
    # per-body
    # density: 1000000
    # mass: 100000
    max_depenetration_velocity: 1000.0
    # per-shape
    contact_offset: 0.005
    rest_offset: 0.0

This happens even on large machines with more than enough compute:

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 515.105.01   Driver Version: 515.105.01   CUDA Version: 11.7     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  NVIDIA RTX A6000    Off  | 00000000:41:00.0 Off |                  Off |
| 30%   40C    P8    33W / 300W |   5494MiB / 49140MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0   N/A  N/A      2129      G   /usr/lib/xorg/Xorg                 39MiB |
|    0   N/A  N/A    175414      G   ...RendererForSitePerProcess       20MiB |
|    0   N/A  N/A    386148    C+G   ...nda/envs/orbit/bin/python     5071MiB |
|    0   N/A  N/A   1217447      G   /usr/lib/firefox/firefox          146MiB |
|    0   N/A  N/A   1256077      G   ...b/thunderbird/thunderbird       15MiB |
|    0   N/A  N/A   3999984      G   /usr/lib/xorg/Xorg                153MiB |
|    0   N/A  N/A   4000503      G   /usr/bin/gnome-shell               16MiB |
+-----------------------------------------------------------------------------+

I suspect this issue to have a large impact on the training process (reinforcement learning). Do you have any idea how to ensure that all collisions work correctly?


Hi Daniel,

I suspect it’s fine, but could you try visualizing the collision mesh for your mobile base?

You can do this by selecting the view (“eye”) button near the top of the viewport and then selecting "Show by Type" --> "Physics" --> "Colliders" --> "Selected" (or "All").

I believe the collision mesh should be fine, you can find it below

As mentioned, in 80% of the cases, the base correctly collides with the obstacles. Only in the remaining cases it simply drives through them (I could not recognize any pattern in when this happens)