Thank you for the assistance! I will investigate those methods.

Andy

On Thursday, October 5, 2023 at 12:55:03 AM UTC-5 Radu Serban wrote:

> Hi Andy,
>
>  
>
> Many of the phases for collision detection and contact generation in 
> Chrono provide callback mechanisms that allow the user to intervene in (or 
> simply monitor) the process.
>
> For example, during collision detection, you can provide callback classes 
> of the following types:
>
>    - ChCollisionSystem::BroadphaseCallback 
>    
> <https://api.projectchrono.org/classchrono_1_1collision_1_1_ch_collision_system_1_1_broadphase_callback.html>,
>  
>    to be notified of “near enough” pairs of collision models found by the 
>    broadphase algorithm that are about to be included in the list of 
> potential 
>    collisions.
>    - ChCollisionSystem::NarrowphaseCallback 
>    
> <https://api.projectchrono.org/classchrono_1_1collision_1_1_ch_collision_system_1_1_narrowphase_callback.html>,
>  
>    to be notified of actual collisions happening and allow the user to 
> perform 
>    various actions (including overriding geometric information for a 
>    collision, but also using the collision detection as a monitoring system).
>    - ChCollisionSystem::VisualizationCallback 
>    
> <https://api.projectchrono.org/classchrono_1_1collision_1_1_ch_collision_system_1_1_visualization_callback.html>,
>  
>    to allow user-provided visualization of a contact.
>
>  
>
> Similarly, for contacts you can provide any of the following 
> user-specified callbacks:
>
>    - ChContactContainer::AddContactCallback 
>    
> <https://api.projectchrono.org/classchrono_1_1_ch_contact_container_1_1_add_contact_callback.html>,
>  
>    to be notified whenever a new contact is being added to the system (and, 
>    optionally, change the contact material properties).
>    - ChContactContainer::ReportContactCallback 
>    
> <https://api.projectchrono.org/classchrono_1_1_ch_contact_container_1_1_report_contact_callback.html>,
>  
>    to be notified of all contacts that were added to the system (as the name 
>    suggests, for reporting purposes as no other action is possible at that 
>    time).
>
>  
>
> For the problem you describe, you can use any of 
> ChCollisionSystem::NarrowphaseCallback, 
> ChContactContainer::AddContactCallback, or 
> ChContactContainer::ReportContactCallback as they will all allow you to 
> monitor that two particular shapes will be involved in a contact.  The most 
> natural one to use in your case is probably 
> ChContactContainer::ReportContactCallback.  Look at the documentation, the 
> implementation, or demos to figure out how exactly you can extract the 
> information of the bodies containing the collision shapes from the 
> arguments provided in the corresponding virtual functions that you would 
> have to override in each case.  For an example of using 
> ReportContactCallback, see demo_MBS_callbackNSC 
> <https://github.com/projectchrono/chrono/blob/main/src/demos/mbs/demo_MBS_callbackNSC.cpp>
>  
> or demo_MBS_callbackSMC 
> <https://github.com/projectchrono/chrono/blob/main/src/demos/mbs/demo_MBS_callbackSMC.cpp>
>  
> among others. These two demos also showcase the use of AddContactCallback.
>
>  
>
> If you want to be notified of a collision but not generate a contact for 
> it (so piggybacking on the collision detection system to use it as a 
> monitoring system for shape intersections), you can rely on the 
> ChCollisionSystem::NarrowphaseCallback.  For an example of such use, see 
> test_CTC_sentinel 
> <https://github.com/rserban/chrono/blob/main/src/projects/contact/sequential/test_CTC_sentinel.cpp>
>  
> (this is in my own fork of the Chrono repository).  There, a collision is 
> intercepted when it is discovered, but the custom callback function then 
> flags not to generate a contact for it.  For a vehicle simulation, you 
> could use this to monitor when the vehicle enters a particular region (of 
> course, there are simpler ways of doing this outside the collision 
> detection system, but if you have a complicated shape for the region this 
> is an option).
>
>  
>
> --Radu
>
>  
>
> *From:* [email protected] <[email protected]> *On 
> Behalf Of *Andy Hansen
> *Sent:* Wednesday, October 4, 2023 11:13 PM
> *To:* ProjectChrono <[email protected]>
> *Subject:* [chrono] Collision Detection Method for Multiple Bodies
>
>  
>
> Hello,
>
>  
>
> I am trying to model an environment with a vehicle and many obstacles, 
> which all have collisions enabled. I am trying to write a system to 
> identify which bodies are colliding with one another at any given time, 
> i.e. "Right now, the front left wheel is in contact with obstacle #47". 
>
>  
>
> I imagine it would be possible to estimate this using the bounding boxes 
> for the bodies, but those are not always very precise for rounded shapes 
> like wheels.
>
>  
>
> Is there any way to determine whether two bodies are currently colliding?
>
>  
>
> Thank you,
>
>  
>
> Andy 
>
> -- 
> You received this message because you are subscribed to the Google Groups 
> "ProjectChrono" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected].
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/projectchrono/e7fe27a8-f0ba-4428-ae11-e49a99158cefn%40googlegroups.com
>  
> <https://groups.google.com/d/msgid/projectchrono/e7fe27a8-f0ba-4428-ae11-e49a99158cefn%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>

-- 
You received this message because you are subscribed to the Google Groups 
"ProjectChrono" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/projectchrono/edf760ed-e96e-4f9c-a9b9-fa117f5d896dn%40googlegroups.com.

Reply via email to