listrophy
October 17, 2015
1.6k

Simplify Challenging Software Problems with Rocket Science

Aerospace engineering is really no more magical than programming, and yet it's shrouded in such mystery and mysticism that practically no one bothers to study it. I'll show you how to apply concepts from rocket science to challenging software problems, allowing you to spend more time coming up with answers rather than interpreting inputs. (40 minute version presented at EuRuKo 2015)

October 17, 2015

Transcript

— @listrophy
2. –Ashe Dryden “Whenever Brad is drinking, you wanna make sure

you're sitting next to him, because instead of being obnoxious, he teaches you orbital mechanics.”

4. Agenda • Reduce Cognitive Load • Visualize Simulations with Graphics

• Control and Respond to Real World Processes
5. Agenda • Reduce Cognitive Load • Visualize Simulations with Graphics

• Control and Respond to Real World Processes

7. Scalars & Collections Primitives & Arrays • x, y, z

= 2, 3, 5 • Math.sqrt(x**2 + y**2 + z**2) • array.zip(other).map{|(i,j)| i+j} • [m[0][0]*v[0]+m[0][1]*v[1], m[1][0]*v[0]+m[1][1]*v[1]] Vectors & Matrices • vector = Vector[2, 3, 5] • vector.magnitude # or vector.r • vector_1 + vector_2 • matrix * vector

9. Vector • Underlying implementation: Array • Usually Numeric, but really

anything • Native operations are different (c.f. addition) • Denoted by: ⟨x,y⟩ or x or x or or ⽷x⽹   ⽸y⽺   ⽷2⽹   ⽸0⽺

13. Matrices, or “Linear Transformations” • Structurally like a 2D Array

• Used to Scale, Rotate, Skew, Perspective, Translate • Common in CSS3 • Useful for 2D & 3D graphics • Common in Kinetics & Material Mechanics • Denoted by M or M or or ⽷a  b⽹   ⽸c  d⽺   ⽷1  4⽹   ⽸9  0⽺
14. Matrix Times Vector 1.  ⽷a    b⽹⽷x⽹

⽸c    d⽺⽸y⽺   2.  ［x    y］        ⽷a    b⽹        ⽸c    d⽺   3.  ⽷ax+by⽹        ⽸cx+dy⽺
15. Matrix Times Vector def matrix_times_vector(m, v) a, b = m[0]

c, d = m[1] x, y = v [ a*x + b*y, c*x + d*y ] end require 'matrix' def matrix_times_vector(m, v) m * v end
16. Matrix Times Vector def matrix_times_vector(m, v) a, b = m[0]

c, d = m[1] x, y = v [ a*x + b*y, c*x + d*y ] end require 'matrix' def matrix_times_vector(m, v) m * v end NOW WITH DIM CHECKS!

19. Hooke’s Law for Anisotropic Materials ⽷σ₁₁⽹  ⽷C₁₁  C₁₂  C₁₃  C₁₄

C₁₅  C₁₆⽹⽷  ε₁₁⽹  ⾇σ₂₂⾇  ⾇C₁₂  C₂₂  C₂₃  C₂₄  C₂₅  C₂₆⾇⾇  ε₂₂⾇   ⾇σ₃₃⾇=⾇C₁₃  C₂₃  C₃₃  C₃₄  C₃₅  C₃₆⾇⾇  ε₃₃⾇   ⾇σ₂₃⾇  ⾇C₁₄  C₂₄  C₃₄  C₄₄  C₄₅  C₄₆⾇⾇2ε₂₃⾇   ⾇σ₁₃⾇  ⾇C₁₅  C₂₅  C₃₅  C₄₅  C₅₅  C₅₆⾇⾇2ε₁₃⾇   ⽸σ₁₂⽺  ⽸C₁₆  C₂₆  C₃₆  C₄₆  C₅₆  C₆₆⽺⽸2ε₁₂⽺
20. Hooke’s Law for Anisotropic Materials ⽷σ₁₁⽹  ⽷C₁₁  C₁₂  C₁₃  C₁₄

