Using soft limits and physical reference points to home robot arm?

More
06 Aug 2018 17:05 - 06 Aug 2018 17:18 #115679 by Wireline
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
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:
[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!
Last edit: 06 Aug 2018 17:18 by Wireline.

Please Log in or Create an account to join the conversation.

More
07 Aug 2018 18:40 #115764 by Wireline
OK I have managed to workaround by homing manually. Is there some way to save the zero point between sessions so I do not have to perform the manual home each time?

Cheers!

Please Log in or Create an account to join the conversation.

More
14 Aug 2018 15:58 #116057 by andypugh
It is possible that a POSITION_FILE might help.

linuxcnc.org/docs/2.7/html/config/ini-config.html#_traj_section

What sort of encoders does the machine have? It would be pretty unusual for a robot to have plain quadrature encoders.

Please Log in or Create an account to join the conversation.

More
14 Aug 2018 20:05 - 14 Aug 2018 21:45 #116063 by Wireline
Hi Andy

It has resolvers (its the same as the staubli RX60L you once worked on).

What is the expected behaviour with the position file? It seems to create a file but the joint values do not appear in AXIS when it starts. I have added the ini values under the TRAJ section.

Are there other conditions necessary elsewhere? At the moment I do not have home positions set for each joint at the bottom of the ini due to the problems with homing. I do however have values at the top of the ini (AXIS section) which reflect the DH parameters (400 49 806 0 0 0).

Cheers
Ross
Last edit: 14 Aug 2018 21:45 by Wireline.

Please Log in or Create an account to join the conversation.

More
14 Aug 2018 22:32 #116065 by andypugh
If it has resolvers than try adding HOME_ABSOLUTE_ENCODER=2 for each joint.

linuxcnc.org/docs/devel/html/config/ini-...t__lt_num_gt_section

Assuming single-turn resolvers.

I have discussed how to add the same resolvers-absolute behaviour to STMBL that I recently added to the 7i49 driver.

github.com/LinuxCNC/linuxcnc/commit/b3e9...ffa3a4b5ff3d5620d9b2
The following user(s) said Thank You: Wireline

Please Log in or Create an account to join the conversation.

More
21 Aug 2018 20:53 - 21 Aug 2018 21:23 #116423 by Wireline
Hi Andy

I don't think they are single turn unfortunately. There is a helical gear on each servo which mates with a larger one on each joint, so for one revolution of a joint there will be several for the servo. You can see this in servoterm where the feedback trace repeatedly goes through the bottom of the graph and reappears at the top.

Does that mean none of the suggested approaches will work?

Cheers

EDIT: Nvm I misunderstood what "single turn" means, I am not sure exactly what they are.
Last edit: 21 Aug 2018 21:23 by Wireline.

Please Log in or Create an account to join the conversation.

More
21 Aug 2018 21:22 #116424 by andypugh
Do you have a manual? There must be some process if it ever worked when new.

Please Log in or Create an account to join the conversation.

More
21 Aug 2018 21:26 - 21 Aug 2018 21:27 #116425 by Wireline
There is some documentation, but it does not cover homing nor provide much detail on the resolvers. Do you remember the one you worked on at the London hackspace with Dean? Its the same STMBL control box but another RX60. We were never able to find a huge amount of documentation and after a point staubli were not very forthcoming.

As far as I know it was homed manually even with the original staubli control unit, which is now dead.

Ross
Last edit: 21 Aug 2018 21:27 by Wireline.

Please Log in or Create an account to join the conversation.

More
21 Aug 2018 21:40 #116426 by andypugh
And there are no specific joint encoders or limit switches, just the servo resolvers?

Please Log in or Create an account to join the conversation.

More
24 Aug 2018 00:04 #116512 by Wireline
Its a strange one. There are cables named LS1 and LS2 which according to the schematics are limit switches. I believe they serve the first three joints and are all on a common circuit and Normally closed.

That's where it gets odd. There is continuity between the two lines, 6 ohms resistance. However when you place one of the joints into its limit, there is no change in the continuity or resistance. Its basically a short and having a joint at its limit does not appear to do anything.

Out of curiosity I also set the meter to test for diode and capacitance, but no change is observed when, under power, moving the joint to its limit. Each time the STMBL's will cut out due to amplifier fault (linuxcnc error), which I am guessing equates to a saturation error in the STMBLs.

The arm does have index marks, but unlike a KUKAs vernier lines, the ones on the staubli are just indentations or scribe lines you match up. There may have been a tool used to do it, though I find it hard to believe that was needed every time the bot was run. Apparently a manual home was needed with the original controller, but that could have been because it was on the fritz.

Please Log in or Create an account to join the conversation.

Time to create page: 0.094 seconds
Powered by Kunena Forum