Jump to content
Sturgeon's House
Sign in to follow this  
Sturgeon

Archery Thread

Recommended Posts

If you could run it in batch mode (from the command line, this is not mentioned as a feature in the user guide) then it'd be easy to apply scipy.optimize or similar. GUI's are much harder

Share this post


Link to post
Share on other sites
On ‎15‎/‎08‎/‎2017 at 10:20 PM, Xlucine said:

If you could run it in batch mode (from the command line, this is not mentioned as a feature in the user guide) then it'd be easy to apply scipy.optimize or similar. GUI's are much harder

That went way above my head :)

 

In other news: simulations seem to show that steel limbs are shit, but it's hard to get a good answer because the dynamic sim wigs out and doesn't provide usable results for arrow velocity.

Static sim seems to show that there's no way to get a steel limb close to it's tensile limit and still have a bow usable by humans, which leaves a lot of wasted mass in the limbs. Simulated crossbow limbs do better, but are realistically inefficient.

Share this post


Link to post
Share on other sites
On 8/17/2017 at 10:20 AM, Toxn said:

That went way above my head :)

 

In other news: simulations seem to show that steel limbs are shit, but it's hard to get a good answer because the dynamic sim wigs out and doesn't provide usable results for arrow velocity.

Static sim seems to show that there's no way to get a steel limb close to it's tensile limit and still have a bow usable by humans, which leaves a lot of wasted mass in the limbs. Simulated crossbow limbs do better, but are realistically inefficient.

 

Normally, for a decent model, you can run it from the command prompt. You tell it where to find a file with the input settings, and where to put the file with the output settings, and it goes off and does its thing. This is handy because writing a program that can modify the text file of input settings, call the model, and then read the output text file is very easy. So with a fancy model that can be run in batch mode you can easy write a function that takes a setting (e.g. 'bow width'), feeds that setting to the fancy model, and returns something from the calculated results.

 

This is useful because you can do lots of complicated maths involving gradient descent on this. With a black box that takes values and returns a calculated value, you can calculate the partial derivatives for each of the inputs and roll down that hill to a local minima (or roll up to a maxima, whatever). So if you wanted to calculate the required width of bow needed for a certain draw weight (with everything else held constant), the steps would look like this:

  1. you need a cost function that you want to maximise or minimise - for this example, the RMS of (ideal draw weight - calculated draw weight) will give a minimum when you've found the ideal width
  2. calculate the derivative of the output with respect to the input by running the model for a box that's a bit thicker and a bow that's a bit thinner
  3. increase or decrease the input (as determined by the direction and magnitude of the derivative you just calculated)
  4. Then take the gradient again, to see if you've found a minima

You can apply the maths for this to an arbitrary number of input variables, and the best part is that someone's already done it for you - scipy.optimize.minimize is a function that takes a black box and an initial guess, and works to minimize the output of that black box function without ever trying to understand it. Any program that can be run in batch mode can be easily fed to optimization programs, so is trivial to optimize.

Share this post


Link to post
Share on other sites
7 hours ago, Xlucine said:

 

Normally, for a decent model, you can run it from the command prompt. You tell it where to find a file with the input settings, and where to put the file with the output settings, and it goes off and does its thing. This is handy because writing a program that can modify the text file of input settings, call the model, and then read the output text file is very easy. So with a fancy model that can be run in batch mode you can easy write a function that takes a setting (e.g. 'bow width'), feeds that setting to the fancy model, and returns something from the calculated results.

 

This is useful because you can do lots of complicated maths involving gradient descent on this. With a black box that takes values and returns a calculated value, you can calculate the partial derivatives for each of the inputs and roll down that hill to a local minima (or roll up to a maxima, whatever). So if you wanted to calculate the required width of bow needed for a certain draw weight (with everything else held constant), the steps would look like this:

  1. you need a cost function that you want to maximise or minimise - for this example, the RMS of (ideal draw weight - calculated draw weight) will give a minimum when you've found the ideal width
  2. calculate the derivative of the output with respect to the input by running the model for a box that's a bit thicker and a bow that's a bit thinner
  3. increase or decrease the input (as determined by the direction and magnitude of the derivative you just calculated)
  4. Then take the gradient again, to see if you've found a minima

You can apply the maths for this to an arbitrary number of input variables, and the best part is that someone's already done it for you - scipy.optimize.minimize is a function that takes a black box and an initial guess, and works to minimize the output of that black box function without ever trying to understand it. Any program that can be run in batch mode can be easily fed to optimization programs, so is trivial to optimize.

