Snapshot seam finding with optical sensor

edited February 2022 in RAPID Programming
I am trying to make discrete measurments as done here by Servo Robot.
The ABB functions (Optsearch_1D, ArcLSearchStart) I know all make a linear motion, but I need one measurement that returns the position (XYZ) of the joint in camera or robot coordinates.
Anyone has any leads? Is this done with ABB robots as well?


  • You are trying to reach a weldpoint using vision or are scanning with vision to modify your workobject?
  • Hi, 
    If I am able to get the XYZ, I can do both with it right?
    It also takes less time than making a linear pass with added motion.
  • I dont know what you mean by get an "XYZ" , Joint Target or RobTarget?
    If you are concerned about time consider changing zones & MoveL to MoveJ?
    You want to scan using vision & do what? Create RobTargets from scratch?
    OR, you already have robtarget & you need to use vision to align it with part position?
  • My question is: how to reproduce what you can see in the video with an ABB robot?
    The robot is standing in one position, takes an image with the laser (without moving) and gets the XYZ position of the joint (since the camera has no idea where the robot is, it can only return the *location* of the joint - a pos with XYZ coordinates, without rotation involved - so not a pose). This is repeated 3 times. They get the coordinates of 3 points in 3D, and are then able to use FitCircle to find the position (and orientation) of the circle.
    I got the concept with FitCircle etc. covered, but not the way to make the acquisition in a static way.

  • Not sure what type of laser you would use, since I dont have much experience but the way to configure that in the robot would be using a different task for the laser & having it output the offset for your workobject.
  • Have no experience with this so this is just something that may work.
    Create a tool with the TCP placed where the laser is measuring from (its reference point) and have the X,Y,Z axis of the TCP aligned with the laser coordinate system.
    Then you can get the pose of the robot when the measurement is made and then offset that pose by the measured values and you have the pose of the measured location.

    Something like:
    VAR robtarget p1;
    !these are the returned measurements from the laser
    VAR num xdist;
    VAR num ydist;
    VAR num zdist;

    !move to the position to take measurement
    MoveL *, v500, fine, tool1\WObj:=wobj1;
    !take measurement and store the result in the variables
    p1 := CRobT(\Tool:=tool1 \WObj:=wobj1);
  • @graemepaulin
    !take measurement and store the result in the variables
    is exactly what this question is about :smile:
    How indeed to take such a static measurement from these optical trackers? I need a command that would: activate the laser, make sure the profile I set up is detected, return the raw XYZ value of the detected joint, then desactivate the laser...
    All of these functions are probably being used constantly in other ABB higher level functions (like OptSearch_1D etc.), but I cannot see anything related to doing such rudimentary tasks.
  • These are functions of the Laser sensor, their documentation should give the required inputs/outputs.

  • Hi @graemepaulin
    I found this snippet in the ABB documentation  (AM - Controller Software IRC5, Sensor interface section) that does what I need.

    I am able to use the protocol, however, the X Y Z I get from the sensor do not make any sense. Do you have experience with this function?
    I am not sure I understand based on what coordinate system the X YZ refer to? TCP? Laser TCP? Flange of robot? Robot base?
    It is also not explained what the SensorMatrix is supposed to be in our application.