C₁₅  C₁₆⽹⽷  ε₁₁⽹  ⾇σ₂₂⾇  ⾇C₁₂  C₂₂  C₂₃  C₂₄  C₂₅  C₂₆⾇⾇  ε₂₂⾇   ⾇σ₃₃⾇=⾇C₁₃  C₂₃  C₃₃  C₃₄  C₃₅  C₃₆⾇⾇  ε₃₃⾇   ⾇σ₂₃⾇  ⾇C₁₄  C₂₄  C₃₄  C₄₄  C₄₅  C₄₆⾇⾇2ε₂₃⾇   ⾇σ₁₃⾇  ⾇C₁₅  C₂₅  C₃₅  C₄₅  C₅₅  C₅₆⾇⾇2ε₁₃⾇   ⽸σ₁₂⽺  ⽸C₁₆  C₂₆  C₃₆  C₄₆  C₅₆  C₆₆⽺⽸2ε₁₂⽺

⽸0  1⽺
24. Identity Transform I      =⽷1  0⽹

⽸0  1⽺  I*v  =⽷1  0⽹⽷1⽹           ⽸0  1⽺⽸3⽺
25. Identity Transform I      =⽷1  0⽹

⽸0  1⽺  I*v  =⽷1  0⽹⽷1⽹           ⽸0  1⽺⽸3⽺  I*v  =⽷(1*1)  +  (0*3)⽹           ⽸(0*1)  +  (1*3)⽺
26. Identity Transform I      =⽷1  0⽹

⽸0  1⽺  I*v  =⽷1  0⽹⽷1⽹           ⽸0  1⽺⽸3⽺  I*v  =⽷(1*1)  +  (0*3)⽹           ⽸(0*1)  +  (1*3)⽺  I*v  =⽷1⽹           ⽸3⽺

28. Scale Transform S      =⽷s  0⽹=⽷2  0⽹

⽸0  s⽺  ⽸0  2⽺
29. Scale Transform S      =⽷s  0⽹=⽷2  0⽹

⽸0  s⽺  ⽸0  2⽺  S*v  =⽷2  0⽹⽷1⽹           ⽸0  2⽺⽸3⽺
30. Scale Transform S      =⽷s  0⽹=⽷2  0⽹

⽸0  s⽺  ⽸0  2⽺  S*v  =⽷2  0⽹⽷1⽹           ⽸0  2⽺⽸3⽺  S*v  =⽷(2*1)  +  (0*3)⽹           ⽸(0*1)  +  (2*3)⽺
31. Scale Transform S      =⽷s  0⽹=⽷2  0⽹

⽸0  s⽺  ⽸0  2⽺  S*v  =⽷2  0⽹⽷1⽹           ⽸0  2⽺⽸3⽺  S*v  =⽷(2*1)  +  (0*3)⽹           ⽸(0*1)  +  (2*3)⽺  S*v  =⽷2⽹           ⽸6⽺

33. Flip Horizontal Transform H      =⽷-­‐1  0⽹

⽸  0  1⽺
34. Flip Horizontal Transform H      =⽷-­‐1  0⽹

⽸  0  1⽺  H*v  =⽷-­‐1  0⽹⽷1⽹           ⽸  0  1⽺⽸3⽺
35. Flip Horizontal Transform H      =⽷-­‐1  0⽹

⽸  0  1⽺  H*v  =⽷-­‐1  0⽹⽷1⽹           ⽸  0  1⽺⽸3⽺  H*v  =⽷(-­‐1*1)  +  (0*3)⽹           ⽸(  0*1)  +  (1*3)⽺
36. Flip Horizontal Transform H      =⽷-­‐1  0⽹

⽸  0  1⽺  H*v  =⽷-­‐1  0⽹⽷1⽹           ⽸  0  1⽺⽸3⽺  H*v  =⽷(-­‐1*1)  +  (0*3)⽹           ⽸(  0*1)  +  (1*3)⽺  H*v  =⽷-­‐1⽹           ⽸  3⽺

38. SkewX Transform X(θ)          =⽷1  tanθ⽹

⽸0        1⽺
39. SkewX Transform X(θ)          =⽷1  tanθ⽹

⽸0        1⽺  X(30°)*v  =⽷1  .58⽹⽷1⽹                     ⽸0      1⽺⽸3⽺
40. SkewX Transform X(θ)          =⽷1  tanθ⽹

⽸0        1⽺  X(30°)*v  =⽷1  .58⽹⽷1⽹                     ⽸0      1⽺⽸3⽺  X(30°)*v  =⽷(1*1)  +  (.58*3)⽹                     ⽸(0*1)  +  (    1*3)⽺
41. SkewX Transform X(θ)          =⽷1  tanθ⽹

