Cloth collision with an object
For rigid body and cloth/soft body simulations there are a number of things you need to be careful of.


For the Rigid Body simulation you need to ensure you select the correct 'Shape' for the Rigid Body Collisions. The default option is 'Convex Hull' which if fine for objects which are rolling over a flat surface but since it doesn't allow for any concave surfaces (such as the indentation at the seat of the chair) it is not good for smaller objects colliding with the body. Therefore, in this situation ensure you set the Shape to 'Mesh' to allow the actual mesh shape to be used for collision. This is less efficient (since the engine needs to calculate collision for all surfaces, not just an outer 'shell') but produces more accurate results. Note that you should set this for each rigid body.





Ensure to set sufficient 'steps' in the cloth simulation. More steps will result in more time to calculate the simulation but will produce much more convincing results - especially where objects are hitting the cloth at high speed. Using a larger number of steps should avoid problems such as the fast moving object passing through the cloth or the cloth getting forced through the other geometry.





Ensure to carefully set the Collision Settings - it's very tempting to just add the 'Collision' and forget about what the actual settings mean and leave them set to the defaults or inappropriate settings. For interacting with cloth the key settings are obviously the Soft Body and Cloth settings and these consist of Outer and Inner thresholds. The Outer dictates how close to a surface the cloth can get before it is pushed away while the Inner controls how elements of the cloth that have been pushed into the surface are repelled back out of the surface. Note that you should generally avoid setting the Inner to more than 50% of the minimum depth of the mesh - ie, if the thinnest part of the mesh is 1 Blender Unit in width then do not set this to more than 0.5 - otherwise problems can occur where cloth that penetrates below the surface is effectively pushed through to the other side rather than being repelled. The 'Outer' should be kept fairly small to prevent gaps between the surface the the colliding cloth.




Note that your first issue was caused by the Rigid Body 'Shape' - set this to 'Mesh' to allow the rigid bodies to react to the actual shape of the mesh (rather than a simplified convex hull).

From the second animated example, it appears that the helmet's collision 'outer' is such that it is repelling the cloth before it even gets close enough to touch it. The 'inner' collision of the chair is then presumably repelling the cloth through the surface. You should reduce the 'Outer' of both the helmet and the chair to close to '0' and adjust the 'inner' of each mesh's collision settings to a value that is not more than 50% of the thinnest part of the associated mesh. This should then produce a more stable simulation, similar to this :



Blend file included