Thanks for the explanation!

 

I'm actually in touch with the guy who made the thing - he's pretty happy to have email convos with randos. So I can ask him about this.

Share this post


Link to post
Share on other sites

His response:

 

"...

Running in batch mode is currently not possible. The program doesn't define the necessary command line interface and doesn't write any simulation results to files. Just as you said, supporting batch mode would allow users to run simulations in an automated way and for example pass the results to an optimisation algorithm. So it's definitely a feature I'd like to implement.

 
Actually I even experimented with that some while ago without releasing anything. Here's for example a half-baked tutorial on using Bow Simulator with the Python scripting language:
Some of the results were really cool. So yeah... maybe in version 0.4 (as features for 0.3 are already defined.)
..."

Share this post


Link to post
Share on other sites

So, after some more noodling around I think I have more information on why steel bows never took off (beyond hysteresis).

 

One of the secrets to making a bow is tillering - which is nothing much more than thinning the thickness of the limbs across the length of the bow in order to make the stress on each part as even as possible.

Bowsim allows you to look at the stress along the length of the limb, so it gives you a very quick idea of how the load is distributed. A well-designed bow limb will end up having an almost flat stress curve for 2/3 of the length, at which point it drops off:

 

BsJgLiI.jpg

 

The above also shows the problem with steel bows, because that short little recurve hits its optimal load distribution at around 130 pounds worth of draw weight. This is heroic stuff - about the maximum that anyone can draw. But going lower ends up 'wasting' a lot of the limbs potential - which makes the limb slower than it should be. And the calculated values (which, for the above bow, are absurdly good) don't take into account the energy lost to the limb heating itself as it moves.

 

So, as I indicated earlier, one of the major issues with steel bow limbs is that they end up overbuilt whenever you're not dealing with absurdly high draw weights. The result here is that you end up with a toothpick recurve bow which takes

 

Bow material:

  • 4160 steel, oil quenched and annealed
  • Density: 7850 kg/m3
  • Yeild: 1070 MPa
  • MoE: 205 GPa

 

Bow dimensions:

  • Profile (length/curvature): 0.4/0; 0.1/-3; 0.1/-5
  • Width (relative position/width): 0/0.02; 0.6/0.005
  • Height (relative position/height): 0/0.006; 0.6/0.005

8F0DZ1W.jpg

 

Share this post


Link to post
Share on other sites

I just ran a sweep through Bowsim to look at wooden crossbows.

 

So far, it looks like designing to a maximum stress level means that your crossbow limbs should be as long as you can make them, as wide as you can make them and have approximately a pyramid shape. Not exactly a revelation.

 

The surprising result was that, for a given configuration of crossbow, there is an optimal draw distance over/under which you start losing arrow speed for a given level of limb stress.

 

I'll edit in some roughly optimal results later.

Share this post


Link to post
Share on other sites

As promised:

 

Material: Pacific Yew

- Density: 705 kg/m3

- MoE: 9.31 GPa

- MoR: 104.8 MPa (stress target: 104 MPa)

 

Base Proportions:

- Limb length: 0.4 m

- Width: 0(0.1); 0.4(0.02)

- Profile: 0(0); 0.4(0)

- Height: 0(0.009); 0.4(0.009)

- Brace height: 0.1 m

- Draw length: 0.4 m

- Arrow mass: 0.04 kg

 

Base performance:

- Final draw force: 507N (114 lb)

- Estimated arrow velocity: 58m/s

 

Sweep 1: draw length (adjust height)

 

0.2m

- Height: 0(0.015); 0.4(0.015)

- Final draw force: 799N

- Estimated arrow velocity: 39.5m/s

 

0.3m

- Height: 0(0.012); 0.4(0.012)

- Final draw force: 761N

- Estimated arrow velocity: 57m/s

 

0.4m

- Height: 0(0.009); 0.4(0.009)

- Final draw force: 507N (114 lb)

- Estimated arrow velocity: 58m/s

 

0.5m

- Height: 0(0.0065); 0.4(0.0065)

- Final draw force: 306N

- Estimated arrow velocity: 49m/s

 

Sweep 2: draw limb length (adjust height)

 

0.35m

- Height: 0(0.009); 0.4(0.009)

- Final draw force: 331N

- Estimated arrow velocity: 47m/s

 

 

