Dobot position sensor reference seems to be floating?


Hey all! So I’ve had my Dobot for about 2 or 3 months now and I’ve noticed that I constantly have the same problem: the xyz reference frame from which the robot measures its position seems to move every time I restart it.

Right now, I have the Dobot set up in the recommended configuration (with joint 2 reading greater than 45 degrees and joint 3 reading less than 45 degrees and the suction head located at a point along the x-axis of the robot). I’ve drawn a circle on a piece of paper that the robot always starts and ends on. This location is (300.2, 0, 27.1) in mm. However, I’ve noticed that when I turn it off at the end of the day and start it up in the morning, its reference coordinates seem to shift slightly so that when I tell it to go to (300.2, 0, 27.1), it lands about 1 mm in the positive y direction and 1 mm in the positive x direction off of (300.2, 0, 27.1). This is extremely frustrating because the process I am instructing it to perform requires a high level of accuracy, so every time I restart the Dobot I have to overwrite the locations I told it to go to yesterday to its new (and incorrect) perception of where those locations are. For example, if I told it to go into a container at (55.4, 183, 15) on Tuesday, when I come back on Wednesday, to get it to go into the same container I now have to tell it to go to something like (56.4, 183.8, 15). Everything is in a fixture that forces all of my components to be a fixed distance from each other, so containers and the robot base moving around should not be the problem.

Sorry for the long explanation, it’s a very specific problem. Is the Dobot just incapable of holding the ~1 mm precision that I need on startup? I’m using the Dobot V1.0, if that helps.


How’s the base? Cause the base has no angle sensor, so you need to make sure the base is at the same angle before you power on dobot. You can use the metal block to parallel the base with the bottom of the dobot every time on startup:


The base is fixed to the table and the metal block was used as you described to determine the starting position of the Dobot, so yes I have done this.


You have to realize that dobot uses accelerometers on each of the two links (arms, as they call it) to estimate initial pose, which is a bad idea for any application that requires precision.

If you absolutely need such precision consider open-source firmware that supports photointerrupters/limit switches, or modify stock firmware to add calibration procedures and support limit switches.

With photointerrupters/limit switches you don’t need to use any metal blocks as it would calibrate each joint itself on every restart (including the base) with way better precision than cheap accelerometers could provide.

Alternatively, you can just leave dobot and computer on (to prevent Arduino from being reinitialized when the host software reconnects next time).

There are open-source firmwares that can be controlled from a Raspberry PI, in which case you don’t even need to leave a computer on.


Noteb, thank you so much for your response. I don’t think leaving it on constantly is a good idea (since it won’t need to be run more than a few times per year), and since I can’t modify the software that the Dobot currently runs on, I didn’t think there was any way to implement photointerrupters/limit switches.

So would the method you’re proposing be capable of communicating on startup with the Dobot software, or would I have to run and program the Dobot using entirely new methods? I really like the kinematics software that it comes with, all of the RAMPS boards and everything else I’ve seen people use in place of the QT Playback stuff would require a lot more work for far inferior movement capabilities. I haven’t worked with Robots or Arduino much before this project, so since I can’t modify the sketches controlling the Dobot software or overwrite the startup coordinates of the Dobot, I’m having trouble seeing how I would be able to use a secondary open-source firmware with calibration procedures in conjunction with the software that Dobot already runs on.


Well, you gotta love robotics to make dobot anything more than a toy.

It seems, though, to be possible to override the estimated angles according to

That would be state #9 (float1) and mode #3 (float2) - “manually set initial angle”.
So, to make it initialize right regardless of its actual initial pose (45 degrees or not) and accelerometers’ accuracy you could:

  1. Place dobot in a specific location on the desk and mark that location (e.g. draw around the base on the desk)
  2. Center the base (e.g. using the metal block)
  3. Arrange the links in a way that the end effector touches the desk
  4. Mark where the end effector touches the desk
  5. Turn on dobot and let it initialize
  6. Read the angles it initialized with (I don’t remember where in the app they are, should be somewhere)
  7. Write down the angles.

Next time you use dobot:

  1. Place it in exactly the same location on the desk
  2. Place the end effector in exactly the same location on the desk
  3. Turn on dobot and let it initialize
  4. Override the angles in dobot (I don’t know if it’s possible with the app, maybe using dobot tools…)

This way whatever skewed readings accelerometers provide doesn’t matter any more as you’ll be overriding them.


You can input the initial angles here:

or here:

And here is the open source codes of dobot:

Hope this can help you guys.


Thank you both so much! This is a huge help!


Hi…i am a new user here. As per my knowledge it is happening because the base has no angle sensor, so you need to make sure the base is at the same angle before you power on dobot. You can use the metal
block to parallel the base with the bottom of the dobot every time on startup.

heavy copper pcb