|
Post by Max on Jun 9, 2016 20:12:26 GMT -7
Added backlash compensation on the base motor. Base does not have intermediate joints so backlash should quite consistent between different dobots, so for now it is set as constant - 22 steps. For completeness backlash calibration tool will be added a bit later.
Backlash on the other two motors depends on the angle of the arm and is not that straightforward to compensate for. Moreover, backlash on the links manifests at different tasks differently, as I said before.
|
|
|
Post by mayujsw on Jun 15, 2016 1:49:33 GMT -7
Is there any method to let the end effector do exactly straight line moving ?
|
|
|
Post by Max on Jun 15, 2016 6:39:00 GMT -7
Is there any method to let the end effector do exactly straight line moving ? MoveWithSpeed() Make sure every single point of the line from the current position to the destination coordinates is physically reachable to the end effector. As Mike posted in this topic the robot is going to do crazy when it is asked to move to a coordinate that is not physically reachable.
|
|
|
Post by louise46 on Jun 16, 2016 2:27:39 GMT -7
What initial position do you have the arm in before using the moveWithSpeed function? I know the joint angles must be less than 90 degrees but how do you ensure the initial position is the same every time?
Thanks, Louise
|
|
|
Post by Max on Jun 16, 2016 7:46:59 GMT -7
There are two variants of control box supported by open-dobot - original dobot control box with an FPGA top board and RAMPS v1.4. There are also versions of FPGA board. So, depending on the variant and version of the top board (FPGA v1.0 or v1.1, or RAMPS) the answer varies slightly. In nutshell, the initial pose is assumed from accelerometers' readings. Accelerometers are assumed to be mounted on both arm links. When your program, based on open-dobot SDK, starts, SDK reads accelerometers, converts them to angles and calculates the pose. The initial base position is assumed as zero, more on that below. After that, SDK keeps track of every arm move and every step motors execute, hence it always knows current pose (the steps position of each motor is converted to joint angle and from those pose can be calculated at any time using forward kinematics). Base can also be calibrated at any time using a limit switch or a photointerrupter (switch for short). When CalibrateJoint() is called the firmware will turn the base in the specified direction, with specified velocity until the switch is hit. After that it will turn the base in opposite direction with the specified velocity (usually very slowly) until the switch is "unhit" to get the most accurate result. When this is finished GetSteps and SetSteps can be used to update current motor positions in steps (for the above). See github.com/maxosprojects/open-dobot/blob/master/application/python/example-limit-switch.py and CalibrateJoint for details. CalibrateJoint can be used to calibrate any of the joints if you mount switches on all of them, which can be used instead of accelerometers. Depending on the type of switch and where they are mounted they could give more accurate and consistent results than accelerometers. Which board do you have?
|
|
|
Post by louise46 on Jun 17, 2016 5:34:02 GMT -7
Thanks for your reply. I have the FPGA board. I don't currently have photointerrupters but am considering using them.
|
|
|
Post by Max on Jun 17, 2016 9:25:12 GMT -7
open-dobot supports only accelerometers that came with dobot v1.0 (I simply don't have the other ones to reverse engineer and they are some unknown crap to find datasheet for). If your accelerometers are based on unknown MP65 chip then they are not supported, but you have options: - use GY-521 modules with RAMPS or create a feature request to support them in FPGA, though in FPGA the could an interference isuue as there is no way to disable steppers while accelerometers are read (well, no easy way) - use limit switches/photointerrupters instead to setup initial pose
Probably worth putting that on wiki. I just don't have time to do everything. Was hoping for the community to contribute too... ::sad::
|
|
|
Post by Max on Jun 17, 2016 17:42:32 GMT -7
Great news! I was able to drastically reduce interference with these www.amazon.com/gp/product/B015RDPNTW/ref=oh_aui_detailpage_o00_s00?ie=UTF8&psc=1GY-521 modules can now be read reliably at any time, as opposed to the original Dobot accelerometers than can be read only when Arduino boots. Will release open-dobot today or tomorrow with all updates and fixes along with some documentation on how to best set up ferrite beads to prevent interference. This also makes it possible to have motors enabled all the time on RAMPS and the arm to not fall down between application restarts, even without a server. Just need to pull "ENABLE" pin on each of the stepper drivers to ground with a resistor (I use 4.7k).
|
|
|
Post by Max on Jun 18, 2016 18:12:05 GMT -7
|
|
|
Post by cryptonb on Aug 18, 2016 8:19:08 GMT -7
Hello Max, could you please elaborate on that?
|
|
|
Post by Max on Aug 18, 2016 13:54:59 GMT -7
Hello Max, could you please elaborate on that? What exactly are you interested in? What was the problem I fixed or how I fixed it?
|
|
|
Post by cryptonb on Aug 19, 2016 4:31:32 GMT -7
As I need accuracy I'd be very interested in any fix reducing backlash.
|
|
|
Post by Max on Aug 19, 2016 17:34:31 GMT -7
|
|