0.4m

- Height: 0(0.009); 0.4(0.009)

- Final draw force: 507N

- Estimated arrow velocity: 58m/s

 

0.45m

- Height: 0(0.0115); 0.4(0.0115)

- Final draw force: 679N

- Estimated arrow velocity: 64m/s

 

Sweep 3: reflex/deflex (adjust height)

 

0(0); 0.4(0.5)

- Height: 0(0.011); 0.4(0.011)

- Final draw force: 751N

- Estimated arrow velocity: 68m/s

 

 

0(0); 0.4(0)

- Height: 0(0.009); 0.4(0.009)

- Final draw force: 507N

- Estimated arrow velocity: 58m/s

 

0(0); 0.4(-0.5)

- Height: 0(0.0075); 0.4(0.0075)

- Final draw force: 347N

- Estimated arrow velocity: 50m/s

Share this post


Link to post
Share on other sites

So basically the stuff you want for a wooden crossbow limb is:

- The longest limb length you can get

- The widest limb possible

- A roughly triangular/pyramidal profile

- A draw length equal to your limb length

- The shortest possible brace height and/or some deflex in the limb

 

Edit - one output:

- 30cm working limb length (ie: not too difficult to wander through doors etc), 4cm stock width.

- made of yew

- Width: from 10cm at the stock to 2cm at the tips

- Profile: 3.5cm of deflex at the tips

- Thickness/Height: 9cm all the way through

- Brace height: 7cm

- Draw length: 30cm (ie: stroke is 27cm)

- Bolt weight: 40g (historical crossbow bolt with fine armour-piercing tip)

- Estimated draw weight: 645N (145 pounds) - well within the range that most people can pull.

- Estimated bolt speed: 55 m/s (probably a bit of an overestimate)

- Estimated bolt energy: 62J

 

A less chubby limb (7.5cm) gets you a 500N draw and 49m/s bolt speed. Perversely, lowering the draw length to 20cm actually does very little to your performance here, apart from making the draw weight skyrocket to 900N. This holds even when your effective draw length is 10cm - which seems to validate the principle that medieval crossbows worked on (massive draw weights, tiddly draw lengths).

Share this post


Link to post
Share on other sites

I've been fiddling around some more with crossbow designs, and I think I have a very simple explanation for the draw length issue.

 

The simple answer is that, if you're limited by the stress of your materials (which you are), the highest arrow speed which can theoretically be achieved for a given level of stress is achieved by shortening the draw length and ramping up the draw weight:

 

uatjFTW.jpg

 

This is from a simulation of a bow made from Balau, with only the limb thickness and draw length changed. At every stage, the draw length was adjusted for a given limb thickness so that the highest point of stress on the limb did not exceed the breaking strain of the material (120 MPa). The result; as draw length shortens, the velocity goes up more-or-less linearly but the draw weight goes up exponentially. At some point you reach an area of sharply diminishing returns governed by the material properties of the prod.

 

This, of course, does not take into account issues such as the relative loss of energy by the thicker string, or the issues that you will encounter once your high draw weights start making your triggers difficult to engineer.

 

What it does show is that, contra to internet legend, medieval europeans were not idiots - they knew that the best way to get more penetration out of their crossbows (ie: more velocity) was to ramp up the draw weight, and that the tradeoff was a shorter draw length for a given design of bow. Their designs were optimised to make the most use out of the tensile strength of the materials they had on hand.

Share this post


Link to post
Share on other sites

@Toxn  Magnificent dog.....Greyhound?  Greyhound/Pharoah?

 

I have Lurchers:

 

utrR0NR.jpg

ojvOLkG.jpg

 

I'm also getting kind of interested in horse-archery, hence me being in here poking about.....Have a Scythian Bow (stashed with a friend at my country-residence), still need a horse though. 

 

Share this post


Link to post
Share on other sites
5 hours ago, Sgt.Squarehead said:

@Toxn  Magnificent dog.....Greyhound?  Greyhound/Pharoah?

 

I have Lurchers:

 

utrR0NR.jpg

ojvOLkG.jpg

 

I'm also getting kind of interested in horse-archery, hence me being in here poking about.....Have a Scythian Bow (stashed with a friend at my country-residence), still need a horse though. 

 

He's a township greyhound: a mongrel with some greyhound in there somewhere, bred to race and hunt.

 

I've always wanted a hungarian bow, but they're expensive around these parts. Horses, on the other hand...

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×