Update joint position goal while moving

  • Hello,


    we are currently working on a project where we want to catch a basketball with a basketball hoop attached to the lbr iiwa 7. We did some work in simulation using ros and gazebo and it is working fine so far. Currently we can solve the inverse kinematics for the desired pose and also implemented a spline interpolation from the current joint position towards the goal, which can handle goal updates on the fly.


    When it comes to the lbr hardware, we are still very new and have not found a lot of documentation.


    We tried to use the standard move / moveAsync methods by just passing the goal positions without any manual interpolation. The problem we see is that we have to update the goal multiple times while the robot should move towards it already. We tried to append the new goal positions to the IMotion and set the relative blending to 1, but this does not seem to be enough to skip to the latest goal position instantly.


    Another idea is to use FRI and send all intermediate joint positions from start to finish using our manual interpolation. We did not try FRI yet, but reading about it the concept of adding a motion overlay confused us and we are not sure if FRI can do what we want.


    We would appreciate any hint about the concept of FRI and if it can do what we expect from it, or any other options we might have.


    Thanks


    ---


    UPDATE:


    We tried the LBRJointSineOverlay examples and got it to work on the iiwa. From what we understand, FRI enables us to get access to the interpolator commands and change them if we want to. But for this to work we still have to start moving the robot with iiwa.move(...) / iiwa.moveAsync(...) while applying the motion overlay. We cannot set a desired goal from FRI directly. Is this correct?


    The workaround we can think of is to start a movement towards some pose but never use the interpolator commands but use our own interpolation to move the robot to the desired goal. Once we are finished with what we want to do we can drive the robot to the initial goal that iiwa.move(...) wants to reach and stop the robot application.


    Is this what we have to do or is there another option we have that we don't see.


    Thanks

    Edited once, last by Julian ().

  • We are not using a real basketball setup but a smaller indoor basketball hoop with a foam ball, so the impact should not be to hard.

  • As far as I know, the real-time control options of LBR are both working with methods that we offer new target positions before it actually reach to its previously given target. So the interpolator does not perform exact stop and always moves toward the given renewed target. Thus it's mostly used for tracking things in real-time, with assistance of vision, simulator, control device, sensors or any of such that can give the robot positional information.


    If you can feed target positions from the external device(through ROS or tracking devices for a basketball) based on -nearly- real time, using FRI or Servoing(simpler and lower performance version real-time controll; does not require external server program with aid of rtOS, period for accepting new targets is more than aprx. 14ms) is a fine idea for me to think.

    The workaround we can think of is to start a movement towards some pose but never use the interpolator commands but use our own interpolation to move the robot to the desired goal. Once we are finished with what we want to do we can drive the robot to the initial goal that iiwa.move(...) wants to reach and stop the robot application.

    I'm not sure if I've understood your statement correct, but if you stick to conventional way of commanding motions, the robot will always stop after each motion. Unless you give the whole series of motion commands before starting the motion and make them as one Spline motion or blend them with moveAsync() / setBlending().

Advertising from our partners