Search Results for

    Show / Hide Table of Contents

    Detecting Collision

    This example provides information on using CollisionDetection between objects. Two boxes are created to be our collision objects. Then we create a collision set, defining what objects to check for collision, the collision color, near miss distance, and so on. Run the Add-In and freehand move the boxes. Notice how they change color and the message in the logger when they are colliding.

    Use this procedure to detect collision between objects:

    1. Create two parts and bodies to use in collision detection.

    2. Check to see if there is a collision between the two parts.

    3. Add the parts to a collision set.

    4. Check for collisions.

    Solution

    1. Create two parts and bodies to use in collision detection.

      // Create two parts and bodies to use in collision detection.
      Part p1 = new Part();
      p1.Name = "My Part1";
      Part p2 = new Part();
      p2.Name = "My Part2";
      station.GraphicComponents.Add(p1);
      station.GraphicComponents.Add(p2);
      
    2. Check to see if there is a collision between the two parts.

      
      CollisionType colType = CollisionDetector.CheckCollision(p1, p2, 0.01);
      switch (colType)
      {
          case CollisionType.Collision:
              Logger.AddMessage(new LogMessage("Part: " + p1.Name
                  + " and part: " + p2.Name + " is colliding!"));
              break;
          case CollisionType.NearMiss:
              Logger.AddMessage(new LogMessage("There is a near miss between part: "
                  + p1.Name
                  + " and part: " + p2.Name + "."));
              Vector3 p1Point;
              Vector3 p2Point;
              Logger.AddMessage(new LogMessage("The distance between them are: "
                  + CollisionDetector.MinimumDistance(p1, p2, out p1Point, out p2Point)));
              Logger.AddMessage(new LogMessage("The closest points are: "));
              Logger.AddMessage(new LogMessage("For part: " + p1.Name + " x: " + p1Point.x
                  + " y: " + p1Point.y + " z: " + p1Point.z));
              Logger.AddMessage(new LogMessage("For part: " + p2.Name + " x: " + p2Point.x
                  + " y: " + p2Point.y + " z: " + p2Point.z));
              break;
          case CollisionType.None:
              Logger.AddMessage(new LogMessage("There is no collision!"));
              break;
      }
      
    3. Add the parts to a collision set.

      
      // Add the two boxes to a collision set.
      CollisionSet cs = new CollisionSet();
      cs.Name = "My CollisionSet";
      
      // Set the near miss distance to 0.01 meters.
      cs.NearMissDistance = 0.01;
      
      // Set the near miss color to black.
      cs.NearMissColor = System.Drawing.Color.Black;
      
      // Activate this collision set for collision checks.
      cs.Active = true;
      
      // Set the collision color to semi-transparent yellow.
      cs.CollisionColor = Color.FromArgb(128, System.Drawing.Color.Yellow);
      
      // Turn on highlighting of colliding objects.
      cs.Highlight = true;
      
      // Add the collision set to the station.
      station.CollisionSets.Add(cs);
      
      // Add the two parts to the two different collision object collections of the collision set.
      cs.FirstGroup.Add(p1);
      cs.SecondGroup.Add(p2);
      
      
    4. Check for collisions.

      // Force check the station for collisions.
      CollisionDetector.CheckCollisions(station);
      
      // Force check the collision set for collisiosn.
      CollisionDetector.CheckCollisions(cs);
      

    Example

    This example provides information to detect collision between objects.

    public void CollisionDetection()
    {
        Project.UndoContext.BeginUndoStep("CollisionDetection");
        try
        {
            Station station = Station.ActiveStation;
    
            // Create two parts and bodies to use in collision detection.
            Part p1 = new Part();
            p1.Name = "My Part1";
            Part p2 = new Part();
            p2.Name = "My Part2";
            station.GraphicComponents.Add(p1);
            station.GraphicComponents.Add(p2);
    
            // Create two boxes.
            Body box1 = Body.CreateSolidBox(new Matrix4(Vector3.XVector, 0.0),
                new Vector3(0.1, 0.1, 0.1));
            box1.Name = "My Box1";
            Body box2 = Body.CreateSolidBox(new Matrix4(Vector3.XVector, 0.0),
                new Vector3(0.1, 0.1, 0.1));
            box2.Name = "My Box2";
    
            // Move box2 0.105 meters along the X-axis .
            box2.Transform.X = box2.Transform.X + 0.105;
    
            // Add the boxes to the bodies.
            p1.Bodies.Add(box1);
            p2.Bodies.Add(box2);
    
            // Manually check to see if there is a collision between the two parts.
            // Also tests for a near miss, defined as being within 0.01 meter from each other.
    
    
            CollisionType colType = CollisionDetector.CheckCollision(p1, p2, 0.01);
            switch (colType)
            {
                case CollisionType.Collision:
                    Logger.AddMessage(new LogMessage("Part: " + p1.Name
                        + " and part: " + p2.Name + " is colliding!"));
                    break;
                case CollisionType.NearMiss:
                    Logger.AddMessage(new LogMessage("There is a near miss between part: "
                        + p1.Name
                        + " and part: " + p2.Name + "."));
                    Vector3 p1Point;
                    Vector3 p2Point;
                    Logger.AddMessage(new LogMessage("The distance between them are: "
                        + CollisionDetector.MinimumDistance(p1, p2, out p1Point, out p2Point)));
                    Logger.AddMessage(new LogMessage("The closest points are: "));
                    Logger.AddMessage(new LogMessage("For part: " + p1.Name + " x: " + p1Point.x
                        + " y: " + p1Point.y + " z: " + p1Point.z));
                    Logger.AddMessage(new LogMessage("For part: " + p2.Name + " x: " + p2Point.x
                        + " y: " + p2Point.y + " z: " + p2Point.z));
                    break;
                case CollisionType.None:
                    Logger.AddMessage(new LogMessage("There is no collision!"));
                    break;
            }
    
            // Reset the collision sets and highlights.
            CollisionDetector.ResetCollisions();
    
            // Add an event handler to the collision event.
            CollisionDetector.Collision += new CollisionEventHandler(myCollisionEventHandler);
    
            // Activate auto check for collisions each time the graphics is updated.
            CollisionDetector.AutoCheck = true;
    
            // Test for collisions on polygon level, not just for the bounding boxes.
            CollisionDetector.FastCheck = false;
    
    
            // Add the two boxes to a collision set.
            CollisionSet cs = new CollisionSet();
            cs.Name = "My CollisionSet";
    
            // Set the near miss distance to 0.01 meters.
            cs.NearMissDistance = 0.01;
    
            // Set the near miss color to black.
            cs.NearMissColor = System.Drawing.Color.Black;
    
            // Activate this collision set for collision checks.
            cs.Active = true;
    
            // Set the collision color to semi-transparent yellow.
            cs.CollisionColor = Color.FromArgb(128, System.Drawing.Color.Yellow);
    
            // Turn on highlighting of colliding objects.
            cs.Highlight = true;
    
            // Add the collision set to the station.
            station.CollisionSets.Add(cs);
    
            // Add the two parts to the two different collision object collections of the collision set.
            cs.FirstGroup.Add(p1);
            cs.SecondGroup.Add(p2);
    
    
            // Force check the station for collisions.
            CollisionDetector.CheckCollisions(station);
    
            // Force check the collision set for collisiosn.
            CollisionDetector.CheckCollisions(cs);
    
            // Freehand move the boxes in the graphics.
            // Notice the messages generated by the event handler code,
            // and the change in color of the boxes.
        }
        catch
        {
            Project.UndoContext.CancelUndoStep(CancelUndoStepType.Rollback);
            throw;
        }
        finally
        {
            Project.UndoContext.EndUndoStep();
        }
    }
    
    private void myCollisionEventHandler(object sender, CollisionEventArgs e)
    {
        switch (e.CollisionEvent)
        {
            case CollisionEvent.CollisionStarted:
                Logger.AddMessage
                (new LogMessage("Collision started by collision set: '" + e.CollisionSet.Name
                + "' First part : '" + e.FirstPart.Name
                + "' Second part: '" + e.SecondPart.Name + "'"));
                break;
            case CollisionEvent.CollisionEnded:
                Logger.AddMessage(new LogMessage("Collision ended by collision set: '" + e.CollisionSet.Name
                + "' First part : '" + e.FirstPart.Name
                + "' Second part: '" + e.SecondPart.Name + "'"));
                break;
            case CollisionEvent.NearMissStarted:
                Logger.AddMessage(new LogMessage("Near Miss started by collision set: '" + e.CollisionSet.Name
                + "' First part : '" + e.FirstPart.Name
                + "' Second part: '" + e.SecondPart.Name + "'"));
                break;
            case CollisionEvent.NearMissEnded:
                Logger.AddMessage(new LogMessage("Near Miss ended by collision set: '" + e.CollisionSet.Name
                + "' First part : '"
                + e.FirstPart.Name + "' Second part: '" + e.SecondPart.Name + "'"));
                break;
            default:
                break;
        }
    }
    

    Required Namespaces

    ABB.Robotics.RobotStudio.Environment

    ABB.Robotics.RobotStudio.Stations

    CollisionType

    CollisionDetector

    CollisionSet

    See Also

    • Setting/Resetting Virtual Signals
    In this article
    Back to top Copyright © 2026 ABB Robotics