⽸0        1⽺  X(30°)*v  =⽷1  .58⽹⽷1⽹                     ⽸0      1⽺⽸3⽺  X(30°)*v  =⽷(1*1)  +  (.58*3)⽹                     ⽸(0*1)  +  (    1*3)⽺  X(30°)*v  =⽷2.73⽹                     ⽸3      ⽺
42. SkewX Transform X(θ)          =⽷1  tanθ⽹

⽸0        1⽺  X(30°)*v  =⽷1  .58⽹⽷1⽹                     ⽸0      1⽺⽸3⽺  X(30°)*v  =⽷(1*1)  +  (.58*3)⽹                     ⽸(0*1)  +  (    1*3)⽺  X(30°)*v  =⽷2.73⽹                     ⽸3      ⽺
43. SkewX Transform X(θ)          =⽷1  tanθ⽹

⽸0        1⽺  X(30°)*v  =⽷1  .58⽹⽷1⽹                     ⽸0      1⽺⽸3⽺  X(30°)*v  =⽷(1*1)  +  (.58*3)⽹                     ⽸(0*1)  +  (    1*3)⽺  X(30°)*v  =⽷2.73⽹                     ⽸3      ⽺

45. Rotation Transform R(θ)          =⽷cosθ  -­‐sinθ⽹

⽸sinθ    cosθ⽺
46. Rotation Transform R(θ)          =⽷cosθ  -­‐sinθ⽹

⽸sinθ    cosθ⽺  R(90°)*v  =⽷0  -­‐1⽹⽷1⽹                     ⽸1    0⽺⽸3⽺
47. Rotation Transform R(θ)          =⽷cosθ  -­‐sinθ⽹

⽸sinθ    cosθ⽺  R(90°)*v  =⽷0  -­‐1⽹⽷1⽹                     ⽸1    0⽺⽸3⽺  R(90°)*v  =⽷(0*1)  +  (-­‐1*3)⽹                     ⽸(1*1)  +  (  0*3)⽺
48. Rotation Transform R(θ)          =⽷cosθ  -­‐sinθ⽹

⽸sinθ    cosθ⽺  R(90°)*v  =⽷0  -­‐1⽹⽷1⽹                     ⽸1    0⽺⽸3⽺  R(90°)*v  =⽷(0*1)  +  (-­‐1*3)⽹                     ⽸(1*1)  +  (  0*3)⽺  R(90°)*v  =⽷-­‐3⽹                     ⽸  1⽺
49. Rotation Transform R(30°)*

=
50. Rotation Transform R(30°)*

=
51. Agenda • Reduce Cognitive Load • Visualize Simulations with Graphics

• Control and Respond to Real World Processes
52. Agenda • Reduce Cognitive Load • Visualize Simulations with Graphics

• Control and Respond to Real World Processes
53. Why Graphic Simulations? • Complex Systems • High Sensitivity •

Pattern Recognition Required • Seeking “Good Enough”
54. Why Graphic Simulations? • Complex Systems • High Sensitivity •

Pattern Recognition Required • Seeking “Good Enough”
55. Why Graphic Simulations? • Complex Systems • High Sensitivity •

Pattern Recognition Required • Seeking “Good Enough” Tests?
56. Why Graphic Simulations? • Complex Systems • High Sensitivity •

Pattern Recognition Required • Seeking “Good Enough” Tests?
57. In Aerospace Engineering • Launch Vibration Testing • “Kick” tests

• Thermal Equilibrium • Designing to Safety Factor
58. In Aerospace Engineering • Launch Vibration Testing • “Kick” tests

• Thermal Equilibrium • Designing to Safety Factor • N-Body Orbital Trajectories
59. The n-Body Problem • Newton’s Laws + Gravity • Solved

for N=2 • For N>2, “no general analytical solution,” except for special cases (e.g., Lagrangian Points)
60. The n-Body Problem Gravity Force = x Newton’s 2nd Law

Force = mass ⨉ acceleration Newton’s 3rd Law Force₁ = -Force₂ Velocity-Acceleration Position-Velocity

= 1 hour

= 1 minute

= 1 second

69. Velocity = Derivative of Position 0 km 1.667 centimeters t

= 1 millisecond

km 0 km
71. Velocity = Derivative of Position now 1 hour later 60

km/hr 0 km/hr
72. Velocity = Derivative of Position now 1 hour later 60

km/hr 0 km/hr 1 minute later

