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.
