RobotStudio event

Combined force & position controll

Hello everybody

I'm working with an IRB140 + a 6axis force/torque sensor from ATI. If I activate force control, the TCP is compliant in all directions. Is it possible, to put just operate a single direction in force control while the others are position controlled? E.g. can I maintain a given force in z-direction and at the same time move the TCP along a given trajectory in the x/y-plane without the robot deviating from the trajectory when subjected to forces/torques? 

Thx in advance

Comments

  • To get a correct answer to this question, you should consult the application manual or contact an application expert within ABB. Please check with your local ABB contact.
    Henrik Berlin
    ABB
  • Hello,  If you are using ABB Force Control option, then this is how the programming instructions work. The instructions require you to set the force along a single axis. The axis will be either a tool axis, a workobject axis or a path axis. Consult the Force Control for Machining Application Manual.
     


     

    BR

    Jim Proulx
  • Ah, thanks for the hint. Right now, the system I'm working with has just a RobotWare key for force control and force assembly. Thus, I didn't look at the functionalities of force machining.


  • We've been dealing with the same question as well lately and figured out, that we can use FCRefForce with reference forces for every axis in which we want to use force control while also using a FCRefLine for the axis, in which we want to use position control. The key here was to set the fcdamping value for the position-controlled axis to FC_INFINITY to practically "disable" force control for this dimension.

    However, this solution still feels a little clumsy, since FCRefLine doesn't actually guarantee that the robot stops at exactly the given distance in that dimension. Instead, we need to evaluate a goal condition using FCCondPos, which in reality means that the robot will slightly overshoot the target distance.

    If anyone has a better solution to combine force and position-control, we'd be very interested to hear about it.
  • If anyone's still looking for a solution to this:
    There is a hidden command called FCAllowMove, which will basically allow you to use regular motion commands such as MoveL while the force controller is active (This will normally cause an error).
    Another hidden command called
    FCSetDirections can then be used to define, in which directions the force controller will be activated.
    A use-case code example could look something like this:
    VAR fcdirections fcdir:=[TRUE,TRUE,FALSE,FALSE,FALSE,FALSE];
    (....)

    FCSetDirections
    fcdir;
    FCAllowMove TRUE;
    (....)

    FCAct...
    FCRefStart
    (...)
    MoveL (...)
    FCDeact
    FCRefStop
    FCAllowMove FALSE;

  • If anyone's still looking for a solution to this:
    There is a hidden command called FCAllowMove, which will basically allow you to use regular motion commands such as MoveL while the force controller is active (This will normally cause an error).
    Another hidden command called FCSetDirections can then be used to define, in which directions the force controller will be activated.
    A use-case code example could look something like this:
    VAR fcdirections fcdir:=[TRUE,TRUE,FALSE,FALSE,FALSE,FALSE];
    (....)
    FCSetDirections
    fcdir;
    FCAllowMove TRUE;
    (....)

    FCAct...
    FCRefStart
    (...)
    MoveL (...)
    FCDeact
    FCRefStop
    FCAllowMove FALSE;

    Wow! This is huge, had no idea these commands existed. How do you define the direction for FCSetDirections? I would think it is a vector? 
  • Yeah, you can use the datatype fcdirections for it, which has members called [xfcdirections, yfcdirections, zfcdirections, rxfcdirections, ryfcdirections, rzfcdirections] to enable (TRUE) or disable (FALSE) the force control for each dimension.
  • One caveat about this that we realized during testing though:
    Deactivating the force controller for at least one dimension using FCSetDirections will apparently activate the position controller for ALL dimensions, not only for the ones that are not force controlled.

    In our tests, this would mean that we could push away the robot to the sides while it performs a linear motion just as we intended, but it would not maintain this new offset, but instead try to return to the original path once the side-forces became insufficient to push it away.

    Since we require the use of either pure force control or pure position control in each dimension, not a superposition of both controllers, we're still looking for a solution to this effect.
    - Is there any way to deactivate position control for specific dimensions, similar to FCSetDirections for force control?
    - Using many short relative linear motions instead of one long, absolute motion also seems to mitigate the effect but doesn't feel like the cleanest solution...
  • @FlorianAumann , that sounds very interesting, I'm wondering if the direction of the linear motion [for example in tool Z-axis] is the same directions where you want the force control to react based on [Force in z Direction], while keeping ( X-axis and Y-axis) only controlled by position commands.

    Can the following rapid instruction achieve that behavior: 

    Proc ...()

    VAR fcdirections fcdir:=[TRUE,FALSE,FALSE,FALSE,FALSE,FALSE];



    my_load := FCLoadID();

    MoveL Pos_10,....;

    FCCalib my_load; 

    FCSetDirections fcdir;
    FCAllowMove TRUE;

    FCRefForce \Fz:=10;
    FCAct...
    FCRefStart


    MoveL offs(Pos_10,0,0,100),....;


    FCDeact
    FCRefStop
    FCAllowMove FALSE;

    EndProc

    Thanks
    Mahmoud