recent)
84. Our Approximation velocity = [position(now) - position(recent)] / (now -

recent) acceleration = [velocity(now) - velocity(recent)] / (now - recent)
85. Our Approximation velocity = [position(now) - position(recent)] / (now -

recent) acceleration = [velocity(now) - velocity(recent)] / (now - recent) position(now) = position(recent) + velocity * (now - recent) velocity(now) = velocity(recent) + acceleration * (now - recent)
86. Our Approximation position(now) = position(recent) + velocity * (now -

recent) velocity(now) = velocity(recent) + acceleration * (now - recent)
87. The n-Body Problem Gravity Force = x Newton’s 2nd Law

Force = mass ⨉ acceleration Newton’s 3rd Law Force₁ = -Force₂ Velocity-Acceleration Position-Velocity
88. The n-Body Problem Gravity Force = x Newton’s 2nd Law

Force = mass ⨉ acceleration Newton’s 3rd Law Force₁ = -Force₂ Velocity-Acceleration vnow = vprev + anow dt Position-Velocity xnow = xprev + vnow dt
89. The n-Body Problem Gravity Force = x Newton’s 2nd Law

acceleration = Force ÷ mass Newton’s 3rd Law Force₁ = -Force₂ Velocity-Acceleration vnow = vprev + anow dt Position-Velocity xnow = xprev + vnow dt
90. Gravity Fnow = x Newton’s 2nd Law anow = Fnow

÷ m Newton’s 3rd Law (loop over each mass-pair) Velocity-Acceleration vnow = vprev + anow dt Position-Velocity xnow = xprev + vnow dt The n-Body Problem
91. The n-Body Problem bodies.map do |body| [body, gravity(body, bodies-[body])] end.each

do |(body, force)| accel = force / body.mass body.velocity += accel * dt body.position += body.velocity * dt end
92. The n-Body Problem def gravity(body, others) others.reduce(Vector[0,0]) do |memo, other|

offset = other.position - body.position memo + offset * G * body.mass * other.mass / offset.r**3 end end

94. Agenda • Reduce Cognitive Load • Visualize Simulations with Graphics

• Control and Respond to Real World Processes
95. Agenda • Reduce Cognitive Load • Visualize Simulations with Graphics

• Control and Respond to Real World Processes
96. The World is Complicated • “Assume no air resistance” •

“Assume a frictionless surface” • “Assume perfect DC voltage” • “Assume no impact from general or special relativity”
97. You simply cannot predeﬁne a speciﬁc solution to a problem

that is perturbed by the real world
98. –Helmuth von Moltke the Elder “No battle plan ever survives

contact with the enemy.”

110. Our PID Controller loop do sleep 0.2 curr_time = Time.now

dt = curr_time - prev_time p = error = desired - actual i = i + error * dt d = (error - prev_error)/dt setThrust(0.1*p + 0.003*i + 0.08*d) prev_error, prev_time = error, curr_time end

112. Agenda • Reduce Cognitive Load • Visualize Simulations with Graphics

• Control and Respond to Real World Processes
113. Agenda • Reduce Cognitive Load • Visualize Simulations with Graphics

• Control and Respond to Real World Processes
114. Photo Credits • “LPE II” (Bradley Grzesiak) • “Zero G

Robot” (Bradley Grzesiak) • “Outredgeous Lettuce” (Public Domain):  https://www.nasa.gov/mission_pages/station/ research/news/meals_ready_to_eat/ • “ABS/EUTELSAT-1 Launch” (Public Domain):  http://www.spacex.com/media-gallery/detail/ 127081/4896 • “Beer Actor” (CC-BY):  https://www.ﬂickr.com/photos/cogdog/ 21127813750/ • “Up, up and away!” (CC-BY-SA):  https://www.ﬂickr.com/photos/kindercapes/ 5694816038 • “I’m confused” (CC-BY-SA):  https://www.ﬂickr.com/photos/doctabu/342220423 • “Cookie Monster Waiting” (no idea):  https://www.google.com/search?q=cookie+monster +waiting • “Elmer Pump Heat Equation” (CC-BY-SA):  https://commons.wikimedia.org/wiki/File:Elmer- pump-heatequation.png • “Owl Stuck” (CC-BY):  https://www.ﬂickr.com/photos/eben-frostey/ 7147015007 • Car (Public Domain):  https://thenounproject.com/search/?q=car&i=13094 • Curing Sausage (Used with permission):  https://www.ﬂickr.com/photos/aaronp/7532277486/