Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5

Search Linear

Hi everyone,

According to the RoboDK Documentation, there's a function called "SearchL" and is described like this:

Quote:SearchL(target, blocking=True)
Moves a robot to a specific target and stops when a specific input switch is detected (“Search Linear” mode). This function waits (blocks) until the robot finishes its movements.

target (Mat, list of joints or Item) – Target to move to. It can be the robot joints (Nx1 or 1xN), the pose (4x4) or a target (item pointer)
blocking (bool) – Set to True to wait until the robot finished the movement (default=True). Set to false to make it a non blocking call. Tip: If set to False, use robot.Busy() to check if the robot is still moving.

I would like to know if it's possible (and how) do what it says there... move the robot until an input switch is detected. According to what I understand, the robot just moves to the target without doing anything else in the path.

Is possible to send the robot an instruction that can be stopped if, lets say, I press a button or trigger a sensor?

Thanks for your time :)
Hi Nox, 

The SearchL() instruction is used to find the exact position of an object using an external sensor. 

If you take this example : 


Imagine that those two suction cups need to take a paper sheet on top of a pile of paper sheets. Has the day goes by, the pile of sheets go down and you don't want to teach every single position going down. So you use a SearchL() and you connect your input on the suction sensor connected with the suction cup. This input will go to TRUE if the suction cups grab something. This will then stop the linear movement of the SearchL() . 

When the input is triggered, the program simply past to the following instruction. 

So, to answer your specific question, the linear movement of a SearchL() can be stopped by a button or a sensor.
The integration with your robot depends on the controller you have. Linear search requires customizing the robot driver to intercept the search movement and link the stop condition to a specific signal. You can also use a customized post processor.

What robot are you using?

For example, if you have a Fanuc robot you'll see a program called (MoveL Search) as part of the robot driver setup. This program looks like this:

   1:  SKIP CONDITION DI[101]=ON    ;
   2:  IF R[51]>=0,JMP LBL[10] ;
   3:L PR[50] R[50]mm/sec FINE Skip,LBL[50]    ;
   4:  PR[52]=JPOS    ;
   5:  END ;
   6:  LBL[10] ;
   7:L PR[50] R[50]mm/sec CNT R[51] Skip,LBL[50]    ;
   8:  PR[52]=JPOS    ;
   9:  END ;
  10:  LBL[50] ;
  11:  PR[52]=PR[50]    ;

In this example, the search is stopped by the "Skip condition" DI[101]=ON. You can modify that line to match the DI of your choice. The final position is saved in the position register PR[52]. This can also be customized.
Thanks both for your answers...
I own a KUKA KR-210 robot, I'm wondering what's the input for this robot? (or where I can check this)
Hi Nox,

You just have to select your robot in RoboDK. Make sure you have a suitable post processor (for example, for KUKA you have KRC2 or KRC4 post processors).

Then, the correct output suitable for your controller will be generated. The example we provided is based on a Fanuc robot.
(10-29-2018, 02:06 PM)Nox Wrote: Thanks both for your answers...
I own a KUKA KR-210 robot, I'm wondering what's the input for this robot? (or where I can check this)

Hi Albert, 
I'm working with an ABB 2400/L and willing to use the SearchL function to verify the dimension of the object but I can't find the documentation that Nox mentioned.
Can you share a link, please?
Hi Daniel,

The SearchL function is only available through the RoboDK API. Search functions are not available through the graphical user interface unless you customize your post processor to collect the data and run validation checks.

More information about how to use the SearchL function through the API is available here:


I'm very new to RoboDK.
I would like to use the SearchL command on my own robot.
First, I'd like to generate a program using the graphical user interface, and then send the entire program to the robot.
How can I accomplish the first part of my goal - using SearchL in the GUI?
SearchL is only available through the API. Have a look at Albert's previous post, please. You can create a python script and call it in your program using 'Program call or insert code instruction'.
Thank you for your prompt reply.

I have already learned how to run simple commands, such as MoveJ, using a Python script. I also know how to simulate turning on a digital signal. However, I have yet to learn how to use the SearchL command and associate it with a digital signal.
My goal is to stop the robot's movement immediately after the signal is turned on.

Users browsing this thread:
1 Guest(s)