Discussion

Left ArrowBack to discussions page
mertzgamertzga Posts: 16 Apprentice
edited November 2016 in Applications
I have seen videos typically of stacking type applications where the UR goes down until it contacts something then it moves upward then returns to pick an object a certain height above the point it contacted initially. My assumption is this is accomplished using torque sensing and a relative or variable way point. Where can I find some training literature that explains how to establish these types of waypoints? Can someone share some insight how this is programmed? Another question, I am using the pallet wizard to stack parts in a box, using the box feature. I need to insert a sheet of cardboard between each layer. Is there a way to insert a pause and pop-up between layers in a box sequence or do I need to do like 4 or 5 squares? Counting of some type? This is where I was thinking the touch off trick would help me I could have the robot touch off before it begins the pallet sequence then it would places the layer. Pop-up once layer is complete insert sheet. Robot again checks height and begins second layer. I hope this is a clear enough explanation.

Best Answer

Comments

  • mertzgamertzga Posts: 16 Apprentice
    I posted this to the wrong board.  :/ 
  • Amanda_LeeAmanda_Lee Posts: 24 Handy
    @mertzga I changed the category. Thanks for posting! 
    Amanda Lee
    DoF Community Manager
    [email protected]
  • mertzgamertzga Posts: 16 Apprentice
    Thanks.
  • Tyler_BerrymanTyler_Berryman Posts: 122Beta Tester Beetle, Wrist Camera URCap 1.3.0 Handy
    @mertzga  Your guess is absolutely right! In the demonstration videos where the tool contacts an object and moves in another direction is utilizing the FT300 sensor's force feedback. In another DoF post (http://dof.robotiq.com/discussion/comment/945#Comment_945 ), I used the FT300 sensor to monitor the force in the x axis. I was monitoring the force on the PCB, so that the robot would stop moving the part when as soon as it was in contact with the edge of the tray. I was running a loop that was basically saying : As long as the Torque measured in the X axis is smaller than 0.5Nm keep moving in the X axis.
    Loop norm(Mx)<0.5
                       var_1≔get_actual_tcp_pose()
                       var_2≔pose_add(var_1,p[-0.0005,0,0,0,0,0])
                       var_2
    I was using a template that comes with the FT300 sensor to stream the data coming from the force/torque sensor. As soon as the torque in the X axis is larger than 0.5Nm, the robot will go to the next step in the program.

    Yes you can increment a variable in your program everytime you place a box, so you could increment the variable "Box" everytime you place a box. Then you could use an IF statement to accomplish a certain task when "Box" is equal to . You could then use the force feedback from the sensor to place the cardboard inserts between the boxes.
                     If Box≟4
                       *Place action here: such as placing the cardboard inserts
                       Box≔0

                     
    

    Tyler Berryman
    Robotiq Integration Coach
    [email protected]
    1-418-380-2788, option 3
  • matthewd92matthewd92 Posts: 851Founding Pro, Tactile Sensor Beta Testers Handy
    @mertzga we do a lot of force feedback in our program using the built-in force monitoring of the UR.  Its not anywhere near as precise or fine grained as a FT sensor is (we have used one and it was nice) but it gets the job done, especially when all that matters is gross motion.  

    If you use an if statement in your program you can actually check the box that says "Check Expression Continuously" and it basically turns the if into a while loop, so while the force is less than your threshold the node will continue to execute but as soon as you exceed the threshold you will exit that loop.  So for searching we will do something like this:

        if force()<50. #Check Expression Continuously box is checked
          waypoint # this is where I want to get to
        end if

          

    If I want to know if something is there I will place a variable flag at the end of the task under the if statement, I will set the flag to True before the If and then False if the waypoint is complete.  I use this for instance to probe a tray of parts to determine if there are parts in each of the pockets of the tray

    If the motion is able to execute completely then there must NOT be an item in that spot so lower the flag, if there is that portion of code will not be reached as the If statement will exit when the force exceeds the threshold.

    Something like this:



    Of course this all still works the same with an FT sensor, it just gives you much finer control over the actions.

         
  • mertzgamertzga Posts: 16 Apprentice
    So I can do this with just the robot. Awesome! :) Thanks!
  • Tyler_BerrymanTyler_Berryman Posts: 122Beta Tester Beetle, Wrist Camera URCap 1.3.0 Handy
    @mertzga Yes, you can do this using the built-in force control of the UR.
    @matthewd92 Thanks for pointing out the UR Force feature!
    Tyler Berryman
    Robotiq Integration Coach
    [email protected]
    1-418-380-2788, option 3
  • matthewd92matthewd92 Posts: 851Founding Pro, Tactile Sensor Beta Testers Handy
    @mertzga the force() method returns the norm of the get_tcp_force() method.  If all you care about is overall force its a handy method.  If you want to know the actual force that is being seen in each of the TCP coordinates (x,y,z,rx,ry,rz) use the get_tcp_force() as it returns a list and then you can reference the exact force parameter.  The returns are N for x,y,z and Nm for rx,ry,rz.  If you want the absolute force in a particular degree of freedom you can use the norm() function.  So if you want to know the absolute force you are seeing in the y-diorection of the TCP you would use:
        
        global force_I_See = get_tcp_force()
        global y_force =  norm(force_I_See[1])

    Hope that helps
  • mertzgamertzga Posts: 16 Apprentice
    Loop norm(Mx)<0.5
                       var_1≔get_actual_tcp_pose()
                       var_2≔pose_add(var_1,p[-0.0005,0,0,0,0,0]) 
                       var_2 (What is the second var_2 shown in this program loop?
    I have been playing with both methods. Matt's method I got to seek the part then i set remaining way points. My ultimate goal would be to establish the position it contacts the part then based on that it calculates the next points. When I try Tyler's loop method it throws an getInvers:couldn't find a solution error. I re-read the first post and now I see that the loop is moving incrementally untill it contacts force that exceeds the expression. How do I get the robot to calculate where to go based on var_1?
    This is what I have in my program.  

  • Tyler_BerrymanTyler_Berryman Posts: 122Beta Tester Beetle, Wrist Camera URCap 1.3.0 Handy
    @matthewd92 Thanks for answering, yes the pose is defined as p(x,y,z,ax,ay,az), where x,y and z describe the position of the TCP in meters, and ax, ay and az describe the orientation of the TCP.
    Tyler Berryman
    Robotiq Integration Coach
    [email protected]
    1-418-380-2788, option 3
  • matthewd92matthewd92 Posts: 851Founding Pro, Tactile Sensor Beta Testers Handy
    @matthewd92 Thanks for answering, yes the pose is defined as p(x,y,z,ax,ay,az), where x,y and z describe the position of the TCP in meters, and ax, ay and az describe the orientation of the TCP.
    @mertzga just to further clarify what Tyler said, the ax, ay, az are given in radians.  IF you have degrees you can use the built-in function d2r() to convert degrees to radians
Sign In or Register to comment.
Left ArrowBack to discussions page