


> But then I read (in the mouse over of "Wrap around"), that I need to set the SET_GLOBAL_OFFSETS_COMMAND. Where can I learn more about how to do this?
This is all automatic with I&S. Don't worry, you surely
already have it.
--
You received this message because you are subscribed to the Google Groups "OpenPnP" group.
To unsubscribe from this group and stop receiving emails from it, send an email to openpnp+u...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/openpnp/95cf87bd-ca4c-47fb-b04a-71a9c660b11bn%40googlegroups.com.
> Main scenario is that I want the second nozzle pick, to pick as soon as possible. With original, the chmt has a silicon tube that does not allow free articulation, so the nozzles have to rotate before picking. The cups let's the motor rotate freely, so with the settings above, the second nozzle pick can just pick, regardless of its current angle
Ah, I understand, thanks. For those reading along, he is tlking about Rotation Mode:
https://github.com/openpnp/openpnp/wiki/Nozzle-Rotation-Mode
Specifically the Minimal Rotation mode.
I can't say if this will "pay" in the end, if you have to reduce
acceleration rates as a trade-off due to friction. As a matter of
fact, there is another rotation in the Alignment step (assuming
"pre-rotate", as you should). So it is unclear which is worse in
the end.
Clearly, OpenPnP has potential for optimization too (to avoid the cups and friction):
_Mark
--
You received this message because you are subscribed to the Google Groups "OpenPnP" group.
To unsubscribe from this group and stop receiving emails from it, send an email to openpnp+u...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/openpnp/887b5286-af61-4d13-ba7b-9478bfbe18fbn%40googlegroups.com.
> If I understood you correctly, the logic behind the
rotation is that it is not started until the move to the pick
location is started(?).
Yes.Â
(I'm also explaining for those reading along:)
For the first nozzle that is usually okay, as it is moving from the last placement location. i.e. a rather long move where rotation can take place in parallel. However, for the second nozzle, this is just the move from one feeder pick location to the other feeder pick location, those can be close together, and if you have two compatible nozzle tips it might even be from the same feeder, so the move is only the between-nozzles offset (plus/minus 2mm for 0402), i.e., not enough time to rotate.
The same happens in Alignment, above the bottom camera.
Technically, if you have two independent rotation motors on the
nozzles (as most machines have), OpenPnP could rotate the second
nozzle in parallel with the first nozzle, i.e., while moving to
the feeders/bottom camera. Advanced Motion Control actually can
do that (it wasn't possible before). But as I said, it would have
to peek ahead in the Job Processor, and that's not too easy...
_Mark
To view this discussion on the web visit https://groups.google.com/d/msgid/openpnp/577793b0-e71e-4c42-95c6-01daa5cbdc50n%40googlegroups.com.
> @Mark: how would one request additional movements at the AsyncGCodeDriver? MoveTo() only provides arguments for four axis. Are shared rotation situations handled automatically by the AsyncGCodeDriver or would that have to be done by the caller?
Yes, OpenPnP has the Location data type which is X, Y, Z, C only (4-axis).Â
But underneath, since I implemented Advanced Motion Control, it is all managed in AxesLocation, which supports an arbitrary number of axes.Â
Furthermore, motion is never immediately executed. Instead the
motion sequence is added to the motion planner. Only when the
situation requires motion to be complete (for instance when we
want to take a camera shot), then we tell the planner that we need
to wait for motion completion. This in turn forces the motion to
actually being processed and ultimately sent to controllers. The
planner can do arbitrary optimization to the path and also
distribute and coordinate the motion commands across multiple
drivers, in parallel. Remember, it actually can do Motion
Blending and other cool stuff (if only the controllers and
serial interfaces were fast enough 😕).

To move in more than 4 axes at a time, one would need to
implement a new MotionOption.Subordinate,
added here:
https://github.com/openpnp/openpnp/blob/develop/src/main/java/org/openpnp/model/Motion.java#L55
But instead of adding a new motion segment, it would have
accumulate AxesLocation coordinates to the previous motion
target, but never change axes that were already there. Somewhere
here:
But that is complicated by things such as backlash compensation. I.e. it would have to undo not only the last but also the second to last motion segment.
Usage in JobProcessor code (pseudo code off the top of my head):
currentPlacement.nozzle.moveTo(currentPlacement.targetLocationOfStep);
for each (upcomingPlacement : upcomingPlacements) {
upcomingPlacement.nozzle.moveTo(upcomingPlacement.targetLocationOfStep, MotionOption.Subordinate);
}
You're right, with the drag operation it is even more
complicated. It now needs to look ahead from the Feed operation
not only into its won Pick operation, but also into those of the
other nozzle(s).
_Mark
--
You received this message because you are subscribed to the Google Groups "OpenPnP" group.
To unsubscribe from this group and stop receiving emails from it, send an email to openpnp+u...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/openpnp/207d0e61-abba-4e84-9f34-04fb800dbfe9n%40googlegroups.com.
Good discussion. Yeah, I agree with this analysis, and yes, the polarity optimization might already bring the worst case down to rotations that are no longer (much) limiting the speed.
You could always also use real tube decouplers, even my
Liteplacer has one, and I don't believe it has much friction.

_Mark
To view this discussion on the web visit https://groups.google.com/d/msgid/openpnp/f0e144b9-7aa9-4352-acc0-eb4f0f9a6e05n%40googlegroups.com.
I just went to the workshop quickly and the coupling is really
going very easy, no friction that I can see. Remember, the
original machine needs to twist the silicon rubber tube, which is
not nothing. On the Liteplacer there is also some sort of tubing
(don't know if that is silicon) and the friction of the coupling
is so low that when I twist the tubing, it immediately snaps back
to the original rotation, no "creeping" or "sticking", whatsoever,
i.e. the twisting forces are way higher than any friction present.
Plus the thingy seems to be made out of very light plastic and hardly weighs anything. Even one nut of your head assembly probably weighs more. 🙂
I doubt this is significant at all.
_Mark
--
You received this message because you are subscribed to the Google Groups "OpenPnP" group.
To unsubscribe from this group and stop receiving emails from it, send an email to openpnp+u...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/openpnp/640d30b3-955b-4e49-bb25-9ed288014b44n%40googlegroups.com.
what is the weight of your motors? do 9 grams really matter?
To view this discussion on the web visit https://groups.google.com/d/msgid/openpnp/4b0963be-44af-41a0-9c65-0693958927f6n%40googlegroups.com.
> what is the weight of your motors? do 9 grams really matter?
> But if I put the 9grams on the fixed part of the head, with the existing silicon tube (just shortened a little) it does not matter.
I'm not sure I understand the situation correctly. If not, the
following might be completely wrong. 😇 A photo with any cover off
might help.
My assumptions: there is a short piece of tube from the Z-movable, rotating hollow shaft, up to a crossbar, where the coupling will be mounted, rigidly in Z (and X, Y).
So if that is true, the tube will be bent to take the Z
compression, and form a sort of snake-line. Quite a
"counter-spring".
And for rotation, you get a sort of "flex connecting rod", i.e. the rotation is "force-squished" through the silicon tubes, on top of the snake-line, likely forming some sort of "squish-spiral".Â
If this is true, it will surely create bad lateral forces on the
coupling, and even if the coupling could still take that
with little friction (long term), a lot of friction will result
from squishing the tubes themselves. I would even expect the
rotation to sputter with the residual sticky friction against
elasticity.
If that is even remotely true, I would definitely put the
couplings directly on the hollow shafts, and then use generous
tube lengths that can take the Z compression, and with some
bend-adjusting (if possible even above and beyond the head) you
can even balance-out half the lateral forces. No rotation
is squished into the tubes.
_Mark
--
You received this message because you are subscribed to the Google Groups "OpenPnP" group.
To unsubscribe from this group and stop receiving emails from it, send an email to openpnp+u...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/openpnp/920c4f89-809c-4779-81d6-d6807930cc5fn%40googlegroups.com.
> since there is already a simple solution to the problem (by adding some kind of swivel junction) if one is interested in better performance.
This help in the feeder Pick, but not in Alignment.
_Mark
--
You received this message because you are subscribed to the Google Groups "OpenPnP" group.
To unsubscribe from this group and stop receiving emails from it, send an email to openpnp+u...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/openpnp/8e932aab-3c26-4247-9c9e-644f76ae9233n%40googlegroups.com.
> Or maybe, like you say mount the coupling rigidly on the motors
You mean on the motor hollow shafts, right?Â
I.e. the underside of the coupling turns with the hollow shaft, the upper side with the tube stays (more or less) put.
Something like this:
https://www.aliexpress.us/item/3256804211715767.html
_Mark
To view this discussion on the web visit https://groups.google.com/d/msgid/openpnp/156a11d8-016f-402e-902c-48bf84a128b7n%40googlegroups.com.
> In my mind, this is much simpler code, than trying to look up ahead all nozzles/feeders/placements etc ahead.
Not sure at all.
You still need to anticipate the pre-rotate option, and if enabled (which is much recommended!) you need the PCB placement angle, including the PCB rotation and even fiducial adjustments, which is also not that easy, i.e., not sure if readily available inside the JobProcessor.
The ideal Job Planner would be able to fully simulate the
whole job, or at least groups of placements. It could then even
account for real world time cost, based on prior measurements on
that machine. This simulation could then also be used to find the
optimized combinations of picks, i.e., avoid that picks from
feeders are far from each other etc. It could also be used to
optimize in which order the nozzles are done. Looking ahead would
be as simple as "playing" that simulation.
Jan has already added a nozzle ordering optimization in the test version, but this too would even be better if it could look ahead.Â
Note, I just merged it into the OpenPnP testing version:
https://github.com/openpnp/openpnp/pull/1574
@Jan, please announce as planned.
_Mark
--
You received this message because you are subscribed to the Google Groups "OpenPnP" group.
To unsubscribe from this group and stop receiving emails from it, send an email to openpnp+u...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/openpnp/062bc635-a8ef-4321-b8eb-615f5ffdb46en%40googlegroups.com.
>You mean on the motor hollow shafts, right?Â
>I.e. the underside of the coupling turns with the hollow shaft, the upper side with the tube stays (more or less) put.
>Something like this:
Well, if you do it like that, then there's no difference to reversing it, by putting the coupler on the other end of the tube, which I intended to do. Both times the tube will twist equally much. But by putting it on the other end, there's no weight on the motor.
If you put the coupler on the hollow axle, and then fixed the outer shell of the coupler to the motor body, you will not get any twist of the tube, only the Z. This is what I thought you meant. :-)
 - Micael




To view this discussion on the web visit https://groups.google.com/d/msgid/openpnp/80f2145f-7b32-42d5-b8e7-09bbdbe5e987n%40googlegroups.com.

On 30 Jan 2024, at 20.59, Mike Menci <mike....@gmail.com> wrote:
My PnP has it this way - fixed tube - nozzle turns with stepper shaft (Nema8 stepper with full shaft)Â

> Well, if you do it like that, then there's no difference to reversing it, by putting the coupler on the other end of the tube, which I intended to do. Both times the tube will twist equally much.
Maybe I misunderstand something.Â
The difference, IMHO, is that the rotation by the motor will directly be decoupled, i.e. it will turn freely. The tube is not twisted, because there is no friction that could transfer the rotation forces.
In the image (source/credit)
below, only the part marked red will rotate, the green parts and
the tube remain still (the tube must only flex with the Z
compression):

> If you put the coupler on the hollow axle, and then fixed the outer shell of the coupler to the motor body, you will not get any twist of the tube, only the Z. This is what I thought you meant. :-)
I don't understand. See above.
_Mark
--
You received this message because you are subscribed to the Google Groups "OpenPnP" group.
To unsubscribe from this group and stop receiving emails from it, send an email to openpnp+u...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/openpnp/ffd7038a-ee2b-4c53-bade-824fb4382242n%40googlegroups.com.


Like I said, maybe all of this is a misunderstanding 🙂. A picture says more than 100 words, so here it is:
The way I understand you plan to assemble it is like so, with the
decoupler at the top:

So the rotation forces must be transferred across a
snake-line/spiral of a flexible tube that is bent by Z
compression. I'm also assuming the bent tube will not be able to
rotate freely, the bend will be squishing against the backside of
the head or something, rotation needs to fight against the block,
i.e. the bend in the tube is forced to rotate in the material.
The friction I'm talking about happens inside the
material, i.e. the forces required to deform the tube that way.
Whereas when you simply attach the coupling to the hollow shaft,
the tube rotation remains static and it only needs to compress
with Z. By having a generous tube bend, possibly up and beyond the
head, these compression forces will also be much smaller than in
the clamped and short configuration above.

_Mark
To view this discussion on the web visit https://groups.google.com/d/msgid/openpnp/411b0f32-e36a-406d-9f31-1b591efc6a1dn%40googlegroups.com.


To view this discussion on the web visit https://groups.google.com/d/msgid/openpnp/5486d0d5-3d3b-4e19-a57f-62450964f1d4n%40googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/openpnp/e32e5e90-a4c9-45c8-8baa-607e064a5ec6n%40googlegroups.com.


Thank You very much, Mark! Thats exactely what I was looking for and
what I'm intending to add. We'll then see if the driver rotates all
nozzles on the long moves...
Jan
On 29.01.2024 15:12, 'mark maker' via OpenPnP wrote:
> /> @Mark: how would one request additional movements at the
> AsyncGCodeDriver? MoveTo() only provides arguments for four axis. Are
> shared rotation situations handled automatically by the AsyncGCodeDriver
> or would that have to be done by the caller?/
>
> Yes, OpenPnP has the *Location* data type which is X, Y, Z, C only
> (4-axis).
>
> But underneath, since I implemented Advanced Motion Control, it is all
> managed in *AxesLocation*, which supports an arbitrary number of axes.
>
> Furthermore, motion is never immediately executed. Instead the motion
> sequence is added to the motion planner. Only when the situation
> requires motion to be complete (for instance when we want to take a
> camera shot), then we tell the planner that we need to wait for motion
> completion. This in turn forces the motion to actually being processed
> and ultimately sent to controllers. The planner can do arbitrary
> optimization to the path and also distribute and coordinate the motion
> commands across multiple drivers, in parallel. Remember, it actually can
> do Motion Blending
> <https://github.com/openpnp/openpnp/wiki/Motion-Planner#motion-blending>
> and other cool stuff (if only the controllers and serial interfaces were
> fast enough 😕).
>
> AdvancedMotionAnimation
>
> To move in more than 4 axes at a time, one would need to implement a
> new*MotionOption.Subordinate*, added here:
>
> https://github.com/openpnp/openpnp/blob/develop/src/main/java/org/openpnp/model/Motion.java#L55
>
> But instead of adding a new motion segment, it would have accumulate
> AxesLocation coordinates to the*previous* motion target, but never
> change axes that were already there. Somewhere here:
>
> https://github.com/openpnp/openpnp/blob/dd58cf65b0465b426bef8ebd7b87cc7b767ddf7f/src/main/java/org/openpnp/machine/reference/driver/AbstractMotionPlanner.java#L407
>
> But that is complicated by things such as backlash compensation. I.e. it
> would have to undo not only the last but also the second to last motion
> segment.
>
> https://github.com/openpnp/openpnp/blob/dd58cf65b0465b426bef8ebd7b87cc7b767ddf7f/src/main/java/org/openpnp/machine/reference/driver/AbstractMotionPlanner.java#L384-L403
>
> Usage in JobProcessor code (pseudo code off the top of my head):
>
> currentPlacement.nozzle.moveTo(currentPlacement.targetLocationOfStep);
>
> for each (upcomingPlacement : upcomingPlacements) {
> upcomingPlacement.nozzle.moveTo(upcomingPlacement.targetLocationOfStep,*MotionOption.Subordinate*);
> }
>
>
> _Mark
>
>
> On 29.01.2024 14:20, 'Jan' via OpenPnP wrote:
>> Hi Micael!
>> Â Â Â Â Interesting mod you did!
>> Â Â Â Â As Mark says, the JobProcessor handles nozzles in series. On the
>> way to the first pick location, there is a lot of time to perform any
>> rotation needed. The same on the way from pick to align. But for the
>> second (and any other) nozzle the distance might be quite short and
>> hence limited by the rotation. So if you have a polarized part, the
>> penalty at alignment is still there (depending on pick, pre-rotate
>> setting and place orientation).
>> Â Â Â Â @Mark: how would one request additional movements at the
>> AsyncGCodeDriver? MoveTo() only provides arguments for four axis. Are
>> shared rotation situations handled automatically by the
>> AsyncGCodeDriver or would that have to be done by the caller?
>> Â Â Â Â From my current understanding of the JobProcessor everything is -
>> in theory - there: it's a question if special care for shared rotation
>> machines has to be added and where the usual move-to-safe-z is
>> happening (are the rotation information for other nozzles available at
>> safe-z or not?)
>>
>> Â Â Â Â Jan
>>
>> On 29.01.2024 11:53, vespaman wrote:
>>> Â >But as I said, it would have to peek ahead in the Job Processor,
>>> and that's not too easy...
>>>
>>> Yes, that indeed sounds very complicated to add on. And, at least
>>> from the point of feeders, I suspect that most machines with not 2
>>> nozzles already have a solution for free rotation. And for the rest
>>> of us we can always change this when needed.
>>> So from that perspective, the lower hanging fruit with the "polarity
>>> does not matter" is worth more imo, since it will help all set-ups to
>>> some extent, lessen the worst case 180deg scenario.
>>> (Also during alignment, I suspect, as well as components that does
>>> not handle rotation well in general - e.g. those tact switches that
>>> can swivel because the key top is not fixated very securely to the
>>> body).
>>>
>>> (I suppose a parallel rotation for alignment over up looking camera
>>> issues might be easier to solve, looking at it isolated (?), since by
>>> then, the components/rotation should be known)
>>>
>>> Â Â - Micael
>>> måndag 29 januari 2024 kl. 10:49:19 UTC+1 skrev ma...@makr.zone:
>>>
>>> Â Â Â /> If I understood you correctly, the logic behind the rotation is
>>> Â Â Â that it is not started until the move to the pick location is
>>> Â Â Â started(?).
>>> Â Â Â /
>>>
>>> Â Â Â Yes.
>>>
>>> Â Â Â (I'm also explaining for those reading along:)
>>>
>>> Â Â Â For the first nozzle that is usually okay, as it is moving from the
>>> Â Â Â last placement location. i.e. a rather long move where rotation can
>>> Â Â Â take place in parallel. However, for the second nozzle, this is just
>>> Â Â Â the move from one feeder pick location to the other feeder pick
>>> Â Â Â location, those can be close together, and if you have two
>>> Â Â Â compatible nozzle tips it might even be from the same feeder, so the
>>> Â Â Â move is only the between-nozzles offset (plus/minus 2mm for 0402),
>>> Â Â Â i.e., not enough time to rotate.
>>>
>>> Â Â Â The same happens in Alignment, above the bottom camera.
>>>
>>> Â Â Â Technically, if you have two independent rotation motors on the
>>> Â Â Â nozzles (as most machines have), OpenPnP could rotate the second
>>> Â Â Â nozzle in parallel with the first nozzle, i.e., while moving to the
>>> Â Â Â feeders/bottom camera. Advanced Motion Control actually *can* do
>>> Â Â Â that (it wasn't possible before). But as I said, it would have to
>>> Â Â Â peek ahead in the Job Processor, and that's not too easy...
>>>
>>> Â Â Â _Mark
>>>
>>> Â Â Â On 29.01.2024 10:07, vespaman wrote:
>>>>
>>>> Â Â Â 1. OK, I will not hold my breath! :-)
>>>> Â Â Â 2. Yes, I think you mentioned this in another thread. I know all
>>>> Â Â Â about time (the lack of) :-) so I am no holding my breath here
>>>> Â Â Â either. But I agree that this would be very nice.
>>>>
>>>> Â Â Â Today I decided I needed to do some tests, to get at least some
>>>> Â Â Â feeling what can be achieved, and got to think about the motion
>>>> Â Â Â planner test, I am not sure if this is similar motion, but if it
>>>> Â Â Â is, it is very useful for testing the consequences of the rotation.
>>>> Â Â Â Moving 2mm without rotation takes about 90ms. With rotation 90 to
>>>> Â Â Â -90 (and 100000/2000 acc/feedrate), same operation takes ~170ms as
>>>> Â Â Â per the result of the motion planner test.
>>>>
>>>> Â Â Â If I understood you correctly, the logic behind the rotation is
>>>> Â Â Â that it is not started until the move to the pick location is
>>>> Â Â Â started(?).
>>>> Â Â Â So I also tested a move from end of drag to first nozzle, first
>>>> Â Â Â pick location, to see if also that where also held back by the
>>>> Â Â Â rotation.
>>>> Â Â Â This is a slightly longer move that involves both x and y.
>>>> Â Â Â Move without rotation: ~125ms. With also rotation 90 to -90,
>>>> ~170ms.
>>>>
>>>> Â Â Â So, if this test is indicative to real life, it makes me think the
>>>> Â Â Â total rotation "cost" on this double pick is around 130ms, which
>>>> Â Â Â is not insignificant.
>>>>
>>>> Â Â Â Incidentally, today, I tried yanking up the acc/feedrate with the
>>>> Â Â Â cups mounted. And it looked (by the eye) to be working just fine
>>>> Â Â Â for some reason. Not sure if it really holds together in real life
>>>> Â Â Â though.
>>>> Â Â Â I suppose the only way to know if I'll be loosing steps, is to run
>>>> Â Â Â a job. That could be a nightmare. :-o
>>>> Â Â Â I probably should setup some test job instead, so I don't have to
>>>> Â Â Â spend half a day to correct 0402 on real boards.
>>>>
>>>> Â Â Â Â - Micael
>>>>
>>>>
>>>>    måndag 29 januari 2024 kl. 09:05:18 UTC+1 skrev ma...@makr.zone:
>>>>
>>>> Â Â Â Â Â Â Â /> Main scenario is that I want the second nozzle pick, to
>>>> Â Â Â Â Â Â Â pick as soon as possible. With original, the chmt has a
>>>> Â Â Â Â Â Â Â silicon tube that does not allow free articulation, so the
>>>> Â Â Â Â Â Â Â nozzles have to rotate before picking. The cups let's the
>>>> Â Â Â Â Â Â Â motor rotate freely, so with the settings above, the second
>>>> Â Â Â Â Â Â Â nozzle pick can just pick, regardless of its current angle/
>>>>
>>>> Â Â Â Â Â Â Â Ah, I understand, thanks. For those reading along, he is
>>>> Â Â Â Â Â Â Â tlking about Rotation Mode:
>>>>
>>>> https://github.com/openpnp/openpnp/wiki/Nozzle-Rotation-Mode
>>>> <https://github.com/openpnp/openpnp/wiki/Nozzle-Rotation-Mode>
>>>>
>>>> Â Â Â Â Â Â Â Specifically the Minimal Rotation
>>>> <https://github.com/openpnp/openpnp/wiki/Nozzle-Rotation-Mode#rotation-modes> mode.
>>>>
>>>> Â Â Â Â Â Â Â I can't say if this will "pay" in the end, if you have to
>>>> Â Â Â Â Â Â Â reduce acceleration rates as a trade-off due to friction. As a
>>>> Â Â Â Â Â Â Â matter of fact, there is another rotation in the Alignment
>>>> Â Â Â Â Â Â Â step (assuming "pre-rotate", as you should). So it is unclear
>>>> Â Â Â Â Â Â Â which is worse in the end.
>>>>
>>>> Â Â Â Â Â Â Â Clearly, OpenPnP has potential for optimization too (to avoid
>>>> Â Â Â Â Â Â Â the cups and friction):
>>>>
>>>> Â Â Â Â Â Â Â Â 1. By looking ahead and rotating /both/ nozzles while moving
>>>> Â Â Â Â Â Â Â Â Â Â Â to the (first nozzle) pick location, and/or while moving
>>>> Â Â Â Â Â Â Â Â Â Â Â back to Alignment. In fact it was one of my goals to allow
>>>> Â Â Â Â Â Â Â Â Â Â Â moving more than three axes at the same time when doing
>>>> Â Â Â Â Â Â Â Â Â Â Â Advanced Motion Control, so that part would actually be
>>>> Â Â Â Â Â Â Â Â Â Â Â ready. But that kind of "looking ahead" is *not* how the
>>>> Â Â Â Â Â Â Â Â Â Â Â JobProcessor currently works, so don't hold your breath.
>>>> Â Â Â Â Â Â Â Â 2. A more low hanging fruit would be a "polarity does not
>>>> Â Â Â Â Â Â Â Â Â Â Â matter" switch on the Package. So OpenPnP could take /any/
>>>>            rotation modulo 180°, effectively halving the average
>>>> Â Â Â Â Â Â Â Â Â Â Â rotation for those parts, or even more, as we have
>>>>            placement angles in 90° increments and two are halved, and
>>>> Â Â Â Â Â Â Â Â Â Â Â one is even zeroed. And as those parts (resistors, ceramic
>>>> Â Â Â Â Â Â Â Â Â Â Â caps) are typically the most numerous in a job, this could
>>>> Â Â Â Â Â Â Â Â Â Â Â actually end up helping quite a lot. If only I had more
>>>> Â Â Â Â Â Â Â Â Â Â Â spare time...
>>>>
>>>> Â Â Â Â Â Â Â _Mark
>>>>
>>>> Â Â Â Â Â Â Â On 28.01.2024 19:03, vespaman wrote:
>>>>> Â Â Â Â Â Â Â >This is all automatic with I&S. Don't worry, you surely
>>>>> Â Â Â Â Â Â Â already have it.
>>>>> Â Â Â Â Â Â Â OK, good!
>>>>>
>>>>> Â Â Â Â Â Â Â >Frankly, I don't really understand your scenario and how
>>>>> Â Â Â Â Â Â Â these 3D printed cups are supposed to improve the situation?
>>>>>
>>>>> Â Â Â Â Â Â Â Main scenario is that I want the second nozzle pick, to pick
>>>>> Â Â Â Â Â Â Â as soon as possible. With original, the chmt has a silicon
>>>>> Â Â Â Â Â Â Â tube that does not allow free articulation, so the nozzles
>>>>> Â Â Â Â Â Â Â have to rotate before picking.
>>>>> Â Â Â Â Â Â Â The cups let's the motor rotate freely, so with the settings
>>>>> Â Â Â Â Â Â Â above, the second nozzle pick can just pick, regardless of
>>>>> Â Â Â Â Â Â Â its current angle, only need to wait for the 4mm X-move
>>>>> Â Â Â Â Â Â Â (without turning the nozzle), if I understand everything
>>>>> Â Â Â Â Â Â Â correctly. So we don't have to wait for the nozzle turning
>>>>> Â Â Â Â Â Â Â prior to pick.
>>>>> Â Â Â Â Â Â Â (This is 0402 on a ref push pull feeder, with both pockets
>>>>> Â Â Â Â Â Â Â open, both nozzle picks from the same feeder)
>>>>>
>>>>>
>>>>> Â Â Â Â Â Â Â Â -Â Micael
>>>>>
>>>>> Â Â Â Â Â Â Â -- Â Â Â Â Â Â Â You received this message because you are
>>>>> subscribed to the
>>>>> Â Â Â Â Â Â Â Google Groups "OpenPnP" group.
>>>>> Â Â Â Â Â Â Â To unsubscribe from this group and stop receiving emails from
>>>>> Â Â Â Â Â Â Â it, send an email to openpnp+u...@googlegroups.com.
>>>>> Â Â Â Â Â Â Â To view this discussion on the web visit
>>>>> https://groups.google.com/d/msgid/openpnp/887b5286-af61-4d13-ba7b-9478bfbe18fbn%40googlegroups.com <https://groups.google.com/d/msgid/openpnp/887b5286-af61-4d13-ba7b-9478bfbe18fbn%40googlegroups.com?utm_medium=email&utm_source=footer>.
>>>>
>>>> Â Â Â -- Â Â Â You received this message because you are subscribed to
>>>> the Google
>>>> Â Â Â Groups "OpenPnP" group.
>>>> Â Â Â To unsubscribe from this group and stop receiving emails from it,
>>>> Â Â Â send an email to openpnp+u...@googlegroups.com.
>>>> Â Â Â To view this discussion on the web visit
>>>> https://groups.google.com/d/msgid/openpnp/577793b0-e71e-4c42-95c6-01daa5cbdc50n%40googlegroups.com <https://groups.google.com/d/msgid/openpnp/577793b0-e71e-4c42-95c6-01daa5cbdc50n%40googlegroups.com?utm_medium=email&utm_source=footer>.
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "OpenPnP" group.
>>> To unsubscribe from this group and stop receiving emails from it,
>>> send an email to openpnp+u...@googlegroups.com
>>> <mailto:openpnp+u...@googlegroups.com>.
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/openpnp/c5747ae8-2190-4f05-abb2-03e5fb152f5bn%40googlegroups.com <https://groups.google.com/d/msgid/openpnp/c5747ae8-2190-4f05-abb2-03e5fb152f5bn%40googlegroups.com?utm_medium=email&utm_source=footer>.
>>
> --
> You received this message because you are subscribed to the Google
> Groups "OpenPnP" group.
> To unsubscribe from this group and stop receiving emails from it, send
> an email to openpnp+u...@googlegroups.com
> <mailto:openpnp+u...@googlegroups.com>.
> To view this discussion on the web visit
Maybe you should open a new thread for this. 😉
Regarding the merging:
Good question. I haven't thought this out.Â
Maybe we need to reverse it like so:
Usage in JobProcessor would be the other way around:
for each (upcomingPlacement : upcomingPlacements) {
upcomingPlacement.nozzle.moveTo(upcomingPlacement.targetLocationOfStep, MotionOption.Subordinate);
}
currentPlacement.nozzle.moveTo(currentPlacement.targetLocationOfStep);
Then in the AbstractMotionPlanner.moveTo() if the MotionOpen.Subordinate is given, you only record the subordinate location temporarily. Only record the subordinate axis-coordinates that have changed vs. currentLocation. Do not really plan the motion yet, i.e., stop after simply storing the subordinate location in the AbstractMotionPlanner.
Multiple calls with MotionOpen.Subordinate are combined by
AxesLocation.put() into the temporary subordinate location. NOTE:
machines with shared Z or C axes might overwrite the same physical
axis multiple times. You have to decide which one wins: the first
or last caller i.e. which is to be the left or right argument of
put().
Then when the next non-subordinate moveTo() comes, you take the subordinate location and put() it into the newLocation and then put() the new non-subordinate axesLocation on top.Â
Then also reset the recorded subordinate location, so it starts empty for the next round.
Note this also solves the backlash compensation problem, as it comes before it is even determined.
Much cleaner like that! 😎
_Mark
To view this discussion on the web visit https://groups.google.com/d/msgid/openpnp/00bdd901-f11e-44c7-87d6-af13bbf5a874n%40googlegroups.com.
I'll answer in the new thread 😉
Hi Mark!