Simplify Challenging Software Problems with Rocket Science

B4753ed732e72ff2568262c9387bbc4c?s=47 listrophy
October 17, 2015

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)

B4753ed732e72ff2568262c9387bbc4c?s=128

listrophy

October 17, 2015
Tweet

Transcript

  1. Simplify Challenging Software Problems with Rocket Science @bendyworks Brad Grzesiak

    — @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.”
  3. Heads up: 1 Shaky Movie & 1 Animated GIF

  4. None
  5. None
  6. None
  7. None
  8. Agenda • Reduce Cognitive Load • Visualize Simulations with Graphics

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

    • Control and Respond to Real World Processes
  10. we are not superheros

  11. 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

  12. “matrix” “times” “vector?”

  13. 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⽺  
  14. Vector Example

  15. Vector Example ⟨2,0⟩

  16. Vector Example ⟨2,0⟩ ⟨1,3⟩

  17. 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⽺  
  18. Matrix Times Vector 1.  ⽷a    b⽹⽷x⽹      

     ⽸c    d⽺⽸y⽺   2.  [x    y]        ⽷a    b⽹        ⽸c    d⽺   3.  ⽷ax+by⽹        ⽸cx+dy⽺  
  19. 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
  20. 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!
  21. Linear Transformation Examples

  22. Hooke’s Law for Anisotropic Materials σ  =  c  *  ε

  23. 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ε₁₂⽺
  24. 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ε₁₂⽺
  25. Our Vector ⟨1,3⟩

  26. Identity Transform

  27. Identity Transform I      =⽷1  0⽹
      

       ⽸0  1⽺

  28. Identity Transform I      =⽷1  0⽹
      

       ⽸0  1⽺
 I*v  =⽷1  0⽹⽷1⽹
          ⽸0  1⽺⽸3⽺

  29. 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)⽺

  30. 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⽺
  31. Scale Transform

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

         ⽸0  s⽺  ⽸0  2⽺

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

         ⽸0  s⽺  ⽸0  2⽺
 S*v  =⽷2  0⽹⽷1⽹
          ⽸0  2⽺⽸3⽺

  34. 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)⽺

  35. 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⽺
  36. Flip Horizontal Transform

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

         ⽸  0  1⽺

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

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

  39. 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)⽺

  40. 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⽺
  41. SkewX Transform

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

                     ⽸0        1⽺

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

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

  44. 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)⽺

  45. 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      ⽺
  46. 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      ⽺
  47. 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      ⽺
  48. Rotation Transform

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

                     ⽸sinθ    cosθ⽺

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

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

  51. 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)⽺

  52. 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⽺
  53. Rotation Transform R(30°)*              

               =  
  54. Rotation Transform R(30°)*              

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

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

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

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

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

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

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

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

    • Thermal Equilibrium • Designing to Safety Factor • N-Body Orbital Trajectories
  63. 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)
  64. The n-Body Problem Gravity Force = x Newton’s 2nd Law

    Force = mass ⨉ acceleration Newton’s 3rd Law Force₁ = -Force₂ Velocity-Acceleration Position-Velocity
  65. Wait a minute. Derivatives?

  66. Velocity = Derivative of Position 0 km 60 km

  67. Velocity = Derivative of Position 0 km 60 km t

    = 1 hour
  68. Velocity = Derivative of Position 0 km 1 km

  69. Velocity = Derivative of Position 0 km 1 km t

    = 1 minute
  70. Velocity = Derivative of Position 0 km 16.67 meters

  71. Velocity = Derivative of Position 0 km 16.67 meters t

    = 1 second
  72. Velocity = Derivative of Position 0 km 1.667 centimeters

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

    = 1 millisecond
  74. Velocity = Derivative of Position now 1 hour later 60

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

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

    km/hr 0 km/hr 1 minute later
  77. Formal Derivative

  78. Derivative Applied

  79. Derivative Applied

  80. Derivative Applied

  81. Derivative Applied

  82. Derivative Applied

  83. Dimensional Analysis, or “Fixing Units”

  84. Dimensional Analysis, or “Fixing Units”

  85. Our Approximation

  86. Our Approximation

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

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

    recent) acceleration = [velocity(now) - velocity(recent)] / (now - recent)
  89. 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)
  90. Our Approximation position(now) = position(recent) + velocity * (now -

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

    Force = mass ⨉ acceleration Newton’s 3rd Law Force₁ = -Force₂ Velocity-Acceleration Position-Velocity
  92. 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
  93. 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
  94. 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
  95. 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
  96. 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
  97. (demo)

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

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

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

    “Assume a frictionless surface” • “Assume perfect DC voltage” • “Assume no impact from general or special relativity”
  101. You simply cannot predefine a specific solution to a problem

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

    contact with the enemy.”
  103. The Answer: React

  104. Feedback Controller

  105. Feedback Controller

  106. Feedback Controller

  107. PID Controller

  108. Controller P I D roportional ntegral erivative

  109. Feedback Controller

  110. Feedback Controller diff == error

  111. Proportional P  =  error  =  desired  -­‐  actual

  112. Derivative D  =  (error_now  -­‐  error_recent)/dt

  113. Integral I  +=  error*dt

  114. 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
  115. (demo)

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

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

    • Control and Respond to Real World Processes
  118. 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.flickr.com/photos/cogdog/ 21127813750/ • “Up, up and away!” (CC-BY-SA):
 https://www.flickr.com/photos/kindercapes/ 5694816038 • “I’m confused” (CC-BY-SA):
 https://www.flickr.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.flickr.com/photos/eben-frostey/ 7147015007 • Car (Public Domain):
 https://thenounproject.com/search/?q=car&i=13094 • Curing Sausage (Used with permission):
 https://www.flickr.com/photos/aaronp/7532277486/
  119. Thank You! Brad Grzesiak brad@bendyworks.com @listrophy gitlab.com/listrophy