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

More
8 years 2 months ago - 8 years 2 months ago #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
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!
Last edit: 8 years 2 months ago by Wireline.

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

More
8 years 2 months ago #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
8 years 2 months ago #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
8 years 2 months ago - 8 years 2 months ago #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: 8 years 2 months ago by Wireline.

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

More
8 years 2 months ago #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
8 years 2 months ago - 8 years 2 months ago #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: 8 years 2 months ago by Wireline.

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

Time to create page: 0.138 seconds
Powered by Kunena Forum