IIWA continous move

  • Hello,
    Is there any way to control the robot in speed rather than controlling it in position?
    For now, the robot is moving step by step (of 1cm), as long as I press a defined key, using


    move(linRel(x,y,z,a,b,c).setcartVelocity(speed)
    with x,y,z,a,b,c corresponding to different keys


    But I would like the robot to move forward , without stopping at the end of each step. I tried to use moveAsync but it was not relevant.
    I also tried to use VelocityControlledCartesianMotion class, but it is marked as "deprecated" in the doc.


    How can I control the robot in speed ? Or how to obtain a continuous movement ?
    Thanks for your help in advance!

  • Hi arthur_delafin,


    Directly, no. There isn't a `moveAtConstantSpeed()` type function.


    However, there are two approaches I would suggest (I prefer #2):


    1) Using moveAsync() in a loop that watches your input condition (e.g., user input). Make sure to set blending as well. If the loop runs at a high rate, the motion commands will stack and blend together as one smooth motion. Make sure to have a motion container ready to interrupt/stop/cancel your motions if the input condition becomes false.


    2) Using direct/smart servo with a motion generator. At each step, the generator evaluates the next motion given a set of inputs: a function, user inputs, force measurements, etc. The included examples are pretty good for demonstrating this.


    Cheers,

  • Hello,
    Thanks a lot for your answer!
    I tested the first solution! I managed to smooth the move using moveAsync and "blending". On the other hand, a latency appears gradually: the more time elapses, the less reactive the robot is. I have not yet come to understand why.


    As for the second solution, what is the example you are talking about? Because I did not manage to find these functions. Is this a module to install?


    Thanks again!


  • Is there any way to control the robot in speed rather than controlling it in position?


    You can have many solutions:
    - You can change the speed of all your program via the smartPad's speed override buttons (they are on the left lower corner)
    - You can change the speed of all the motions between

    Code
    getApplicationControl().setApplicationOverride(x);

    and

    Code
    getApplicationControl().setApplicationOverride(Y);

    , where X and Y are values between 0 and 1 (0 is full stop and 1 is 100% of your motion's original velocity
    - You can use a dialog to choose your velocity then get its value in the program
    - Use the SmartPad's USER KEYS (the blank physical button of the left side of the SmartPad) to change the velocity that you store in your "RoboticsAPI.data.xml" and read it from your program

  • Hello ,
    I have tried the first solution of nnadeau, I managed to smooth the move using moveAsync and "blending". But as I said before, a latency appears gradually.


    On the other side,I managed to control my robot with SmartServo and it works perfectly.


    I tested the Kiiwa's solution, but it did not give me the result I hoped (or I did not fully understand the explanation). So I will keep the SmartServo solution.


    Thank you for your help!

  • Hi arthur,


    It really depends on what you want your robot to do. My answers were to your question about controlling the velocity of your robot's motions while the program is running.
    Few notes here:
    moveAsync --> "From the manual "next program line is executed directly after the motion command is sent. The asynchronous execution of motions is required for approximating motions".
    Spline--> "Spline is a motion type that is particularly suitable for complex, curved paths.With a spline motion, the robot can execute these complex paths in a continuous motion.
    Splines are programmed in spline blocks. A spline block is used to group together several individual motions as an overall motion. The spline block is planned and executed by the robot controller as a single motion block."
    SmartServo --> You use it to control your robot from an external machine in soft realtime (>20 ms ). But, here, there robot won't reach all the positions you send. It will try to reach the last send positions (that's servoing)
    FRI --> You use it to control your robot from an external machine in realtime (<10 ms )

  • Hello,


    After various tests with moveAsync, Spline and SmartServo, I kept the SmartServo control mode because I get a smoother results in my application.
    I think I will FRI soon for another application.


    Thank you for your help!

  • Hi arthur_delafin,


    could you please explain how you managed to smooth your motions by using SmartServo?
    I would like to avoid exact positioning between different motion commands.


    Thank you
    - robotneuling



    Hello,


    After various tests with moveAsync, Spline and SmartServo, I kept the SmartServo control mode because I get a smoother results in my application.
    I think I will FRI soon for another application.


    Thank you for your help!

Advertising from our partners