#robotics Logs
Dec 01 2013
#robotics Calendar
00:03 MrCurious or money enough to hire it
00:03 MrCurious and stripped the head off a screw in my stepper lead screw coupling
00:03 MrCurious WHO makes screws out of aluminum!
00:04 GargantuaSauce sounds like it's time for some duct tape
00:04 GargantuaSauce no jeez what am i thinking
00:04 GargantuaSauce hot glue...
00:07 GargantuaSauce http://www.youtube.com/watch?v=2vBi6LNklRg
01:08 rue_shop2 ok Kp, 4 is stable, 5 is not
01:08 rue_shop2 actually, 4 has some ring to it
01:09 GargantuaSauce you and your adjustable control loops
01:10 rue_shop2 hmm ok 4 is underdamed
01:10 rue_shop2 I wonder where damped is
01:10 rue_shop2 and wonder where stupidly unstable is
01:10 GargantuaSauce stupidly unstable is the above link
01:10 rue_shop2 3 is underdamped
01:11 rue_shop2 2 is underdamped
01:12 rue_shop2 heh, 1 is underdamped
01:12 GargantuaSauce shouldn't you be dicking with D?
01:13 rue_shop2 its just P right now
01:13 rue_shop2 I'm dialing Kp up :)
01:13 rue_shop2 9 is really unstable
01:14 rue_shop2 okok, I'm gonna hurt something
01:15 rue_shop2 Kp = 4 will gradually ring out
01:15 rue_shop2 GargantuaSauce, you any good at tuning PID?
01:16 GargantuaSauce no but i believe i understand the process
01:16 GargantuaSauce just need to get around to making a controller with a bunch of encoders :V
01:17 rue_shop2 I dont recall this
01:17 rue_shop2 do I adjust Kp so that its just over or underdamped?
01:17 GargantuaSauce turn up P until it is just a bit overdamped i think
01:17 rue_shop2 'turn' heh
01:17 GargantuaSauce then crank I until it overshoots, and back off
01:17 GargantuaSauce then add some -D to make it nice and stable
01:17 rue_shop2 hold on, I have to fork code
01:17 GargantuaSauce hehe
01:18 rue_shop2 iirc, I should go fom P -> PD -> PID
01:18 GargantuaSauce it depends
01:19 rue_shop2 oh, buddy is PI
01:19 rue_shop2 k, I'll do PI next
01:19 GargantuaSauce and just because i feel the need to be endlessly pedantic about this, you have a stable timestep right?
01:19 GargantuaSauce ie a timer and not delay()
01:21 rue_shop2 oh right, I forgot about that
01:21 rue_shop2 on buddy I used the adc, but this is encoder input
01:21 GargantuaSauce yeah tuning is pretty pointless till you have that sorted i think
01:22 MrCurious gargantuan. r u using alternating tripods for walking
01:22 GargantuaSauce that is the second gait that is demonstrated
01:22 GargantuaSauce the first one is ripple or whatever you wanna call it
01:22 MrCurious i think you need to work out a tap dance routine... :)
01:22 GargantuaSauce i am totally going to make this thing dance, i just need some more advancement on the software side
01:22 e_shop2 cuts the motor power as the pwm is annoying
01:23 GargantuaSauce eeeeeeeeeeeeeee
01:23 GargantuaSauce watch my video ru
01:23 GargantuaSauce e
01:24 rue_shop2 is it of soemthing you made?
01:24 GargantuaSauce yes
01:24 MrCurious well made from bits others made :)
01:25 GargantuaSauce made of atoms god made! the human hubris on ya
01:25 MrCurious https://www.youtube.com/watch?v=1x1wjGKHjBI
01:25 MrCurious god, how quaint
01:25 MrCurious do you assert god is a sun? do you worship the aztek sun god?
01:26 rue_shop2 nice, how come the floor level looks out on some legs?
01:26 GargantuaSauce not all the feet are the same length
01:26 rue_shop2 do I see leg tip force sensor provisions?
01:26 rue_shop2 ah ik is out?
01:26 rue_shop2 damn reality?
01:27 rue_shop2 which leg is the wrong number of damned mm from what its usppoed ot be?
01:27 GargantuaSauce no force sensors, just rubber bands i was trying to keep stretched over the feet
01:27 rue_shop2 adjusting the model on buddy is gonna be a pain in the ass
01:27 GargantuaSauce that one is a tiny bit short and the one next to it is a tiny bit long
01:28 GargantuaSauce i need to get little rubber appliance feet
01:28 e_shop2 looks at the bin of rubber th
01:28 GargantuaSauce yeah i don't have a bin :(
01:28 rue_shop2 error = position - control;
01:28 rue_shop2 reaction = error * Kp;
01:29 rue_shop2 hmm, I suppose I leave Kd and Ki at ... 1? 0?
01:29 GargantuaSauce 0
01:31 rue_shop2 hmm, need an old error...
01:31 GargantuaSauce yup
01:32 GargantuaSauce and a running total
01:32 rue_shop2 names, names
01:32 GargantuaSauce there are 26 letters to choose from
01:33 GargantuaSauce lemme see what i use in my quad thing
01:33 rue_shop2 int seems to be a god damned keyword :)
01:34 GargantuaSauce https://bitbucket.org/Ultrasauce/robots/src/1da256de4bec719fc5687ae184fd325373051f45/stm32/fc/main.c?at=master#cl-143
01:34 rue_shop2 differ = error - lastError;
01:34 rue_shop2 damn, there is a polarity
01:34 GargantuaSauce yeah that's backwards
01:34 rue_shop2 if the error goes down... the term should...
01:34 rue_shop2 fair enough
01:35 rue_shop2 that on an avr?
01:36 GargantuaSauce no, stm32f4
01:36 rue_shop2 k, cause the fp would bite an avr
01:36 GargantuaSauce yup
01:36 rue_shop2 then again, we did a pretty good one on a 2Mhz HC11 at school
01:36 GargantuaSauce yeah and fixed point stuff can do just fine, it's just a pain
01:37 GargantuaSauce i like throwing a modern architecture at the problem :)
01:37 rue_shop2 error = position - control;
01:37 rue_shop2 differ = lastError - error;
01:37 rue_shop2 inter += error;
01:38 GargantuaSauce inter += error * dt
01:38 rue_shop2 ok, see if I remmeber right,
01:38 GargantuaSauce differ = (lastError - error) / dt
01:38 rue_shop2 dt there?
01:38 GargantuaSauce yeah
01:38 rue_shop2 oh, I see
01:38 rue_shop2 technically dt is 1
01:38 GargantuaSauce you could probably get away with defining the timestep to be 1
01:38 GargantuaSauce yeah
01:38 rue_shop2 constant
01:39 rue_shop2 see if I remember right
01:39 rue_shop2 P - D + I
01:39 GargantuaSauce yeah those are the usual signs of the coefficients
01:41 GargantuaSauce (but it'll need to be positive since you have it that way)
01:41 rue_shop2 no timer, Ki = 0, Kd = 0, still working fine
01:41 rue_shop2 cool
01:42 rue_shop2 next, timer
01:42 rue_shop2 hmm
01:42 rue_shop2 oh, easy, pwm rollover
01:43 GargantuaSauce yeah and i think there's some very significant advantages to using the same period as the pwm
01:43 GargantuaSauce (though it might be too fast for the avr to pull off the control loop every cycle)
01:43 rue_shop2 like ' no point in going faster'
01:43 GargantuaSauce but an integer multiple will do well
01:43 GargantuaSauce well that and some stability stuff
01:43 rue_shop2 see if the steps are too big or if I have to scale it all back after the calcs
01:44 rue_shop2 just playing tonight
01:44 GargantuaSauce yeah writing control loops, totally recreational activity
01:45 rue_shop2 ?
01:45 rue_shop2 dont tell me your one of those people who dont beleive in recreational coding?
01:46 GargantuaSauce that was not sarcasm
01:46 rue_shop2 ah, cool :)
01:47 GargantuaSauce well it was a tiny bit i guess
01:47 GargantuaSauce but coding certainly is one of the primary things i do for fun
01:50 GargantuaSauce i really am looking forward to seeing yours walk
01:51 GargantuaSauce is the construction close to completion?
01:51 GargantuaSauce or, functionality i should say
01:55 rue_shop2 this isnt a nice setup, its a ~300 line encoder mounted on the motor
01:56 rue_shop2 GargantuaSauce, right now Its mainly power distribution wiring that needs doing
01:56 rue_shop2 well then I have to go thru and check all the motor polarities...
01:57 rue_shop2 did you see the video of the pushup?
01:57 GargantuaSauce yeah
01:57 rue_shop2 ok, well, I dont have any newer videos to post :)
02:03 rue_shop2 ok, if this works, its timed P
02:05 rue_shop2 ok that killed Kp
02:05 rue_shop2 I have to be down to 2 now
02:05 rue_shop2 which is odd, cause it should be the same effective update rate
02:06 GargantuaSauce oh i suppose you can't sample the encoder too often
02:06 GargantuaSauce cause you'll just get 0s and the occasional 1
02:06 rue_shop2 its not polled, its interrupt
02:06 rue_shop2 oldstate = oldstate | (PIND & 0x0C); // Update Oldstate
02:06 rue_shop2 position += offsets[oldstate]; // Update Position
02:06 rue_shop2 oldstate = oldstate >> 2;
02:07 rue_shop2 I should put that to assembler and see if theres an optimization
02:07 rue_shop2 anyhow
02:07 GargantuaSauce oh that does not work the way i thought it did
02:07 rue_shop2 offset is a 16 value lookup table
02:08 rue_shop2 ok, setting Ki to 1
02:08 rue_shop2 ng: inter may be used uninitialized in this function [
02:08 rue_shop2 hehe, maybe I better fix that
02:09 rue_shop2 odd
02:09 rue_shop2 static error with an I term
02:11 rue_shop2 I am both compiling and uploading the correct source
02:14 rue_shop2 hu!?
02:14 GargantuaSauce there is no such thing as correct source :V
02:15 rue_shop2 error = position - control;
02:15 rue_shop2 differ = lastError - error;
02:15 rue_shop2 inter += error;
02:15 rue_shop2 reaction = (error * Kp) - (differ * Kd) + (inter * Ki);
02:15 rue_shop2 lastError = error;
02:15 rue_shop2 SetSpeed ( limit(reaction, -255, 255));
02:15 rue_shop2 I can hold it just out and its not ramping up
02:15 GargantuaSauce that's what i is for
02:15 rue_shop2 I know, its not working
02:15 rue_shop2 I dont see how it cant
02:15 GargantuaSauce also d is backwards twice
02:16 rue_shop2 unless Ki is oscillating
02:16 rue_shop2 no, cause I can hold it out
02:16 rue_shop2 your saying it should be + and error - lasterror
02:17 GargantuaSauce yeah that would be equivalent to what you have now
02:17 GargantuaSauce and not confusing :V
02:18 GargantuaSauce try negating error just for shits n giggles
02:34 rue_shop2 I just checked the feedback polarity and its right
02:35 GargantuaSauce hm
02:36 GargantuaSauce well happy debugging, imma conk out now
02:36 rue_shop2 gngiht
02:36 rue_shop2 wtf
02:37 rue_shop2 kp = 0 no diff
03:05 rue_shop2 oh
03:06 rue_shop2 integrating too fast, variables are rolling over
03:09 rue_shop2 I have to slow down the integration rate without changing the calculation interval
04:08 rue_shop2 aha
04:08 rue_shop2 it occurs to me that there are two types of encodermotors
04:09 rue_shop2 ones that are made for position control, and ones that are made for position reporting
04:09 rue_shop2 what I have here is one for position reporting, and I'm trying to use it for position control
04:09 rue_shop2 the motor is just plain tooooooo lumpy
05:06 rue_shop2 the integration term is trickey, to make it work, I'm having to scale its input, then integrate, then limit, then scale
05:11 Faek How are you integrating it?
05:36 rue_house inter += limit((error/rate)+inter, -255, 255);
05:36 rue_house ish
05:37 rue_house the rate keeps it from integrating too fast
05:37 rue_house then again, that might be the same as dividing it alot when its done
05:37 rue_house but its not
05:38 rue_house it changes the rate of accumulation, not the level of accumulation
05:38 rue_house hmm
05:38 rue_house I'm sleeping on my feet
05:39 zap0 counter++; then only use the higher 8bits as a readable value. value = counter >> 8;
05:40 rue_bed if its not limited, it rolls over
05:40 rue_bed having a pid integrator roll over isn't good
05:41 rue_bed iirc i have a book with a chapter about how to solve integrator saturation problems
05:42 rue_bed the P and D are really straightforward and lend themselvs to integer math quite nicely
05:43 rue_bed I is evil and causes hunting
08:00 GuShh_ rue_house: how to improvise a tiny boring bar for plastics... old allen key, cut down to size, grind profile, done.
08:00 Shh_ needs to order a 14.5mm
08:01 GuShh_ hrmm a 12mm as well, my index goes up to 10mm only
10:38 robotustra hi
10:41 ace4016 hi
11:17 GuShh_ look it's robotustra
11:17 GuShh_ alien impersonator and russian boy
13:05 rue_bed http://www.youtube.com/watch?v=v7lsbwm-dvc
14:17 MrCurious anything interesting going down?
14:18 GargantuaSauce i am pondering getting out of bed
14:18 MrCurious i already conquored that challenge
14:18 MrCurious i need to get some MDF like maerial for my CNC bed
14:21 rue_house I'm pondering getting off my ass
14:21 rue_house I been thinking about the PID
14:22 rue_house still trying to work out how to balance the rate of the integrator vs its saturation value, vs not saturating it
14:23 GargantuaSauce yeah that's a pain
14:23 rue_house ah, here it is "feedback control of dynamic systems"...
14:25 rue_house page 100 integrator antiwindup
14:35 robotustra anal probe
14:37 rue_house 'the solution is to turn off the integrator when the actuator output saturates'
14:39 robotustra http://static.medportal.ru/pic/common/hash/1/a/1a614510-b6b4-4602-975a-f2d03d60dd1f.jpg
14:39 rue_house doesn't black spy always win?
14:42 rue_house 'Preventing the integral term from accumulating above or below pre-determined bounds'
14:42 rue_house aha, thats what I did
14:46 robotustra Today I finded out that black africans are cromanions while all other peoplea are the mixtire of cromanions with about 2.5% of gens form neandertals.
14:47 MrCurious neandertals rule, humans can suck it!?
14:48 MrCurious i dont buy into that
14:48 MrCurious just racist people looking for justifications for their beliefs
14:48 rue_house be nice to the monkeys or they will throw poo at you
14:48 MrCurious when i was in 2nd grade, i got into a massive poo fight with monkeys
14:49 MrCurious whole class was flinging
14:49 MrCurious oddly, i think the humans started it, but the monkeys had ep on their side, and they ended it
14:49 MrCurious we retreated
14:49 robotustra reverse
14:49 robotustra cromanions are better than mixture
14:50 robotustra because they had bigger brain and bigger dicks
14:50 rue_house Tom_itx, how did you manage to avoid integrator windup?
14:50 robotustra and bigger boobs
14:50 MrCurious i am just going to blink, and hope someone else taps in tooo thi conversastion
14:51 robotustra because you are retarded a bit, sure
14:51 robotustra you are not free in the country of freedom
14:51 robotustra it's not a rasism at all
14:51 robotustra it's just genetic diversit
14:51 robotustra diversity
14:52 robotustra and we can't close eyes on it
14:52 MrCurious diversity is good. sci-fi teaches us if we kill off our diversity, we will die out, and have to rob spae travelers of their dna
14:52 robotustra we have races and you can't close eyes on it
14:52 robotustra of cause
14:52 robotustra but I jus inform you what I got
14:53 robotustra that modern human is not exactly came from cromanions
14:53 MrCurious 6 days maker holiday coming to an end
14:53 robotustra but has some mixture with neandertals
14:54 robotustra which are absolutely different kind of humans
14:54 robotustra and that cromanions who stay in africa and didnt migrate - they didn't have that part in genome
14:54 MrCurious i thought neandertols died out, same with cromags
14:54 robotustra no
14:55 robotustra we are ancistors of cromanions
14:55 robotustra reverce
14:55 MrCurious so the rule of humanity... if you cant beat it, F### it and see if your babies can beat it
14:55 robotustra вуысутвфтеы
14:55 robotustra descendants
14:56 MrCurious like bio borgs, absorbig all.... resistance is futile
14:56 robotustra we are descendants of cromanions
14:57 robotustra with some percentage of gens from neandertals
14:57 MrCurious cough PID cough
14:58 armyofevilrobots @rue_house : Alternatively use http://www.amazon.ca/Control-System-Design-Introduction-State-Space-ebook/dp/B008TVLNI0
14:58 armyofevilrobots although the math makes me bleed from the eyes.
14:59 rue_house http://www.microchip.com/forums/m224675.aspx
15:00 rue_house in that code, the guy chooses the rates that the I and D term are evaluated, and everything is bounded
15:03 armyofevilrobots What's the control loop for?
15:04 rue_house just PID loop, a real one
15:04 armyofevilrobots Right, but, what's it hooked up to? Like, temperature control, servo feedback, etc?
15:05 armyofevilrobots sorry, idle curiosity.
15:05 rue_house not sure
15:05 rue_house oh :) hi
15:05 armyofevilrobots Ah. OK. SOrry, just misunderstood. Exploring PID for PID sake :)
15:05 rue_house I was playing with a motor control pid loop last night
15:05 rue_house integrator windup problems
15:06 armyofevilrobots Ah, got oscillating between two ends of max_int eh?
15:06 armyofevilrobots Bah, wife wants me out digging foundation piers. back later.
15:07 rue_house I was abel to do two things to get in sorta under control, I used some floating point to scale the integrated error, and I bound the integral term
15:07 rue_house yea, I have to run to secha nd get firewood and fix a phone line
15:07 rue_house then do grocery shopping,
15:07 rue_house laundry, and kitty litter
15:07 rue_house not gonna have any time left for my PID
15:07 robotustra well australopitecs
15:08 rue_house PID is so nice and simple till it hits the real world
15:10 robotustra нуз
15:10 robotustra yep
15:10 robotustra I'll not use it
15:12 Tom_itx you can't master it unless you do
15:14 robotustra I'll do linear interpolation
15:14 robotustra + statistics
15:14 robotustra but not 3 coefficients
15:15 robotustra actually PID it's just 3 terms of expansion to the set
15:15 robotustra I will use 2 terms
15:15 robotustra linear + correction
15:16 robotustra it should be faster
15:16 robotustra I don't need precise movements
15:17 robotustra the imperfections in movements of robot makes the robot more human-ish
16:30 MrCurious mdf for cnc bed aquired
17:51 MrCurious https://www.dropbox.com/s/seupjw17etmqold/2013-12-01%2014.41.12.jpg
18:02 robotustra stormy ovations!
18:02 robotustra applause
18:02 robotustra standing
18:02 MrCurious thats my bid for everyone look at me :)
18:04 robotustra :)
18:04 robotustra dead bodies around
18:05 robotustra or they just envy silently
18:05 robotustra or nervously smoking in the bathroom
18:19 armyofevilrobots @MrCurious. is that 3d printed router holder, or just my eyes fooling me?
18:19 MrCurious from ebay, milled from 3 pieces of some plastic
18:19 armyofevilrobots Ah OK. Cool
18:19 MrCurious too dense and solid to be printed
18:19 armyofevilrobots Probably uhmw then. Tough as hell.
18:20 MrCurious lilttle progresses
18:20 armyofevilrobots What cnc plans are you working from?
18:20 MrCurious from a picture off the internet
18:20 armyofevilrobots hahaha. Best kind!
18:20 MrCurious just slapping it together as i grock what to do next
18:20 armyofevilrobots Here's my part way through the build: http://www.youtube.com/watch?v=tZFg0bdnzyE
18:21 armyofevilrobots It's much nicer put together now.
18:21 MrCurious nice. if i did it again, i would go the 8020 route
18:22 armyofevilrobots Here's cuts: http://www.youtube.com/watch?v=bn0gffqKfvs
18:23 MrCurious lookss a fun devicec
18:23 MrCurious looks like you may have been at this a while
18:23 armyofevilrobots Haha. Yeah, a bit.
18:23 MrCurious you have purple toe nails? :P
18:24 armyofevilrobots That's my wife :P
18:24 robotustra going to mill some orbits for robot eyes
18:24 armyofevilrobots We're just building out our new shop right now, not 5 minutes from Rue_*'s house.
18:25 MrCurious i have a similar dust collector that i will need to bring onllline
18:25 MrCurious rue needs a bigger cnc
18:25 robotustra armyofevilrobots: what postal code?
18:25 MrCurious his robots arent near as big as they coud be
18:25 armyofevilrobots v0n2w4
18:25 armyofevilrobots Rue now has access to one (via me), so that could happen.
18:26 myofevilrobots wants to build a steampunk polar coordinate
18:26 robotustra I think rue is in quebec
18:26 robotustra I thought
18:27 GargantuaSauce no he's one of those filthy PACIFIC COASTERS
18:27 MrCurious was 84F here today
18:28 armyofevilrobots It's gonna get to freezing tonight here.
18:28 robotustra it's only me who lives in quebec?
18:28 armyofevilrobots 12C during the day.
19:18 robotustra armyofevilrobots: good forest is there
19:19 robotustra armyofevilrobots: how much is the land there?
19:32 rue_house armyofevilrobots, naa cloud cover
19:33 rue_house I think I'll go hack the PID again
19:43 rue_shop2 hmm
19:55 rue_shop2 yea, the rate of the error and the limit of the error have to be controlled
20:13 rue_shop2 need to work in some deadzone tho, this pwm will drive me nuts
20:17 GargantuaSauce yeah the pwm period of my servos is in the audible zone and i think they cause the smps they're powered by to switch between constant and discontinuous operation at the same rate
20:18 GargantuaSauce and those bigass inductors are just speakers in disguise
20:24 MrCurious https://www.dropbox.com/s/d88bs5p9z2w375g/2013-12-01%2018.05.23.jpg
20:24 GargantuaSauce is it happening
20:25 MrCurious yup
20:25 MrCurious think it is now down to 2 guesses to work out what it is
20:27 rue_shop2 oh oops
20:28 rue_shop2 I limited the integration term wrong
20:56 rue_shop2 so far I like PD better than PID
20:57 Jak_o_Shadows Ha, yeah, bit simpler
20:57 rue_shop2 the integrator is pissing me off
20:58 Jak_o_Shadows Do you have it in terms of transfer functions, or just doing it?
20:58 rue_shop2 http://codepad.org/rQ5QgCkd
20:58 Jak_o_Shadows aaaand, that's a no.
20:59 rue_shop2 you know its running on an avr, right?
20:59 Jak_o_Shadows limit is a function that clamps the first term to between the 2nd and third arguments?
20:59 rue_shop2 yup
20:59 Jak_o_Shadows Yeah, I have no experience in actually doing an PID system, I just know some theory
20:59 rue_shop2 yea, the real world sucks
20:59 Jak_o_Shadows well, yeah.
21:00 armyofevilrobots A lot of the time you don't even need the I term.
21:00 rue_shop2 PD is working really well
21:00 rue_shop2 I can dial P up really really far
21:01 Jak_o_Shadows If you don't have much/any steady state error, screw the I term.
21:02 rue_shop2 I'm also being unfair in that its a motor with an encoder on the back
21:02 rue_shop2 I'm not giving it many error counts
21:04 rue_shop2 this motor IS doing a really good impression of a stepper tho :)
21:13 rue_shop2 yay, I can throw that code on the cnc machine
21:15 rue_shop2 sweet, still works as integer math
21:22 rue_shop2 !!
21:22 e_shop2 looks at the re
21:22 rue_shop2 hmmmmmm
21:22 rue_shop2 step and direction....
21:45 MrCurious step left.....around....and together with the right.
23:35 MrCurious hmmmm
23:46 rgantuaSauce tries to jam a 4mm shaft into a 5/32"
23:48 rue_shop2 root@freebee5:/files/programming/c/avr/atmega32/Servo32/enc_pwm_PID_btn# units 5inch/32 mm
23:48 rue_shop2 * 3.96875
23:48 rue_shop2 should go
23:48 GargantuaSauce nope :(
23:48 e_shop2 passes GargantuaSauce a larger ha
23:48 GargantuaSauce need to put this bearing a fair ways up the shaft
23:49 rue_shop2 easy
23:49 e_shop2 takes a dremel and cuts a radial slot thru half the bea
23:49 rue_shop2 see, expansion bearing!
23:50 GargantuaSauce heh
23:50 rue_shop2 the idea is SO usefull, I did it to all the bearings in your shop!
23:50 rue_shop2 :)
23:51 rue_shop2 its ok, you can thank me later
23:53 MrCurious could use sand paper?
23:53 rue_shop2 why is it, that every time I think I have a problem I can throw the lathe at, I work it into a solution that dosn't require the lathe?
23:54 rue_shop2 make a small dremel grinding bit and grind out a 4-40 die to be a 4mm die
23:54 rue_shop2 a die die....
23:54 rue_shop2 hmm
23:54 rue_shop2 instead of a theading die
23:54 rue_shop2 tell me if that idea works