Hi
The bot I am working with doesn't seem to have homing switches per se, rather it has three limit switches wired in series on the first three robot arm joints. So if joint 0 hits its limit, none of the other switches can influence the circuit because they are all wired together in a now-open circuit. My guess is this is more of an e-stop setup than homing?
Instead I understand that many robot arms use a process of homing whereby the joint is set to some physical marker on the joint, and then the controller attempts to find the limits of rotation and after goes to the home point by measuring the angle from the known limit. However, as I am using STMBL drives, when a joint hits the physical limit of travel, the STMBL will give saturation error or position error, naturally because it cannot drive it any further. The STMBL shuts down.
So I have been experimenting with using soft limits plus the "physical reference" method, but I can't get my head around what it is doing. I start by turning on the controller and booting linuxcnc. It shows a reading of ~0 degrees for all joints, no matter where they currently are.
In the ini, for example for joint 2, it has a real world range of something like -145 to 145 degrees. Initially I set it to this, but the joint just kept turning and turning until it hit its hard stop (not good). I reduced the limits in the [AXIS] section to -40 and 40, and now it turns about 130 degrees before stopping. I did something similar for all the other joints too but the homing process seems to stall and reports
Code:
end of move in home state 7
for both joints 2 and 3. The STMBLs however do not cut out. My ini for joint 2 reads:
Code:
[JOINT_2]
TYPE = ANGULAR
MAX_VELOCITY = 50
MAX_ACCELERATION = 100
BACKLASH = 0.000
MIN_LIMIT = -40.0
MAX_LIMIT = 40.0
FERROR = 1
MIN_FERROR = 1
HOME = 0.00
HOME_OFFSET = 0.01
HOME_SEARCH_VEL = 30.10
HOME_LATCH_VEL = -0.01
HOME_USE_INDEX = NO
HOME_IGNORE_LIMITS = YES
HOME_SEQUENCE = 0
Whether I have ignore limits on or off, it always sails past the 40 degree limit. Hell it goes past the 40 + 40 = 80 degree point. Why might it ignore them even when the setting is to not ignore?
Is it actually possible to use this kind of homing with linuxcnc without adding modified files etc, or have I just missed something obvious?
Cheers!