Need help Homing sequence in H-bot( CoreXY) system

02 Oct 2014 09:39 #51722 by jhlee98y
Dear Linuxcnc members,
I'm from KOREA and this is my first post. ^^

It's a long story.
Since 2 years ago, I have made my Micro-CNC adopted H-bot(CoreXY) system. Actually, my machine was built for 3D printer. So its controller was Marlin firmware based on Arduino.
Because I wanted PCB milling and simple AL routing, I had changed my machine to CNC milling machine with H-bot system.
Then since 2 months ago, I have adopted my control system from Arduino to Linuxcnc, because Arduino based firmware has many leakages for CNC motion.

Regarding H-bot(Core-XY) system,
as you know, it has coupled joint of X and Y axis by one timing belt. If you want to move tool head in X or Y direction, it should drive X and Y motor at the same time. If not, it's tool head will move diagonally. Simply, it need to drive 2 motor(X and Y) at the same time.
For this reason, I already installed the core_xy kinematics component to Linuxcnc system as refer this topic.( , CoreXY + LinuxCNC (PopFab).)
Finally I've got the proper movement of tool head using Core-XY kinematics with Linuxcnc controller. (only world mode)

However, the problem is that, before homed all axis (joint mode), Linuxcnc allow to move only one axis movement.
In case of H-bot(CoreXY), at start of operation, when I press X home button, H-bot machine's X and y axis move diagonally because Linuxcnc drive only X motor.
So, machine's gantry will press the unwanted homing switch, Linuxcnc shut down the machine with Error message.
Currently, I've only driven my machine in world mode with No homing sensors. This mean is that my machine don't know the tool's exact point in XY work area.
I plan to adopt tool change and length measurement automatically during PCB milling, so my machine needs to know the tool head's exact position.

I would like you to share your ideas that solved this H-bot system's homing problem.
- Is there method to allow to follow the kinematics in joint mode?
- Is there method to find the exact XY point using home or limit switch after homing in arbitrary point?

