Forcely stopping and re-starting PTP command Fails - Dobot unresponsive afterwards


#1

I’m using the provided Dobot_Magician_ROS_DEMO to drive the Dobot (API V1.0.0).
I want to execute a PTP command that I have to interrupt from time to time. So the sequence would be like this:

  • Sending PTP command
  • Stopping the execution of the current command
  • Clear the command Queue
  • continue operation
  • Send a new PTP command that should be executed

I’m facing issues with the interruption of the command, since either the command cannot be interrupted, or Dobot is not responding to any commands after the interruption anymore. Here is what I tried and discovered:

  1. Sending the SetQueuedCmdClear command had no effect at all, the Dobot continued executing the current command.

  2. Sending the Set SetQueuedCmdForceStopExec successfully stops the execution. But when the ** SetQueuedCmdStartExec** is issued again, the latest command will continue. So the queue is not cleared at all - only the execution is paused.

  3. Sending the SetQueuedCmdForceStopExec successfully stops the execution. The SetQueuedCMDClear command seems to clear the command queue. Afterwards I issue the SetQueuedCmdStartExec. The issue here is that DOBOT is not responding to any commands anymore - it is totally unresponsive. The only way I found is to reboot Dobot which is not usable at all.

Can someone advise on how to interrupt an instruction, clear the command queue and resume operation with a new instruction afterwards. What would be the correct sequence of commands, respectively why is SetQueuedCmdClear either not working at all, or causing Dobot to be completely unresponsive?

Any tips highly appreciated


#2

From my observations it appears that the Dobot works like this. But have you tried immediate (not-queued) intructions after stopping, and clearing?

I have 1 more idea (not the best, but that’s something):

  1. Change move mode to CP (in CP arm do not stops beetwen given points).
  2. Divide every path beetwen 2 neightboring points to f.e. 5 smaller paths.
  3. Make a queue inside you controlling unit.
  4. Send next queued point to Dobot each time there is a space in queue for next command on Dobot .
  5. Now if you will clear queued commands on Dobot, let it make his last queued 1/5th of the move.