I think I know what you mean, could you send me a video to philippe.habets@vectioneer.com.
Does this happen each time at the same frequency, regardless of the speed. So for slow motion and fast motion the ticking frequency is the same.

1) What you can do, check if the signal send to the drive is smooth, https://desk.motorcortex.io/, path: root/Ethercat/Robot/Axis1/In/Target position. Don't forget to set the update rate to 1khz (Settings). https://docs.motorcortex.io/docs/motorcortex-io-tools/motorcortex-desk/#screen-lay-out

2) You are sending to root/Control/jointManualPositions this is incorrect.
You have to stream your positions to jointAutoSetpointGenerator/input
set fade time to 0 jointAutoSetpointGenerator/fadetime = 0
root/Control/gotoPauseMode = 0
root/Control/gotoManualMode = 0
root/Control/gotoMotionplayerMode = 0

These should be the settings to stream position with the generic app

3) If you run the motor though code, you should not forget to reference, else these jumps will occure.

    Thanks, the position mode works now. had to set maxVel > 0 ofc to make it move.
    The ticking sound is there in position mode also. the frequency is same at all speeds.

    philippeH 3) If you run the motor though code, you should not forget to reference, else these jumps will occur.

    I set the limits and reference is well between -360 and 360 degree limit. This happened with velocity mode. I am not sure if I did something wrong. Will get logs next time if this happens again.

    One last question,
    I set velocity using root/Control/jointManualVelocity which has channels, so we set an array of velocities.
    req.setParameter("root/Control/jointManualVelocity", [1, -1]).get() for giving velocity to both axis at same time.

    I want a separate interface for both motors something like jointAutoSetpointGenerator0x/input so I can work individually with both axis.

    Right now I have to get velocities for all the motors, populate the velocity array with all axis' current velocity for all channels, and then feed it to motor-cortex.

    Is there a better way to set individual channel value instead of array ?
    I hope I am clear here.
    Thanks

    Hi,

    I was checking the drive issue, the continue ticking sound.
    For elmo drive you always have to set a DC clock.

    In ECAT-Tool, could you set these values and deploy it to your controller?

    Let me know if this solved your problem

    Can you update your motorcortex python version to 0.22.2
    In this version you can specify an offset:
    set_param_reply_msg = req.setParameter('root/Control/jointManualVelocity', 1.2, offset=1).get()
    Now you only write to axis 2.

    thanks for 0.22.2 update!

    I also tried the distributed clock setting, but now the ticking sounds are even more and the frequency of it is uneven.

      Some more questions regarding streaming the position commands.

      1) I see the jointAutoSetpointGenerator interface is more of a profile position mode type where you give one position and motor stops only after reaching that target. Is there some other parameter path also that allows me to work more like a cyclic synchronous position mode ?

      2) In jointAutoSetpointGenerator interface I queue a trajectory of 10 points. How do I stop executing trajectory midway and make motor to stop / provide another trajectory ? Something like a cancel motion bit that empties the setpoint queue.

      Thanks

        MankaranSingh

        Which kind of Elmo firmware version are you using, did you update elmo drive to the newest firmware version?
        Are you just using one or multiple Elmo drives, for each drive you have to configure the distributed clock.

        Philippe, will respond to the other questions about streaming the position commands

        Tested with both single and multiple drives with distributed clock enabled and disabled.
        Today for some weird reason, the sound is gone for no reason. Nothing much changed from my side. I'd investigate more into what changed. The distributed clock is off

        MankaranSingh

        1) I see the jointAutoSetpointGenerator interface is more of a profile position mode type where you give one position and motor stops only after reaching that target. Is there some other parameter path also that allows me to work more like a cyclic synchronous position mode ?

        2) In jointAutoSetpointGenerator interface I queue a trajectory of 10 points. How do I stop executing trajectory midway and make motor to stop / provide another trajectory ? Something like a cancel motion bit that empties the setpoint queue.

        ad 1)
        Yes it is meant for just setting targets and the app then creates a nice smooth profile with given velcity, acceleration and jerk constraints to that target. If you set the constraints high eneough you should be able to stream setpoints at any rate to root/Control/jointAutoSetpointGenerator0x/input
        There is some implicit behavior in this SetpointGenerator module. If the System Mode is in Pause or Manual mode the module will be resetting its input to track the actual position. This is to avoid any sudden jumps when this module is connected to the active signal path again. So when your write to root/Control/jointAutoSetpointGenerator0x/input is not changng, you know that the module is being reset internally.

        ad 2)
        if you want to stop in the middle of the execution of the cue, you can do several things:

        • switch the state to pause, the setpoint generator will then be reset and the que will be emptied
        • if you just want to pause you can use the timeScaleFactor input. As the name suggest you can scale time with this parameter. If you set the timescale to 0.5, your motion will be twice as slow. If you set it to 0 it will stop. But beware, you should probably fade this value nicely, because it is applied immediately.

        I hope this answers your questions

          Philippe
          Thanks, The pause mode to reset queue is working. Although, I had to set a delay before disabling pause mode (0.1s) otherwise the drive does a weird motion and seemed like was still trying to reach the previous target. The timescale thing also works as expected.

          For the 1st point, I need to do a very precise motion of let's say 500 ticks on motor side and execute a sequence. And mind that we have a gear ratio of 100:1 . Will this still work ?

            MankaranSingh

            For the 1st point, I need to do a very precise motion of let's say 500 ticks on motor side and execute a sequence. And mind that we have a gear ratio of 100:1 . Will this still work ?

            This should work. Internally the values are doubles (64 bit). So in case of joint angles in radians this should give you plenty of resolution to drive on tick-level precision.

            Write a Reply...