( Googling youtube about Linuxcnc delta kinematics robot, also some delta bot performs homing sequence in joint mode!!
But I don't know how they can..)

I really apprecicate your attention for my long story and I'm looking forward your reply and comments.
Thanks in advance.

P/S: As reference, I attach my Micro-CNC and also in my blog page ( ), you can see my Micro-CNC machine.
Korean blog page:


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

03 Oct 2014 06:59 #51742 by alan_3301
Sorry I have no help with your exact question., but I have 2 suggestions

1. Install stops at end of travel, manually move axis to end of travel, then power up steppers, and home linuxcnc (without using homing switches)

2. change machine to use normal XY movement, and use the trivkins module.
The following user(s) said Thank You: jhlee98y

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

03 Oct 2014 18:37 #51751 by jhlee98y
Thank you for your replay and I understand your situation.

Currently, I tried to set HOME_SEQUENCE = 1 for [AXIS_0] and [AXIS_1] according to follow Russain CNC Club mamber's suggestion.
And I simply checked this method's possiblility. I,e, Linuxcnc COULD drive X and Y axis's motor Simultaniously during homing sequence.

Althought I need more test and investigation, just now I have hope that I will operte my machine with Linuxcnc.
When I find the exact solution then I will post it.

Again thank you for your attention.

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

03 Oct 2014 19:00 #51752 by alan_3301
Im not famaliar with the H-bot movement, hard for me to visualize.

Anyways, what happens if you drive only 1 motor, you said it moves diagonally, what happens when one axis reaches the end of travel?
If it stops, and the other axis keeps moving, then I can think of 1 solution.

Use 2 home switches in series, 1 for each axis, wired to 1 homing input.

Then it should run 1 axis to the end of travel, triggering 1 switch, and then run the other axis up to the other home switch, which will trigger the input.

How does that sound?

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

03 Oct 2014 22:59 #51762 by Todd Zuercher
Here is how I think I would try to do it.

Have a hard stop on either x or y and 1 home switch on the other axis (which ever is easier to implement)

Then when homing home joint 0 as an ordinary linear axis with joint 1 disabled (no power so it will free wheel). Now as joint 0 homes, the X and Y should move diagonally until the stop is met, then move linearly (free wheeling joint 1 to do so) until the home switch is met. Once joint 0 is finished homing, enable joint 1 and set this position as 0,0 (home for joints 0 and 1).

You will have to be sure that the gantry is positioned such that it contacts the stop first, before initiating the home sequence.

Using two stops/switches (tied together with an and in HAL) on X and Y would possibly give the ability to home from any position on the table, but I am afraid that hysteresis in the switches would probably give different results depending on witch switch was contacted first. It might work if instead of switches you only had an electrical contact between the stops and the trolly.

Maybe a better way might be to have one axis have a stop/limit switch, that disables joint 1 (lets say on the Y axis) and a home switch on the X. Starting the home sequence so joints 0 and 1 home together in the same direction. This would move the trolly linearly in the Y axis until the stop/limit switch is met, disabling joint 1. Joint 0 would continue to home (free wheeling joint 1 in the opposite direction until X meets the home switch (as above.

A third (and probably best) way would be to home to index marks on the belts rather than axis positions.

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

04 Oct 2014 05:02 #51773 by jhlee98y
@ Alan & @ Todd
Thank you for your kind suggestion.
I understand H-bot has some complicated movement. In order to follow one axis stratly it needs to drive 2 motors simultaniouly.
For your understand, I attached H-bot's configuration and related documents.

I know H_bot style is not suitable for CNC to milling matal because it consists belt drive. However, this configuration has many advantages for Micro scale hobby machine.

Regarding your suggestions, I'll consider after some simpe test because I'm totally newbie for Linuxcnc. I need more study. :laugh:

By the way, I tried to modify in INI file to achieve proper homing sequence.
Firstly, as I already menetioned, when set HOME_SEQUENCE = 1 for [AXIS_0] and [AXIS_1], Linuxcnc drived [AXIS_0] and {AXIS_1] motor simultaniously.
[AXIS_0] was moved foward to its MIN Limit and properly stop. But [AXIS_1] was moved to opposite direction (MAX position)

So, I modified to set HOME_SEARCH_VEL's value to negative in [AXIS_1] section in order to change [AXIS_1]'s Homing direction.
It was very successful.
[AXIS_1] always approached to its MIN Limit SW and then [AXIS_0] moved to its MIN Limit.
At that time, AXIS displayed "CG symbols" for All joints.

I think Linuxcnc obeyed the H-bot's kinematics during homing sequence because X and Y axis movement are properly achieved.
But AXIS displayed in correctly X and Y points during Homing sequence. i,e Linuxcnc drives each joint's motor by H-Bot kinematics but AXIS displays joint point simply.
( I'm not sure whether Forward Kinematics is applied rightly in AXIS display during home operaton.)

Any way, for the moment, I'm statisfied homing sequence setting because my machine finds its position and I can progress further work with my machine.

Thank you.

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

18 Jun 2019 17:21 #137213 by nbremond

I'am using a similar corexy machine, and I have not found the solution for automatic HOMING.
As explained above, as in Hbot configuration, both joints need to be moved in order to have a straight X or Y movement.

During homing both joints (motors) needs to be driven.

Does anyone already found a solution for homing a corexy (or Hbot) configuration ?

Thanks in advance.
Best regards. Bernard

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

21 Jun 2019 08:24 #137465 by andypugh
I think that you can probably do this by configuring simultaneous gantry-style homing. (which means using LinuxCNC v2.8)

In the case of a gantry this means that both joints move towards their own home switch and then the first one to get there stops and waits for the other to get to its.

It seems that the same setup might work for H-bot. There is nothing to say that joints homing in tandem need to home in the same direction or at the same speed.

Squinting at diagrams I don't think it matters which joint is allocated to each limit switch, by the time homing is finished each axis is in a known position and each joint can be called home.

It is important to realise that homing is a joint-level action, not an axis-level one. But putting the joints in a known position will always put the axes in a known position for any workable kinematics.

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

21 Jun 2019 21:41 #137519 by nbremond
Hello Andypugh.

Thanks a lot for your reply.
I'am indeed using version 2.8 of linuxCNC.

I tried the Gantry idea with synchronized movement on joint 0 and joint 1 (sequence = 0 on both).

The 1st part of the homing is working great: The mobile/head moves on X up to the stop switch.
Then, one of the motor stops. This was expected;
2nd part, the remaining motor continue to move in the same rotation direction as in 1st part.... unfortunately the mobile/head moves in diagonal, toward the right direction on Y but in the wrong direction on X: the mobile/head hit the end of travel immediately. Impossible to home the remaining joint.

I also tried a regular homing (sequence= 0 and sequence = 1), but it doesn't work very wheel because the homing works only the the mobile/head is in some specific area of the machine, and also after the homing, the final position is never at the same place on the X axis, because it depend on the position of the mobile/head before the homing... It's then not reliable.

Is there a way to make an "immediate homing" on both joints, and then, when in world coordinates X, Y, Z, run a python (for example) code to move the mobile/head toward the X limit switch and set X=0 in the interface, and then to move toward the Y limit switch and set Y=0 ?

What do you think ?

Thanks in advance.
Best regards,

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

21 Jun 2019 22:09 #137520 by andypugh
Try sequence = -1 on both.

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

Time to create page: 0.154 seconds
Powered by Kunena Forum