├── .gitignore ├── 1_20_recitation.pdf ├── 1_27_recitation.pdf ├── 2_02_recitation.pdf ├── 2_10_recitation.pdf ├── 2_17_recitation ├── Convex.jl_tutorial.ipynb ├── Manifest.toml └── Project.toml ├── 2_24_recitation ├── 2_24_recitation.pdf ├── Manifest.toml ├── Project.toml ├── quadrotor_mpc.ipynb └── utils │ ├── quadrotor.jl │ └── quadrotor.obj ├── 3_17_recitation ├── 3_17_recitation.pdf └── rk4_jacobians.ipynb ├── 3_24_recitation.pdf ├── 3_2_recitation.pdf ├── 3_31_recitation ├── 3_31_recitation.pdf ├── CBF_demo.ipynb ├── Manifest.toml ├── Project.toml └── double_integrator_collision_avoidance.ipynb ├── README.md └── meshcat_tutorial ├── Manifest.toml ├── MeshCat_guide.ipynb └── Project.toml /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | **/.DS_Store 3 | .ipynb_checkpoints 4 | */.ipynb_checkpoints/* 5 | .DS_Store 6 | -------------------------------------------------------------------------------- /1_20_recitation.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Optimal-Control-16-745/recitations-2023/d864eba9a3e35686644c3258346c35685b315e5f/1_20_recitation.pdf -------------------------------------------------------------------------------- /1_27_recitation.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Optimal-Control-16-745/recitations-2023/d864eba9a3e35686644c3258346c35685b315e5f/1_27_recitation.pdf -------------------------------------------------------------------------------- /2_02_recitation.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Optimal-Control-16-745/recitations-2023/d864eba9a3e35686644c3258346c35685b315e5f/2_02_recitation.pdf -------------------------------------------------------------------------------- /2_10_recitation.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Optimal-Control-16-745/recitations-2023/d864eba9a3e35686644c3258346c35685b315e5f/2_10_recitation.pdf -------------------------------------------------------------------------------- /2_17_recitation/Convex.jl_tutorial.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 38, 6 | "id": "c0d29247", 7 | "metadata": {}, 8 | "outputs": [ 9 | { 10 | "name": "stderr", 11 | "output_type": "stream", 12 | "text": [ 13 | "\u001b[32m\u001b[1m Activating\u001b[22m\u001b[39m environment at `~/devel/hw_ideas/hw2/Project.toml`\n" 14 | ] 15 | }, 16 | { 17 | "data": { 18 | "text/plain": [ 19 | "MersenneTwister(1)" 20 | ] 21 | }, 22 | "execution_count": 38, 23 | "metadata": {}, 24 | "output_type": "execute_result" 25 | } 26 | ], 27 | "source": [ 28 | "import Pkg\n", 29 | "Pkg.activate(@__DIR__)\n", 30 | "Pkg.instantiate()\n", 31 | "using LinearAlgebra, Plots\n", 32 | "import ForwardDiff as FD\n", 33 | "using Test\n", 34 | "import Convex as cvx \n", 35 | "import ECOS\n", 36 | "using Random\n", 37 | "Random.seed!(1)" 38 | ] 39 | }, 40 | { 41 | "cell_type": "markdown", 42 | "id": "4a25e2dc", 43 | "metadata": {}, 44 | "source": [ 45 | "# Convex.jl tutorial\n", 46 | "\n", 47 | "This is convex modeling tool in Julia that let's us write out problems in a simple way, and then Convex.jl transforms them and sends them off to be solved (we're using [ECOS](https://github.com/embotech/ecos) as our solver today). If you want examples/inspiration for this technology, there are a few like this:\n", 48 | "\n", 49 | "- Python: [CVXPY](https://www.cvxpy.org/) or [CVXOPT](http://cvxopt.org/) (cvxpy is probably what you want)\n", 50 | "- Matlab: [CVX](http://cvxr.com/cvx/) or [YALMIP](https://yalmip.github.io/) (I like CVX better)\n", 51 | "- R: [CVXR](https://cvxr.rbind.io/)\n", 52 | "\n", 53 | "For Convex.jl the [repo is here](https://github.com/jump-dev/Convex.jl), and the [docs are here](https://jump.dev/Convex.jl/stable/)\n", 54 | "\n", 55 | "These tools are just used for formulating your problem and verifying that it is Convex. The problem itself is solved by one of many available solvers, many common ones are:\n", 56 | "\n", 57 | "- OSQP\n", 58 | "- ECOS \n", 59 | "- CPLEX \n", 60 | "- Mosek \n", 61 | "- Gurobi\n", 62 | "- COSMO \n", 63 | "- SeDuMi \n", 64 | "- SDPT3 \n", 65 | "- GLPK \n", 66 | "- Hypatia " 67 | ] 68 | }, 69 | { 70 | "cell_type": "markdown", 71 | "id": "84eefc5a", 72 | "metadata": {}, 73 | "source": [ 74 | "## Least Squares \n", 75 | "For overdetermined systems (more equations than variables, \"skinny\" matrix A)\n", 76 | "$$ \\begin{align} \\min_{x} \\quad & \\|Ax - b\\|^2_2\n", 77 | " \\end{align}$$" 78 | ] 79 | }, 80 | { 81 | "cell_type": "code", 82 | "execution_count": 39, 83 | "id": "e9213570", 84 | "metadata": {}, 85 | "outputs": [ 86 | { 87 | "name": "stdout", 88 | "output_type": "stream", 89 | "text": [ 90 | "\u001b[0m\u001b[1mTest Summary: | \u001b[22m\u001b[32m\u001b[1mPass \u001b[22m\u001b[39m\u001b[36m\u001b[1mTotal\u001b[22m\u001b[39m\n", 91 | "overdetermined | \u001b[32m 1 \u001b[39m\u001b[36m 1\u001b[39m\n", 92 | "\n", 93 | "ECOS 2.0.8 - (C) embotech GmbH, Zurich Switzerland, 2012-15. Web: www.embotech.com/ECOS\n", 94 | "\n", 95 | "It pcost dcost gap pres dres k/t mu step sigma IR | BT\n", 96 | " 0 +0.000e+00 -1.322e+00 +7e+00 5e-01 6e-02 1e+00 2e+00 --- --- 1 1 - | - - \n", 97 | " 1 -8.414e-02 -2.498e-01 +1e+00 9e-02 9e-03 2e-01 4e-01 0.7930 2e-02 1 1 1 | 0 0\n", 98 | " 2 +6.991e-01 +1.012e+00 +1e+00 9e-01 4e-02 3e+00 3e-01 0.5543 6e-01 2 2 2 | 0 0\n", 99 | " 3 +2.161e+00 +2.412e+00 +2e-01 1e-01 6e-03 6e-01 5e-02 0.8494 1e-02 2 1 1 | 0 0\n", 100 | " 4 +6.859e-01 +1.938e+00 +1e-01 3e-01 9e-03 2e+00 4e-02 0.4696 5e-01 2 2 2 | 0 0\n", 101 | " 5 +2.934e+00 +2.803e+00 +1e-01 6e-02 3e-03 4e-02 3e-02 0.5767 6e-01 2 2 2 | 0 0\n", 102 | " 6 +4.186e+00 +4.179e+00 +1e-02 1e-02 5e-04 2e-02 3e-03 0.8948 4e-03 2 2 2 | 0 0\n", 103 | " 7 +4.628e+00 +4.647e+00 +2e-03 4e-03 1e-04 3e-02 7e-04 0.8782 8e-02 2 2 2 | 0 0\n", 104 | " 8 +4.709e+00 +4.713e+00 +5e-04 7e-04 3e-05 5e-03 1e-04 0.8152 2e-02 2 1 2 | 0 0\n", 105 | " 9 +4.744e+00 +4.744e+00 +2e-05 2e-05 1e-06 1e-04 5e-06 0.9723 1e-02 2 2 2 | 0 0\n", 106 | "10 +4.745e+00 +4.745e+00 +1e-06 1e-06 5e-08 7e-06 3e-07 0.9503 3e-04 3 1 1 | 0 0\n", 107 | "11 +4.745e+00 +4.745e+00 +3e-08 4e-08 2e-09 5e-07 9e-09 0.9829 2e-02 2 1 1 | 0 0\n", 108 | "12 +4.745e+00 +4.745e+00 +4e-10 6e-10 2e-11 8e-09 1e-10 0.9858 1e-04 2 1 1 | 0 0\n", 109 | "\n", 110 | "OPTIMAL (within feastol=6.2e-10, reltol=9.1e-11, abstol=4.3e-10).\n", 111 | "Runtime: 0.000489 seconds.\n", 112 | "\n" 113 | ] 114 | }, 115 | { 116 | "data": { 117 | "text/plain": [ 118 | "Test.DefaultTestSet(\"overdetermined\", Any[], 1, false, false)" 119 | ] 120 | }, 121 | "execution_count": 39, 122 | "metadata": {}, 123 | "output_type": "execute_result" 124 | } 125 | ], 126 | "source": [ 127 | "@testset \"overdetermined\" begin \n", 128 | " # overdetermined\n", 129 | " A = randn(10,5)\n", 130 | " b = randn(10)\n", 131 | " x = cvx.Variable(5)\n", 132 | " \n", 133 | " prob = cvx.minimize(cvx.sumsquares(A*x - b)) # sumsquares(y) = dot(y,y) = norm(y)^2\n", 134 | " cvx.solve!(prob, ECOS.Optimizer; silent_solver = false)\n", 135 | " \n", 136 | " xcvx = x.value::Matrix # This will always be a matrix\n", 137 | " xcvx = vec(x.value) # convert to vector easily \n", 138 | " \n", 139 | " # compare with pseudoinverse\n", 140 | " @test norm(xcvx - (A'*A\\(A'*b))) < 1e-4\n", 141 | "\n", 142 | "end" 143 | ] 144 | }, 145 | { 146 | "cell_type": "markdown", 147 | "id": "4523e464", 148 | "metadata": {}, 149 | "source": [ 150 | "For underdetermined systems (more variables than equations, \"fat\" matrix A)\n", 151 | "$$ \\begin{align} \\min_{x} \\quad & \\|x\\|^2_2 \\\\ \n", 152 | " \\text{st} \\quad & A x = b \n", 153 | " \\end{align}$$" 154 | ] 155 | }, 156 | { 157 | "cell_type": "code", 158 | "execution_count": 40, 159 | "id": "76000841", 160 | "metadata": {}, 161 | "outputs": [ 162 | { 163 | "name": "stdout", 164 | "output_type": "stream", 165 | "text": [ 166 | "\u001b[0m\u001b[1mTest Summary: | \u001b[22m\u001b[32m\u001b[1mPass \u001b[22m\u001b[39m\u001b[36m\u001b[1mTotal\u001b[22m\u001b[39m\n", 167 | "underdetermined | \u001b[32m 1 \u001b[39m\u001b[36m 1\u001b[39m\n", 168 | "\n", 169 | "ECOS 2.0.8 - (C) embotech GmbH, Zurich Switzerland, 2012-15. Web: www.embotech.com/ECOS\n", 170 | "\n", 171 | "It pcost dcost gap pres dres k/t mu step sigma IR | BT\n", 172 | " 0 +0.000e+00 -1.322e+00 +7e+00 3e-01 7e-02 1e+00 2e+00 --- --- 1 1 - | - - \n", 173 | " 1 -6.948e-02 -2.844e-01 +2e+00 8e-02 1e-02 3e-01 5e-01 0.7428 2e-02 1 1 1 | 0 0\n", 174 | " 2 +8.012e-01 +9.778e-01 +1e+00 5e-01 3e-02 2e+00 4e-01 0.7082 5e-01 2 2 2 | 0 0\n", 175 | " 3 +1.660e+00 +2.051e+00 +1e-01 6e-02 3e-03 5e-01 4e-02 0.9860 9e-02 2 1 1 | 0 0\n", 176 | " 4 +2.893e+00 +3.067e+00 +2e-02 1e-02 7e-04 2e-01 7e-03 0.8954 9e-02 2 2 2 | 0 0\n", 177 | " 5 +3.168e+00 +3.279e+00 +1e-02 1e-02 4e-04 1e-01 3e-03 0.6701 3e-01 2 2 2 | 0 0\n", 178 | " 6 +3.468e+00 +3.471e+00 +4e-04 3e-04 2e-05 4e-03 1e-04 0.9676 5e-03 3 1 2 | 0 0\n", 179 | " 7 +3.481e+00 +3.481e+00 +3e-05 2e-05 1e-06 2e-04 9e-06 0.9890 6e-02 2 1 2 | 0 0\n", 180 | " 8 +3.482e+00 +3.482e+00 +8e-07 6e-07 3e-08 7e-06 3e-07 0.9731 1e-04 2 1 1 | 0 0\n", 181 | " 9 +3.482e+00 +3.482e+00 +6e-08 5e-08 2e-09 5e-07 2e-08 0.9331 5e-03 3 1 1 | 0 0\n", 182 | "10 +3.482e+00 +3.482e+00 +7e-10 6e-10 2e-11 7e-09 2e-10 0.9890 2e-03 2 1 1 | 0 0\n", 183 | "\n", 184 | "OPTIMAL (within feastol=6.0e-10, reltol=2.1e-10, abstol=7.2e-10).\n", 185 | "Runtime: 0.000404 seconds.\n", 186 | "\n" 187 | ] 188 | }, 189 | { 190 | "data": { 191 | "text/plain": [ 192 | "Test.DefaultTestSet(\"underdetermined\", Any[], 1, false, false)" 193 | ] 194 | }, 195 | "execution_count": 40, 196 | "metadata": {}, 197 | "output_type": "execute_result" 198 | } 199 | ], 200 | "source": [ 201 | "@testset \"underdetermined\" begin \n", 202 | " \n", 203 | " # overdetermined\n", 204 | " A = randn(5,10)\n", 205 | " b = randn(5)\n", 206 | " x = cvx.Variable(10)\n", 207 | " prob = cvx.minimize(cvx.sumsquares(x))\n", 208 | " \n", 209 | " # add constraint \n", 210 | " prob.constraints += (A*x == b)\n", 211 | " cvx.solve!(prob, ECOS.Optimizer; silent_solver = false)\n", 212 | " \n", 213 | " xcvx = x.value::Matrix # This will always be a matrix\n", 214 | " xcvx = vec(x.value) # convert to vector easily \n", 215 | " \n", 216 | " # compare with pseudoinverse\n", 217 | " @test norm(xcvx - A'*((A*A')\\b)) < 1e-4\n", 218 | "\n", 219 | "\n", 220 | "end" 221 | ] 222 | }, 223 | { 224 | "cell_type": "markdown", 225 | "id": "81106200", 226 | "metadata": {}, 227 | "source": [ 228 | "## Equality constrained QP \n", 229 | "\n", 230 | "$$ \\begin{align} \\min_{x} \\quad & \\frac{1}{2} x^TQx + q^Tx \\\\ \n", 231 | " \\text{st} \\quad & A x = b \n", 232 | " \\end{align}$$" 233 | ] 234 | }, 235 | { 236 | "cell_type": "code", 237 | "execution_count": 41, 238 | "id": "46ecd904", 239 | "metadata": {}, 240 | "outputs": [ 241 | { 242 | "name": "stdout", 243 | "output_type": "stream", 244 | "text": [ 245 | "\n", 246 | "ECOS 2.0.8 - (C) embotech GmbH, Zurich Switzerland, 2012-15. Web: www.embotech.com/ECOS\n", 247 | "\n", 248 | "It pcost dcost gap pres dres k/t mu step sigma IR | BT\n", 249 | " 0 +2.158e-01 -3.037e+01 +1e+02 4e-01 3e-01 1e+00 3e+01 --- --- 1 3 - | - - \n", 250 | " 1 -3.434e-01 -1.277e+00 +6e+00 2e-02 1e-02 5e-01 2e+00 0.9552 3e-02 2 2 2 | 0 0\n", 251 | " 2 -8.480e-01 -9.915e-01 +1e+00 4e-03 3e-03 3e-01 4e-01 0.8503 9e-02 2 2 2 | 0 0\n", 252 | " 3 -7.309e-01 -7.334e-01 +2e-02 6e-05 6e-05 4e-03 7e-03 0.9890 6e-03 2 2 2 | 0 0\n", 253 | " 4 -7.289e-01 -7.289e-01 +4e-04 1e-06 1e-06 7e-05 1e-04 0.9830 1e-04 2 1 2 | 0 0\n", 254 | " 5 -7.289e-01 -7.289e-01 +1e-05 3e-08 3e-08 2e-06 4e-06 0.9679 1e-04 2 1 1 | 0 0\n", 255 | " 6 -7.289e-01 -7.289e-01 +7e-07 2e-09 2e-09 1e-07 2e-07 0.9430 5e-04 3 1 1 | 0 0\n", 256 | " 7 -7.289e-01 -7.289e-01 +7e-08 2e-10 2e-10 1e-08 2e-08 0.8932 9e-04 2 2 2 | 0 0\n", 257 | " 8 -7.289e-01 -7.289e-01 +4e-09 2e-10 1e-11 8e-10 1e-09 0.9586 1e-02 1 1 1 | 0 0\n", 258 | "\n", 259 | "OPTIMAL (within feastol=1.6e-10, reltol=5.3e-09, abstol=3.9e-09).\n", 260 | "Runtime: 0.001113 seconds.\n", 261 | "\n" 262 | ] 263 | }, 264 | { 265 | "data": { 266 | "text/plain": [ 267 | "10-element Vector{Float64}:\n", 268 | " 0.09724791987373017\n", 269 | " 0.1488434193275145\n", 270 | " 0.4860290018506496\n", 271 | " 0.29931754044643294\n", 272 | " -0.106880331362541\n", 273 | " 0.04208103746402248\n", 274 | " -0.1814010503222913\n", 275 | " 0.3390224830173805\n", 276 | " 0.12993335881168483\n", 277 | " -0.2421193804358406" 278 | ] 279 | }, 280 | "execution_count": 41, 281 | "metadata": {}, 282 | "output_type": "execute_result" 283 | } 284 | ], 285 | "source": [ 286 | "let \n", 287 | " \n", 288 | " n = 10 \n", 289 | " Q = randn(n,n); Q = Q'*Q + I # create PSD matrix \n", 290 | " q = randn(n)\n", 291 | " \n", 292 | " A = randn(3,n)\n", 293 | " b = randn(3)\n", 294 | " \n", 295 | " x = cvx.Variable(n)\n", 296 | " \n", 297 | " # NOTE: quadform(x,Q) = x'*Q*x \n", 298 | " cost = 0.5*cvx.quadform(x,Q) + dot(q,x) \n", 299 | " \n", 300 | " prob = cvx.minimize(cost)\n", 301 | " \n", 302 | " prob.constraints += (A*x == b)\n", 303 | " \n", 304 | " cvx.solve!(prob, ECOS.Optimizer; silent_solver = false)\n", 305 | " \n", 306 | " xcvx = x.value::Matrix # This will always be a matrix\n", 307 | " xcvx = vec(x.value) # convert to vector easily \n", 308 | " \n", 309 | " \n", 310 | "end\n", 311 | " " 312 | ] 313 | }, 314 | { 315 | "cell_type": "markdown", 316 | "id": "076ed79c", 317 | "metadata": {}, 318 | "source": [ 319 | "## Letting Convex.jl do the parsing \n", 320 | "\n", 321 | "$$ \\begin{align} \\min_{x} \\quad & \\|Ax - b\\|_1 \\\\ \n", 322 | " \\text{st} \\quad &\\|x\\|_2 \\leq 3\n", 323 | " \\end{align}$$\n", 324 | " \n", 325 | " This problem is not in any sort of \"standard form\", but it is convex. We will let Convex.jl will convert this into a standard form \"canonicalizing it\", and send it ECOS to solve. " 326 | ] 327 | }, 328 | { 329 | "cell_type": "code", 330 | "execution_count": 42, 331 | "id": "c5b9665e", 332 | "metadata": {}, 333 | "outputs": [ 334 | { 335 | "name": "stdout", 336 | "output_type": "stream", 337 | "text": [ 338 | "\n", 339 | "ECOS 2.0.8 - (C) embotech GmbH, Zurich Switzerland, 2012-15. Web: www.embotech.com/ECOS\n", 340 | "\n", 341 | "It pcost dcost gap pres dres k/t mu step sigma IR | BT\n", 342 | " 0 +1.147e-17 -3.000e+00 +7e+01 5e-01 6e-01 1e+00 3e+00 --- --- 1 1 - | - - \n", 343 | " 1 +4.051e+00 +4.241e+00 +2e+01 7e-02 1e-01 8e-01 8e-01 0.8261 1e-01 1 1 1 | 0 0\n", 344 | " 2 +4.510e+00 +4.552e+00 +3e+00 1e-02 2e-02 2e-01 2e-01 0.8209 3e-02 1 1 1 | 0 0\n", 345 | " 3 +4.534e+00 +4.533e+00 +1e-01 3e-04 5e-04 3e-03 5e-03 0.9890 2e-02 1 1 1 | 0 0\n", 346 | " 4 +4.535e+00 +4.535e+00 +1e-03 4e-06 6e-06 3e-05 6e-05 0.9890 1e-04 1 1 1 | 0 0\n", 347 | " 5 +4.535e+00 +4.535e+00 +1e-05 4e-08 6e-08 3e-07 7e-07 0.9890 1e-04 1 1 1 | 0 0\n", 348 | " 6 +4.535e+00 +4.535e+00 +2e-07 4e-10 7e-10 4e-09 7e-09 0.9890 1e-04 1 0 0 | 0 0\n", 349 | " 7 +4.535e+00 +4.535e+00 +2e-09 5e-12 8e-12 4e-11 8e-11 0.9890 1e-04 1 0 0 | 0 0\n", 350 | "\n", 351 | "OPTIMAL (within feastol=7.8e-12, reltol=3.7e-10, abstol=1.7e-09).\n", 352 | "Runtime: 0.000185 seconds.\n", 353 | "\n" 354 | ] 355 | }, 356 | { 357 | "data": { 358 | "text/plain": [ 359 | "5-element Vector{Float64}:\n", 360 | " 0.7522684827972297\n", 361 | " 0.1491383275306395\n", 362 | " 0.3234098585384891\n", 363 | " 0.045071042424177546\n", 364 | " -0.4801159046796672" 365 | ] 366 | }, 367 | "execution_count": 42, 368 | "metadata": {}, 369 | "output_type": "execute_result" 370 | } 371 | ], 372 | "source": [ 373 | "let \n", 374 | " A = randn(10,5)\n", 375 | " b = randn(10)\n", 376 | " x = cvx.Variable(5)\n", 377 | " \n", 378 | " prob = cvx.minimize(norm(A*x - b, 1)) \n", 379 | " prob.constraints += (norm(x,2) <= 3)\n", 380 | "\n", 381 | " cvx.solve!(prob, ECOS.Optimizer; silent_solver = false)\n", 382 | " \n", 383 | " xcvx = x.value::Matrix # This will always be a matrix\n", 384 | " xcvx = vec(x.value) # convert to vector easily \n", 385 | "end" 386 | ] 387 | }, 388 | { 389 | "cell_type": "markdown", 390 | "id": "e172aedc", 391 | "metadata": {}, 392 | "source": [ 393 | "## Convex Trajectory Optimization\n", 394 | "$$ \\begin{align} \\min_{x_{1:N},u_{1:N-1}} \\quad & \\sum_{i=1}^{N-1} \\bigg[ \\|x_i - x_g\\|_2^2 + \\|u_i\\|_1 \\bigg] + \\frac{1}{2}x_N^TQ_fx_N & \\\\ \n", 395 | " \\text{st} \\quad & x_1 = x_{\\text{IC}} \\\\ \n", 396 | " & x_{i+1} = A x_i + Bu_i \\quad &\\text{for } i = 1,2,\\ldots,N-1 \\\\ \n", 397 | " & x_N = x_g \\\\ \n", 398 | " & \\|u_i\\|_2 \\leq 3 \\quad &\\text{for } i = 1,2,\\ldots,N-1\\\\ \n", 399 | " & x_{min} \\leq x_i \\leq x_{max} \\quad &\\text{for } i = 1,2,\\ldots,N-1\\\\ \n", 400 | " \\end{align}$$" 401 | ] 402 | }, 403 | { 404 | "cell_type": "code", 405 | "execution_count": 45, 406 | "id": "dc09a0a5", 407 | "metadata": {}, 408 | "outputs": [ 409 | { 410 | "name": "stdout", 411 | "output_type": "stream", 412 | "text": [ 413 | "\n", 414 | "ECOS 2.0.8 - (C) embotech GmbH, Zurich Switzerland, 2012-15. Web: www.embotech.com/ECOS\n", 415 | "\n", 416 | "It pcost dcost gap pres dres k/t mu step sigma IR | BT\n", 417 | " 0 +0.000e+00 -4.005e+03 +5e+03 8e-02 5e-01 1e+00 2e+01 --- --- 1 2 - | - - \n", 418 | " 1 +7.779e+01 -2.055e+03 +3e+03 4e-02 2e-01 3e+00 8e+00 0.6415 3e-01 1 1 1 | 0 0\n", 419 | " 2 +1.066e+02 -1.838e+03 +3e+03 4e-02 9e-02 4e+00 8e+00 0.2601 6e-01 1 1 2 | 0 0\n", 420 | " 3 +1.637e+02 -1.401e+03 +2e+03 3e-02 6e-02 5e+00 6e+00 0.5704 6e-01 1 1 1 | 0 0\n", 421 | " 4 +1.317e+02 -7.523e+02 +1e+03 2e-02 2e-02 3e+00 3e+00 0.5222 2e-01 1 1 1 | 0 0\n", 422 | " 5 +1.367e+02 -3.889e+02 +7e+02 1e-02 1e-02 2e+00 2e+00 0.6982 4e-01 1 1 1 | 0 0\n", 423 | " 6 +1.544e+02 -2.490e+02 +5e+02 7e-03 5e-03 2e+00 1e+00 0.6411 6e-01 2 2 2 | 0 0\n", 424 | " 7 +1.463e+02 -2.720e+01 +2e+02 3e-03 2e-03 8e-01 6e-01 0.9890 4e-01 2 1 1 | 0 0\n", 425 | " 8 +1.427e+02 +1.103e+02 +4e+01 6e-04 3e-04 2e-01 1e-01 0.8677 6e-02 2 2 2 | 0 0\n", 426 | " 9 +1.455e+02 +1.356e+02 +1e+01 2e-04 1e-04 4e-02 3e-02 0.8428 2e-01 2 1 2 | 0 0\n", 427 | "10 +1.466e+02 +1.457e+02 +1e+00 2e-05 9e-06 4e-03 3e-03 0.9135 4e-03 2 1 1 | 0 0\n", 428 | "11 +1.467e+02 +1.466e+02 +2e-01 3e-06 2e-06 7e-04 6e-04 0.8736 7e-02 3 1 1 | 0 0\n", 429 | "12 +1.468e+02 +1.467e+02 +1e-02 2e-07 1e-07 5e-05 4e-05 0.9499 3e-02 2 1 1 | 0 0\n", 430 | "13 +1.468e+02 +1.468e+02 +2e-03 3e-08 2e-08 7e-06 6e-06 0.8880 2e-02 2 2 1 | 0 0\n", 431 | "14 +1.468e+02 +1.468e+02 +4e-04 6e-09 3e-09 1e-06 1e-06 0.8208 2e-02 3 1 1 | 0 0\n", 432 | "15 +1.468e+02 +1.468e+02 +2e-05 4e-10 2e-10 8e-08 7e-08 0.9838 4e-02 2 2 2 | 0 0\n", 433 | "16 +1.468e+02 +1.468e+02 +1e-06 2e-11 9e-12 4e-09 3e-09 0.9518 1e-03 2 2 2 | 0 0\n", 434 | "\n", 435 | "OPTIMAL (within feastol=1.8e-11, reltol=7.3e-09, abstol=1.1e-06).\n", 436 | "Runtime: 0.002303 seconds.\n", 437 | "\n" 438 | ] 439 | }, 440 | { 441 | "data": { 442 | "text/plain": [ 443 | "2×19 Matrix{Float64}:\n", 444 | " -1.94916 -1.88156 -0.385014 … 0.459161 0.47516 0.973417\n", 445 | " 0.721039 1.89804 0.357858 -0.0978981 -0.109679 -0.39604" 446 | ] 447 | }, 448 | "execution_count": 45, 449 | "metadata": {}, 450 | "output_type": "execute_result" 451 | } 452 | ], 453 | "source": [ 454 | "function controllable(A,B)\n", 455 | " n = size(A,1)\n", 456 | " C = hcat([A^i*B for i = 0:(n-1)]...)\n", 457 | " return rank(C) == n \n", 458 | "end\n", 459 | "\n", 460 | "let \n", 461 | " \n", 462 | " # create linear system\n", 463 | " nx = 4 \n", 464 | " nu = 2 \n", 465 | " A = randn(nx,nx);\n", 466 | " B = randn(nx,nu);\n", 467 | " @assert controllable(A,B)\n", 468 | " \n", 469 | " # time steps \n", 470 | " N = 20 \n", 471 | " x_ic = randn(nx)\n", 472 | " x_g = randn(nx)\n", 473 | " \n", 474 | " # terminal cost \n", 475 | " Qf = randn(nx,nx); Qf = Qf'*Qf + I # make PSD Qf \n", 476 | " \n", 477 | " # create cvx variables x_k = X[:,k], u_k = U[:,k]\n", 478 | " X = cvx.Variable(nx, N)\n", 479 | " U = cvx.Variable(nu, N - 1)\n", 480 | " \n", 481 | " # create cost \n", 482 | " cost = 0 \n", 483 | " for k = 1:(N-1)\n", 484 | " xk = X[:,k]\n", 485 | " uk = U[:,k]\n", 486 | " cost += cvx.sumsquares(xk - x_g)\n", 487 | " cost += norm(uk, 1)\n", 488 | " end\n", 489 | " xn = X[:,N]\n", 490 | " cost += 0.5*cvx.quadform(xn, Qf)\n", 491 | " \n", 492 | " # initialize cvx problem \n", 493 | " prob = cvx.minimize(cost)\n", 494 | " \n", 495 | " # initial condition constraint \n", 496 | " prob.constraints += X[:,1] == x_ic \n", 497 | " \n", 498 | " for k = 1:(N-1)\n", 499 | " # dynamics constraints \n", 500 | " prob.constraints += (X[:,k+1] == A*X[:,k] + B*U[:,k])\n", 501 | " end\n", 502 | " \n", 503 | " # goal constraint \n", 504 | " prob.constraints += X[:,N] == x_g\n", 505 | " \n", 506 | " # norm(u)<3 \n", 507 | " for k = 1:(N-1)\n", 508 | " uk = U[:,k]\n", 509 | " prob.constraints += norm(uk,2) <= 3 \n", 510 | " end\n", 511 | " \n", 512 | " x_min = -20*ones(nx)\n", 513 | " x_max = 20*ones(nx)\n", 514 | " for k = 1:N\n", 515 | " xk = X[:,k]\n", 516 | " prob.constraints += xk <= x_max \n", 517 | " prob.constraints += xk >= x_min \n", 518 | " end\n", 519 | " \n", 520 | " # solve problem (silent solver tells us the output)\n", 521 | " cvx.solve!(prob, ECOS.Optimizer; silent_solver = false)\n", 522 | " \n", 523 | " if prob.status != cvx.MathOptInterface.OPTIMAL\n", 524 | " error(\"Convex.jl problem failed to solve for some reason\")\n", 525 | " end\n", 526 | " \n", 527 | " # convert the solution matrices into vectors of vectors \n", 528 | " X = X.value::Matrix\n", 529 | " U = U.value::Matrix\n", 530 | "end" 531 | ] 532 | } 533 | ], 534 | "metadata": { 535 | "kernelspec": { 536 | "display_name": "Julia 1.6.7", 537 | "language": "julia", 538 | "name": "julia-1.6" 539 | }, 540 | "language_info": { 541 | "file_extension": ".jl", 542 | "mimetype": "application/julia", 543 | "name": "julia", 544 | "version": "1.6.7" 545 | } 546 | }, 547 | "nbformat": 4, 548 | "nbformat_minor": 5 549 | } 550 | -------------------------------------------------------------------------------- /2_17_recitation/Manifest.toml: -------------------------------------------------------------------------------- 1 | # This file is machine-generated - editing it directly is not advised 2 | 3 | [[AMD]] 4 | deps = ["Libdl", "LinearAlgebra", "SparseArrays", "Test"] 5 | git-tree-sha1 = "00163dc02b882ca5ec032400b919e5f5011dbd31" 6 | uuid = "14f7f29c-3bd6-536c-9a0b-7339e30b5a3e" 7 | version = "0.5.0" 8 | 9 | [[AbstractTrees]] 10 | git-tree-sha1 = "faa260e4cb5aba097a73fab382dd4b5819d8ec8c" 11 | uuid = "1520ce14-60c1-5f80-bbc7-55ef81b5835c" 12 | version = "0.4.4" 13 | 14 | [[Adapt]] 15 | deps = ["LinearAlgebra"] 16 | git-tree-sha1 = "0310e08cb19f5da31d08341c6120c047598f5b9c" 17 | uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" 18 | version = "3.5.0" 19 | 20 | [[ArgTools]] 21 | uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" 22 | 23 | [[Artifacts]] 24 | uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" 25 | 26 | [[AssetRegistry]] 27 | deps = ["Distributed", "JSON", "Pidfile", "SHA", "Test"] 28 | git-tree-sha1 = "b25e88db7944f98789130d7b503276bc34bc098e" 29 | uuid = "bf4720bc-e11a-5d0c-854e-bdca1663c893" 30 | version = "0.1.0" 31 | 32 | [[Base64]] 33 | uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" 34 | 35 | [[BenchmarkTools]] 36 | deps = ["JSON", "Logging", "Printf", "Profile", "Statistics", "UUIDs"] 37 | git-tree-sha1 = "d9a9701b899b30332bbcb3e1679c41cce81fb0e8" 38 | uuid = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf" 39 | version = "1.3.2" 40 | 41 | [[BinDeps]] 42 | deps = ["Libdl", "Pkg", "SHA", "URIParser", "Unicode"] 43 | git-tree-sha1 = "1289b57e8cf019aede076edab0587eb9644175bd" 44 | uuid = "9e28174c-4ba2-5203-b857-d8d62c4213ee" 45 | version = "1.0.2" 46 | 47 | [[Blink]] 48 | deps = ["Base64", "BinDeps", "Distributed", "JSExpr", "JSON", "Lazy", "Logging", "MacroTools", "Mustache", "Mux", "Reexport", "Sockets", "WebIO", "WebSockets"] 49 | git-tree-sha1 = "08d0b679fd7caa49e2bca9214b131289e19808c0" 50 | uuid = "ad839575-38b3-5650-b840-f874b8c74a25" 51 | version = "0.12.5" 52 | 53 | [[Bzip2_jll]] 54 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 55 | git-tree-sha1 = "19a35467a82e236ff51bc17a3a44b69ef35185a2" 56 | uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0" 57 | version = "1.0.8+0" 58 | 59 | [[CEnum]] 60 | git-tree-sha1 = "eb4cb44a499229b3b8426dcfb5dd85333951ff90" 61 | uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82" 62 | version = "0.4.2" 63 | 64 | [[Cairo_jll]] 65 | deps = ["Artifacts", "Bzip2_jll", "CompilerSupportLibraries_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "LZO_jll", "Libdl", "Pixman_jll", "Pkg", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"] 66 | git-tree-sha1 = "4b859a208b2397a7a623a03449e4636bdb17bcf2" 67 | uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a" 68 | version = "1.16.1+1" 69 | 70 | [[Calculus]] 71 | deps = ["LinearAlgebra"] 72 | git-tree-sha1 = "f641eb0a4f00c343bbc32346e1217b86f3ce9dad" 73 | uuid = "49dc2e85-a5d0-5ad3-a950-438e2897f1b9" 74 | version = "0.5.1" 75 | 76 | [[Cassette]] 77 | git-tree-sha1 = "a70f220ea09ec61401745ff338f8fb340420165c" 78 | uuid = "7057c7e9-c182-5462-911a-8362d720325c" 79 | version = "0.3.11" 80 | 81 | [[ChainRulesCore]] 82 | deps = ["Compat", "LinearAlgebra", "SparseArrays"] 83 | git-tree-sha1 = "c6d890a52d2c4d55d326439580c3b8d0875a77d9" 84 | uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" 85 | version = "1.15.7" 86 | 87 | [[ChangesOfVariables]] 88 | deps = ["ChainRulesCore", "LinearAlgebra", "Test"] 89 | git-tree-sha1 = "844b061c104c408b24537482469400af6075aae4" 90 | uuid = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0" 91 | version = "0.1.5" 92 | 93 | [[CodecBzip2]] 94 | deps = ["Bzip2_jll", "Libdl", "TranscodingStreams"] 95 | git-tree-sha1 = "2e62a725210ce3c3c2e1a3080190e7ca491f18d7" 96 | uuid = "523fee87-0ab8-5b00-afb7-3ecf72e48cfd" 97 | version = "0.7.2" 98 | 99 | [[CodecZlib]] 100 | deps = ["TranscodingStreams", "Zlib_jll"] 101 | git-tree-sha1 = "9c209fb7536406834aa938fb149964b985de6c83" 102 | uuid = "944b1d66-785c-5afd-91f1-9de20f533193" 103 | version = "0.7.1" 104 | 105 | [[ColorSchemes]] 106 | deps = ["ColorTypes", "ColorVectorSpace", "Colors", "FixedPointNumbers", "Random", "SnoopPrecompile"] 107 | git-tree-sha1 = "aa3edc8f8dea6cbfa176ee12f7c2fc82f0608ed3" 108 | uuid = "35d6a980-a343-548e-a6ea-1d62b119f2f4" 109 | version = "3.20.0" 110 | 111 | [[ColorTypes]] 112 | deps = ["FixedPointNumbers", "Random"] 113 | git-tree-sha1 = "eb7f0f8307f71fac7c606984ea5fb2817275d6e4" 114 | uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" 115 | version = "0.11.4" 116 | 117 | [[ColorVectorSpace]] 118 | deps = ["ColorTypes", "FixedPointNumbers", "LinearAlgebra", "SpecialFunctions", "Statistics", "TensorCore"] 119 | git-tree-sha1 = "600cc5508d66b78aae350f7accdb58763ac18589" 120 | uuid = "c3611d14-8923-5661-9e6a-0046d554d3a4" 121 | version = "0.9.10" 122 | 123 | [[Colors]] 124 | deps = ["ColorTypes", "FixedPointNumbers", "Reexport"] 125 | git-tree-sha1 = "fc08e5930ee9a4e03f84bfb5211cb54e7769758a" 126 | uuid = "5ae59095-9a9b-59fe-a467-6f913c188581" 127 | version = "0.12.10" 128 | 129 | [[Combinatorics]] 130 | git-tree-sha1 = "08c8b6831dc00bfea825826be0bc8336fc369860" 131 | uuid = "861a8166-3701-5b0c-9a16-15d98fcdc6aa" 132 | version = "1.0.2" 133 | 134 | [[CommonSubexpressions]] 135 | deps = ["MacroTools", "Test"] 136 | git-tree-sha1 = "7b8a93dba8af7e3b42fecabf646260105ac373f7" 137 | uuid = "bbf7d656-a473-5ed7-a52c-81e309532950" 138 | version = "0.3.0" 139 | 140 | [[Compat]] 141 | deps = ["Dates", "LinearAlgebra", "UUIDs"] 142 | git-tree-sha1 = "61fdd77467a5c3ad071ef8277ac6bd6af7dd4c04" 143 | uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" 144 | version = "4.6.0" 145 | 146 | [[CompilerSupportLibraries_jll]] 147 | deps = ["Artifacts", "Libdl"] 148 | uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" 149 | 150 | [[Contour]] 151 | git-tree-sha1 = "d05d9e7b7aedff4e5b51a029dced05cfb6125781" 152 | uuid = "d38c429a-6771-53c6-b99e-75d170b6e991" 153 | version = "0.6.2" 154 | 155 | [[Convex]] 156 | deps = ["AbstractTrees", "BenchmarkTools", "LDLFactorizations", "LinearAlgebra", "MathOptInterface", "OrderedCollections", "SparseArrays", "Test"] 157 | git-tree-sha1 = "af4188609c0620ed4b0e4493ed416d3c8b2dadeb" 158 | uuid = "f65535da-76fb-5f13-bab9-19810c17039a" 159 | version = "0.15.3" 160 | 161 | [[CoordinateTransformations]] 162 | deps = ["LinearAlgebra", "StaticArrays"] 163 | git-tree-sha1 = "681ea870b918e7cff7111da58791d7f718067a19" 164 | uuid = "150eb455-5306-5404-9cee-2592286d6298" 165 | version = "0.6.2" 166 | 167 | [[DataAPI]] 168 | git-tree-sha1 = "e8119c1a33d267e16108be441a287a6981ba1630" 169 | uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" 170 | version = "1.14.0" 171 | 172 | [[DataStructures]] 173 | deps = ["Compat", "InteractiveUtils", "OrderedCollections"] 174 | git-tree-sha1 = "d1fff3a548102f48987a52a2e0d114fa97d730f0" 175 | uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" 176 | version = "0.18.13" 177 | 178 | [[DataValueInterfaces]] 179 | git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" 180 | uuid = "e2d170a0-9d28-54be-80f0-106bbe20a464" 181 | version = "1.0.0" 182 | 183 | [[Dates]] 184 | deps = ["Printf"] 185 | uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" 186 | 187 | [[DelimitedFiles]] 188 | deps = ["Mmap"] 189 | uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" 190 | 191 | [[DiffResults]] 192 | deps = ["StaticArraysCore"] 193 | git-tree-sha1 = "782dd5f4561f5d267313f23853baaaa4c52ea621" 194 | uuid = "163ba53b-c6d8-5494-b064-1a9d43ac40c5" 195 | version = "1.1.0" 196 | 197 | [[DiffRules]] 198 | deps = ["IrrationalConstants", "LogExpFunctions", "NaNMath", "Random", "SpecialFunctions"] 199 | git-tree-sha1 = "c5b6685d53f933c11404a3ae9822afe30d522494" 200 | uuid = "b552c78f-8df3-52c6-915a-8e097449b14b" 201 | version = "1.12.2" 202 | 203 | [[Distributed]] 204 | deps = ["Random", "Serialization", "Sockets"] 205 | uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" 206 | 207 | [[DocStringExtensions]] 208 | deps = ["LibGit2"] 209 | git-tree-sha1 = "b19534d1895d702889b219c382a6e18010797f0b" 210 | uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" 211 | version = "0.8.6" 212 | 213 | [[Downloads]] 214 | deps = ["ArgTools", "LibCURL", "NetworkOptions"] 215 | uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" 216 | 217 | [[DualNumbers]] 218 | deps = ["Calculus", "NaNMath", "SpecialFunctions"] 219 | git-tree-sha1 = "5837a837389fccf076445fce071c8ddaea35a566" 220 | uuid = "fa6b7ba4-c1ee-5f82-b5fc-ecf0adba8f74" 221 | version = "0.6.8" 222 | 223 | [[ECOS]] 224 | deps = ["CEnum", "ECOS_jll", "MathOptInterface"] 225 | git-tree-sha1 = "a10ccdc509a938d02b32904edb037b7045c49665" 226 | uuid = "e2685f51-7e38-5353-a97d-a921fd2c8199" 227 | version = "1.1.0" 228 | 229 | [[ECOS_jll]] 230 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 231 | git-tree-sha1 = "5f84034ddd642cf595e57d46ea2f085321c260e4" 232 | uuid = "c2c64177-6a8e-5dca-99a7-64895ad7445f" 233 | version = "200.0.800+0" 234 | 235 | [[EarCut_jll]] 236 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 237 | git-tree-sha1 = "e3290f2d49e661fbd94046d7e3726ffcb2d41053" 238 | uuid = "5ae413db-bbd1-5e63-b57d-d24a61df00f5" 239 | version = "2.2.4+0" 240 | 241 | [[Expat_jll]] 242 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 243 | git-tree-sha1 = "bad72f730e9e91c08d9427d5e8db95478a3c323d" 244 | uuid = "2e619515-83b5-522b-bb60-26c02a35a201" 245 | version = "2.4.8+0" 246 | 247 | [[Extents]] 248 | git-tree-sha1 = "5e1e4c53fa39afe63a7d356e30452249365fba99" 249 | uuid = "411431e0-e8b7-467b-b5e0-f676ba4f2910" 250 | version = "0.1.1" 251 | 252 | [[FFMPEG]] 253 | deps = ["FFMPEG_jll"] 254 | git-tree-sha1 = "b57e3acbe22f8484b4b5ff66a7499717fe1a9cc8" 255 | uuid = "c87230d0-a227-11e9-1b43-d7ebe4e7570a" 256 | version = "0.4.1" 257 | 258 | [[FFMPEG_jll]] 259 | deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "JLLWrappers", "LAME_jll", "Libdl", "Ogg_jll", "OpenSSL_jll", "Opus_jll", "PCRE2_jll", "Pkg", "Zlib_jll", "libaom_jll", "libass_jll", "libfdk_aac_jll", "libvorbis_jll", "x264_jll", "x265_jll"] 260 | git-tree-sha1 = "74faea50c1d007c85837327f6775bea60b5492dd" 261 | uuid = "b22a6f82-2f65-5046-a5b2-351ab43fb4e5" 262 | version = "4.4.2+2" 263 | 264 | [[FileIO]] 265 | deps = ["Pkg", "Requires", "UUIDs"] 266 | git-tree-sha1 = "7be5f99f7d15578798f338f5433b6c432ea8037b" 267 | uuid = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" 268 | version = "1.16.0" 269 | 270 | [[FileWatching]] 271 | uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" 272 | 273 | [[FixedPointNumbers]] 274 | deps = ["Statistics"] 275 | git-tree-sha1 = "335bfdceacc84c5cdf16aadc768aa5ddfc5383cc" 276 | uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" 277 | version = "0.8.4" 278 | 279 | [[Fontconfig_jll]] 280 | deps = ["Artifacts", "Bzip2_jll", "Expat_jll", "FreeType2_jll", "JLLWrappers", "Libdl", "Libuuid_jll", "Pkg", "Zlib_jll"] 281 | git-tree-sha1 = "21efd19106a55620a188615da6d3d06cd7f6ee03" 282 | uuid = "a3f928ae-7b40-5064-980b-68af3947d34b" 283 | version = "2.13.93+0" 284 | 285 | [[Formatting]] 286 | deps = ["Printf"] 287 | git-tree-sha1 = "8339d61043228fdd3eb658d86c926cb282ae72a8" 288 | uuid = "59287772-0a20-5a39-b81b-1366585eb4c0" 289 | version = "0.4.2" 290 | 291 | [[ForwardDiff]] 292 | deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions", "StaticArrays"] 293 | git-tree-sha1 = "a69dd6db8a809f78846ff259298678f0d6212180" 294 | uuid = "f6369f11-7733-5829-9624-2563aa707210" 295 | version = "0.10.34" 296 | 297 | [[FreeType2_jll]] 298 | deps = ["Artifacts", "Bzip2_jll", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] 299 | git-tree-sha1 = "87eb71354d8ec1a96d4a7636bd57a7347dde3ef9" 300 | uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7" 301 | version = "2.10.4+0" 302 | 303 | [[FriBidi_jll]] 304 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 305 | git-tree-sha1 = "aa31987c2ba8704e23c6c8ba8a4f769d5d7e4f91" 306 | uuid = "559328eb-81f9-559d-9380-de523a88c83c" 307 | version = "1.0.10+0" 308 | 309 | [[FunctionalCollections]] 310 | deps = ["Test"] 311 | git-tree-sha1 = "04cb9cfaa6ba5311973994fe3496ddec19b6292a" 312 | uuid = "de31a74c-ac4f-5751-b3fd-e18cd04993ca" 313 | version = "0.5.0" 314 | 315 | [[GLFW_jll]] 316 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Libglvnd_jll", "Pkg", "Xorg_libXcursor_jll", "Xorg_libXi_jll", "Xorg_libXinerama_jll", "Xorg_libXrandr_jll"] 317 | git-tree-sha1 = "d972031d28c8c8d9d7b41a536ad7bb0c2579caca" 318 | uuid = "0656b61e-2033-5cc2-a64a-77c0f6c09b89" 319 | version = "3.3.8+0" 320 | 321 | [[GPUArraysCore]] 322 | deps = ["Adapt"] 323 | git-tree-sha1 = "1cd7f0af1aa58abc02ea1d872953a97359cb87fa" 324 | uuid = "46192b85-c4d5-4398-a991-12ede77f4527" 325 | version = "0.1.4" 326 | 327 | [[GR]] 328 | deps = ["Artifacts", "Base64", "DelimitedFiles", "Downloads", "GR_jll", "HTTP", "JSON", "Libdl", "LinearAlgebra", "Pkg", "Preferences", "Printf", "Random", "Serialization", "Sockets", "TOML", "Tar", "Test", "UUIDs", "p7zip_jll"] 329 | git-tree-sha1 = "660b2ea2ec2b010bb02823c6d0ff6afd9bdc5c16" 330 | uuid = "28b8d3ca-fb5f-59d9-8090-bfdbd6d07a71" 331 | version = "0.71.7" 332 | 333 | [[GR_jll]] 334 | deps = ["Artifacts", "Bzip2_jll", "Cairo_jll", "FFMPEG_jll", "Fontconfig_jll", "GLFW_jll", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Libtiff_jll", "Pixman_jll", "Qt5Base_jll", "Zlib_jll", "libpng_jll"] 335 | git-tree-sha1 = "d5e1fd17ac7f3aa4c5287a61ee28d4f8b8e98873" 336 | uuid = "d2c73de3-f751-5644-a686-071e5b155ba9" 337 | version = "0.71.7+0" 338 | 339 | [[GenericLinearAlgebra]] 340 | deps = ["LinearAlgebra", "Printf", "Random", "libblastrampoline_jll"] 341 | git-tree-sha1 = "856610594f8759d2a3d3afe3397ce5242982bfdd" 342 | uuid = "14197337-ba66-59df-a3e3-ca00e7dcff7a" 343 | version = "0.3.5" 344 | 345 | [[GeoInterface]] 346 | deps = ["Extents"] 347 | git-tree-sha1 = "e07a1b98ed72e3cdd02c6ceaab94b8a606faca40" 348 | uuid = "cf35fbd7-0cd7-5166-be24-54bfbe79505f" 349 | version = "1.2.1" 350 | 351 | [[GeometryBasics]] 352 | deps = ["EarCut_jll", "GeoInterface", "IterTools", "LinearAlgebra", "StaticArrays", "StructArrays", "Tables"] 353 | git-tree-sha1 = "fe9aea4ed3ec6afdfbeb5a4f39a2208909b162a6" 354 | uuid = "5c1252a2-5f33-56bf-86c9-59e7332b4326" 355 | version = "0.4.5" 356 | 357 | [[Gettext_jll]] 358 | deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "XML2_jll"] 359 | git-tree-sha1 = "9b02998aba7bf074d14de89f9d37ca24a1a0b046" 360 | uuid = "78b55507-aeef-58d4-861c-77aaff3498b1" 361 | version = "0.21.0+0" 362 | 363 | [[Glib_jll]] 364 | deps = ["Artifacts", "Gettext_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE2_jll", "Pkg", "Zlib_jll"] 365 | git-tree-sha1 = "d3b3624125c1474292d0d8ed0f65554ac37ddb23" 366 | uuid = "7746bdde-850d-59dc-9ae8-88ece973131d" 367 | version = "2.74.0+2" 368 | 369 | [[Graphite2_jll]] 370 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 371 | git-tree-sha1 = "344bf40dcab1073aca04aa0df4fb092f920e4011" 372 | uuid = "3b182d85-2403-5c21-9c21-1e1f0cc25472" 373 | version = "1.3.14+0" 374 | 375 | [[Grisu]] 376 | git-tree-sha1 = "53bb909d1151e57e2484c3d1b53e19552b887fb2" 377 | uuid = "42e2da0e-8278-4e71-bc24-59509adca0fe" 378 | version = "1.0.2" 379 | 380 | [[HTTP]] 381 | deps = ["Base64", "Dates", "IniFile", "MbedTLS", "Sockets"] 382 | git-tree-sha1 = "c7ec02c4c6a039a98a15f955462cd7aea5df4508" 383 | uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3" 384 | version = "0.8.19" 385 | 386 | [[HarfBuzz_jll]] 387 | deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "Graphite2_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg"] 388 | git-tree-sha1 = "129acf094d168394e80ee1dc4bc06ec835e510a3" 389 | uuid = "2e76f6c2-a576-52d4-95c1-20adfe4de566" 390 | version = "2.8.1+1" 391 | 392 | [[Hiccup]] 393 | deps = ["MacroTools", "Test"] 394 | git-tree-sha1 = "6187bb2d5fcbb2007c39e7ac53308b0d371124bd" 395 | uuid = "9fb69e20-1954-56bb-a84f-559cc56a8ff7" 396 | version = "0.2.2" 397 | 398 | [[Hypatia]] 399 | deps = ["Combinatorics", "DocStringExtensions", "GenericLinearAlgebra", "IterativeSolvers", "LinearAlgebra", "LinearMaps", "MathOptInterface", "PolynomialRoots", "Printf", "Requires", "SparseArrays", "SpecialFunctions", "SuiteSparse", "Test"] 400 | git-tree-sha1 = "c34619ebb5bbdd66e6d91e12c7141b2c09d2e50b" 401 | uuid = "b99e6be6-89ff-11e8-14f8-45c827f4f8f2" 402 | version = "0.7.0" 403 | 404 | [[IniFile]] 405 | git-tree-sha1 = "f550e6e32074c939295eb5ea6de31849ac2c9625" 406 | uuid = "83e8ac13-25f8-5344-8a64-a9f2b223428f" 407 | version = "0.5.1" 408 | 409 | [[InteractiveUtils]] 410 | deps = ["Markdown"] 411 | uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" 412 | 413 | [[InverseFunctions]] 414 | deps = ["Test"] 415 | git-tree-sha1 = "49510dfcb407e572524ba94aeae2fced1f3feb0f" 416 | uuid = "3587e190-3f89-42d0-90ee-14403ec27112" 417 | version = "0.1.8" 418 | 419 | [[IrrationalConstants]] 420 | git-tree-sha1 = "7fd44fd4ff43fc60815f8e764c0f352b83c49151" 421 | uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" 422 | version = "0.1.1" 423 | 424 | [[IterTools]] 425 | git-tree-sha1 = "fa6287a4469f5e048d763df38279ee729fbd44e5" 426 | uuid = "c8e1da08-722c-5040-9ed9-7db0dc04731e" 427 | version = "1.4.0" 428 | 429 | [[IterativeSolvers]] 430 | deps = ["LinearAlgebra", "Printf", "Random", "RecipesBase", "SparseArrays"] 431 | git-tree-sha1 = "1169632f425f79429f245113b775a0e3d121457c" 432 | uuid = "42fd0dbc-a981-5370-80f2-aaf504508153" 433 | version = "0.9.2" 434 | 435 | [[IteratorInterfaceExtensions]] 436 | git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856" 437 | uuid = "82899510-4779-5014-852e-03e436cf321d" 438 | version = "1.0.0" 439 | 440 | [[JLD2]] 441 | deps = ["FileIO", "MacroTools", "Mmap", "OrderedCollections", "Pkg", "Printf", "Reexport", "TranscodingStreams", "UUIDs"] 442 | git-tree-sha1 = "c3244ef42b7d4508c638339df1bdbf4353e144db" 443 | uuid = "033835bb-8acc-5ee8-8aae-3f567f8a3819" 444 | version = "0.4.30" 445 | 446 | [[JLFzf]] 447 | deps = ["Pipe", "REPL", "Random", "fzf_jll"] 448 | git-tree-sha1 = "f377670cda23b6b7c1c0b3893e37451c5c1a2185" 449 | uuid = "1019f520-868f-41f5-a6de-eb00f4b6a39c" 450 | version = "0.1.5" 451 | 452 | [[JLLWrappers]] 453 | deps = ["Preferences"] 454 | git-tree-sha1 = "abc9885a7ca2052a736a600f7fa66209f96506e1" 455 | uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" 456 | version = "1.4.1" 457 | 458 | [[JSExpr]] 459 | deps = ["JSON", "MacroTools", "Observables", "WebIO"] 460 | git-tree-sha1 = "b413a73785b98474d8af24fd4c8a975e31df3658" 461 | uuid = "97c1335a-c9c5-57fe-bc5d-ec35cebe8660" 462 | version = "0.5.4" 463 | 464 | [[JSON]] 465 | deps = ["Dates", "Mmap", "Parsers", "Unicode"] 466 | git-tree-sha1 = "3c837543ddb02250ef42f4738347454f95079d4e" 467 | uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" 468 | version = "0.21.3" 469 | 470 | [[JpegTurbo_jll]] 471 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 472 | git-tree-sha1 = "b53380851c6e6664204efb2e62cd24fa5c47e4ba" 473 | uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8" 474 | version = "2.1.2+0" 475 | 476 | [[LAME_jll]] 477 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 478 | git-tree-sha1 = "f6250b16881adf048549549fba48b1161acdac8c" 479 | uuid = "c1c5ebd0-6772-5130-a774-d5fcae4a789d" 480 | version = "3.100.1+0" 481 | 482 | [[LDLFactorizations]] 483 | deps = ["AMD", "LinearAlgebra", "SparseArrays", "Test"] 484 | git-tree-sha1 = "cbf4b646f82bfc58bb48bcca9dcce2eb88da4cd1" 485 | uuid = "40e66cde-538c-5869-a4ad-c39174c6795b" 486 | version = "0.10.0" 487 | 488 | [[LERC_jll]] 489 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 490 | git-tree-sha1 = "bf36f528eec6634efc60d7ec062008f171071434" 491 | uuid = "88015f11-f218-50d7-93a8-a6af411a945d" 492 | version = "3.0.0+1" 493 | 494 | [[LZO_jll]] 495 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 496 | git-tree-sha1 = "e5b909bcf985c5e2605737d2ce278ed791b89be6" 497 | uuid = "dd4b983a-f0e5-5f8d-a1b7-129d4a5fb1ac" 498 | version = "2.10.1+0" 499 | 500 | [[LaTeXStrings]] 501 | git-tree-sha1 = "f2355693d6778a178ade15952b7ac47a4ff97996" 502 | uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" 503 | version = "1.3.0" 504 | 505 | [[Latexify]] 506 | deps = ["Formatting", "InteractiveUtils", "LaTeXStrings", "MacroTools", "Markdown", "OrderedCollections", "Printf", "Requires"] 507 | git-tree-sha1 = "2422f47b34d4b127720a18f86fa7b1aa2e141f29" 508 | uuid = "23fbe1c1-3f47-55db-b15f-69d7ec21a316" 509 | version = "0.15.18" 510 | 511 | [[Lazy]] 512 | deps = ["MacroTools"] 513 | git-tree-sha1 = "1370f8202dac30758f3c345f9909b97f53d87d3f" 514 | uuid = "50d2b5c4-7a5e-59d5-8109-a42b560f39c0" 515 | version = "0.15.1" 516 | 517 | [[LibCURL]] 518 | deps = ["LibCURL_jll", "MozillaCACerts_jll"] 519 | uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21" 520 | 521 | [[LibCURL_jll]] 522 | deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"] 523 | uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" 524 | 525 | [[LibGit2]] 526 | deps = ["Base64", "NetworkOptions", "Printf", "SHA"] 527 | uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" 528 | 529 | [[LibSSH2_jll]] 530 | deps = ["Artifacts", "Libdl", "MbedTLS_jll"] 531 | uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" 532 | 533 | [[Libdl]] 534 | uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" 535 | 536 | [[Libffi_jll]] 537 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 538 | git-tree-sha1 = "0b4a5d71f3e5200a7dff793393e09dfc2d874290" 539 | uuid = "e9f186c6-92d2-5b65-8a66-fee21dc1b490" 540 | version = "3.2.2+1" 541 | 542 | [[Libgcrypt_jll]] 543 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgpg_error_jll", "Pkg"] 544 | git-tree-sha1 = "64613c82a59c120435c067c2b809fc61cf5166ae" 545 | uuid = "d4300ac3-e22c-5743-9152-c294e39db1e4" 546 | version = "1.8.7+0" 547 | 548 | [[Libglvnd_jll]] 549 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll", "Xorg_libXext_jll"] 550 | git-tree-sha1 = "6f73d1dd803986947b2c750138528a999a6c7733" 551 | uuid = "7e76a0d4-f3c7-5321-8279-8d96eeed0f29" 552 | version = "1.6.0+0" 553 | 554 | [[Libgpg_error_jll]] 555 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 556 | git-tree-sha1 = "c333716e46366857753e273ce6a69ee0945a6db9" 557 | uuid = "7add5ba3-2f88-524e-9cd5-f83b8a55f7b8" 558 | version = "1.42.0+0" 559 | 560 | [[Libiconv_jll]] 561 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 562 | git-tree-sha1 = "c7cb1f5d892775ba13767a87c7ada0b980ea0a71" 563 | uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531" 564 | version = "1.16.1+2" 565 | 566 | [[Libmount_jll]] 567 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 568 | git-tree-sha1 = "9c30530bf0effd46e15e0fdcf2b8636e78cbbd73" 569 | uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9" 570 | version = "2.35.0+0" 571 | 572 | [[Libtiff_jll]] 573 | deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "LERC_jll", "Libdl", "Pkg", "Zlib_jll", "Zstd_jll"] 574 | git-tree-sha1 = "3eb79b0ca5764d4799c06699573fd8f533259713" 575 | uuid = "89763e89-9b03-5906-acba-b20f662cd828" 576 | version = "4.4.0+0" 577 | 578 | [[Libuuid_jll]] 579 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 580 | git-tree-sha1 = "7f3efec06033682db852f8b3bc3c1d2b0a0ab066" 581 | uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700" 582 | version = "2.36.0+0" 583 | 584 | [[LinearAlgebra]] 585 | deps = ["Libdl"] 586 | uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" 587 | 588 | [[LinearMaps]] 589 | deps = ["ChainRulesCore", "LinearAlgebra", "SparseArrays", "Statistics"] 590 | git-tree-sha1 = "42970dad6b0d2515571613010bd32ba37e07f874" 591 | uuid = "7a12625a-238d-50fd-b39a-03d52299707e" 592 | version = "3.9.0" 593 | 594 | [[LogExpFunctions]] 595 | deps = ["ChainRulesCore", "ChangesOfVariables", "DocStringExtensions", "InverseFunctions", "IrrationalConstants", "LinearAlgebra"] 596 | git-tree-sha1 = "680e733c3a0a9cea9e935c8c2184aea6a63fa0b5" 597 | uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" 598 | version = "0.3.21" 599 | 600 | [[Logging]] 601 | uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" 602 | 603 | [[MacroTools]] 604 | deps = ["Markdown", "Random"] 605 | git-tree-sha1 = "42324d08725e200c23d4dfb549e0d5d89dede2d2" 606 | uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" 607 | version = "0.5.10" 608 | 609 | [[Markdown]] 610 | deps = ["Base64"] 611 | uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" 612 | 613 | [[MathOptInterface]] 614 | deps = ["BenchmarkTools", "CodecBzip2", "CodecZlib", "DataStructures", "ForwardDiff", "JSON", "LinearAlgebra", "MutableArithmetics", "NaNMath", "OrderedCollections", "Printf", "SnoopPrecompile", "SparseArrays", "SpecialFunctions", "Test", "Unicode"] 615 | git-tree-sha1 = "2a58c70db9287898dcc76b8394f0ff601c11b270" 616 | uuid = "b8f27783-ece8-5eb3-8dc8-9495eed66fee" 617 | version = "1.12.0" 618 | 619 | [[MbedTLS]] 620 | deps = ["Dates", "MbedTLS_jll", "MozillaCACerts_jll", "Random", "Sockets"] 621 | git-tree-sha1 = "03a9b9718f5682ecb107ac9f7308991db4ce395b" 622 | uuid = "739be429-bea8-5141-9913-cc70e7f3736d" 623 | version = "1.1.7" 624 | 625 | [[MbedTLS_jll]] 626 | deps = ["Artifacts", "Libdl"] 627 | uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" 628 | 629 | [[Measures]] 630 | git-tree-sha1 = "c13304c81eec1ed3af7fc20e75fb6b26092a1102" 631 | uuid = "442fdcdd-2543-5da2-b0f3-8c86c306513e" 632 | version = "0.3.2" 633 | 634 | [[MeshCat]] 635 | deps = ["Base64", "BinDeps", "Blink", "Cassette", "Colors", "CoordinateTransformations", "DocStringExtensions", "FFMPEG", "GeometryBasics", "LinearAlgebra", "Logging", "MsgPack", "Mux", "Parameters", "Pkg", "Requires", "Rotations", "Sockets", "StaticArrays", "UUIDs", "WebSockets"] 636 | git-tree-sha1 = "bd707ee5273b7778554b0b22b3071cf97f71e1f4" 637 | uuid = "283c5d60-a78f-5afe-a0af-af636b173e11" 638 | version = "0.14.2" 639 | 640 | [[Missings]] 641 | deps = ["DataAPI"] 642 | git-tree-sha1 = "f66bdc5de519e8f8ae43bdc598782d35a25b1272" 643 | uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28" 644 | version = "1.1.0" 645 | 646 | [[Mmap]] 647 | uuid = "a63ad114-7e13-5084-954f-fe012c677804" 648 | 649 | [[MozillaCACerts_jll]] 650 | uuid = "14a3606d-f60d-562e-9121-12d972cd8159" 651 | 652 | [[MsgPack]] 653 | deps = ["Serialization"] 654 | git-tree-sha1 = "fc8c15ca848b902015bd4a745d350f02cf791c2a" 655 | uuid = "99f44e22-a591-53d1-9472-aa23ef4bd671" 656 | version = "1.2.0" 657 | 658 | [[Mustache]] 659 | deps = ["Printf", "Tables"] 660 | git-tree-sha1 = "1e566ae913a57d0062ff1af54d2697b9344b99cd" 661 | uuid = "ffc61752-8dc7-55ee-8c37-f3e9cdd09e70" 662 | version = "1.0.14" 663 | 664 | [[MutableArithmetics]] 665 | deps = ["LinearAlgebra", "SparseArrays", "Test"] 666 | git-tree-sha1 = "b8b5827b5939d926d3f5954d80bb5a8ab5ccd27a" 667 | uuid = "d8a4904e-b15c-11e9-3269-09a3773c0cb0" 668 | version = "1.2.1" 669 | 670 | [[Mux]] 671 | deps = ["AssetRegistry", "Base64", "HTTP", "Hiccup", "Pkg", "Sockets", "WebSockets"] 672 | git-tree-sha1 = "82dfb2cead9895e10ee1b0ca37a01088456c4364" 673 | uuid = "a975b10e-0019-58db-a62f-e48ff68538c9" 674 | version = "0.7.6" 675 | 676 | [[NaNMath]] 677 | deps = ["OpenLibm_jll"] 678 | git-tree-sha1 = "a7c3d1da1189a1c2fe843a3bfa04d18d20eb3211" 679 | uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" 680 | version = "1.0.1" 681 | 682 | [[NetworkOptions]] 683 | uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" 684 | 685 | [[Observables]] 686 | git-tree-sha1 = "6862738f9796b3edc1c09d0890afce4eca9e7e93" 687 | uuid = "510215fc-4207-5dde-b226-833fc4488ee2" 688 | version = "0.5.4" 689 | 690 | [[Ogg_jll]] 691 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 692 | git-tree-sha1 = "887579a3eb005446d514ab7aeac5d1d027658b8f" 693 | uuid = "e7412a2a-1a6e-54c0-be00-318e2571c051" 694 | version = "1.3.5+1" 695 | 696 | [[OpenLibm_jll]] 697 | deps = ["Artifacts", "Libdl"] 698 | uuid = "05823500-19ac-5b8b-9628-191a04bc5112" 699 | 700 | [[OpenSSL_jll]] 701 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 702 | git-tree-sha1 = "9ff31d101d987eb9d66bd8b176ac7c277beccd09" 703 | uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" 704 | version = "1.1.20+0" 705 | 706 | [[OpenSpecFun_jll]] 707 | deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] 708 | git-tree-sha1 = "13652491f6856acfd2db29360e1bbcd4565d04f1" 709 | uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" 710 | version = "0.5.5+0" 711 | 712 | [[Opus_jll]] 713 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 714 | git-tree-sha1 = "51a08fb14ec28da2ec7a927c4337e4332c2a4720" 715 | uuid = "91d4177d-7536-5919-b921-800302f37372" 716 | version = "1.3.2+0" 717 | 718 | [[OrderedCollections]] 719 | git-tree-sha1 = "85f8e6578bf1f9ee0d11e7bb1b1456435479d47c" 720 | uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" 721 | version = "1.4.1" 722 | 723 | [[PCRE2_jll]] 724 | deps = ["Artifacts", "Libdl"] 725 | uuid = "efcefdf7-47ab-520b-bdef-62a2eaa19f15" 726 | 727 | [[Parameters]] 728 | deps = ["OrderedCollections", "UnPack"] 729 | git-tree-sha1 = "34c0e9ad262e5f7fc75b10a9952ca7692cfc5fbe" 730 | uuid = "d96e819e-fc66-5662-9728-84c9c7592b0a" 731 | version = "0.12.3" 732 | 733 | [[Parsers]] 734 | deps = ["Dates", "SnoopPrecompile"] 735 | git-tree-sha1 = "6f4fbcd1ad45905a5dee3f4256fabb49aa2110c6" 736 | uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" 737 | version = "2.5.7" 738 | 739 | [[Pidfile]] 740 | deps = ["FileWatching", "Test"] 741 | git-tree-sha1 = "2d8aaf8ee10df53d0dfb9b8ee44ae7c04ced2b03" 742 | uuid = "fa939f87-e72e-5be4-a000-7fc836dbe307" 743 | version = "1.3.0" 744 | 745 | [[Pipe]] 746 | git-tree-sha1 = "6842804e7867b115ca9de748a0cf6b364523c16d" 747 | uuid = "b98c9c47-44ae-5843-9183-064241ee97a0" 748 | version = "1.3.0" 749 | 750 | [[Pixman_jll]] 751 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 752 | git-tree-sha1 = "b4f5d02549a10e20780a24fce72bea96b6329e29" 753 | uuid = "30392449-352a-5448-841d-b1acce4e97dc" 754 | version = "0.40.1+0" 755 | 756 | [[Pkg]] 757 | deps = ["Artifacts", "Dates", "Downloads", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"] 758 | uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" 759 | 760 | [[PlotThemes]] 761 | deps = ["PlotUtils", "Statistics"] 762 | git-tree-sha1 = "1f03a2d339f42dca4a4da149c7e15e9b896ad899" 763 | uuid = "ccf2f8ad-2431-5c83-bf29-c5338b663b6a" 764 | version = "3.1.0" 765 | 766 | [[PlotUtils]] 767 | deps = ["ColorSchemes", "Colors", "Dates", "Printf", "Random", "Reexport", "SnoopPrecompile", "Statistics"] 768 | git-tree-sha1 = "c95373e73290cf50a8a22c3375e4625ded5c5280" 769 | uuid = "995b91a9-d308-5afd-9ec6-746e21dbc043" 770 | version = "1.3.4" 771 | 772 | [[Plots]] 773 | deps = ["Base64", "Contour", "Dates", "Downloads", "FFMPEG", "FixedPointNumbers", "GR", "JLFzf", "JSON", "LaTeXStrings", "Latexify", "LinearAlgebra", "Measures", "NaNMath", "Pkg", "PlotThemes", "PlotUtils", "Preferences", "Printf", "REPL", "Random", "RecipesBase", "RecipesPipeline", "Reexport", "RelocatableFolders", "Requires", "Scratch", "Showoff", "SnoopPrecompile", "SparseArrays", "Statistics", "StatsBase", "UUIDs", "UnicodeFun", "Unzip"] 774 | git-tree-sha1 = "8ac949bd0ebc46a44afb1fdca1094554a84b086e" 775 | uuid = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" 776 | version = "1.38.5" 777 | 778 | [[PolynomialRoots]] 779 | git-tree-sha1 = "5f807b5345093487f733e520a1b7395ee9324825" 780 | uuid = "3a141323-8675-5d76-9d11-e1df1406c778" 781 | version = "1.0.0" 782 | 783 | [[Preferences]] 784 | deps = ["TOML"] 785 | git-tree-sha1 = "47e5f437cc0e7ef2ce8406ce1e7e24d44915f88d" 786 | uuid = "21216c6a-2e73-6563-6e65-726566657250" 787 | version = "1.3.0" 788 | 789 | [[Printf]] 790 | deps = ["Unicode"] 791 | uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" 792 | 793 | [[Profile]] 794 | deps = ["Printf"] 795 | uuid = "9abbd945-dff8-562f-b5e8-e1ebf5ef1b79" 796 | 797 | [[ProgressMeter]] 798 | deps = ["Distributed", "Printf"] 799 | git-tree-sha1 = "d7a7aef8f8f2d537104f170139553b14dfe39fe9" 800 | uuid = "92933f4c-e287-5a05-a399-4b506db050ca" 801 | version = "1.7.2" 802 | 803 | [[Qt5Base_jll]] 804 | deps = ["Artifacts", "CompilerSupportLibraries_jll", "Fontconfig_jll", "Glib_jll", "JLLWrappers", "Libdl", "Libglvnd_jll", "OpenSSL_jll", "Pkg", "Xorg_libXext_jll", "Xorg_libxcb_jll", "Xorg_xcb_util_image_jll", "Xorg_xcb_util_keysyms_jll", "Xorg_xcb_util_renderutil_jll", "Xorg_xcb_util_wm_jll", "Zlib_jll", "xkbcommon_jll"] 805 | git-tree-sha1 = "0c03844e2231e12fda4d0086fd7cbe4098ee8dc5" 806 | uuid = "ea2cea3b-5b76-57ae-a6ef-0a8af62496e1" 807 | version = "5.15.3+2" 808 | 809 | [[Quaternions]] 810 | deps = ["DualNumbers", "LinearAlgebra", "Random"] 811 | git-tree-sha1 = "0b345302b17b0e694092621915de0e0dc7443a1a" 812 | uuid = "94ee1d12-ae83-5a48-8b1c-48b8ff168ae0" 813 | version = "0.4.9" 814 | 815 | [[REPL]] 816 | deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"] 817 | uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" 818 | 819 | [[Random]] 820 | deps = ["Serialization"] 821 | uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" 822 | 823 | [[RecipesBase]] 824 | deps = ["SnoopPrecompile"] 825 | git-tree-sha1 = "261dddd3b862bd2c940cf6ca4d1c8fe593e457c8" 826 | uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" 827 | version = "1.3.3" 828 | 829 | [[RecipesPipeline]] 830 | deps = ["Dates", "NaNMath", "PlotUtils", "RecipesBase", "SnoopPrecompile"] 831 | git-tree-sha1 = "e974477be88cb5e3040009f3767611bc6357846f" 832 | uuid = "01d81517-befc-4cb6-b9ec-a95719d0359c" 833 | version = "0.6.11" 834 | 835 | [[Reexport]] 836 | git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" 837 | uuid = "189a3867-3050-52da-a836-e630ba90ab69" 838 | version = "1.2.2" 839 | 840 | [[RelocatableFolders]] 841 | deps = ["SHA", "Scratch"] 842 | git-tree-sha1 = "90bc7a7c96410424509e4263e277e43250c05691" 843 | uuid = "05181044-ff0b-4ac5-8273-598c1e38db00" 844 | version = "1.0.0" 845 | 846 | [[Requires]] 847 | deps = ["UUIDs"] 848 | git-tree-sha1 = "838a3a4188e2ded87a4f9f184b4b0d78a1e91cb7" 849 | uuid = "ae029012-a4dd-5104-9daa-d747884805df" 850 | version = "1.3.0" 851 | 852 | [[Rotations]] 853 | deps = ["LinearAlgebra", "Quaternions", "Random", "StaticArrays", "Statistics"] 854 | git-tree-sha1 = "2fa87d198bc5356c649b92109ed3ce46ee1eb89d" 855 | uuid = "6038ab10-8711-5258-84ad-4b1120ba62dc" 856 | version = "1.1.1" 857 | 858 | [[SHA]] 859 | uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" 860 | 861 | [[Scratch]] 862 | deps = ["Dates"] 863 | git-tree-sha1 = "f94f779c94e58bf9ea243e77a37e16d9de9126bd" 864 | uuid = "6c6a2e73-6563-6170-7368-637461726353" 865 | version = "1.1.1" 866 | 867 | [[Serialization]] 868 | uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" 869 | 870 | [[Showoff]] 871 | deps = ["Dates", "Grisu"] 872 | git-tree-sha1 = "91eddf657aca81df9ae6ceb20b959ae5653ad1de" 873 | uuid = "992d4aef-0814-514b-bc4d-f2e9a6c4116f" 874 | version = "1.0.3" 875 | 876 | [[SnoopPrecompile]] 877 | deps = ["Preferences"] 878 | git-tree-sha1 = "e760a70afdcd461cf01a575947738d359234665c" 879 | uuid = "66db9d55-30c0-4569-8b51-7e840670fc0c" 880 | version = "1.0.3" 881 | 882 | [[Sockets]] 883 | uuid = "6462fe0b-24de-5631-8697-dd941f90decc" 884 | 885 | [[SortingAlgorithms]] 886 | deps = ["DataStructures"] 887 | git-tree-sha1 = "a4ada03f999bd01b3a25dcaa30b2d929fe537e00" 888 | uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" 889 | version = "1.1.0" 890 | 891 | [[SparseArrays]] 892 | deps = ["LinearAlgebra", "Random"] 893 | uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" 894 | 895 | [[SpecialFunctions]] 896 | deps = ["ChainRulesCore", "IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] 897 | git-tree-sha1 = "d75bda01f8c31ebb72df80a46c88b25d1c79c56d" 898 | uuid = "276daf66-3868-5448-9aa4-cd146d93841b" 899 | version = "2.1.7" 900 | 901 | [[StaticArrays]] 902 | deps = ["LinearAlgebra", "Random", "StaticArraysCore", "Statistics"] 903 | git-tree-sha1 = "67d3e75e8af8089ea34ce96974d5468d4a008ca6" 904 | uuid = "90137ffa-7385-5640-81b9-e52037218182" 905 | version = "1.5.15" 906 | 907 | [[StaticArraysCore]] 908 | git-tree-sha1 = "6b7ba252635a5eff6a0b0664a41ee140a1c9e72a" 909 | uuid = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" 910 | version = "1.4.0" 911 | 912 | [[Statistics]] 913 | deps = ["LinearAlgebra", "SparseArrays"] 914 | uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" 915 | 916 | [[StatsAPI]] 917 | deps = ["LinearAlgebra"] 918 | git-tree-sha1 = "f9af7f195fb13589dd2e2d57fdb401717d2eb1f6" 919 | uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0" 920 | version = "1.5.0" 921 | 922 | [[StatsBase]] 923 | deps = ["DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] 924 | git-tree-sha1 = "d1bf48bfcc554a3761a133fe3a9bb01488e06916" 925 | uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" 926 | version = "0.33.21" 927 | 928 | [[StructArrays]] 929 | deps = ["Adapt", "DataAPI", "GPUArraysCore", "StaticArraysCore", "Tables"] 930 | git-tree-sha1 = "b03a3b745aa49b566f128977a7dd1be8711c5e71" 931 | uuid = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" 932 | version = "0.6.14" 933 | 934 | [[SuiteSparse]] 935 | deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"] 936 | uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9" 937 | 938 | [[TOML]] 939 | deps = ["Dates"] 940 | uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" 941 | 942 | [[TableTraits]] 943 | deps = ["IteratorInterfaceExtensions"] 944 | git-tree-sha1 = "c06b2f539df1c6efa794486abfb6ed2022561a39" 945 | uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c" 946 | version = "1.0.1" 947 | 948 | [[Tables]] 949 | deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "LinearAlgebra", "OrderedCollections", "TableTraits", "Test"] 950 | git-tree-sha1 = "c79322d36826aa2f4fd8ecfa96ddb47b174ac78d" 951 | uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" 952 | version = "1.10.0" 953 | 954 | [[Tar]] 955 | deps = ["ArgTools", "SHA"] 956 | uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" 957 | 958 | [[TensorCore]] 959 | deps = ["LinearAlgebra"] 960 | git-tree-sha1 = "1feb45f88d133a655e001435632f019a9a1bcdb6" 961 | uuid = "62fd8b95-f654-4bbd-a8a5-9c27f68ccd50" 962 | version = "0.1.1" 963 | 964 | [[Test]] 965 | deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] 966 | uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" 967 | 968 | [[TranscodingStreams]] 969 | deps = ["Random", "Test"] 970 | git-tree-sha1 = "94f38103c984f89cf77c402f2a68dbd870f8165f" 971 | uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" 972 | version = "0.9.11" 973 | 974 | [[URIParser]] 975 | deps = ["Unicode"] 976 | git-tree-sha1 = "53a9f49546b8d2dd2e688d216421d050c9a31d0d" 977 | uuid = "30578b45-9adc-5946-b283-645ec420af67" 978 | version = "0.4.1" 979 | 980 | [[UUIDs]] 981 | deps = ["Random", "SHA"] 982 | uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" 983 | 984 | [[UnPack]] 985 | git-tree-sha1 = "387c1f73762231e86e0c9c5443ce3b4a0a9a0c2b" 986 | uuid = "3a884ed6-31ef-47d7-9d2a-63182c4928ed" 987 | version = "1.0.2" 988 | 989 | [[Unicode]] 990 | uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" 991 | 992 | [[UnicodeFun]] 993 | deps = ["REPL"] 994 | git-tree-sha1 = "53915e50200959667e78a92a418594b428dffddf" 995 | uuid = "1cfade01-22cf-5700-b092-accc4b62d6e1" 996 | version = "0.4.1" 997 | 998 | [[Unzip]] 999 | git-tree-sha1 = "34db80951901073501137bdbc3d5a8e7bbd06670" 1000 | uuid = "41fe7b60-77ed-43a1-b4f0-825fd5a5650d" 1001 | version = "0.1.2" 1002 | 1003 | [[Wayland_jll]] 1004 | deps = ["Artifacts", "Expat_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg", "XML2_jll"] 1005 | git-tree-sha1 = "ed8d92d9774b077c53e1da50fd81a36af3744c1c" 1006 | uuid = "a2964d1f-97da-50d4-b82a-358c7fce9d89" 1007 | version = "1.21.0+0" 1008 | 1009 | [[Wayland_protocols_jll]] 1010 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 1011 | git-tree-sha1 = "4528479aa01ee1b3b4cd0e6faef0e04cf16466da" 1012 | uuid = "2381bf8a-dfd0-557d-9999-79630e7b1b91" 1013 | version = "1.25.0+0" 1014 | 1015 | [[WebIO]] 1016 | deps = ["AssetRegistry", "Base64", "Distributed", "FunctionalCollections", "JSON", "Logging", "Observables", "Pkg", "Random", "Requires", "Sockets", "UUIDs", "WebSockets", "Widgets"] 1017 | git-tree-sha1 = "976d0738247f155d0dcd77607edea644f069e1e9" 1018 | uuid = "0f1e0344-ec1d-5b48-a673-e5cf874b6c29" 1019 | version = "0.8.20" 1020 | 1021 | [[WebSockets]] 1022 | deps = ["Base64", "Dates", "HTTP", "Logging", "Sockets"] 1023 | git-tree-sha1 = "f91a602e25fe6b89afc93cf02a4ae18ee9384ce3" 1024 | uuid = "104b5d7c-a370-577a-8038-80a2059c5097" 1025 | version = "1.5.9" 1026 | 1027 | [[Widgets]] 1028 | deps = ["Colors", "Dates", "Observables", "OrderedCollections"] 1029 | git-tree-sha1 = "fcdae142c1cfc7d89de2d11e08721d0f2f86c98a" 1030 | uuid = "cc8bc4a8-27d6-5769-a93b-9d913e69aa62" 1031 | version = "0.6.6" 1032 | 1033 | [[XML2_jll]] 1034 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "Zlib_jll"] 1035 | git-tree-sha1 = "93c41695bc1c08c46c5899f4fe06d6ead504bb73" 1036 | uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" 1037 | version = "2.10.3+0" 1038 | 1039 | [[XSLT_jll]] 1040 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgcrypt_jll", "Libgpg_error_jll", "Libiconv_jll", "Pkg", "XML2_jll", "Zlib_jll"] 1041 | git-tree-sha1 = "91844873c4085240b95e795f692c4cec4d805f8a" 1042 | uuid = "aed1982a-8fda-507f-9586-7b0439959a61" 1043 | version = "1.1.34+0" 1044 | 1045 | [[Xorg_libX11_jll]] 1046 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libxcb_jll", "Xorg_xtrans_jll"] 1047 | git-tree-sha1 = "5be649d550f3f4b95308bf0183b82e2582876527" 1048 | uuid = "4f6342f7-b3d2-589e-9d20-edeb45f2b2bc" 1049 | version = "1.6.9+4" 1050 | 1051 | [[Xorg_libXau_jll]] 1052 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 1053 | git-tree-sha1 = "4e490d5c960c314f33885790ed410ff3a94ce67e" 1054 | uuid = "0c0b7dd1-d40b-584c-a123-a41640f87eec" 1055 | version = "1.0.9+4" 1056 | 1057 | [[Xorg_libXcursor_jll]] 1058 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXfixes_jll", "Xorg_libXrender_jll"] 1059 | git-tree-sha1 = "12e0eb3bc634fa2080c1c37fccf56f7c22989afd" 1060 | uuid = "935fb764-8cf2-53bf-bb30-45bb1f8bf724" 1061 | version = "1.2.0+4" 1062 | 1063 | [[Xorg_libXdmcp_jll]] 1064 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 1065 | git-tree-sha1 = "4fe47bd2247248125c428978740e18a681372dd4" 1066 | uuid = "a3789734-cfe1-5b06-b2d0-1dd0d9d62d05" 1067 | version = "1.1.3+4" 1068 | 1069 | [[Xorg_libXext_jll]] 1070 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] 1071 | git-tree-sha1 = "b7c0aa8c376b31e4852b360222848637f481f8c3" 1072 | uuid = "1082639a-0dae-5f34-9b06-72781eeb8cb3" 1073 | version = "1.3.4+4" 1074 | 1075 | [[Xorg_libXfixes_jll]] 1076 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] 1077 | git-tree-sha1 = "0e0dc7431e7a0587559f9294aeec269471c991a4" 1078 | uuid = "d091e8ba-531a-589c-9de9-94069b037ed8" 1079 | version = "5.0.3+4" 1080 | 1081 | [[Xorg_libXi_jll]] 1082 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll", "Xorg_libXfixes_jll"] 1083 | git-tree-sha1 = "89b52bc2160aadc84d707093930ef0bffa641246" 1084 | uuid = "a51aa0fd-4e3c-5386-b890-e753decda492" 1085 | version = "1.7.10+4" 1086 | 1087 | [[Xorg_libXinerama_jll]] 1088 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll"] 1089 | git-tree-sha1 = "26be8b1c342929259317d8b9f7b53bf2bb73b123" 1090 | uuid = "d1454406-59df-5ea1-beac-c340f2130bc3" 1091 | version = "1.1.4+4" 1092 | 1093 | [[Xorg_libXrandr_jll]] 1094 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll", "Xorg_libXrender_jll"] 1095 | git-tree-sha1 = "34cea83cb726fb58f325887bf0612c6b3fb17631" 1096 | uuid = "ec84b674-ba8e-5d96-8ba1-2a689ba10484" 1097 | version = "1.5.2+4" 1098 | 1099 | [[Xorg_libXrender_jll]] 1100 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] 1101 | git-tree-sha1 = "19560f30fd49f4d4efbe7002a1037f8c43d43b96" 1102 | uuid = "ea2f1a96-1ddc-540d-b46f-429655e07cfa" 1103 | version = "0.9.10+4" 1104 | 1105 | [[Xorg_libpthread_stubs_jll]] 1106 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 1107 | git-tree-sha1 = "6783737e45d3c59a4a4c4091f5f88cdcf0908cbb" 1108 | uuid = "14d82f49-176c-5ed1-bb49-ad3f5cbd8c74" 1109 | version = "0.1.0+3" 1110 | 1111 | [[Xorg_libxcb_jll]] 1112 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "XSLT_jll", "Xorg_libXau_jll", "Xorg_libXdmcp_jll", "Xorg_libpthread_stubs_jll"] 1113 | git-tree-sha1 = "daf17f441228e7a3833846cd048892861cff16d6" 1114 | uuid = "c7cfdc94-dc32-55de-ac96-5a1b8d977c5b" 1115 | version = "1.13.0+3" 1116 | 1117 | [[Xorg_libxkbfile_jll]] 1118 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] 1119 | git-tree-sha1 = "926af861744212db0eb001d9e40b5d16292080b2" 1120 | uuid = "cc61e674-0454-545c-8b26-ed2c68acab7a" 1121 | version = "1.1.0+4" 1122 | 1123 | [[Xorg_xcb_util_image_jll]] 1124 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] 1125 | git-tree-sha1 = "0fab0a40349ba1cba2c1da699243396ff8e94b97" 1126 | uuid = "12413925-8142-5f55-bb0e-6d7ca50bb09b" 1127 | version = "0.4.0+1" 1128 | 1129 | [[Xorg_xcb_util_jll]] 1130 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libxcb_jll"] 1131 | git-tree-sha1 = "e7fd7b2881fa2eaa72717420894d3938177862d1" 1132 | uuid = "2def613f-5ad1-5310-b15b-b15d46f528f5" 1133 | version = "0.4.0+1" 1134 | 1135 | [[Xorg_xcb_util_keysyms_jll]] 1136 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] 1137 | git-tree-sha1 = "d1151e2c45a544f32441a567d1690e701ec89b00" 1138 | uuid = "975044d2-76e6-5fbe-bf08-97ce7c6574c7" 1139 | version = "0.4.0+1" 1140 | 1141 | [[Xorg_xcb_util_renderutil_jll]] 1142 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] 1143 | git-tree-sha1 = "dfd7a8f38d4613b6a575253b3174dd991ca6183e" 1144 | uuid = "0d47668e-0667-5a69-a72c-f761630bfb7e" 1145 | version = "0.3.9+1" 1146 | 1147 | [[Xorg_xcb_util_wm_jll]] 1148 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] 1149 | git-tree-sha1 = "e78d10aab01a4a154142c5006ed44fd9e8e31b67" 1150 | uuid = "c22f9ab0-d5fe-5066-847c-f4bb1cd4e361" 1151 | version = "0.4.1+1" 1152 | 1153 | [[Xorg_xkbcomp_jll]] 1154 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libxkbfile_jll"] 1155 | git-tree-sha1 = "4bcbf660f6c2e714f87e960a171b119d06ee163b" 1156 | uuid = "35661453-b289-5fab-8a00-3d9160c6a3a4" 1157 | version = "1.4.2+4" 1158 | 1159 | [[Xorg_xkeyboard_config_jll]] 1160 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xkbcomp_jll"] 1161 | git-tree-sha1 = "5c8424f8a67c3f2209646d4425f3d415fee5931d" 1162 | uuid = "33bec58e-1273-512f-9401-5d533626f822" 1163 | version = "2.27.0+4" 1164 | 1165 | [[Xorg_xtrans_jll]] 1166 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 1167 | git-tree-sha1 = "79c31e7844f6ecf779705fbc12146eb190b7d845" 1168 | uuid = "c5fb5394-a638-5e4d-96e5-b29de1b5cf10" 1169 | version = "1.4.0+3" 1170 | 1171 | [[Zlib_jll]] 1172 | deps = ["Libdl"] 1173 | uuid = "83775a58-1f1d-513f-b197-d71354ab007a" 1174 | 1175 | [[Zstd_jll]] 1176 | deps = ["Artifacts", "JLLWrappers", "Libdl"] 1177 | git-tree-sha1 = "c6edfe154ad7b313c01aceca188c05c835c67360" 1178 | uuid = "3161d3a3-bdf6-5164-811a-617609db77b4" 1179 | version = "1.5.4+0" 1180 | 1181 | [[fzf_jll]] 1182 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 1183 | git-tree-sha1 = "868e669ccb12ba16eaf50cb2957ee2ff61261c56" 1184 | uuid = "214eeab7-80f7-51ab-84ad-2988db7cef09" 1185 | version = "0.29.0+0" 1186 | 1187 | [[libaom_jll]] 1188 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 1189 | git-tree-sha1 = "3a2ea60308f0996d26f1e5354e10c24e9ef905d4" 1190 | uuid = "a4ae2306-e953-59d6-aa16-d00cac43593b" 1191 | version = "3.4.0+0" 1192 | 1193 | [[libass_jll]] 1194 | deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] 1195 | git-tree-sha1 = "5982a94fcba20f02f42ace44b9894ee2b140fe47" 1196 | uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0" 1197 | version = "0.15.1+0" 1198 | 1199 | [[libblastrampoline_jll]] 1200 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 1201 | git-tree-sha1 = "576c27f2c23add3ce8f10717d72fbaee6fe120e9" 1202 | uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" 1203 | version = "3.1.0+2" 1204 | 1205 | [[libfdk_aac_jll]] 1206 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 1207 | git-tree-sha1 = "daacc84a041563f965be61859a36e17c4e4fcd55" 1208 | uuid = "f638f0a6-7fb0-5443-88ba-1cc74229b280" 1209 | version = "2.0.2+0" 1210 | 1211 | [[libpng_jll]] 1212 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] 1213 | git-tree-sha1 = "94d180a6d2b5e55e447e2d27a29ed04fe79eb30c" 1214 | uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f" 1215 | version = "1.6.38+0" 1216 | 1217 | [[libvorbis_jll]] 1218 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Ogg_jll", "Pkg"] 1219 | git-tree-sha1 = "b910cb81ef3fe6e78bf6acee440bda86fd6ae00c" 1220 | uuid = "f27f6e37-5d2b-51aa-960f-b287f2bc3b7a" 1221 | version = "1.3.7+1" 1222 | 1223 | [[nghttp2_jll]] 1224 | deps = ["Artifacts", "Libdl"] 1225 | uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" 1226 | 1227 | [[p7zip_jll]] 1228 | deps = ["Artifacts", "Libdl"] 1229 | uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" 1230 | 1231 | [[x264_jll]] 1232 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 1233 | git-tree-sha1 = "4fea590b89e6ec504593146bf8b988b2c00922b2" 1234 | uuid = "1270edf5-f2f9-52d2-97e9-ab00b5d0237a" 1235 | version = "2021.5.5+0" 1236 | 1237 | [[x265_jll]] 1238 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 1239 | git-tree-sha1 = "ee567a171cce03570d77ad3a43e90218e38937a9" 1240 | uuid = "dfaa095f-4041-5dcd-9319-2fabd8486b76" 1241 | version = "3.5.0+0" 1242 | 1243 | [[xkbcommon_jll]] 1244 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Wayland_jll", "Wayland_protocols_jll", "Xorg_libxcb_jll", "Xorg_xkeyboard_config_jll"] 1245 | git-tree-sha1 = "9ebfc140cc56e8c2156a15ceac2f0302e327ac0a" 1246 | uuid = "d8fb68d0-12a3-5cfd-a85a-d49703b185fd" 1247 | version = "1.4.1+0" 1248 | -------------------------------------------------------------------------------- /2_17_recitation/Project.toml: -------------------------------------------------------------------------------- 1 | [deps] 2 | Convex = "f65535da-76fb-5f13-bab9-19810c17039a" 3 | ECOS = "e2685f51-7e38-5353-a97d-a921fd2c8199" 4 | ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" 5 | Hypatia = "b99e6be6-89ff-11e8-14f8-45c827f4f8f2" 6 | JLD2 = "033835bb-8acc-5ee8-8aae-3f567f8a3819" 7 | MeshCat = "283c5d60-a78f-5afe-a0af-af636b173e11" 8 | Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" 9 | ProgressMeter = "92933f4c-e287-5a05-a399-4b506db050ca" 10 | -------------------------------------------------------------------------------- /2_24_recitation/2_24_recitation.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Optimal-Control-16-745/recitations-2023/d864eba9a3e35686644c3258346c35685b315e5f/2_24_recitation/2_24_recitation.pdf -------------------------------------------------------------------------------- /2_24_recitation/Manifest.toml: -------------------------------------------------------------------------------- 1 | # This file is machine-generated - editing it directly is not advised 2 | 3 | [[AMD]] 4 | deps = ["Libdl", "LinearAlgebra", "SparseArrays", "Test"] 5 | git-tree-sha1 = "00163dc02b882ca5ec032400b919e5f5011dbd31" 6 | uuid = "14f7f29c-3bd6-536c-9a0b-7339e30b5a3e" 7 | version = "0.5.0" 8 | 9 | [[AbstractTrees]] 10 | git-tree-sha1 = "faa260e4cb5aba097a73fab382dd4b5819d8ec8c" 11 | uuid = "1520ce14-60c1-5f80-bbc7-55ef81b5835c" 12 | version = "0.4.4" 13 | 14 | [[Adapt]] 15 | deps = ["LinearAlgebra"] 16 | git-tree-sha1 = "0310e08cb19f5da31d08341c6120c047598f5b9c" 17 | uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" 18 | version = "3.5.0" 19 | 20 | [[ArgTools]] 21 | uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" 22 | 23 | [[Artifacts]] 24 | uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" 25 | 26 | [[AssetRegistry]] 27 | deps = ["Distributed", "JSON", "Pidfile", "SHA", "Test"] 28 | git-tree-sha1 = "b25e88db7944f98789130d7b503276bc34bc098e" 29 | uuid = "bf4720bc-e11a-5d0c-854e-bdca1663c893" 30 | version = "0.1.0" 31 | 32 | [[Base64]] 33 | uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" 34 | 35 | [[BenchmarkTools]] 36 | deps = ["JSON", "Logging", "Printf", "Profile", "Statistics", "UUIDs"] 37 | git-tree-sha1 = "d9a9701b899b30332bbcb3e1679c41cce81fb0e8" 38 | uuid = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf" 39 | version = "1.3.2" 40 | 41 | [[BinDeps]] 42 | deps = ["Libdl", "Pkg", "SHA", "URIParser", "Unicode"] 43 | git-tree-sha1 = "1289b57e8cf019aede076edab0587eb9644175bd" 44 | uuid = "9e28174c-4ba2-5203-b857-d8d62c4213ee" 45 | version = "1.0.2" 46 | 47 | [[Blink]] 48 | deps = ["Base64", "BinDeps", "Distributed", "JSExpr", "JSON", "Lazy", "Logging", "MacroTools", "Mustache", "Mux", "Reexport", "Sockets", "WebIO", "WebSockets"] 49 | git-tree-sha1 = "08d0b679fd7caa49e2bca9214b131289e19808c0" 50 | uuid = "ad839575-38b3-5650-b840-f874b8c74a25" 51 | version = "0.12.5" 52 | 53 | [[Bzip2_jll]] 54 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 55 | git-tree-sha1 = "19a35467a82e236ff51bc17a3a44b69ef35185a2" 56 | uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0" 57 | version = "1.0.8+0" 58 | 59 | [[CEnum]] 60 | git-tree-sha1 = "eb4cb44a499229b3b8426dcfb5dd85333951ff90" 61 | uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82" 62 | version = "0.4.2" 63 | 64 | [[COSMO]] 65 | deps = ["AMD", "COSMOAccelerators", "DataStructures", "IterTools", "LinearAlgebra", "MathOptInterface", "Pkg", "Printf", "QDLDL", "Random", "Reexport", "Requires", "SparseArrays", "Statistics", "SuiteSparse", "Test", "UnsafeArrays"] 66 | git-tree-sha1 = "fc2f86234831163a6a29f70f083f15e1eb941859" 67 | uuid = "1e616198-aa4e-51ec-90a2-23f7fbd31d8d" 68 | version = "0.8.6" 69 | 70 | [[COSMOAccelerators]] 71 | deps = ["LinearAlgebra", "Random", "SparseArrays", "Test"] 72 | git-tree-sha1 = "b1153b40dd95f856e379f25ae335755ecc24298e" 73 | uuid = "bbd8fffe-5ad0-4d78-a55e-85575421b4ac" 74 | version = "0.1.0" 75 | 76 | [[Cairo_jll]] 77 | deps = ["Artifacts", "Bzip2_jll", "CompilerSupportLibraries_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "LZO_jll", "Libdl", "Pixman_jll", "Pkg", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"] 78 | git-tree-sha1 = "4b859a208b2397a7a623a03449e4636bdb17bcf2" 79 | uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a" 80 | version = "1.16.1+1" 81 | 82 | [[Calculus]] 83 | deps = ["LinearAlgebra"] 84 | git-tree-sha1 = "f641eb0a4f00c343bbc32346e1217b86f3ce9dad" 85 | uuid = "49dc2e85-a5d0-5ad3-a950-438e2897f1b9" 86 | version = "0.5.1" 87 | 88 | [[Cassette]] 89 | git-tree-sha1 = "a70f220ea09ec61401745ff338f8fb340420165c" 90 | uuid = "7057c7e9-c182-5462-911a-8362d720325c" 91 | version = "0.3.11" 92 | 93 | [[ChainRulesCore]] 94 | deps = ["Compat", "LinearAlgebra", "SparseArrays"] 95 | git-tree-sha1 = "c6d890a52d2c4d55d326439580c3b8d0875a77d9" 96 | uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" 97 | version = "1.15.7" 98 | 99 | [[ChangesOfVariables]] 100 | deps = ["ChainRulesCore", "LinearAlgebra", "Test"] 101 | git-tree-sha1 = "485193efd2176b88e6622a39a246f8c5b600e74e" 102 | uuid = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0" 103 | version = "0.1.6" 104 | 105 | [[CodecBzip2]] 106 | deps = ["Bzip2_jll", "Libdl", "TranscodingStreams"] 107 | git-tree-sha1 = "2e62a725210ce3c3c2e1a3080190e7ca491f18d7" 108 | uuid = "523fee87-0ab8-5b00-afb7-3ecf72e48cfd" 109 | version = "0.7.2" 110 | 111 | [[CodecZlib]] 112 | deps = ["TranscodingStreams", "Zlib_jll"] 113 | git-tree-sha1 = "9c209fb7536406834aa938fb149964b985de6c83" 114 | uuid = "944b1d66-785c-5afd-91f1-9de20f533193" 115 | version = "0.7.1" 116 | 117 | [[ColorSchemes]] 118 | deps = ["ColorTypes", "ColorVectorSpace", "Colors", "FixedPointNumbers", "Random", "SnoopPrecompile"] 119 | git-tree-sha1 = "aa3edc8f8dea6cbfa176ee12f7c2fc82f0608ed3" 120 | uuid = "35d6a980-a343-548e-a6ea-1d62b119f2f4" 121 | version = "3.20.0" 122 | 123 | [[ColorTypes]] 124 | deps = ["FixedPointNumbers", "Random"] 125 | git-tree-sha1 = "eb7f0f8307f71fac7c606984ea5fb2817275d6e4" 126 | uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" 127 | version = "0.11.4" 128 | 129 | [[ColorVectorSpace]] 130 | deps = ["ColorTypes", "FixedPointNumbers", "LinearAlgebra", "SpecialFunctions", "Statistics", "TensorCore"] 131 | git-tree-sha1 = "600cc5508d66b78aae350f7accdb58763ac18589" 132 | uuid = "c3611d14-8923-5661-9e6a-0046d554d3a4" 133 | version = "0.9.10" 134 | 135 | [[Colors]] 136 | deps = ["ColorTypes", "FixedPointNumbers", "Reexport"] 137 | git-tree-sha1 = "fc08e5930ee9a4e03f84bfb5211cb54e7769758a" 138 | uuid = "5ae59095-9a9b-59fe-a467-6f913c188581" 139 | version = "0.12.10" 140 | 141 | [[CommonSubexpressions]] 142 | deps = ["MacroTools", "Test"] 143 | git-tree-sha1 = "7b8a93dba8af7e3b42fecabf646260105ac373f7" 144 | uuid = "bbf7d656-a473-5ed7-a52c-81e309532950" 145 | version = "0.3.0" 146 | 147 | [[Compat]] 148 | deps = ["Dates", "LinearAlgebra", "UUIDs"] 149 | git-tree-sha1 = "61fdd77467a5c3ad071ef8277ac6bd6af7dd4c04" 150 | uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" 151 | version = "4.6.0" 152 | 153 | [[CompilerSupportLibraries_jll]] 154 | deps = ["Artifacts", "Libdl"] 155 | uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" 156 | 157 | [[Contour]] 158 | git-tree-sha1 = "d05d9e7b7aedff4e5b51a029dced05cfb6125781" 159 | uuid = "d38c429a-6771-53c6-b99e-75d170b6e991" 160 | version = "0.6.2" 161 | 162 | [[Convex]] 163 | deps = ["AbstractTrees", "BenchmarkTools", "LDLFactorizations", "LinearAlgebra", "MathOptInterface", "OrderedCollections", "SparseArrays", "Test"] 164 | git-tree-sha1 = "af4188609c0620ed4b0e4493ed416d3c8b2dadeb" 165 | uuid = "f65535da-76fb-5f13-bab9-19810c17039a" 166 | version = "0.15.3" 167 | 168 | [[CoordinateTransformations]] 169 | deps = ["LinearAlgebra", "StaticArrays"] 170 | git-tree-sha1 = "681ea870b918e7cff7111da58791d7f718067a19" 171 | uuid = "150eb455-5306-5404-9cee-2592286d6298" 172 | version = "0.6.2" 173 | 174 | [[DataAPI]] 175 | git-tree-sha1 = "e8119c1a33d267e16108be441a287a6981ba1630" 176 | uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" 177 | version = "1.14.0" 178 | 179 | [[DataStructures]] 180 | deps = ["Compat", "InteractiveUtils", "OrderedCollections"] 181 | git-tree-sha1 = "d1fff3a548102f48987a52a2e0d114fa97d730f0" 182 | uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" 183 | version = "0.18.13" 184 | 185 | [[DataValueInterfaces]] 186 | git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" 187 | uuid = "e2d170a0-9d28-54be-80f0-106bbe20a464" 188 | version = "1.0.0" 189 | 190 | [[Dates]] 191 | deps = ["Printf"] 192 | uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" 193 | 194 | [[DelimitedFiles]] 195 | deps = ["Mmap"] 196 | uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" 197 | 198 | [[DiffResults]] 199 | deps = ["StaticArraysCore"] 200 | git-tree-sha1 = "782dd5f4561f5d267313f23853baaaa4c52ea621" 201 | uuid = "163ba53b-c6d8-5494-b064-1a9d43ac40c5" 202 | version = "1.1.0" 203 | 204 | [[DiffRules]] 205 | deps = ["IrrationalConstants", "LogExpFunctions", "NaNMath", "Random", "SpecialFunctions"] 206 | git-tree-sha1 = "a4ad7ef19d2cdc2eff57abbbe68032b1cd0bd8f8" 207 | uuid = "b552c78f-8df3-52c6-915a-8e097449b14b" 208 | version = "1.13.0" 209 | 210 | [[Distributed]] 211 | deps = ["Random", "Serialization", "Sockets"] 212 | uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" 213 | 214 | [[DocStringExtensions]] 215 | deps = ["LibGit2"] 216 | git-tree-sha1 = "b19534d1895d702889b219c382a6e18010797f0b" 217 | uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" 218 | version = "0.8.6" 219 | 220 | [[Downloads]] 221 | deps = ["ArgTools", "LibCURL", "NetworkOptions"] 222 | uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" 223 | 224 | [[DualNumbers]] 225 | deps = ["Calculus", "NaNMath", "SpecialFunctions"] 226 | git-tree-sha1 = "5837a837389fccf076445fce071c8ddaea35a566" 227 | uuid = "fa6b7ba4-c1ee-5f82-b5fc-ecf0adba8f74" 228 | version = "0.6.8" 229 | 230 | [[ECOS]] 231 | deps = ["CEnum", "ECOS_jll", "MathOptInterface"] 232 | git-tree-sha1 = "a10ccdc509a938d02b32904edb037b7045c49665" 233 | uuid = "e2685f51-7e38-5353-a97d-a921fd2c8199" 234 | version = "1.1.0" 235 | 236 | [[ECOS_jll]] 237 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 238 | git-tree-sha1 = "5f84034ddd642cf595e57d46ea2f085321c260e4" 239 | uuid = "c2c64177-6a8e-5dca-99a7-64895ad7445f" 240 | version = "200.0.800+0" 241 | 242 | [[EarCut_jll]] 243 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 244 | git-tree-sha1 = "e3290f2d49e661fbd94046d7e3726ffcb2d41053" 245 | uuid = "5ae413db-bbd1-5e63-b57d-d24a61df00f5" 246 | version = "2.2.4+0" 247 | 248 | [[Expat_jll]] 249 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 250 | git-tree-sha1 = "bad72f730e9e91c08d9427d5e8db95478a3c323d" 251 | uuid = "2e619515-83b5-522b-bb60-26c02a35a201" 252 | version = "2.4.8+0" 253 | 254 | [[Extents]] 255 | git-tree-sha1 = "5e1e4c53fa39afe63a7d356e30452249365fba99" 256 | uuid = "411431e0-e8b7-467b-b5e0-f676ba4f2910" 257 | version = "0.1.1" 258 | 259 | [[FFMPEG]] 260 | deps = ["FFMPEG_jll"] 261 | git-tree-sha1 = "b57e3acbe22f8484b4b5ff66a7499717fe1a9cc8" 262 | uuid = "c87230d0-a227-11e9-1b43-d7ebe4e7570a" 263 | version = "0.4.1" 264 | 265 | [[FFMPEG_jll]] 266 | deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "JLLWrappers", "LAME_jll", "Libdl", "Ogg_jll", "OpenSSL_jll", "Opus_jll", "PCRE2_jll", "Pkg", "Zlib_jll", "libaom_jll", "libass_jll", "libfdk_aac_jll", "libvorbis_jll", "x264_jll", "x265_jll"] 267 | git-tree-sha1 = "74faea50c1d007c85837327f6775bea60b5492dd" 268 | uuid = "b22a6f82-2f65-5046-a5b2-351ab43fb4e5" 269 | version = "4.4.2+2" 270 | 271 | [[FileIO]] 272 | deps = ["Pkg", "Requires", "UUIDs"] 273 | git-tree-sha1 = "7be5f99f7d15578798f338f5433b6c432ea8037b" 274 | uuid = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" 275 | version = "1.16.0" 276 | 277 | [[FileWatching]] 278 | uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" 279 | 280 | [[FixedPointNumbers]] 281 | deps = ["Statistics"] 282 | git-tree-sha1 = "335bfdceacc84c5cdf16aadc768aa5ddfc5383cc" 283 | uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" 284 | version = "0.8.4" 285 | 286 | [[Fontconfig_jll]] 287 | deps = ["Artifacts", "Bzip2_jll", "Expat_jll", "FreeType2_jll", "JLLWrappers", "Libdl", "Libuuid_jll", "Pkg", "Zlib_jll"] 288 | git-tree-sha1 = "21efd19106a55620a188615da6d3d06cd7f6ee03" 289 | uuid = "a3f928ae-7b40-5064-980b-68af3947d34b" 290 | version = "2.13.93+0" 291 | 292 | [[Formatting]] 293 | deps = ["Printf"] 294 | git-tree-sha1 = "8339d61043228fdd3eb658d86c926cb282ae72a8" 295 | uuid = "59287772-0a20-5a39-b81b-1366585eb4c0" 296 | version = "0.4.2" 297 | 298 | [[ForwardDiff]] 299 | deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions", "StaticArrays"] 300 | git-tree-sha1 = "a69dd6db8a809f78846ff259298678f0d6212180" 301 | uuid = "f6369f11-7733-5829-9624-2563aa707210" 302 | version = "0.10.34" 303 | 304 | [[FreeType2_jll]] 305 | deps = ["Artifacts", "Bzip2_jll", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] 306 | git-tree-sha1 = "87eb71354d8ec1a96d4a7636bd57a7347dde3ef9" 307 | uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7" 308 | version = "2.10.4+0" 309 | 310 | [[FriBidi_jll]] 311 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 312 | git-tree-sha1 = "aa31987c2ba8704e23c6c8ba8a4f769d5d7e4f91" 313 | uuid = "559328eb-81f9-559d-9380-de523a88c83c" 314 | version = "1.0.10+0" 315 | 316 | [[FunctionalCollections]] 317 | deps = ["Test"] 318 | git-tree-sha1 = "04cb9cfaa6ba5311973994fe3496ddec19b6292a" 319 | uuid = "de31a74c-ac4f-5751-b3fd-e18cd04993ca" 320 | version = "0.5.0" 321 | 322 | [[GLFW_jll]] 323 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Libglvnd_jll", "Pkg", "Xorg_libXcursor_jll", "Xorg_libXi_jll", "Xorg_libXinerama_jll", "Xorg_libXrandr_jll"] 324 | git-tree-sha1 = "d972031d28c8c8d9d7b41a536ad7bb0c2579caca" 325 | uuid = "0656b61e-2033-5cc2-a64a-77c0f6c09b89" 326 | version = "3.3.8+0" 327 | 328 | [[GPUArraysCore]] 329 | deps = ["Adapt"] 330 | git-tree-sha1 = "1cd7f0af1aa58abc02ea1d872953a97359cb87fa" 331 | uuid = "46192b85-c4d5-4398-a991-12ede77f4527" 332 | version = "0.1.4" 333 | 334 | [[GR]] 335 | deps = ["Artifacts", "Base64", "DelimitedFiles", "Downloads", "GR_jll", "HTTP", "JSON", "Libdl", "LinearAlgebra", "Pkg", "Preferences", "Printf", "Random", "Serialization", "Sockets", "TOML", "Tar", "Test", "UUIDs", "p7zip_jll"] 336 | git-tree-sha1 = "660b2ea2ec2b010bb02823c6d0ff6afd9bdc5c16" 337 | uuid = "28b8d3ca-fb5f-59d9-8090-bfdbd6d07a71" 338 | version = "0.71.7" 339 | 340 | [[GR_jll]] 341 | deps = ["Artifacts", "Bzip2_jll", "Cairo_jll", "FFMPEG_jll", "Fontconfig_jll", "GLFW_jll", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Libtiff_jll", "Pixman_jll", "Qt5Base_jll", "Zlib_jll", "libpng_jll"] 342 | git-tree-sha1 = "d5e1fd17ac7f3aa4c5287a61ee28d4f8b8e98873" 343 | uuid = "d2c73de3-f751-5644-a686-071e5b155ba9" 344 | version = "0.71.7+0" 345 | 346 | [[GeoInterface]] 347 | deps = ["Extents"] 348 | git-tree-sha1 = "e07a1b98ed72e3cdd02c6ceaab94b8a606faca40" 349 | uuid = "cf35fbd7-0cd7-5166-be24-54bfbe79505f" 350 | version = "1.2.1" 351 | 352 | [[GeometryBasics]] 353 | deps = ["EarCut_jll", "GeoInterface", "IterTools", "LinearAlgebra", "StaticArrays", "StructArrays", "Tables"] 354 | git-tree-sha1 = "fe9aea4ed3ec6afdfbeb5a4f39a2208909b162a6" 355 | uuid = "5c1252a2-5f33-56bf-86c9-59e7332b4326" 356 | version = "0.4.5" 357 | 358 | [[Gettext_jll]] 359 | deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "XML2_jll"] 360 | git-tree-sha1 = "9b02998aba7bf074d14de89f9d37ca24a1a0b046" 361 | uuid = "78b55507-aeef-58d4-861c-77aaff3498b1" 362 | version = "0.21.0+0" 363 | 364 | [[Glib_jll]] 365 | deps = ["Artifacts", "Gettext_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE2_jll", "Pkg", "Zlib_jll"] 366 | git-tree-sha1 = "d3b3624125c1474292d0d8ed0f65554ac37ddb23" 367 | uuid = "7746bdde-850d-59dc-9ae8-88ece973131d" 368 | version = "2.74.0+2" 369 | 370 | [[Graphite2_jll]] 371 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 372 | git-tree-sha1 = "344bf40dcab1073aca04aa0df4fb092f920e4011" 373 | uuid = "3b182d85-2403-5c21-9c21-1e1f0cc25472" 374 | version = "1.3.14+0" 375 | 376 | [[Grisu]] 377 | git-tree-sha1 = "53bb909d1151e57e2484c3d1b53e19552b887fb2" 378 | uuid = "42e2da0e-8278-4e71-bc24-59509adca0fe" 379 | version = "1.0.2" 380 | 381 | [[HTTP]] 382 | deps = ["Base64", "Dates", "IniFile", "Logging", "MbedTLS", "NetworkOptions", "Sockets", "URIs"] 383 | git-tree-sha1 = "0fa77022fe4b511826b39c894c90daf5fce3334a" 384 | uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3" 385 | version = "0.9.17" 386 | 387 | [[HarfBuzz_jll]] 388 | deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "Graphite2_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg"] 389 | git-tree-sha1 = "129acf094d168394e80ee1dc4bc06ec835e510a3" 390 | uuid = "2e76f6c2-a576-52d4-95c1-20adfe4de566" 391 | version = "2.8.1+1" 392 | 393 | [[Hiccup]] 394 | deps = ["MacroTools", "Test"] 395 | git-tree-sha1 = "6187bb2d5fcbb2007c39e7ac53308b0d371124bd" 396 | uuid = "9fb69e20-1954-56bb-a84f-559cc56a8ff7" 397 | version = "0.2.2" 398 | 399 | [[IniFile]] 400 | git-tree-sha1 = "f550e6e32074c939295eb5ea6de31849ac2c9625" 401 | uuid = "83e8ac13-25f8-5344-8a64-a9f2b223428f" 402 | version = "0.5.1" 403 | 404 | [[InteractiveUtils]] 405 | deps = ["Markdown"] 406 | uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" 407 | 408 | [[InverseFunctions]] 409 | deps = ["Test"] 410 | git-tree-sha1 = "49510dfcb407e572524ba94aeae2fced1f3feb0f" 411 | uuid = "3587e190-3f89-42d0-90ee-14403ec27112" 412 | version = "0.1.8" 413 | 414 | [[IrrationalConstants]] 415 | git-tree-sha1 = "3868cac300a188a7c3a74f9abd930e52ce1a7a51" 416 | uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" 417 | version = "0.2.1" 418 | 419 | [[IterTools]] 420 | git-tree-sha1 = "fa6287a4469f5e048d763df38279ee729fbd44e5" 421 | uuid = "c8e1da08-722c-5040-9ed9-7db0dc04731e" 422 | version = "1.4.0" 423 | 424 | [[IteratorInterfaceExtensions]] 425 | git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856" 426 | uuid = "82899510-4779-5014-852e-03e436cf321d" 427 | version = "1.0.0" 428 | 429 | [[JLD2]] 430 | deps = ["FileIO", "MacroTools", "Mmap", "OrderedCollections", "Pkg", "Printf", "Reexport", "TranscodingStreams", "UUIDs"] 431 | git-tree-sha1 = "c3244ef42b7d4508c638339df1bdbf4353e144db" 432 | uuid = "033835bb-8acc-5ee8-8aae-3f567f8a3819" 433 | version = "0.4.30" 434 | 435 | [[JLFzf]] 436 | deps = ["Pipe", "REPL", "Random", "fzf_jll"] 437 | git-tree-sha1 = "f377670cda23b6b7c1c0b3893e37451c5c1a2185" 438 | uuid = "1019f520-868f-41f5-a6de-eb00f4b6a39c" 439 | version = "0.1.5" 440 | 441 | [[JLLWrappers]] 442 | deps = ["Preferences"] 443 | git-tree-sha1 = "abc9885a7ca2052a736a600f7fa66209f96506e1" 444 | uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" 445 | version = "1.4.1" 446 | 447 | [[JSExpr]] 448 | deps = ["JSON", "MacroTools", "Observables", "WebIO"] 449 | git-tree-sha1 = "b413a73785b98474d8af24fd4c8a975e31df3658" 450 | uuid = "97c1335a-c9c5-57fe-bc5d-ec35cebe8660" 451 | version = "0.5.4" 452 | 453 | [[JSON]] 454 | deps = ["Dates", "Mmap", "Parsers", "Unicode"] 455 | git-tree-sha1 = "3c837543ddb02250ef42f4738347454f95079d4e" 456 | uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" 457 | version = "0.21.3" 458 | 459 | [[JpegTurbo_jll]] 460 | deps = ["Artifacts", "JLLWrappers", "Libdl"] 461 | git-tree-sha1 = "6f2675ef130a300a112286de91973805fcc5ffbc" 462 | uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8" 463 | version = "2.1.91+0" 464 | 465 | [[LAME_jll]] 466 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 467 | git-tree-sha1 = "f6250b16881adf048549549fba48b1161acdac8c" 468 | uuid = "c1c5ebd0-6772-5130-a774-d5fcae4a789d" 469 | version = "3.100.1+0" 470 | 471 | [[LDLFactorizations]] 472 | deps = ["AMD", "LinearAlgebra", "SparseArrays", "Test"] 473 | git-tree-sha1 = "cbf4b646f82bfc58bb48bcca9dcce2eb88da4cd1" 474 | uuid = "40e66cde-538c-5869-a4ad-c39174c6795b" 475 | version = "0.10.0" 476 | 477 | [[LERC_jll]] 478 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 479 | git-tree-sha1 = "bf36f528eec6634efc60d7ec062008f171071434" 480 | uuid = "88015f11-f218-50d7-93a8-a6af411a945d" 481 | version = "3.0.0+1" 482 | 483 | [[LZO_jll]] 484 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 485 | git-tree-sha1 = "e5b909bcf985c5e2605737d2ce278ed791b89be6" 486 | uuid = "dd4b983a-f0e5-5f8d-a1b7-129d4a5fb1ac" 487 | version = "2.10.1+0" 488 | 489 | [[LaTeXStrings]] 490 | git-tree-sha1 = "f2355693d6778a178ade15952b7ac47a4ff97996" 491 | uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" 492 | version = "1.3.0" 493 | 494 | [[Latexify]] 495 | deps = ["Formatting", "InteractiveUtils", "LaTeXStrings", "MacroTools", "Markdown", "OrderedCollections", "Printf", "Requires"] 496 | git-tree-sha1 = "2422f47b34d4b127720a18f86fa7b1aa2e141f29" 497 | uuid = "23fbe1c1-3f47-55db-b15f-69d7ec21a316" 498 | version = "0.15.18" 499 | 500 | [[Lazy]] 501 | deps = ["MacroTools"] 502 | git-tree-sha1 = "1370f8202dac30758f3c345f9909b97f53d87d3f" 503 | uuid = "50d2b5c4-7a5e-59d5-8109-a42b560f39c0" 504 | version = "0.15.1" 505 | 506 | [[LibCURL]] 507 | deps = ["LibCURL_jll", "MozillaCACerts_jll"] 508 | uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21" 509 | 510 | [[LibCURL_jll]] 511 | deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"] 512 | uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" 513 | 514 | [[LibGit2]] 515 | deps = ["Base64", "NetworkOptions", "Printf", "SHA"] 516 | uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" 517 | 518 | [[LibSSH2_jll]] 519 | deps = ["Artifacts", "Libdl", "MbedTLS_jll"] 520 | uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" 521 | 522 | [[Libdl]] 523 | uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" 524 | 525 | [[Libffi_jll]] 526 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 527 | git-tree-sha1 = "0b4a5d71f3e5200a7dff793393e09dfc2d874290" 528 | uuid = "e9f186c6-92d2-5b65-8a66-fee21dc1b490" 529 | version = "3.2.2+1" 530 | 531 | [[Libgcrypt_jll]] 532 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgpg_error_jll", "Pkg"] 533 | git-tree-sha1 = "64613c82a59c120435c067c2b809fc61cf5166ae" 534 | uuid = "d4300ac3-e22c-5743-9152-c294e39db1e4" 535 | version = "1.8.7+0" 536 | 537 | [[Libglvnd_jll]] 538 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll", "Xorg_libXext_jll"] 539 | git-tree-sha1 = "6f73d1dd803986947b2c750138528a999a6c7733" 540 | uuid = "7e76a0d4-f3c7-5321-8279-8d96eeed0f29" 541 | version = "1.6.0+0" 542 | 543 | [[Libgpg_error_jll]] 544 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 545 | git-tree-sha1 = "c333716e46366857753e273ce6a69ee0945a6db9" 546 | uuid = "7add5ba3-2f88-524e-9cd5-f83b8a55f7b8" 547 | version = "1.42.0+0" 548 | 549 | [[Libiconv_jll]] 550 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 551 | git-tree-sha1 = "c7cb1f5d892775ba13767a87c7ada0b980ea0a71" 552 | uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531" 553 | version = "1.16.1+2" 554 | 555 | [[Libmount_jll]] 556 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 557 | git-tree-sha1 = "9c30530bf0effd46e15e0fdcf2b8636e78cbbd73" 558 | uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9" 559 | version = "2.35.0+0" 560 | 561 | [[Libtiff_jll]] 562 | deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "LERC_jll", "Libdl", "Pkg", "Zlib_jll", "Zstd_jll"] 563 | git-tree-sha1 = "3eb79b0ca5764d4799c06699573fd8f533259713" 564 | uuid = "89763e89-9b03-5906-acba-b20f662cd828" 565 | version = "4.4.0+0" 566 | 567 | [[Libuuid_jll]] 568 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 569 | git-tree-sha1 = "7f3efec06033682db852f8b3bc3c1d2b0a0ab066" 570 | uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700" 571 | version = "2.36.0+0" 572 | 573 | [[LinearAlgebra]] 574 | deps = ["Libdl", "libblastrampoline_jll"] 575 | uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" 576 | 577 | [[LogExpFunctions]] 578 | deps = ["ChainRulesCore", "ChangesOfVariables", "DocStringExtensions", "InverseFunctions", "IrrationalConstants", "LinearAlgebra"] 579 | git-tree-sha1 = "0a1b7c2863e44523180fdb3146534e265a91870b" 580 | uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" 581 | version = "0.3.23" 582 | 583 | [[Logging]] 584 | uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" 585 | 586 | [[MacroTools]] 587 | deps = ["Markdown", "Random"] 588 | git-tree-sha1 = "42324d08725e200c23d4dfb549e0d5d89dede2d2" 589 | uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" 590 | version = "0.5.10" 591 | 592 | [[Markdown]] 593 | deps = ["Base64"] 594 | uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" 595 | 596 | [[MathOptInterface]] 597 | deps = ["BenchmarkTools", "CodecBzip2", "CodecZlib", "DataStructures", "ForwardDiff", "JSON", "LinearAlgebra", "MutableArithmetics", "NaNMath", "OrderedCollections", "Printf", "SnoopPrecompile", "SparseArrays", "SpecialFunctions", "Test", "Unicode"] 598 | git-tree-sha1 = "2a58c70db9287898dcc76b8394f0ff601c11b270" 599 | uuid = "b8f27783-ece8-5eb3-8dc8-9495eed66fee" 600 | version = "1.12.0" 601 | 602 | [[MbedTLS]] 603 | deps = ["Dates", "MbedTLS_jll", "MozillaCACerts_jll", "Random", "Sockets"] 604 | git-tree-sha1 = "03a9b9718f5682ecb107ac9f7308991db4ce395b" 605 | uuid = "739be429-bea8-5141-9913-cc70e7f3736d" 606 | version = "1.1.7" 607 | 608 | [[MbedTLS_jll]] 609 | deps = ["Artifacts", "Libdl"] 610 | uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" 611 | 612 | [[Measures]] 613 | git-tree-sha1 = "c13304c81eec1ed3af7fc20e75fb6b26092a1102" 614 | uuid = "442fdcdd-2543-5da2-b0f3-8c86c306513e" 615 | version = "0.3.2" 616 | 617 | [[MeshCat]] 618 | deps = ["Base64", "BinDeps", "Blink", "Cassette", "Colors", "CoordinateTransformations", "DocStringExtensions", "FFMPEG", "GeometryBasics", "LinearAlgebra", "Logging", "MsgPack", "Mux", "Parameters", "Pkg", "Requires", "Rotations", "Sockets", "StaticArrays", "UUIDs", "WebSockets"] 619 | git-tree-sha1 = "bd707ee5273b7778554b0b22b3071cf97f71e1f4" 620 | uuid = "283c5d60-a78f-5afe-a0af-af636b173e11" 621 | version = "0.14.2" 622 | 623 | [[Missings]] 624 | deps = ["DataAPI"] 625 | git-tree-sha1 = "f66bdc5de519e8f8ae43bdc598782d35a25b1272" 626 | uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28" 627 | version = "1.1.0" 628 | 629 | [[Mmap]] 630 | uuid = "a63ad114-7e13-5084-954f-fe012c677804" 631 | 632 | [[MozillaCACerts_jll]] 633 | uuid = "14a3606d-f60d-562e-9121-12d972cd8159" 634 | 635 | [[MsgPack]] 636 | deps = ["Serialization"] 637 | git-tree-sha1 = "fc8c15ca848b902015bd4a745d350f02cf791c2a" 638 | uuid = "99f44e22-a591-53d1-9472-aa23ef4bd671" 639 | version = "1.2.0" 640 | 641 | [[Mustache]] 642 | deps = ["Printf", "Tables"] 643 | git-tree-sha1 = "1e566ae913a57d0062ff1af54d2697b9344b99cd" 644 | uuid = "ffc61752-8dc7-55ee-8c37-f3e9cdd09e70" 645 | version = "1.0.14" 646 | 647 | [[MutableArithmetics]] 648 | deps = ["LinearAlgebra", "SparseArrays", "Test"] 649 | git-tree-sha1 = "3295d296288ab1a0a2528feb424b854418acff57" 650 | uuid = "d8a4904e-b15c-11e9-3269-09a3773c0cb0" 651 | version = "1.2.3" 652 | 653 | [[Mux]] 654 | deps = ["AssetRegistry", "Base64", "HTTP", "Hiccup", "Pkg", "Sockets", "WebSockets"] 655 | git-tree-sha1 = "82dfb2cead9895e10ee1b0ca37a01088456c4364" 656 | uuid = "a975b10e-0019-58db-a62f-e48ff68538c9" 657 | version = "0.7.6" 658 | 659 | [[NaNMath]] 660 | deps = ["OpenLibm_jll"] 661 | git-tree-sha1 = "0877504529a3e5c3343c6f8b4c0381e57e4387e4" 662 | uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" 663 | version = "1.0.2" 664 | 665 | [[NetworkOptions]] 666 | uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" 667 | 668 | [[Observables]] 669 | git-tree-sha1 = "6862738f9796b3edc1c09d0890afce4eca9e7e93" 670 | uuid = "510215fc-4207-5dde-b226-833fc4488ee2" 671 | version = "0.5.4" 672 | 673 | [[Ogg_jll]] 674 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 675 | git-tree-sha1 = "887579a3eb005446d514ab7aeac5d1d027658b8f" 676 | uuid = "e7412a2a-1a6e-54c0-be00-318e2571c051" 677 | version = "1.3.5+1" 678 | 679 | [[OpenBLAS_jll]] 680 | deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] 681 | uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" 682 | 683 | [[OpenLibm_jll]] 684 | deps = ["Artifacts", "Libdl"] 685 | uuid = "05823500-19ac-5b8b-9628-191a04bc5112" 686 | 687 | [[OpenSSL_jll]] 688 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 689 | git-tree-sha1 = "9ff31d101d987eb9d66bd8b176ac7c277beccd09" 690 | uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" 691 | version = "1.1.20+0" 692 | 693 | [[OpenSpecFun_jll]] 694 | deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] 695 | git-tree-sha1 = "13652491f6856acfd2db29360e1bbcd4565d04f1" 696 | uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" 697 | version = "0.5.5+0" 698 | 699 | [[Opus_jll]] 700 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 701 | git-tree-sha1 = "51a08fb14ec28da2ec7a927c4337e4332c2a4720" 702 | uuid = "91d4177d-7536-5919-b921-800302f37372" 703 | version = "1.3.2+0" 704 | 705 | [[OrderedCollections]] 706 | git-tree-sha1 = "85f8e6578bf1f9ee0d11e7bb1b1456435479d47c" 707 | uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" 708 | version = "1.4.1" 709 | 710 | [[PCRE2_jll]] 711 | deps = ["Artifacts", "Libdl"] 712 | uuid = "efcefdf7-47ab-520b-bdef-62a2eaa19f15" 713 | 714 | [[Parameters]] 715 | deps = ["OrderedCollections", "UnPack"] 716 | git-tree-sha1 = "34c0e9ad262e5f7fc75b10a9952ca7692cfc5fbe" 717 | uuid = "d96e819e-fc66-5662-9728-84c9c7592b0a" 718 | version = "0.12.3" 719 | 720 | [[Parsers]] 721 | deps = ["Dates", "SnoopPrecompile"] 722 | git-tree-sha1 = "6f4fbcd1ad45905a5dee3f4256fabb49aa2110c6" 723 | uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" 724 | version = "2.5.7" 725 | 726 | [[Pidfile]] 727 | deps = ["FileWatching", "Test"] 728 | git-tree-sha1 = "2d8aaf8ee10df53d0dfb9b8ee44ae7c04ced2b03" 729 | uuid = "fa939f87-e72e-5be4-a000-7fc836dbe307" 730 | version = "1.3.0" 731 | 732 | [[Pipe]] 733 | git-tree-sha1 = "6842804e7867b115ca9de748a0cf6b364523c16d" 734 | uuid = "b98c9c47-44ae-5843-9183-064241ee97a0" 735 | version = "1.3.0" 736 | 737 | [[Pixman_jll]] 738 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 739 | git-tree-sha1 = "b4f5d02549a10e20780a24fce72bea96b6329e29" 740 | uuid = "30392449-352a-5448-841d-b1acce4e97dc" 741 | version = "0.40.1+0" 742 | 743 | [[Pkg]] 744 | deps = ["Artifacts", "Dates", "Downloads", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"] 745 | uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" 746 | 747 | [[PlotThemes]] 748 | deps = ["PlotUtils", "Statistics"] 749 | git-tree-sha1 = "1f03a2d339f42dca4a4da149c7e15e9b896ad899" 750 | uuid = "ccf2f8ad-2431-5c83-bf29-c5338b663b6a" 751 | version = "3.1.0" 752 | 753 | [[PlotUtils]] 754 | deps = ["ColorSchemes", "Colors", "Dates", "Printf", "Random", "Reexport", "SnoopPrecompile", "Statistics"] 755 | git-tree-sha1 = "c95373e73290cf50a8a22c3375e4625ded5c5280" 756 | uuid = "995b91a9-d308-5afd-9ec6-746e21dbc043" 757 | version = "1.3.4" 758 | 759 | [[Plots]] 760 | deps = ["Base64", "Contour", "Dates", "Downloads", "FFMPEG", "FixedPointNumbers", "GR", "JLFzf", "JSON", "LaTeXStrings", "Latexify", "LinearAlgebra", "Measures", "NaNMath", "Pkg", "PlotThemes", "PlotUtils", "Preferences", "Printf", "REPL", "Random", "RecipesBase", "RecipesPipeline", "Reexport", "RelocatableFolders", "Requires", "Scratch", "Showoff", "SnoopPrecompile", "SparseArrays", "Statistics", "StatsBase", "UUIDs", "UnicodeFun", "Unzip"] 761 | git-tree-sha1 = "8ac949bd0ebc46a44afb1fdca1094554a84b086e" 762 | uuid = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" 763 | version = "1.38.5" 764 | 765 | [[Preferences]] 766 | deps = ["TOML"] 767 | git-tree-sha1 = "47e5f437cc0e7ef2ce8406ce1e7e24d44915f88d" 768 | uuid = "21216c6a-2e73-6563-6e65-726566657250" 769 | version = "1.3.0" 770 | 771 | [[Printf]] 772 | deps = ["Unicode"] 773 | uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" 774 | 775 | [[Profile]] 776 | deps = ["Printf"] 777 | uuid = "9abbd945-dff8-562f-b5e8-e1ebf5ef1b79" 778 | 779 | [[ProgressMeter]] 780 | deps = ["Distributed", "Printf"] 781 | git-tree-sha1 = "d7a7aef8f8f2d537104f170139553b14dfe39fe9" 782 | uuid = "92933f4c-e287-5a05-a399-4b506db050ca" 783 | version = "1.7.2" 784 | 785 | [[QDLDL]] 786 | deps = ["AMD", "LinearAlgebra", "SparseArrays"] 787 | git-tree-sha1 = "aa1a32b0917794199aeeb15d6fba46ca02450306" 788 | uuid = "bfc457fd-c171-5ab7-bd9e-d5dbfc242d63" 789 | version = "0.2.1" 790 | 791 | [[Qt5Base_jll]] 792 | deps = ["Artifacts", "CompilerSupportLibraries_jll", "Fontconfig_jll", "Glib_jll", "JLLWrappers", "Libdl", "Libglvnd_jll", "OpenSSL_jll", "Pkg", "Xorg_libXext_jll", "Xorg_libxcb_jll", "Xorg_xcb_util_image_jll", "Xorg_xcb_util_keysyms_jll", "Xorg_xcb_util_renderutil_jll", "Xorg_xcb_util_wm_jll", "Zlib_jll", "xkbcommon_jll"] 793 | git-tree-sha1 = "0c03844e2231e12fda4d0086fd7cbe4098ee8dc5" 794 | uuid = "ea2cea3b-5b76-57ae-a6ef-0a8af62496e1" 795 | version = "5.15.3+2" 796 | 797 | [[Quaternions]] 798 | deps = ["DualNumbers", "LinearAlgebra", "Random"] 799 | git-tree-sha1 = "0b345302b17b0e694092621915de0e0dc7443a1a" 800 | uuid = "94ee1d12-ae83-5a48-8b1c-48b8ff168ae0" 801 | version = "0.4.9" 802 | 803 | [[REPL]] 804 | deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"] 805 | uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" 806 | 807 | [[Random]] 808 | deps = ["SHA", "Serialization"] 809 | uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" 810 | 811 | [[RecipesBase]] 812 | deps = ["SnoopPrecompile"] 813 | git-tree-sha1 = "261dddd3b862bd2c940cf6ca4d1c8fe593e457c8" 814 | uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" 815 | version = "1.3.3" 816 | 817 | [[RecipesPipeline]] 818 | deps = ["Dates", "NaNMath", "PlotUtils", "RecipesBase", "SnoopPrecompile"] 819 | git-tree-sha1 = "e974477be88cb5e3040009f3767611bc6357846f" 820 | uuid = "01d81517-befc-4cb6-b9ec-a95719d0359c" 821 | version = "0.6.11" 822 | 823 | [[Reexport]] 824 | git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" 825 | uuid = "189a3867-3050-52da-a836-e630ba90ab69" 826 | version = "1.2.2" 827 | 828 | [[RelocatableFolders]] 829 | deps = ["SHA", "Scratch"] 830 | git-tree-sha1 = "90bc7a7c96410424509e4263e277e43250c05691" 831 | uuid = "05181044-ff0b-4ac5-8273-598c1e38db00" 832 | version = "1.0.0" 833 | 834 | [[Requires]] 835 | deps = ["UUIDs"] 836 | git-tree-sha1 = "838a3a4188e2ded87a4f9f184b4b0d78a1e91cb7" 837 | uuid = "ae029012-a4dd-5104-9daa-d747884805df" 838 | version = "1.3.0" 839 | 840 | [[Rotations]] 841 | deps = ["LinearAlgebra", "Quaternions", "Random", "StaticArrays", "Statistics"] 842 | git-tree-sha1 = "2fa87d198bc5356c649b92109ed3ce46ee1eb89d" 843 | uuid = "6038ab10-8711-5258-84ad-4b1120ba62dc" 844 | version = "1.1.1" 845 | 846 | [[SHA]] 847 | uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" 848 | 849 | [[Scratch]] 850 | deps = ["Dates"] 851 | git-tree-sha1 = "f94f779c94e58bf9ea243e77a37e16d9de9126bd" 852 | uuid = "6c6a2e73-6563-6170-7368-637461726353" 853 | version = "1.1.1" 854 | 855 | [[Serialization]] 856 | uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" 857 | 858 | [[Showoff]] 859 | deps = ["Dates", "Grisu"] 860 | git-tree-sha1 = "91eddf657aca81df9ae6ceb20b959ae5653ad1de" 861 | uuid = "992d4aef-0814-514b-bc4d-f2e9a6c4116f" 862 | version = "1.0.3" 863 | 864 | [[SnoopPrecompile]] 865 | deps = ["Preferences"] 866 | git-tree-sha1 = "e760a70afdcd461cf01a575947738d359234665c" 867 | uuid = "66db9d55-30c0-4569-8b51-7e840670fc0c" 868 | version = "1.0.3" 869 | 870 | [[Sockets]] 871 | uuid = "6462fe0b-24de-5631-8697-dd941f90decc" 872 | 873 | [[SortingAlgorithms]] 874 | deps = ["DataStructures"] 875 | git-tree-sha1 = "a4ada03f999bd01b3a25dcaa30b2d929fe537e00" 876 | uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" 877 | version = "1.1.0" 878 | 879 | [[SparseArrays]] 880 | deps = ["LinearAlgebra", "Random"] 881 | uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" 882 | 883 | [[SpecialFunctions]] 884 | deps = ["ChainRulesCore", "IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] 885 | git-tree-sha1 = "ef28127915f4229c971eb43f3fc075dd3fe91880" 886 | uuid = "276daf66-3868-5448-9aa4-cd146d93841b" 887 | version = "2.2.0" 888 | 889 | [[StaticArrays]] 890 | deps = ["LinearAlgebra", "Random", "StaticArraysCore", "Statistics"] 891 | git-tree-sha1 = "2d7d9e1ddadc8407ffd460e24218e37ef52dd9a3" 892 | uuid = "90137ffa-7385-5640-81b9-e52037218182" 893 | version = "1.5.16" 894 | 895 | [[StaticArraysCore]] 896 | git-tree-sha1 = "6b7ba252635a5eff6a0b0664a41ee140a1c9e72a" 897 | uuid = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" 898 | version = "1.4.0" 899 | 900 | [[Statistics]] 901 | deps = ["LinearAlgebra", "SparseArrays"] 902 | uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" 903 | 904 | [[StatsAPI]] 905 | deps = ["LinearAlgebra"] 906 | git-tree-sha1 = "f9af7f195fb13589dd2e2d57fdb401717d2eb1f6" 907 | uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0" 908 | version = "1.5.0" 909 | 910 | [[StatsBase]] 911 | deps = ["DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] 912 | git-tree-sha1 = "d1bf48bfcc554a3761a133fe3a9bb01488e06916" 913 | uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" 914 | version = "0.33.21" 915 | 916 | [[StructArrays]] 917 | deps = ["Adapt", "DataAPI", "GPUArraysCore", "StaticArraysCore", "Tables"] 918 | git-tree-sha1 = "b03a3b745aa49b566f128977a7dd1be8711c5e71" 919 | uuid = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" 920 | version = "0.6.14" 921 | 922 | [[SuiteSparse]] 923 | deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"] 924 | uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9" 925 | 926 | [[TOML]] 927 | deps = ["Dates"] 928 | uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" 929 | 930 | [[TableTraits]] 931 | deps = ["IteratorInterfaceExtensions"] 932 | git-tree-sha1 = "c06b2f539df1c6efa794486abfb6ed2022561a39" 933 | uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c" 934 | version = "1.0.1" 935 | 936 | [[Tables]] 937 | deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "LinearAlgebra", "OrderedCollections", "TableTraits", "Test"] 938 | git-tree-sha1 = "c79322d36826aa2f4fd8ecfa96ddb47b174ac78d" 939 | uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" 940 | version = "1.10.0" 941 | 942 | [[Tar]] 943 | deps = ["ArgTools", "SHA"] 944 | uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" 945 | 946 | [[TensorCore]] 947 | deps = ["LinearAlgebra"] 948 | git-tree-sha1 = "1feb45f88d133a655e001435632f019a9a1bcdb6" 949 | uuid = "62fd8b95-f654-4bbd-a8a5-9c27f68ccd50" 950 | version = "0.1.1" 951 | 952 | [[Test]] 953 | deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] 954 | uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" 955 | 956 | [[TranscodingStreams]] 957 | deps = ["Random", "Test"] 958 | git-tree-sha1 = "94f38103c984f89cf77c402f2a68dbd870f8165f" 959 | uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" 960 | version = "0.9.11" 961 | 962 | [[URIParser]] 963 | deps = ["Unicode"] 964 | git-tree-sha1 = "53a9f49546b8d2dd2e688d216421d050c9a31d0d" 965 | uuid = "30578b45-9adc-5946-b283-645ec420af67" 966 | version = "0.4.1" 967 | 968 | [[URIs]] 969 | git-tree-sha1 = "074f993b0ca030848b897beff716d93aca60f06a" 970 | uuid = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4" 971 | version = "1.4.2" 972 | 973 | [[UUIDs]] 974 | deps = ["Random", "SHA"] 975 | uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" 976 | 977 | [[UnPack]] 978 | git-tree-sha1 = "387c1f73762231e86e0c9c5443ce3b4a0a9a0c2b" 979 | uuid = "3a884ed6-31ef-47d7-9d2a-63182c4928ed" 980 | version = "1.0.2" 981 | 982 | [[Unicode]] 983 | uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" 984 | 985 | [[UnicodeFun]] 986 | deps = ["REPL"] 987 | git-tree-sha1 = "53915e50200959667e78a92a418594b428dffddf" 988 | uuid = "1cfade01-22cf-5700-b092-accc4b62d6e1" 989 | version = "0.4.1" 990 | 991 | [[UnsafeArrays]] 992 | git-tree-sha1 = "3350f94f6caa02f324a23645bf524fc9334c7488" 993 | uuid = "c4a57d5a-5b31-53a6-b365-19f8c011fbd6" 994 | version = "1.0.4" 995 | 996 | [[Unzip]] 997 | git-tree-sha1 = "ca0969166a028236229f63514992fc073799bb78" 998 | uuid = "41fe7b60-77ed-43a1-b4f0-825fd5a5650d" 999 | version = "0.2.0" 1000 | 1001 | [[Wayland_jll]] 1002 | deps = ["Artifacts", "Expat_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg", "XML2_jll"] 1003 | git-tree-sha1 = "ed8d92d9774b077c53e1da50fd81a36af3744c1c" 1004 | uuid = "a2964d1f-97da-50d4-b82a-358c7fce9d89" 1005 | version = "1.21.0+0" 1006 | 1007 | [[Wayland_protocols_jll]] 1008 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 1009 | git-tree-sha1 = "4528479aa01ee1b3b4cd0e6faef0e04cf16466da" 1010 | uuid = "2381bf8a-dfd0-557d-9999-79630e7b1b91" 1011 | version = "1.25.0+0" 1012 | 1013 | [[WebIO]] 1014 | deps = ["AssetRegistry", "Base64", "Distributed", "FunctionalCollections", "JSON", "Logging", "Observables", "Pkg", "Random", "Requires", "Sockets", "UUIDs", "WebSockets", "Widgets"] 1015 | git-tree-sha1 = "976d0738247f155d0dcd77607edea644f069e1e9" 1016 | uuid = "0f1e0344-ec1d-5b48-a673-e5cf874b6c29" 1017 | version = "0.8.20" 1018 | 1019 | [[WebSockets]] 1020 | deps = ["Base64", "Dates", "HTTP", "Logging", "Sockets"] 1021 | git-tree-sha1 = "f91a602e25fe6b89afc93cf02a4ae18ee9384ce3" 1022 | uuid = "104b5d7c-a370-577a-8038-80a2059c5097" 1023 | version = "1.5.9" 1024 | 1025 | [[Widgets]] 1026 | deps = ["Colors", "Dates", "Observables", "OrderedCollections"] 1027 | git-tree-sha1 = "fcdae142c1cfc7d89de2d11e08721d0f2f86c98a" 1028 | uuid = "cc8bc4a8-27d6-5769-a93b-9d913e69aa62" 1029 | version = "0.6.6" 1030 | 1031 | [[XML2_jll]] 1032 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "Zlib_jll"] 1033 | git-tree-sha1 = "93c41695bc1c08c46c5899f4fe06d6ead504bb73" 1034 | uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" 1035 | version = "2.10.3+0" 1036 | 1037 | [[XSLT_jll]] 1038 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgcrypt_jll", "Libgpg_error_jll", "Libiconv_jll", "Pkg", "XML2_jll", "Zlib_jll"] 1039 | git-tree-sha1 = "91844873c4085240b95e795f692c4cec4d805f8a" 1040 | uuid = "aed1982a-8fda-507f-9586-7b0439959a61" 1041 | version = "1.1.34+0" 1042 | 1043 | [[Xorg_libX11_jll]] 1044 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libxcb_jll", "Xorg_xtrans_jll"] 1045 | git-tree-sha1 = "5be649d550f3f4b95308bf0183b82e2582876527" 1046 | uuid = "4f6342f7-b3d2-589e-9d20-edeb45f2b2bc" 1047 | version = "1.6.9+4" 1048 | 1049 | [[Xorg_libXau_jll]] 1050 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 1051 | git-tree-sha1 = "4e490d5c960c314f33885790ed410ff3a94ce67e" 1052 | uuid = "0c0b7dd1-d40b-584c-a123-a41640f87eec" 1053 | version = "1.0.9+4" 1054 | 1055 | [[Xorg_libXcursor_jll]] 1056 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXfixes_jll", "Xorg_libXrender_jll"] 1057 | git-tree-sha1 = "12e0eb3bc634fa2080c1c37fccf56f7c22989afd" 1058 | uuid = "935fb764-8cf2-53bf-bb30-45bb1f8bf724" 1059 | version = "1.2.0+4" 1060 | 1061 | [[Xorg_libXdmcp_jll]] 1062 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 1063 | git-tree-sha1 = "4fe47bd2247248125c428978740e18a681372dd4" 1064 | uuid = "a3789734-cfe1-5b06-b2d0-1dd0d9d62d05" 1065 | version = "1.1.3+4" 1066 | 1067 | [[Xorg_libXext_jll]] 1068 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] 1069 | git-tree-sha1 = "b7c0aa8c376b31e4852b360222848637f481f8c3" 1070 | uuid = "1082639a-0dae-5f34-9b06-72781eeb8cb3" 1071 | version = "1.3.4+4" 1072 | 1073 | [[Xorg_libXfixes_jll]] 1074 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] 1075 | git-tree-sha1 = "0e0dc7431e7a0587559f9294aeec269471c991a4" 1076 | uuid = "d091e8ba-531a-589c-9de9-94069b037ed8" 1077 | version = "5.0.3+4" 1078 | 1079 | [[Xorg_libXi_jll]] 1080 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll", "Xorg_libXfixes_jll"] 1081 | git-tree-sha1 = "89b52bc2160aadc84d707093930ef0bffa641246" 1082 | uuid = "a51aa0fd-4e3c-5386-b890-e753decda492" 1083 | version = "1.7.10+4" 1084 | 1085 | [[Xorg_libXinerama_jll]] 1086 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll"] 1087 | git-tree-sha1 = "26be8b1c342929259317d8b9f7b53bf2bb73b123" 1088 | uuid = "d1454406-59df-5ea1-beac-c340f2130bc3" 1089 | version = "1.1.4+4" 1090 | 1091 | [[Xorg_libXrandr_jll]] 1092 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll", "Xorg_libXrender_jll"] 1093 | git-tree-sha1 = "34cea83cb726fb58f325887bf0612c6b3fb17631" 1094 | uuid = "ec84b674-ba8e-5d96-8ba1-2a689ba10484" 1095 | version = "1.5.2+4" 1096 | 1097 | [[Xorg_libXrender_jll]] 1098 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] 1099 | git-tree-sha1 = "19560f30fd49f4d4efbe7002a1037f8c43d43b96" 1100 | uuid = "ea2f1a96-1ddc-540d-b46f-429655e07cfa" 1101 | version = "0.9.10+4" 1102 | 1103 | [[Xorg_libpthread_stubs_jll]] 1104 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 1105 | git-tree-sha1 = "6783737e45d3c59a4a4c4091f5f88cdcf0908cbb" 1106 | uuid = "14d82f49-176c-5ed1-bb49-ad3f5cbd8c74" 1107 | version = "0.1.0+3" 1108 | 1109 | [[Xorg_libxcb_jll]] 1110 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "XSLT_jll", "Xorg_libXau_jll", "Xorg_libXdmcp_jll", "Xorg_libpthread_stubs_jll"] 1111 | git-tree-sha1 = "daf17f441228e7a3833846cd048892861cff16d6" 1112 | uuid = "c7cfdc94-dc32-55de-ac96-5a1b8d977c5b" 1113 | version = "1.13.0+3" 1114 | 1115 | [[Xorg_libxkbfile_jll]] 1116 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] 1117 | git-tree-sha1 = "926af861744212db0eb001d9e40b5d16292080b2" 1118 | uuid = "cc61e674-0454-545c-8b26-ed2c68acab7a" 1119 | version = "1.1.0+4" 1120 | 1121 | [[Xorg_xcb_util_image_jll]] 1122 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] 1123 | git-tree-sha1 = "0fab0a40349ba1cba2c1da699243396ff8e94b97" 1124 | uuid = "12413925-8142-5f55-bb0e-6d7ca50bb09b" 1125 | version = "0.4.0+1" 1126 | 1127 | [[Xorg_xcb_util_jll]] 1128 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libxcb_jll"] 1129 | git-tree-sha1 = "e7fd7b2881fa2eaa72717420894d3938177862d1" 1130 | uuid = "2def613f-5ad1-5310-b15b-b15d46f528f5" 1131 | version = "0.4.0+1" 1132 | 1133 | [[Xorg_xcb_util_keysyms_jll]] 1134 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] 1135 | git-tree-sha1 = "d1151e2c45a544f32441a567d1690e701ec89b00" 1136 | uuid = "975044d2-76e6-5fbe-bf08-97ce7c6574c7" 1137 | version = "0.4.0+1" 1138 | 1139 | [[Xorg_xcb_util_renderutil_jll]] 1140 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] 1141 | git-tree-sha1 = "dfd7a8f38d4613b6a575253b3174dd991ca6183e" 1142 | uuid = "0d47668e-0667-5a69-a72c-f761630bfb7e" 1143 | version = "0.3.9+1" 1144 | 1145 | [[Xorg_xcb_util_wm_jll]] 1146 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] 1147 | git-tree-sha1 = "e78d10aab01a4a154142c5006ed44fd9e8e31b67" 1148 | uuid = "c22f9ab0-d5fe-5066-847c-f4bb1cd4e361" 1149 | version = "0.4.1+1" 1150 | 1151 | [[Xorg_xkbcomp_jll]] 1152 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libxkbfile_jll"] 1153 | git-tree-sha1 = "4bcbf660f6c2e714f87e960a171b119d06ee163b" 1154 | uuid = "35661453-b289-5fab-8a00-3d9160c6a3a4" 1155 | version = "1.4.2+4" 1156 | 1157 | [[Xorg_xkeyboard_config_jll]] 1158 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xkbcomp_jll"] 1159 | git-tree-sha1 = "5c8424f8a67c3f2209646d4425f3d415fee5931d" 1160 | uuid = "33bec58e-1273-512f-9401-5d533626f822" 1161 | version = "2.27.0+4" 1162 | 1163 | [[Xorg_xtrans_jll]] 1164 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 1165 | git-tree-sha1 = "79c31e7844f6ecf779705fbc12146eb190b7d845" 1166 | uuid = "c5fb5394-a638-5e4d-96e5-b29de1b5cf10" 1167 | version = "1.4.0+3" 1168 | 1169 | [[Zlib_jll]] 1170 | deps = ["Libdl"] 1171 | uuid = "83775a58-1f1d-513f-b197-d71354ab007a" 1172 | 1173 | [[Zstd_jll]] 1174 | deps = ["Artifacts", "JLLWrappers", "Libdl"] 1175 | git-tree-sha1 = "c6edfe154ad7b313c01aceca188c05c835c67360" 1176 | uuid = "3161d3a3-bdf6-5164-811a-617609db77b4" 1177 | version = "1.5.4+0" 1178 | 1179 | [[fzf_jll]] 1180 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 1181 | git-tree-sha1 = "868e669ccb12ba16eaf50cb2957ee2ff61261c56" 1182 | uuid = "214eeab7-80f7-51ab-84ad-2988db7cef09" 1183 | version = "0.29.0+0" 1184 | 1185 | [[libaom_jll]] 1186 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 1187 | git-tree-sha1 = "3a2ea60308f0996d26f1e5354e10c24e9ef905d4" 1188 | uuid = "a4ae2306-e953-59d6-aa16-d00cac43593b" 1189 | version = "3.4.0+0" 1190 | 1191 | [[libass_jll]] 1192 | deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] 1193 | git-tree-sha1 = "5982a94fcba20f02f42ace44b9894ee2b140fe47" 1194 | uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0" 1195 | version = "0.15.1+0" 1196 | 1197 | [[libblastrampoline_jll]] 1198 | deps = ["Artifacts", "Libdl", "OpenBLAS_jll"] 1199 | uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" 1200 | 1201 | [[libfdk_aac_jll]] 1202 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 1203 | git-tree-sha1 = "daacc84a041563f965be61859a36e17c4e4fcd55" 1204 | uuid = "f638f0a6-7fb0-5443-88ba-1cc74229b280" 1205 | version = "2.0.2+0" 1206 | 1207 | [[libpng_jll]] 1208 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] 1209 | git-tree-sha1 = "94d180a6d2b5e55e447e2d27a29ed04fe79eb30c" 1210 | uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f" 1211 | version = "1.6.38+0" 1212 | 1213 | [[libvorbis_jll]] 1214 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Ogg_jll", "Pkg"] 1215 | git-tree-sha1 = "b910cb81ef3fe6e78bf6acee440bda86fd6ae00c" 1216 | uuid = "f27f6e37-5d2b-51aa-960f-b287f2bc3b7a" 1217 | version = "1.3.7+1" 1218 | 1219 | [[nghttp2_jll]] 1220 | deps = ["Artifacts", "Libdl"] 1221 | uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" 1222 | 1223 | [[p7zip_jll]] 1224 | deps = ["Artifacts", "Libdl"] 1225 | uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" 1226 | 1227 | [[x264_jll]] 1228 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 1229 | git-tree-sha1 = "4fea590b89e6ec504593146bf8b988b2c00922b2" 1230 | uuid = "1270edf5-f2f9-52d2-97e9-ab00b5d0237a" 1231 | version = "2021.5.5+0" 1232 | 1233 | [[x265_jll]] 1234 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 1235 | git-tree-sha1 = "ee567a171cce03570d77ad3a43e90218e38937a9" 1236 | uuid = "dfaa095f-4041-5dcd-9319-2fabd8486b76" 1237 | version = "3.5.0+0" 1238 | 1239 | [[xkbcommon_jll]] 1240 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Wayland_jll", "Wayland_protocols_jll", "Xorg_libxcb_jll", "Xorg_xkeyboard_config_jll"] 1241 | git-tree-sha1 = "9ebfc140cc56e8c2156a15ceac2f0302e327ac0a" 1242 | uuid = "d8fb68d0-12a3-5cfd-a85a-d49703b185fd" 1243 | version = "1.4.1+0" 1244 | -------------------------------------------------------------------------------- /2_24_recitation/Project.toml: -------------------------------------------------------------------------------- 1 | [deps] 2 | COSMO = "1e616198-aa4e-51ec-90a2-23f7fbd31d8d" 3 | Convex = "f65535da-76fb-5f13-bab9-19810c17039a" 4 | ECOS = "e2685f51-7e38-5353-a97d-a921fd2c8199" 5 | ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" 6 | JLD2 = "033835bb-8acc-5ee8-8aae-3f567f8a3819" 7 | MeshCat = "283c5d60-a78f-5afe-a0af-af636b173e11" 8 | Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" 9 | ProgressMeter = "92933f4c-e287-5a05-a399-4b506db050ca" 10 | -------------------------------------------------------------------------------- /2_24_recitation/quadrotor_mpc.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "id": "709491a7", 7 | "metadata": {}, 8 | "outputs": [ 9 | { 10 | "name": "stderr", 11 | "output_type": "stream", 12 | "text": [ 13 | "\u001b[32m\u001b[1m Activating\u001b[22m\u001b[39m environment at `~/devel/hw_ideas/hw2/Project.toml`\n" 14 | ] 15 | } 16 | ], 17 | "source": [ 18 | "import Pkg\n", 19 | "Pkg.activate(@__DIR__)\n", 20 | "Pkg.instantiate()\n", 21 | "using LinearAlgebra, Plots\n", 22 | "import ForwardDiff as FD\n", 23 | "import MeshCat as mc \n", 24 | "# using JLD2\n", 25 | "using Test\n", 26 | "using Random\n", 27 | "import Convex as cvx \n", 28 | "import ECOS \n", 29 | "using ProgressMeter" 30 | ] 31 | }, 32 | { 33 | "cell_type": "code", 34 | "execution_count": 2, 35 | "id": "b027add5", 36 | "metadata": {}, 37 | "outputs": [ 38 | { 39 | "data": { 40 | "text/plain": [ 41 | "animate_quadrotor (generic function with 1 method)" 42 | ] 43 | }, 44 | "execution_count": 2, 45 | "metadata": {}, 46 | "output_type": "execute_result" 47 | } 48 | ], 49 | "source": [ 50 | "include(joinpath(@__DIR__, \"utils\",\"quadrotor.jl\"))" 51 | ] 52 | }, 53 | { 54 | "cell_type": "markdown", 55 | "id": "3479fbac", 56 | "metadata": {}, 57 | "source": [ 58 | "## Linearization warmup \n", 59 | "Before we apply convex MPC to nonlinear systems, let's go over what it means to \"linearize our system\". Specifically, we are going to approximate our nonlinear system with a first-order Taylor series, and define a new set of $(\\Delta x, \\Delta u)$ coordinates.\n", 60 | "\n", 61 | "First, assume our discrete time dynamics are the following:\n", 62 | "\n", 63 | "$$ x_{k+1} = f(x_k,u_k) $$\n", 64 | "\n", 65 | "And we are going to linearize about a reference trajectory $\\bar{x}_{1:N}, \\bar{u}_{1:N-1}$. From here, we can define our delta's accordingly:\n", 66 | "\n", 67 | "$$ \\begin{align} x_k &= \\bar{x}_k + \\Delta x_k \\\\ u_k &= \\bar{u}_k + \\Delta u_k \\end{align}$$ \n", 68 | "\n", 69 | "Next, we are going to approximate our discrete time dynamics function with the following first order Taylor series:\n", 70 | "\n", 71 | "$$ \n", 72 | "x_{k+1} \\approx f(\\bar{x}_k, \\bar{u}_k) + \\bigg[\\frac{\\partial f}{\\partial x} \\bigg|_{\\bar{x}_k, \\bar{u}_k} \\bigg](x_k - \\bar{x}_k) + \\bigg[\\frac{\\partial f}{\\partial u} \\bigg|_{\\bar{x}_k, \\bar{u}_k} \\bigg](u_k - \\bar{u}_k)\n", 73 | "$$\n", 74 | "\n", 75 | "Which we can substitute in our delta notation to get the following:\n", 76 | "\n", 77 | "$$ \n", 78 | "\\bar{x}_{k+1} + \\Delta x_{k+1} \\approx f(\\bar{x}_k, \\bar{u}_k) + \\bigg[\\frac{\\partial f}{\\partial x} \\bigg|_{\\bar{x}_k, \\bar{u}_k} \\bigg]\\Delta x_k + \\bigg[\\frac{\\partial f}{\\partial u} \\bigg|_{\\bar{x}_k, \\bar{u}_k} \\bigg] \\Delta u_k\n", 79 | "$$\n", 80 | "\n", 81 | "If the trajectory $\\bar{x},\\bar{u}$ is dynamically feasible (meaning $\\bar{x}_{k+1} = f(\\bar{x}_k, \\bar{u}_k)$), then we can cancel these equivalent terms on each side of the above equation, resulting in the following:\n", 82 | "\n", 83 | "$$ \n", 84 | " \\Delta x_{k+1} \\approx \\bigg[\\frac{\\partial f}{\\partial x} \\bigg|_{\\bar{x}_k, \\bar{u}_k} \\bigg]\\Delta x_k + \\bigg[\\frac{\\partial f}{\\partial u} \\bigg|_{\\bar{x}_k, \\bar{u}_k} \\bigg] \\Delta u_k\n", 85 | "$$" 86 | ] 87 | }, 88 | { 89 | "cell_type": "markdown", 90 | "id": "f9be643b", 91 | "metadata": {}, 92 | "source": [ 93 | "## Quadrotor MPC\n", 94 | "We can formulate this MPC problem where we optimize over $x,u$:\n", 95 | "$$ \\begin{align} \\min_{x_{1:N},u_{1:N-1}} \\quad & \\sum_{i=1}^{N-1} \\bigg[ (x_i - x_{i,ref})^TQ(x_i - x_{i,ref}) + (u_i - u_{i,ref})^TR(u_i - u_{i,ref}) \\bigg] + \\frac{1}{2}(x_N - x_{N,ref})^TQ_f(x_N - x_{N,ref}) & \\\\ \n", 96 | " \\text{st} \\quad & x_1 = x_{\\text{IC}} \\\\ \n", 97 | " & x_{k+1} = f(\\bar{x}_k, \\bar{u}_k) + \\bigg[\\frac{\\partial f}{\\partial x} \\bigg|_{\\bar{x}_k, \\bar{u}_k} \\bigg](x_k - \\bar{x}_k) + \\bigg[\\frac{\\partial f}{\\partial u} \\bigg|_{\\bar{x}_k, \\bar{u}_k} \\bigg](u_k - \\bar{u}_k) \\quad &\\text{for } i = 1,2,\\ldots,N-1 \\\\ \n", 98 | " & u_{min} \\leq u_i \\leq u_{max} \\quad &\\text{for } i = 1,2,\\ldots,N-1\\\\ \n", 99 | " \\end{align}$$\n", 100 | " Or equivalently where we optimize over $\\Delta x, \\Delta u$, by simply substituting in $x = \\bar{x} + \\Delta x$ and $u = \\bar{u} + \\Delta u$:\n", 101 | " $$ \\begin{align} \\min_{\\Delta x_{1:N},\\Delta u_{1:N-1}} \\quad & \\sum_{i=1}^{N-1} \\bigg[ (\\bar{x}_i + \\Delta x_i - x_{i,ref})^TQ(\\bar{x}_i + \\Delta x_i - x_{i,ref}) + (\\bar{u}_i + \\Delta u_i - u_{i,ref})^TR(\\bar{u}_i + \\Delta u_i - u_{i,ref}) \\bigg] \\\\ & + \\frac{1}{2}(\\bar{x}_N + \\Delta x_N - x_{N,ref})^TQ_f(\\bar{x}_N + \\Delta x_N - x_{N,ref}) & \\\\ \n", 102 | " \\text{st} \\quad & \\bar{x}_1 + \\Delta x_1 = x_{\\text{IC}} \\\\ \n", 103 | " & \\bar{x}_{k+1} + \\Delta x_{k+1} = f(\\bar{x}_k, \\bar{u}_k) + \\bigg[\\frac{\\partial f}{\\partial x} \\bigg|_{\\bar{x}_k, \\bar{u}_k} \\bigg]\\Delta x_k + \\bigg[\\frac{\\partial f}{\\partial u} \\bigg|_{\\bar{x}_k, \\bar{u}_k} \\bigg] \\Delta u_k \\quad &\\text{for } i = 1,2,\\ldots,N-1 \\\\ \n", 104 | " & u_{min} \\leq \\bar{u}_i + \\Delta u_i \\leq u_{max} \\quad &\\text{for } i = 1,2,\\ldots,N-1\\\\ \n", 105 | " \\end{align}$$" 106 | ] 107 | }, 108 | { 109 | "cell_type": "code", 110 | "execution_count": 3, 111 | "id": "8fb1ea8c", 112 | "metadata": {}, 113 | "outputs": [ 114 | { 115 | "data": { 116 | "text/plain": [ 117 | "convex_mpc_controller_deltas (generic function with 1 method)" 118 | ] 119 | }, 120 | "execution_count": 3, 121 | "metadata": {}, 122 | "output_type": "execute_result" 123 | } 124 | ], 125 | "source": [ 126 | "function get_jacobians(model, X̄, Ū)\n", 127 | " N_mpc = length(X̄)\n", 128 | " A = [FD.jacobian(_x -> rk4(model,dynamics,_x,Ū[i],model.dt), X̄[i]) for i = 1:(N_mpc - 1)]\n", 129 | " B = [FD.jacobian(_u -> rk4(model,dynamics,X̄[i],_u,model.dt), Ū[i]) for i = 1:(N_mpc - 1)]\n", 130 | " return A, B\n", 131 | "end\n", 132 | "function convex_mpc_controller_full(model,params,x0,idx)\n", 133 | "\n", 134 | " N_mpc, Q, R = params.N_mpc, params.Q, params.R\n", 135 | "\n", 136 | " # get slice of the relevant trajectories for the N_mpc window\n", 137 | " X̄ = params.X̄[idx:(idx + N_mpc - 1)]\n", 138 | " Ū = params.Ū[idx:(idx + N_mpc - 2)]\n", 139 | " Xref = params.Xref[idx:(idx + N_mpc - 1)]\n", 140 | " Uref = params.Uref[idx:(idx + N_mpc - 2)]\n", 141 | "\n", 142 | " # create variables \n", 143 | " X = cvx.Variable(params.nx,N_mpc)\n", 144 | " U = cvx.Variable(params.nu,N_mpc - 1)\n", 145 | "\n", 146 | " # cost function (tracking cost on Xref, Uref)\n", 147 | " cost = 0.0\n", 148 | " for i = 1:N_mpc\n", 149 | " cost += 0.5*cvx.quadform(X[:,i] - Xref[i], Q)\n", 150 | " end\n", 151 | " for i = 1:(N_mpc - 1)\n", 152 | " cost += 0.5*cvx.quadform(U[:,i] - Uref[i], R)\n", 153 | " end\n", 154 | " prob = cvx.minimize(cost)\n", 155 | "\n", 156 | " # initial condition constraint\n", 157 | " prob.constraints += X[:,1] == x0\n", 158 | "\n", 159 | " # dynamics constraints\n", 160 | " A,B = get_jacobians(model, X̄, Ū)\n", 161 | " for i = 1:(N_mpc-1)\n", 162 | " prob.constraints += X[:,i+1] == rk4(model, dynamics, X̄[i], Ū[i], params.dt) + A[i]*(X[:,i] - X̄[i]) + B[i]*(U[:,i] - Ū[i])\n", 163 | " end\n", 164 | "\n", 165 | " cvx.solve!(prob, ECOS.Optimizer; silent_solver = true)\n", 166 | "\n", 167 | " U = U.value\n", 168 | "\n", 169 | " return vec(U[:,1])\n", 170 | "end\n", 171 | "function convex_mpc_controller_deltas(model,params,x0,idx)\n", 172 | "\n", 173 | " N_mpc, Q, R = params.N_mpc, params.Q, params.R\n", 174 | "\n", 175 | " X̄ = params.X̄[idx:(idx + N_mpc - 1)]\n", 176 | " Ū = params.Ū[idx:(idx + N_mpc - 2)]\n", 177 | " Xref = params.Xref[idx:(idx + N_mpc - 1)]\n", 178 | " Uref = params.Uref[idx:(idx + N_mpc - 2)]\n", 179 | "\n", 180 | "\n", 181 | " ΔX = cvx.Variable(params.nx,N_mpc)\n", 182 | " ΔU = cvx.Variable(params.nu,N_mpc - 1)\n", 183 | "\n", 184 | "\n", 185 | " cost = 0.0\n", 186 | " for i = 1:N_mpc\n", 187 | " xi = X̄[i] + ΔX[:,i]\n", 188 | " cost += 0.5*cvx.quadform(xi - Xref[i], Q)\n", 189 | " end\n", 190 | " for i = 1:(N_mpc - 1)\n", 191 | " ui = Ū[i] + ΔU[:,i]\n", 192 | " cost += 0.5*cvx.quadform(ui - Uref[i], R)\n", 193 | " end\n", 194 | "\n", 195 | " prob = cvx.minimize(cost)\n", 196 | "\n", 197 | " # initial condition constraint\n", 198 | " prob.constraints += X̄[1] + ΔX[:,1] == x0\n", 199 | "\n", 200 | " # add dynamics constraints\n", 201 | " A,B = get_jacobians(model, X̄, Ū)\n", 202 | " for i = 1:(N_mpc-1)\n", 203 | " prob.constraints += X̄[i+1] + ΔX[:,i+1] == rk4(model, dynamics, X̄[i], Ū[i], params.dt) + A[i]*ΔX[:,i] + B[i]*ΔU[:,i]\n", 204 | " end\n", 205 | " cvx.solve!(prob, ECOS.Optimizer; silent_solver = true)\n", 206 | " ΔU = ΔU.value\n", 207 | "\n", 208 | " return Ū[1] + ΔU[:,1]\n", 209 | "end" 210 | ] 211 | }, 212 | { 213 | "cell_type": "code", 214 | "execution_count": 5, 215 | "id": "cb09201d", 216 | "metadata": {}, 217 | "outputs": [ 218 | { 219 | "name": "stderr", 220 | "output_type": "stream", 221 | "text": [ 222 | "\u001b[32msimulating 100%|█████████████████████████████████████████| Time: 0:00:05\u001b[39m\n", 223 | "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mMeshCat server started. You can open the visualizer by visiting the following URL in your browser:\n", 224 | "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39mhttp://127.0.0.1:8813\n" 225 | ] 226 | }, 227 | { 228 | "data": { 229 | "text/html": [ 230 | "
\n", 231 | " \n", 232 | "
\n" 233 | ], 234 | "text/plain": [ 235 | "MeshCat.DisplayedVisualizer(MeshCat.CoreVisualizer(MeshCat.SceneTrees.SceneNode(nothing, nothing, Dict{String, Vector{UInt8}}(), UInt8[0x83, 0xa7, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x82 … 0x5f, 0x61, 0x6e, 0x69, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e], Dict{String, MeshCat.SceneTrees.SceneNode}(\"meshcat\" => MeshCat.SceneTrees.SceneNode(nothing, nothing, Dict{String, Vector{UInt8}}(), nothing, Dict{String, MeshCat.SceneTrees.SceneNode}(\"traj\" => MeshCat.SceneTrees.SceneNode(nothing, nothing, Dict{String, Vector{UInt8}}(), nothing, Dict{String, MeshCat.SceneTrees.SceneNode}(\"s23\" => MeshCat.SceneTrees.SceneNode(UInt8[0x83, 0xa6, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x84, 0xaa … 0x74, 0x2f, 0x74, 0x72, 0x61, 0x6a, 0x2f, 0x73, 0x32, 0x33], nothing, Dict{String, Vector{UInt8}}(), nothing, Dict{String, MeshCat.SceneTrees.SceneNode}()), \"s14\" => MeshCat.SceneTrees.SceneNode(UInt8[0x83, 0xa6, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x84, 0xaa … 0x74, 0x2f, 0x74, 0x72, 0x61, 0x6a, 0x2f, 0x73, 0x31, 0x34], nothing, Dict{String, Vector{UInt8}}(), nothing, Dict{String, MeshCat.SceneTrees.SceneNode}()), \"s18\" => MeshCat.SceneTrees.SceneNode(UInt8[0x83, 0xa6, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x84, 0xaa … 0x74, 0x2f, 0x74, 0x72, 0x61, 0x6a, 0x2f, 0x73, 0x31, 0x38], nothing, Dict{String, Vector{UInt8}}(), nothing, Dict{String, MeshCat.SceneTrees.SceneNode}()), \"p82\" => MeshCat.SceneTrees.SceneNode(UInt8[0x83, 0xa6, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x84, 0xaa … 0x74, 0x2f, 0x74, 0x72, 0x61, 0x6a, 0x2f, 0x70, 0x38, 0x32], nothing, Dict{String, Vector{UInt8}}(), nothing, Dict{String, MeshCat.SceneTrees.SceneNode}()), \"s44\" => MeshCat.SceneTrees.SceneNode(UInt8[0x83, 0xa6, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x84, 0xaa … 0x74, 0x2f, 0x74, 0x72, 0x61, 0x6a, 0x2f, 0x73, 0x34, 0x34], nothing, Dict{String, Vector{UInt8}}(), nothing, Dict{String, MeshCat.SceneTrees.SceneNode}()), \"p43\" => MeshCat.SceneTrees.SceneNode(UInt8[0x83, 0xa6, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x84, 0xaa … 0x74, 0x2f, 0x74, 0x72, 0x61, 0x6a, 0x2f, 0x70, 0x34, 0x33], nothing, Dict{String, Vector{UInt8}}(), nothing, Dict{String, MeshCat.SceneTrees.SceneNode}()), \"s53\" => MeshCat.SceneTrees.SceneNode(UInt8[0x83, 0xa6, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x84, 0xaa … 0x74, 0x2f, 0x74, 0x72, 0x61, 0x6a, 0x2f, 0x73, 0x35, 0x33], nothing, Dict{String, Vector{UInt8}}(), nothing, Dict{String, MeshCat.SceneTrees.SceneNode}()), \"s19\" => MeshCat.SceneTrees.SceneNode(UInt8[0x83, 0xa6, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x84, 0xaa … 0x74, 0x2f, 0x74, 0x72, 0x61, 0x6a, 0x2f, 0x73, 0x31, 0x39], nothing, Dict{String, Vector{UInt8}}(), nothing, Dict{String, MeshCat.SceneTrees.SceneNode}()), \"p60\" => MeshCat.SceneTrees.SceneNode(UInt8[0x83, 0xa6, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x84, 0xaa … 0x74, 0x2f, 0x74, 0x72, 0x61, 0x6a, 0x2f, 0x70, 0x36, 0x30], nothing, Dict{String, Vector{UInt8}}(), nothing, Dict{String, MeshCat.SceneTrees.SceneNode}()), \"s52\" => MeshCat.SceneTrees.SceneNode(UInt8[0x83, 0xa6, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x84, 0xaa … 0x74, 0x2f, 0x74, 0x72, 0x61, 0x6a, 0x2f, 0x73, 0x35, 0x32], nothing, Dict{String, Vector{UInt8}}(), nothing, Dict{String, MeshCat.SceneTrees.SceneNode}())…)), \"vic\" => MeshCat.SceneTrees.SceneNode(UInt8[0x83, 0xa6, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x84, 0xaa … 0x65, 0x73, 0x68, 0x63, 0x61, 0x74, 0x2f, 0x76, 0x69, 0x63], nothing, Dict{String, Vector{UInt8}}(), nothing, Dict{String, MeshCat.SceneTrees.SceneNode}()), \"target\" => MeshCat.SceneTrees.SceneNode(UInt8[0x83, 0xa6, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x84, 0xaa … 0x63, 0x61, 0x74, 0x2f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74], nothing, Dict{String, Vector{UInt8}}(), nothing, Dict{String, MeshCat.SceneTrees.SceneNode}()))))), Set{Any}(), ip\"127.0.0.1\", 8813))" 236 | ] 237 | }, 238 | "metadata": {}, 239 | "output_type": "display_data" 240 | } 241 | ], 242 | "source": [ 243 | "let\n", 244 | "\n", 245 | " \n", 246 | " # dynamics parameters\n", 247 | " nx = 12\n", 248 | " nu = 4\n", 249 | " N = 250\n", 250 | " dt = 0.1\n", 251 | " x0 = [0;0;1.2;0;0;0.0;zeros(6)]\n", 252 | "\n", 253 | " X̄ = [deepcopy(x0) for i = 1:N]\n", 254 | " Ū = [(9.81*0.5/4)*ones(nu) for i = 1:(N-1)]\n", 255 | " Q = 10*diagm(ones(nx))\n", 256 | " R = .1*diagm(ones(nu))\n", 257 | "\n", 258 | " model = (mass=0.5,\n", 259 | " J=Diagonal([0.0023, 0.0023, 0.004]),\n", 260 | " gravity=[0,0,-9.81],\n", 261 | " L=0.1750,\n", 262 | " kf=1.0,\n", 263 | " km=0.0245,dt = dt)\n", 264 | "\n", 265 | " Xref = [ [5*cos(t);5*cos(t)*sin(t);1.2;zeros(9)] for t = range(-pi/2,3*pi/2 + 4*pi, length = N)]\n", 266 | " for i = 1:(N-1)\n", 267 | " Xref[i][4:6] = (Xref[i+1][1:3] - Xref[i][1:3])/dt\n", 268 | " end\n", 269 | " Uref = deepcopy(Ū)\n", 270 | "\n", 271 | " N_mpc = 40\n", 272 | "\n", 273 | " u_min = zeros(nu)\n", 274 | " u_max = 10*ones(nu)\n", 275 | " x_min = -1e3*ones(nx)\n", 276 | " x_max = 1e3*ones(nx)\n", 277 | "\n", 278 | " params = (N = N, dt = dt, Q = Q, R = R, X̄ = X̄, Ū = Ū, Xref = Xref, Uref = Uref, N_mpc = N_mpc,#idx = idx,\n", 279 | " x_min = x_min, x_max = x_max, u_min = u_min, u_max = u_max,nx = nx, nu = nu)\n", 280 | "\n", 281 | " # main simulation\n", 282 | " N_sim = 100\n", 283 | " @assert N_sim < N\n", 284 | " Xsim = [deepcopy(x0) for i = 1:N_sim]\n", 285 | " Usim = [zeros(2) for i = 1:(N_sim-1)]\n", 286 | " @showprogress \"simulating\" for i = 1:(N_sim-1)\n", 287 | " Usim[i] = convex_mpc_controller_deltas(model,params,Xsim[i],i)\n", 288 | "\n", 289 | " # simulate\n", 290 | " Xsim[i+1] = rk4(model, dynamics, Xsim[i], Usim[i], dt)\n", 291 | "\n", 292 | " end\n", 293 | "\n", 294 | " display(animate_quadrotor(Xsim, Xref, params.dt))\n", 295 | "end" 296 | ] 297 | }, 298 | { 299 | "cell_type": "code", 300 | "execution_count": null, 301 | "id": "ff39f3c1", 302 | "metadata": {}, 303 | "outputs": [], 304 | "source": [] 305 | } 306 | ], 307 | "metadata": { 308 | "kernelspec": { 309 | "display_name": "Julia 1.6.7", 310 | "language": "julia", 311 | "name": "julia-1.6" 312 | }, 313 | "language_info": { 314 | "file_extension": ".jl", 315 | "mimetype": "application/julia", 316 | "name": "julia", 317 | "version": "1.6.7" 318 | } 319 | }, 320 | "nbformat": 4, 321 | "nbformat_minor": 5 322 | } 323 | -------------------------------------------------------------------------------- /2_24_recitation/utils/quadrotor.jl: -------------------------------------------------------------------------------- 1 | function dcm_from_mrp(p) 2 | p1,p2,p3 = p 3 | den = (p1^2 + p2^2 + p3^2 + 1)^2 4 | a = (4*p1^2 + 4*p2^2 + 4*p3^2 - 4) 5 | [ 6 | (-((8*p2^2+8*p3^2)/den-1)*den) (8*p1*p2 + p3*a) (8*p1*p3 - p2*a); 7 | (8*p1*p2 - p3*a) (-((8*p1^2 + 8*p3^2)/den - 1)*den) (8*p2*p3 + p1*a); 8 | (8*p1*p3 + p2*a) (8*p2*p3 - p1*a) (-((8*p1^2 + 8*p2^2)/den - 1)*den) 9 | ]/den 10 | end 11 | function skew(ω::Vector{T}) where {T} 12 | return [0 -ω[3] ω[2]; 13 | ω[3] 0 -ω[1]; 14 | -ω[2] ω[1] 0] 15 | end 16 | function dynamics(model::NamedTuple,x,u) 17 | # quadrotor dynamics with an MRP for attitude 18 | r = x[1:3] 19 | v = x[4:6] 20 | p = x[7:9] 21 | ω = x[10:12] 22 | 23 | Q = dcm_from_mrp(p) 24 | 25 | mass=model.mass 26 | J = model.J 27 | gravity= model.gravity 28 | L= model.L 29 | kf=model.kf 30 | km=model.km 31 | 32 | w1 = u[1] 33 | w2 = u[2] 34 | w3 = u[3] 35 | w4 = u[4] 36 | 37 | F1 = max(0,kf*w1) 38 | F2 = max(0,kf*w2) 39 | F3 = max(0,kf*w3) 40 | F4 = max(0,kf*w4) 41 | F = [0., 0., F1+F2+F3+F4] #total rotor force in body frame 42 | 43 | M1 = km*w1 44 | M2 = km*w2 45 | M3 = km*w3 46 | M4 = km*w4 47 | τ = [L*(F2-F4), L*(F3-F1), (M1-M2+M3-M4)] #total rotor torque in body frame 48 | 49 | f = mass*gravity + Q*F # forces in world frame 50 | 51 | [ 52 | v 53 | f/mass 54 | ((1+norm(p)^2)/4) *( I + 2*(skew(p)^2 + skew(p))/(1+norm(p)^2) )*ω 55 | J\(τ - cross(ω,J*ω)) 56 | ] 57 | end 58 | function rk4(model,ode,x,u,dt) 59 | k1 = dt*ode(model,x, u) 60 | k2 = dt*ode(model,x + k1/2, u) 61 | k3 = dt*ode(model,x + k2/2, u) 62 | k4 = dt*ode(model,x + k3, u) 63 | x + (1/6)*(k1 + 2*k2 + 2*k3 + k4) 64 | end 65 | function vis_traj!(vis, name, X; R = 0.1, color = mc.RGBA(1.0, 0.0, 0.0, 1.0)) 66 | for i = 1:(length(X)-1) 67 | a = X[i][1:3] 68 | b = X[i+1][1:3] 69 | cyl = mc.Cylinder(mc.Point(a...), mc.Point(b...), R) 70 | mc.setobject!(vis[name]["p"*string(i)], cyl, mc.MeshPhongMaterial(color=color)) 71 | end 72 | for i = 1:length(X) 73 | a = X[i][1:3] 74 | sph = mc.HyperSphere(mc.Point(a...), R) 75 | mc.setobject!(vis[name]["s"*string(i)], sph, mc.MeshPhongMaterial(color=color)) 76 | end 77 | end 78 | 79 | function animate_quadrotor(Xsim, Xref, dt) 80 | vis = mc.Visualizer() 81 | robot_obj = mc.MeshFileGeometry(joinpath(@__DIR__,"quadrotor.obj")) 82 | mc.setobject!(vis[:vic], robot_obj) 83 | 84 | vis_traj!(vis, :traj, Xref[1:85]; R = 0.01, color = mc.RGBA(1.0, 0.0, 0.0, 1.0)) 85 | target = mc.HyperSphere(mc.Point(0,0,0.0),0.1) 86 | mc.setobject!(vis[:target], target, mc.MeshPhongMaterial(color = mc.RGBA(0.0,1.0,0.0,0.4))) 87 | 88 | 89 | anim = mc.Animation(floor(Int,1/dt)) 90 | for k = 1:length(Xsim) 91 | mc.atframe(anim, k) do 92 | r = Xsim[k][1:3] 93 | p = Xsim[k][7:9] 94 | mc.settransform!(vis[:vic], mc.compose(mc.Translation(r),mc.LinearMap(1.5*(dcm_from_mrp(p))))) 95 | mc.settransform!(vis[:target], mc.Translation(Xref[k][1:3])) 96 | end 97 | end 98 | mc.setanimation!(vis, anim) 99 | 100 | return (mc.render(vis)) 101 | end -------------------------------------------------------------------------------- /3_17_recitation/3_17_recitation.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Optimal-Control-16-745/recitations-2023/d864eba9a3e35686644c3258346c35685b315e5f/3_17_recitation/3_17_recitation.pdf -------------------------------------------------------------------------------- /3_17_recitation/rk4_jacobians.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 40, 6 | "id": "00750406", 7 | "metadata": {}, 8 | "outputs": [ 9 | { 10 | "data": { 11 | "text/plain": [ 12 | "ForwardDiff" 13 | ] 14 | }, 15 | "execution_count": 40, 16 | "metadata": {}, 17 | "output_type": "execute_result" 18 | } 19 | ], 20 | "source": [ 21 | "using LinearAlgebra\n", 22 | "using ForwardDiff\n", 23 | "const FD = ForwardDiff" 24 | ] 25 | }, 26 | { 27 | "cell_type": "code", 28 | "execution_count": 41, 29 | "id": "1df50463", 30 | "metadata": {}, 31 | "outputs": [ 32 | { 33 | "data": { 34 | "text/plain": [ 35 | "dynamics (generic function with 1 method)" 36 | ] 37 | }, 38 | "execution_count": 41, 39 | "metadata": {}, 40 | "output_type": "execute_result" 41 | } 42 | ], 43 | "source": [ 44 | "function dynamics(x, u)\n", 45 | " # euler's with added nonlinearities\n", 46 | " J = Diagonal([1, 2, 3])\n", 47 | " ẋ = J \\ (u * sin(u[1]) - cross(x, J * x)) * cos(u[2])\n", 48 | "end" 49 | ] 50 | }, 51 | { 52 | "cell_type": "code", 53 | "execution_count": 42, 54 | "id": "42b9f990", 55 | "metadata": {}, 56 | "outputs": [ 57 | { 58 | "data": { 59 | "text/plain": [ 60 | "rk4 (generic function with 1 method)" 61 | ] 62 | }, 63 | "execution_count": 42, 64 | "metadata": {}, 65 | "output_type": "execute_result" 66 | } 67 | ], 68 | "source": [ 69 | "function rk4(x,u,dt)\n", 70 | " k1 = dt * dynamics(x, u)\n", 71 | " k2 = dt * dynamics(x + k1/2, u)\n", 72 | " k3 = dt * dynamics(x + k2/2, u)\n", 73 | " k4 = dt * dynamics(x + k3, u)\n", 74 | " x + (1 / 6) * (k1 + 2 * k2 + 2 * k3 + k4)\n", 75 | "end" 76 | ] 77 | }, 78 | { 79 | "cell_type": "code", 80 | "execution_count": 43, 81 | "id": "39dad94b", 82 | "metadata": {}, 83 | "outputs": [ 84 | { 85 | "data": { 86 | "text/plain": [ 87 | "dynamics_and_jacobians (generic function with 1 method)" 88 | ] 89 | }, 90 | "execution_count": 43, 91 | "metadata": {}, 92 | "output_type": "execute_result" 93 | } 94 | ], 95 | "source": [ 96 | "function dynamics_jacobians(x,u)\n", 97 | " A = FD.jacobian(_x -> dynamics(_x, u), x)\n", 98 | " B = FD.jacobian(_u -> dynamics(x, _u), u)\n", 99 | " return A, B\n", 100 | "end\n", 101 | "function dynamics_and_jacobians(x,u)\n", 102 | " ẋ = dynamics(x, u)\n", 103 | " A, B = dynamics_jacobians(x, u)\n", 104 | " return ẋ, A, B\n", 105 | "end" 106 | ] 107 | }, 108 | { 109 | "cell_type": "code", 110 | "execution_count": 46, 111 | "id": "631fdb49", 112 | "metadata": {}, 113 | "outputs": [ 114 | { 115 | "data": { 116 | "text/plain": [ 117 | "rk4step_jacobians (generic function with 1 method)" 118 | ] 119 | }, 120 | "execution_count": 46, 121 | "metadata": {}, 122 | "output_type": "execute_result" 123 | } 124 | ], 125 | "source": [ 126 | "function rk4step_jacobians(x,u,dt)\n", 127 | "\n", 128 | " # normal RK4 but we store the A's and B's at each evaluate point\n", 129 | " ẋ1, A1, B1 = dynamics_and_jacobians(x, u)\n", 130 | "\n", 131 | " ẋ2, A2, B2 = dynamics_and_jacobians(x + .5 * dt * ẋ1, u)\n", 132 | "\n", 133 | " ẋ3, A3, B3 = dynamics_and_jacobians(x + .5 * dt * ẋ2, u)\n", 134 | "\n", 135 | " ẋ4, A4, B4 = dynamics_and_jacobians(x + dt * ẋ3, u)\n", 136 | "\n", 137 | " x₊ = x + (1 / 6) * dt * (ẋ1 + 2 * ẋ2 + 2 * ẋ3 + ẋ4)\n", 138 | "\n", 139 | " # A_d\n", 140 | " dk1_dx1 = dt*A1\n", 141 | " dx2_dx1 = I + .5*dk1_dx1\n", 142 | " dk2_dx1 = dt*A2*dx2_dx1\n", 143 | " dx3_dx1 = I + .5*dk2_dx1\n", 144 | " dk3_dx1 = dt*A3*dx3_dx1\n", 145 | " dx4_dx1 = I + dk3_dx1\n", 146 | " dk4_dx1 = dt*A4*dx4_dx1\n", 147 | " A_d = I + (1/6)*(dk1_dx1 + 2*dk2_dx1 + 2*dk3_dx1 + dk4_dx1)\n", 148 | "\n", 149 | " # B_d\n", 150 | " dk1_du = dt*B1\n", 151 | " dx2_du = .5*dk1_du\n", 152 | " dk2_du = dt*A2*dx2_du + dt*B2\n", 153 | " dx3_du = .5*dk2_du\n", 154 | " dk3_du = dt*A3*dx3_du + dt*B3\n", 155 | " dx4_du = dk3_du\n", 156 | " dk4_du = dt*A4*dx4_du + dt*B4\n", 157 | " B_d = (1/6)*(dk1_du + 2*dk2_du + 2*dk3_du + dk4_du)\n", 158 | "\n", 159 | " return x₊, A_d, B_d\n", 160 | "end" 161 | ] 162 | }, 163 | { 164 | "cell_type": "code", 165 | "execution_count": 47, 166 | "id": "ad46278b", 167 | "metadata": {}, 168 | "outputs": [ 169 | { 170 | "name": "stdout", 171 | "output_type": "stream", 172 | "text": [ 173 | "norm(x2 - x₊) = 1.734723475976807e-18\n", 174 | "norm(A_d - A_rk4) = 9.579489523762355e-19\n", 175 | "norm(B_d - B_rk4) = 1.5899003299612593e-17\n" 176 | ] 177 | }, 178 | { 179 | "data": { 180 | "text/plain": [ 181 | "1.5899003299612593e-17" 182 | ] 183 | }, 184 | "execution_count": 47, 185 | "metadata": {}, 186 | "output_type": "execute_result" 187 | } 188 | ], 189 | "source": [ 190 | "let \n", 191 | " # random state and control \n", 192 | " x = randn(3)\n", 193 | " u = randn(3)\n", 194 | " dt = 0.1 \n", 195 | " \n", 196 | " # get RK4 jacobians with ForwardDiff\n", 197 | " A_rk4 = FD.jacobian(_x -> rk4(_x,u,dt),x)\n", 198 | " B_rk4 = FD.jacobian(_u -> rk4(x,_u,dt),u)\n", 199 | " x2 = rk4(x,u,dt)\n", 200 | " \n", 201 | " # get RK4 jacobians with our new function\n", 202 | " x₊, A_d, B_d = rk4step_jacobians(x,u,dt)\n", 203 | " \n", 204 | " # show they are the same\n", 205 | " @show norm(x2 - x₊)\n", 206 | " @show norm(A_d - A_rk4)\n", 207 | " @show norm(B_d - B_rk4)\n", 208 | "end" 209 | ] 210 | }, 211 | { 212 | "cell_type": "code", 213 | "execution_count": null, 214 | "id": "26c25de4", 215 | "metadata": {}, 216 | "outputs": [], 217 | "source": [] 218 | } 219 | ], 220 | "metadata": { 221 | "kernelspec": { 222 | "display_name": "Julia 1.6.5", 223 | "language": "julia", 224 | "name": "julia-1.6" 225 | }, 226 | "language_info": { 227 | "file_extension": ".jl", 228 | "mimetype": "application/julia", 229 | "name": "julia", 230 | "version": "1.6.5" 231 | } 232 | }, 233 | "nbformat": 4, 234 | "nbformat_minor": 5 235 | } 236 | -------------------------------------------------------------------------------- /3_24_recitation.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Optimal-Control-16-745/recitations-2023/d864eba9a3e35686644c3258346c35685b315e5f/3_24_recitation.pdf -------------------------------------------------------------------------------- /3_2_recitation.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Optimal-Control-16-745/recitations-2023/d864eba9a3e35686644c3258346c35685b315e5f/3_2_recitation.pdf -------------------------------------------------------------------------------- /3_31_recitation/3_31_recitation.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Optimal-Control-16-745/recitations-2023/d864eba9a3e35686644c3258346c35685b315e5f/3_31_recitation/3_31_recitation.pdf -------------------------------------------------------------------------------- /3_31_recitation/Project.toml: -------------------------------------------------------------------------------- 1 | [deps] 2 | Convex = "f65535da-76fb-5f13-bab9-19810c17039a" 3 | ECOS = "e2685f51-7e38-5353-a97d-a921fd2c8199" 4 | FiniteDiff = "6a86dc24-6348-571c-b903-95158fe2bd41" 5 | ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" 6 | Ipopt = "b6b21f68-93f8-5de0-b562-5493be1d77c9" 7 | JLD2 = "033835bb-8acc-5ee8-8aae-3f567f8a3819" 8 | MathOptInterface = "b8f27783-ece8-5eb3-8dc8-9495eed66fee" 9 | MeshCat = "283c5d60-a78f-5afe-a0af-af636b173e11" 10 | Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" 11 | -------------------------------------------------------------------------------- /3_31_recitation/double_integrator_collision_avoidance.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "id": "f5c498c3", 7 | "metadata": { 8 | "scrolled": true 9 | }, 10 | "outputs": [ 11 | { 12 | "name": "stderr", 13 | "output_type": "stream", 14 | "text": [ 15 | "\u001b[32m\u001b[1m Activating\u001b[22m\u001b[39m environment at `~/devel/recitations/3_31_recitation/Project.toml`\n", 16 | "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mPrecompiling Ipopt [b6b21f68-93f8-5de0-b562-5493be1d77c9]\n" 17 | ] 18 | } 19 | ], 20 | "source": [ 21 | "import Pkg\n", 22 | "Pkg.activate(@__DIR__)\n", 23 | "Pkg.instantiate()\n", 24 | "import MathOptInterface as MOI\n", 25 | "import Ipopt \n", 26 | "import FiniteDiff\n", 27 | "import ForwardDiff\n", 28 | "using LinearAlgebra\n", 29 | "using Plots\n", 30 | "using Random\n", 31 | "using Test\n", 32 | "import MeshCat as mc " 33 | ] 34 | }, 35 | { 36 | "cell_type": "code", 37 | "execution_count": 2, 38 | "id": "3045307c", 39 | "metadata": { 40 | "scrolled": true 41 | }, 42 | "outputs": [ 43 | { 44 | "data": { 45 | "text/plain": [ 46 | "fmincon (generic function with 1 method)" 47 | ] 48 | }, 49 | "execution_count": 2, 50 | "metadata": {}, 51 | "output_type": "execute_result" 52 | } 53 | ], 54 | "source": [ 55 | "include(joinpath(@__DIR__,\"utils\", \"fmincon.jl\"))" 56 | ] 57 | }, 58 | { 59 | "cell_type": "code", 60 | "execution_count": 16, 61 | "id": "2b75447f", 62 | "metadata": { 63 | "scrolled": false 64 | }, 65 | "outputs": [ 66 | { 67 | "name": "stdout", 68 | "output_type": "stream", 69 | "text": [ 70 | "---------checking dimensions of everything----------\n", 71 | "---------all dimensions good------------------------\n", 72 | "---------diff type set to :auto (ForwardDiff.jl)----\n", 73 | "---------testing objective gradient-----------------\n", 74 | "---------testing constraint Jacobian----------------\n", 75 | "---------successfully compiled both derivatives-----\n", 76 | "---------IPOPT beginning solve----------------------\n", 77 | "This is Ipopt version 3.14.4, running with linear solver MUMPS 5.4.1.\n", 78 | "\n", 79 | "Number of nonzeros in equality constraint Jacobian...: 142272\n", 80 | "Number of nonzeros in inequality constraint Jacobian.: 139536\n", 81 | "Number of nonzeros in Lagrangian Hessian.............: 0\n", 82 | "\n", 83 | "Total number of variables............................: 456\n", 84 | " variables with only lower bounds: 0\n", 85 | " variables with lower and upper bounds: 0\n", 86 | " variables with only upper bounds: 0\n", 87 | "Total number of equality constraints.................: 312\n", 88 | "Total number of inequality constraints...............: 306\n", 89 | " inequality constraints with only lower bounds: 306\n", 90 | " inequality constraints with lower and upper bounds: 0\n", 91 | " inequality constraints with only upper bounds: 0\n", 92 | "\n", 93 | "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", 94 | " 0 3.0906788e+02 4.82e-01 1.81e+00 0.0 0.00e+00 - 0.00e+00 0.00e+00 0\n", 95 | " 1 4.1447496e+02 2.21e-01 2.02e+02 0.4 2.01e+01 - 1.19e-03 4.74e-02F 1\n", 96 | " 2 1.2491140e+03 8.88e-16 2.67e+04 0.6 1.89e+01 - 6.82e-02 1.00e+00f 1\n", 97 | " 3 9.1479343e+02 8.88e-16 3.83e+02 0.6 4.28e+00 - 5.64e-01 1.00e+00f 1\n", 98 | " 4 8.3252294e+02 4.44e-16 1.16e+02 0.6 4.80e+00 - 8.26e-01 1.00e+00f 1\n", 99 | " 5 8.0259743e+02 4.44e-16 8.66e+01 0.6 2.00e+01 - 5.69e-01 2.41e-01f 3\n", 100 | " 6 1.1919988e+03 8.88e-16 2.23e+01 0.6 2.65e+01 - 5.50e-01 1.00e+00f 1\n", 101 | " 7 7.0388578e+02 8.88e-16 7.87e+01 -0.1 1.96e+01 - 8.73e-01 1.00e+00f 1\n", 102 | " 8 5.9074362e+02 4.44e-16 8.59e+01 -0.1 3.48e+00 - 1.00e+00 1.00e+00f 1\n", 103 | " 9 5.1467293e+02 4.44e-16 6.21e+01 -0.1 1.09e+01 - 1.00e+00 6.28e-01f 1\n", 104 | "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", 105 | " 10 4.4196519e+02 4.44e-16 1.75e+01 -0.1 4.44e+00 - 1.82e-01 7.62e-01f 1\n", 106 | " 11 4.5494891e+02 4.44e-16 1.45e+01 -0.1 4.17e+00 - 1.00e+00 1.00e+00f 1\n", 107 | " 12 4.4302985e+02 4.44e-16 8.99e+00 -0.1 2.09e+00 - 1.00e+00 1.00e+00f 1\n", 108 | " 13 4.3243471e+02 5.48e-14 8.62e+00 -0.1 2.51e+00 - 9.82e-01 1.00e+00F 1\n", 109 | " 14 4.3544328e+02 4.44e-16 6.75e+00 -0.1 1.41e+00 - 1.00e+00 1.00e+00f 1\n", 110 | " 15 3.8193306e+02 4.44e-16 2.91e+00 -0.8 7.82e+00 - 1.00e+00 6.42e-01f 1\n", 111 | " 16 3.6379335e+02 4.44e-16 2.17e+00 -0.8 2.98e+00 - 6.38e-01 7.32e-01f 1\n", 112 | " 17 3.5490391e+02 4.44e-16 7.44e+00 -0.8 1.82e+00 - 5.86e-01 1.00e+00f 1\n", 113 | " 18 3.5126234e+02 4.44e-16 3.45e+00 -1.1 1.05e+00 - 7.26e-01 6.48e-01f 1\n", 114 | " 19 3.4937228e+02 4.44e-16 4.43e+00 -1.2 1.38e+00 - 9.88e-01 6.96e-01f 1\n", 115 | "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", 116 | " 20 3.4905591e+02 4.44e-16 5.17e+00 -1.5 1.98e+00 - 9.65e-01 1.96e-01h 2\n", 117 | " 21 3.4804493e+02 4.44e-16 5.74e+00 -1.7 9.56e-01 - 9.97e-01 4.96e-01h 1\n", 118 | " 22 3.4765223e+02 4.44e-16 3.86e+00 -1.9 2.08e-01 - 9.97e-01 6.33e-01h 1\n", 119 | " 23 3.4746432e+02 4.44e-16 2.87e+00 -1.9 2.00e-01 - 1.00e+00 1.00e+00h 1\n", 120 | " 24 3.4733064e+02 4.44e-16 1.89e+00 -2.3 3.07e-01 - 9.97e-01 1.00e+00h 1\n", 121 | " 25 3.4725656e+02 4.44e-16 1.49e+00 -3.1 1.22e-01 - 1.00e+00 1.00e+00h 1\n", 122 | " 26 3.4723110e+02 4.44e-16 3.11e-01 -3.4 9.72e-02 - 1.00e+00 1.00e+00h 1\n", 123 | " 27 3.4722490e+02 4.44e-16 2.45e-01 -4.8 3.51e-02 - 1.00e+00 1.00e+00h 1\n", 124 | " 28 3.4722365e+02 4.44e-16 1.79e-01 -6.1 1.07e-02 - 1.00e+00 1.00e+00h 1\n", 125 | " 29 3.4722363e+02 4.44e-16 4.99e-02 -7.8 1.47e-02 - 1.00e+00 1.00e+00h 1\n", 126 | "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", 127 | " 30 3.4722308e+02 4.44e-16 3.19e-02 -9.3 4.30e-03 - 1.00e+00 1.00e+00h 1\n", 128 | " 31 3.4722301e+02 4.44e-16 2.54e-03 -10.6 3.06e-03 - 1.00e+00 1.00e+00h 1\n", 129 | " 32 3.4722298e+02 4.44e-16 4.01e-05 -11.0 1.42e-04 - 1.00e+00 1.00e+00h 1\n", 130 | " 33 3.4722298e+02 4.44e-16 3.92e-06 -11.0 3.28e-05 - 1.00e+00 1.00e+00h 1\n", 131 | " 34 3.4722298e+02 4.44e-16 6.89e-07 -11.0 6.71e-06 - 1.00e+00 1.00e+00h 1\n", 132 | "\n", 133 | "Number of Iterations....: 34\n", 134 | "\n", 135 | " (scaled) (unscaled)\n", 136 | "Objective...............: 3.4722298359443317e+02 3.4722298359443317e+02\n", 137 | "Dual infeasibility......: 6.8859562685208431e-07 6.8859562685208431e-07\n", 138 | "Constraint violation....: 4.4408920985006262e-16 4.4408920985006262e-16\n", 139 | "Variable bound violation: 0.0000000000000000e+00 0.0000000000000000e+00\n", 140 | "Complementarity.........: 1.0000000000000001e-11 1.0000000000000001e-11\n", 141 | "Overall NLP error.......: 6.8859562685208431e-07 6.8859562685208431e-07\n", 142 | "\n", 143 | "\n", 144 | "Number of objective function evaluations = 43\n", 145 | "Number of objective gradient evaluations = 35\n", 146 | "Number of equality constraint evaluations = 43\n", 147 | "Number of inequality constraint evaluations = 43\n", 148 | "Number of equality constraint Jacobian evaluations = 35\n", 149 | "Number of inequality constraint Jacobian evaluations = 35\n", 150 | "Number of Lagrangian Hessian evaluations = 0\n", 151 | "Total seconds in IPOPT = 3.781\n", 152 | "\n", 153 | "EXIT: Optimal Solution Found.\n" 154 | ] 155 | }, 156 | { 157 | "name": "stderr", 158 | "output_type": "stream", 159 | "text": [ 160 | "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mMeshCat server started. You can open the visualizer by visiting the following URL in your browser:\n", 161 | "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39mhttp://127.0.0.1:8716\n" 162 | ] 163 | }, 164 | { 165 | "data": { 166 | "text/html": [ 167 | "
\n", 168 | " \n", 169 | "
\n" 170 | ], 171 | "text/plain": [ 172 | "MeshCat.DisplayedVisualizer(MeshCat.CoreVisualizer(MeshCat.SceneTrees.SceneNode(nothing, nothing, Dict{String, Vector{UInt8}}(), UInt8[0x83, 0xa7, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x82 … 0x5f, 0x61, 0x6e, 0x69, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e], Dict{String, MeshCat.SceneTrees.SceneNode}(\"meshcat\" => MeshCat.SceneTrees.SceneNode(nothing, nothing, Dict{String, Vector{UInt8}}(), nothing, Dict{String, MeshCat.SceneTrees.SceneNode}(\"traj\" => MeshCat.SceneTrees.SceneNode(nothing, nothing, Dict{String, Vector{UInt8}}(), nothing, Dict{String, MeshCat.SceneTrees.SceneNode}(\"s23\" => MeshCat.SceneTrees.SceneNode(UInt8[0x83, 0xa6, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x84, 0xaa … 0x74, 0x2f, 0x74, 0x72, 0x61, 0x6a, 0x2f, 0x73, 0x32, 0x33], nothing, Dict{String, Vector{UInt8}}(), nothing, Dict{String, MeshCat.SceneTrees.SceneNode}()), \"s14\" => MeshCat.SceneTrees.SceneNode(UInt8[0x83, 0xa6, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x84, 0xaa … 0x74, 0x2f, 0x74, 0x72, 0x61, 0x6a, 0x2f, 0x73, 0x31, 0x34], nothing, Dict{String, Vector{UInt8}}(), nothing, Dict{String, MeshCat.SceneTrees.SceneNode}()), \"s18\" => MeshCat.SceneTrees.SceneNode(UInt8[0x83, 0xa6, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x84, 0xaa … 0x74, 0x2f, 0x74, 0x72, 0x61, 0x6a, 0x2f, 0x73, 0x31, 0x38], nothing, Dict{String, Vector{UInt8}}(), nothing, Dict{String, MeshCat.SceneTrees.SceneNode}()), \"s44\" => MeshCat.SceneTrees.SceneNode(UInt8[0x83, 0xa6, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x84, 0xaa … 0x74, 0x2f, 0x74, 0x72, 0x61, 0x6a, 0x2f, 0x73, 0x34, 0x34], nothing, Dict{String, Vector{UInt8}}(), nothing, Dict{String, MeshCat.SceneTrees.SceneNode}()), \"p43\" => MeshCat.SceneTrees.SceneNode(UInt8[0x83, 0xa6, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x84, 0xaa … 0x74, 0x2f, 0x74, 0x72, 0x61, 0x6a, 0x2f, 0x70, 0x34, 0x33], nothing, Dict{String, Vector{UInt8}}(), nothing, Dict{String, MeshCat.SceneTrees.SceneNode}()), \"s19\" => MeshCat.SceneTrees.SceneNode(UInt8[0x83, 0xa6, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x84, 0xaa … 0x74, 0x2f, 0x74, 0x72, 0x61, 0x6a, 0x2f, 0x73, 0x31, 0x39], nothing, Dict{String, Vector{UInt8}}(), nothing, Dict{String, MeshCat.SceneTrees.SceneNode}()), \"s6\" => MeshCat.SceneTrees.SceneNode(UInt8[0x83, 0xa6, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x84, 0xaa … 0x61, 0x74, 0x2f, 0x74, 0x72, 0x61, 0x6a, 0x2f, 0x73, 0x36], nothing, Dict{String, Vector{UInt8}}(), nothing, Dict{String, MeshCat.SceneTrees.SceneNode}()), \"s11\" => MeshCat.SceneTrees.SceneNode(UInt8[0x83, 0xa6, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x84, 0xaa … 0x74, 0x2f, 0x74, 0x72, 0x61, 0x6a, 0x2f, 0x73, 0x31, 0x31], nothing, Dict{String, Vector{UInt8}}(), nothing, Dict{String, MeshCat.SceneTrees.SceneNode}()), \"s15\" => MeshCat.SceneTrees.SceneNode(UInt8[0x83, 0xa6, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x84, 0xaa … 0x74, 0x2f, 0x74, 0x72, 0x61, 0x6a, 0x2f, 0x73, 0x31, 0x35], nothing, Dict{String, Vector{UInt8}}(), nothing, Dict{String, MeshCat.SceneTrees.SceneNode}()), \"p28\" => MeshCat.SceneTrees.SceneNode(UInt8[0x83, 0xa6, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x84, 0xaa … 0x74, 0x2f, 0x74, 0x72, 0x61, 0x6a, 0x2f, 0x70, 0x32, 0x38], nothing, Dict{String, Vector{UInt8}}(), nothing, Dict{String, MeshCat.SceneTrees.SceneNode}())…)), \"robot\" => MeshCat.SceneTrees.SceneNode(UInt8[0x83, 0xa6, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x84, 0xaa … 0x68, 0x63, 0x61, 0x74, 0x2f, 0x72, 0x6f, 0x62, 0x6f, 0x74], nothing, Dict{String, Vector{UInt8}}(), nothing, Dict{String, MeshCat.SceneTrees.SceneNode}()), \"obs6\" => MeshCat.SceneTrees.SceneNode(UInt8[0x83, 0xa6, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x84, 0xaa … 0x73, 0x68, 0x63, 0x61, 0x74, 0x2f, 0x6f, 0x62, 0x73, 0x36], nothing, Dict{String, Vector{UInt8}}(), nothing, Dict{String, MeshCat.SceneTrees.SceneNode}()), \"obs2\" => MeshCat.SceneTrees.SceneNode(UInt8[0x83, 0xa6, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x84, 0xaa … 0x73, 0x68, 0x63, 0x61, 0x74, 0x2f, 0x6f, 0x62, 0x73, 0x32], nothing, Dict{String, Vector{UInt8}}(), nothing, Dict{String, MeshCat.SceneTrees.SceneNode}()), \"obs4\" => MeshCat.SceneTrees.SceneNode(UInt8[0x83, 0xa6, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x84, 0xaa … 0x73, 0x68, 0x63, 0x61, 0x74, 0x2f, 0x6f, 0x62, 0x73, 0x34], nothing, Dict{String, Vector{UInt8}}(), nothing, Dict{String, MeshCat.SceneTrees.SceneNode}()), \"obs1\" => MeshCat.SceneTrees.SceneNode(UInt8[0x83, 0xa6, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x84, 0xaa … 0x73, 0x68, 0x63, 0x61, 0x74, 0x2f, 0x6f, 0x62, 0x73, 0x31], nothing, Dict{String, Vector{UInt8}}(), nothing, Dict{String, MeshCat.SceneTrees.SceneNode}()), \"obs5\" => MeshCat.SceneTrees.SceneNode(UInt8[0x83, 0xa6, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x84, 0xaa … 0x73, 0x68, 0x63, 0x61, 0x74, 0x2f, 0x6f, 0x62, 0x73, 0x35], nothing, Dict{String, Vector{UInt8}}(), nothing, Dict{String, MeshCat.SceneTrees.SceneNode}()), \"obs3\" => MeshCat.SceneTrees.SceneNode(UInt8[0x83, 0xa6, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x84, 0xaa … 0x73, 0x68, 0x63, 0x61, 0x74, 0x2f, 0x6f, 0x62, 0x73, 0x33], nothing, Dict{String, Vector{UInt8}}(), nothing, Dict{String, MeshCat.SceneTrees.SceneNode}()))))), Set{Any}(), ip\"127.0.0.1\", 8716))" 173 | ] 174 | }, 175 | "metadata": {}, 176 | "output_type": "display_data" 177 | } 178 | ], 179 | "source": [ 180 | "function double_integrator(model, x, u)\n", 181 | " [x[4:6];u]\n", 182 | "end\n", 183 | "function rk4(model::NamedTuple, ode::Function, x::Vector, u::Vector, dt::Real)::Vector\n", 184 | " k1 = dt * ode(model, x, u)\n", 185 | " k2 = dt * ode(model, x + k1/2, u)\n", 186 | " k3 = dt * ode(model, x + k2/2, u)\n", 187 | " k4 = dt * ode(model, x + k3, u)\n", 188 | " return x + (1/6)*(k1 + 2*k2 + 2*k3 + k4)\n", 189 | "end \n", 190 | "function create_idx(nx,nu,N)\n", 191 | " # This function creates some useful indexing tools for Z \n", 192 | " # x_i = Z[idx.x[i]]\n", 193 | " # u_i = Z[idx.u[i]]\n", 194 | " \n", 195 | " # our Z vector is [x0, u0, x1, u1, …, xN]\n", 196 | " nz = (N-1) * nu + N * nx # length of Z \n", 197 | " x = [(i - 1) * (nx + nu) .+ (1 : nx) for i = 1:N]\n", 198 | " u = [(i - 1) * (nx + nu) .+ ((nx + 1):(nx + nu)) for i = 1:(N - 1)]\n", 199 | " \n", 200 | " # constraint indexing for the (N-1) dynamics constraints when stacked up\n", 201 | " c = [(i - 1) * (nx) .+ (1 : nx) for i = 1:(N - 1)]\n", 202 | " nc = (N - 1) * nx # (N-1)*nx \n", 203 | " \n", 204 | " return (nx=nx,nu=nu,N=N,nz=nz,nc=nc,x= x,u = u,c = c)\n", 205 | "end\n", 206 | "\n", 207 | "function cost(params::NamedTuple, Z::Vector)::Real\n", 208 | " idx, N, xg = params.idx, params.N, params.xg\n", 209 | " Q, R, Qf = params.Q, params.R, params.Qf\n", 210 | " \n", 211 | " \n", 212 | " J = 0 \n", 213 | " for i = 1:(N-1)\n", 214 | " xi = Z[idx.x[i]]\n", 215 | " ui = Z[idx.u[i]]\n", 216 | " \n", 217 | " J += 0.5*(xi - xg)'*Q*(xi - xg)\n", 218 | " J += 0.5*ui'*R*ui \n", 219 | " end\n", 220 | " \n", 221 | " xn = Z[idx.x[N]]\n", 222 | " J += 0.5*(xn - xg)'*Qf*(xn - xg)\n", 223 | " \n", 224 | " return J \n", 225 | "end\n", 226 | "\n", 227 | "function dynamics_constraints(params::NamedTuple, Z::Vector)::Vector\n", 228 | " idx, N, dt = params.idx, params.N, params.dt\n", 229 | " \n", 230 | " # create c in a ForwardDiff friendly way (check HW0)\n", 231 | " c = zeros(eltype(Z), idx.nc)\n", 232 | " \n", 233 | " for i = 1:(N-1)\n", 234 | " xi = Z[idx.x[i]]\n", 235 | " ui = Z[idx.u[i]] \n", 236 | " xip1 = Z[idx.x[i+1]]\n", 237 | " c[idx.c[i]] = xip1 - rk4(params, double_integrator, xi, ui, dt)\n", 238 | " end\n", 239 | " return c \n", 240 | "end\n", 241 | "\n", 242 | "function equality_constraint(params::NamedTuple, Z::Vector)::Vector\n", 243 | " N, idx, xic, xg = params.N, params.idx, params.xic, params.xg \n", 244 | " [\n", 245 | " Z[idx.x[1]] - xic;\n", 246 | " Z[idx.x[N]] - xg;\n", 247 | " dynamics_constraints(params, Z)\n", 248 | " ]\n", 249 | "end\n", 250 | "function vis_traj!(vis, name, X; R = 0.1, color = mc.RGBA(1.0, 0.0, 0.0, 1.0))\n", 251 | " for i = 1:(length(X)-1)\n", 252 | " a = X[i][1:3]\n", 253 | " b = X[i+1][1:3]\n", 254 | " cyl = mc.Cylinder(mc.Point(a...), mc.Point(b...), R)\n", 255 | " mc.setobject!(vis[name][\"p\"*string(i)], cyl, mc.MeshPhongMaterial(color=color))\n", 256 | " end\n", 257 | " for i = 1:length(X)\n", 258 | " a = X[i][1:3]\n", 259 | " sph = mc.HyperSphere(mc.Point(a...), R)\n", 260 | " mc.setobject!(vis[name][\"s\"*string(i)], sph, mc.MeshPhongMaterial(color=color))\n", 261 | " end\n", 262 | "end\n", 263 | "function create_obstacles(Xref)\n", 264 | " num_obs = 6\n", 265 | " \n", 266 | " ids = rand(5:(length(Xref)-5), num_obs)\n", 267 | " \n", 268 | " positions = [zeros(3) for i = 1:num_obs]\n", 269 | " rad = zeros(num_obs)\n", 270 | " \n", 271 | " for i =1:num_obs\n", 272 | " positions[i] = Xref[ids[i]][1:3] + .2*randn(3)\n", 273 | " rad[i] = 0.4 \n", 274 | " end\n", 275 | " \n", 276 | " return (positions = positions, rad = rad,num_obs = num_obs)\n", 277 | "end\n", 278 | "\n", 279 | "function collision_constraints(x, obstacles)\n", 280 | " p_rob = x[1:3]\n", 281 | " R_rob = 0.3\n", 282 | " \n", 283 | " c = zeros(eltype(x), length(obstacles.positions))\n", 284 | " for i = 1:length(obstacles.positions)\n", 285 | " p_obs = obstacles.positions[i]\n", 286 | " R_obs = obstacles.rad[i]\n", 287 | " c[i] = norm(p_rob - p_obs)^2 - (R_rob + R_obs)^2 # >= 0 \n", 288 | " end\n", 289 | " return c \n", 290 | "end\n", 291 | "let\n", 292 | " \n", 293 | " # problem size \n", 294 | " nx = 6 \n", 295 | " nu = 3\n", 296 | " dt = 0.1\n", 297 | " tf = 5.0 \n", 298 | " t_vec = 0:dt:tf \n", 299 | " N = length(t_vec)\n", 300 | " \n", 301 | " # LQR cost \n", 302 | " Q = diagm(ones(nx))\n", 303 | " R = 1*diagm(ones(nu))\n", 304 | " Qf = 1*diagm(ones(nx))\n", 305 | " \n", 306 | " # indexing \n", 307 | " idx = create_idx(nx,nu,N)\n", 308 | " \n", 309 | " # initial and goal states \n", 310 | " xic = [-3.0,0,2,0,0,0]\n", 311 | " xg = [3.0,0,2,0,0,0]\n", 312 | " \n", 313 | " # load all useful things into params \n", 314 | " Xguess = range(xic, xg, length = N)\n", 315 | " obstacles = create_obstacles(Xguess)\n", 316 | " params = (Q = Q, R = R, Qf = Qf,\n", 317 | " xic = xic,\n", 318 | " xg = xg,\n", 319 | " dt = dt,\n", 320 | " N = N,\n", 321 | " idx = idx,obstacles = obstacles) # quadrotor moment of inertia \n", 322 | " \n", 323 | " # primal bounds \n", 324 | " x_l = -Inf*ones(idx.nz)\n", 325 | " x_u = Inf*ones(idx.nz) \n", 326 | " \n", 327 | " # initial guess \n", 328 | " z0 = 0.01*randn(idx.nz)\n", 329 | " Xguess = range(xic, xg, length = N)\n", 330 | " for i = 1:N \n", 331 | " z0[idx.x[i]] = Xguess[i]\n", 332 | " end\n", 333 | " \n", 334 | " \n", 335 | " # inequality constraint bounds (this is what we do when we have no inequality constraints)\n", 336 | " c_l = zeros(obstacles.num_obs*params.N)\n", 337 | " c_u = Inf*ones(obstacles.num_obs*params.N)\n", 338 | " function inequality_constraint(params, Z)\n", 339 | " obstacles = params.obstacles\n", 340 | " num_obs = obstacles.num_obs\n", 341 | " c = zeros(eltype(Z), params.N*num_obs)\n", 342 | " idx = params.idx\n", 343 | " off = 0 \n", 344 | " for i = 1:params.N\n", 345 | " x = Z[idx.x[i]]\n", 346 | " c[(1:num_obs) .+ off] = collision_constraints(x, obstacles)\n", 347 | " off += num_obs \n", 348 | " end\n", 349 | " return c \n", 350 | " end\n", 351 | "# c_l = zeros(0)\n", 352 | "# c_u = zeros(0)\n", 353 | "# function inequality_constraint(params, Z)\n", 354 | "# return zeros(eltype(Z), 0)\n", 355 | "# end\n", 356 | " \n", 357 | " \n", 358 | "\n", 359 | " \n", 360 | " # choose diff type (try :auto, then use :finite if :auto doesn't work)\n", 361 | " diff_type = :auto \n", 362 | " \n", 363 | " Z = fmincon(cost,equality_constraint,inequality_constraint,\n", 364 | " x_l,x_u,c_l,c_u,z0,params, diff_type;\n", 365 | " tol = 1e-6, c_tol = 1e-6, max_iters = 10_000, verbose = true)\n", 366 | " \n", 367 | " # pull the X and U solutions out of Z \n", 368 | " X = [Z[idx.x[i]] for i = 1:N]\n", 369 | " U = [Z[idx.u[i]] for i = 1:(N-1)]\n", 370 | "\n", 371 | " vis = mc.Visualizer()\n", 372 | " sph = mc.HyperSphere(mc.Point(0.0,0.0,0.0),0.3)\n", 373 | " mc.setobject!(vis[:robot], sph, mc.MeshPhongMaterial(color = mc.RGBA(0.0,1.0,0.0,0.5)))\n", 374 | " vis_traj!(vis, :traj, X; R = 0.05, color = mc.RGBA(1.0, 0.0, 0.0, 1.0))\n", 375 | " for i = 1:length(obstacles.positions)\n", 376 | " p = obstacles.positions[i]\n", 377 | " R = obstacles.rad[i]\n", 378 | " sph = mc.HyperSphere(mc.Point(p...),R)\n", 379 | " mc.setobject!(vis[\"obs\"*string(i)], sph, mc.MeshPhongMaterial(color = mc.RGBA(0.0,0.0,1.0,0.4)))\n", 380 | " end\n", 381 | " anim = mc.Animation(floor(Int,1/dt))\n", 382 | " for k = 1:length(X)\n", 383 | " mc.atframe(anim, k) do\n", 384 | " r = X[k][1:3]\n", 385 | " mc.settransform!(vis[:robot], mc.Translation(r))\n", 386 | " end\n", 387 | " end\n", 388 | " mc.setanimation!(vis, anim)\n", 389 | "\n", 390 | " display(mc.render(vis))\n", 391 | "end" 392 | ] 393 | } 394 | ], 395 | "metadata": { 396 | "kernelspec": { 397 | "display_name": "Julia 1.6.7", 398 | "language": "julia", 399 | "name": "julia-1.6" 400 | }, 401 | "language_info": { 402 | "file_extension": ".jl", 403 | "mimetype": "application/julia", 404 | "name": "julia", 405 | "version": "1.6.7" 406 | } 407 | }, 408 | "nbformat": 4, 409 | "nbformat_minor": 5 410 | } 411 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Recitations 2 | 3 | Video Links: 4 | 5 | 1. [1/20 recitation (linear systems, derivatives, Taylor series)](https://youtu.be/EjAiRam95U4) 6 | 2. [1/27 recitation (Newton's method, constrained optimization)](https://youtu.be/7Z1p-cj36_U) 7 | 3. [2/2 recitation (KKT Conditions, Augmented Lagrangian)](https://youtu.be/qGoGGSpg9Fs) 8 | 4. [2/10 recitation (LQR pt. 1)](https://youtu.be/Sv5dmh6Gjn0) 9 | 5. [2/17 recitation (HW1 review, Convex.jl tutorial)](https://youtu.be/934sed8G_tA) 10 | 6. [2/24 recitation (MPC, HW2)](https://youtu.be/oB2haX6KW10) 11 | 7. [3/2 recitation (Rotation Matrices, Quaternions, Planning with Attitude)](https://youtu.be/hw17MjP0LLo) 12 | 8. [3/17 recitation (LQR, Discretization, Linearization)](https://youtu.be/O2dpemKCLWU) 13 | 9. [2/24 recitation (DIRCOL, iLQR, HW3)](https://youtu.be/yGD4SsiRafE) 14 | 10. [3/31 recitation (Collision Avoidance, DCOL)](https://youtu.be/QLc0vrAigac) 15 | -------------------------------------------------------------------------------- /meshcat_tutorial/Manifest.toml: -------------------------------------------------------------------------------- 1 | # This file is machine-generated - editing it directly is not advised 2 | 3 | [[Adapt]] 4 | deps = ["LinearAlgebra", "Requires"] 5 | git-tree-sha1 = "cc37d689f599e8df4f464b2fa3870ff7db7492ef" 6 | uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" 7 | version = "3.6.1" 8 | 9 | [[ArgTools]] 10 | uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" 11 | 12 | [[Artifacts]] 13 | uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" 14 | 15 | [[AssetRegistry]] 16 | deps = ["Distributed", "JSON", "Pidfile", "SHA", "Test"] 17 | git-tree-sha1 = "b25e88db7944f98789130d7b503276bc34bc098e" 18 | uuid = "bf4720bc-e11a-5d0c-854e-bdca1663c893" 19 | version = "0.1.0" 20 | 21 | [[Base64]] 22 | uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" 23 | 24 | [[BenchmarkTools]] 25 | deps = ["JSON", "Logging", "Printf", "Profile", "Statistics", "UUIDs"] 26 | git-tree-sha1 = "d9a9701b899b30332bbcb3e1679c41cce81fb0e8" 27 | uuid = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf" 28 | version = "1.3.2" 29 | 30 | [[BinDeps]] 31 | deps = ["Libdl", "Pkg", "SHA", "URIParser", "Unicode"] 32 | git-tree-sha1 = "1289b57e8cf019aede076edab0587eb9644175bd" 33 | uuid = "9e28174c-4ba2-5203-b857-d8d62c4213ee" 34 | version = "1.0.2" 35 | 36 | [[Blink]] 37 | deps = ["Base64", "BinDeps", "Distributed", "JSExpr", "JSON", "Lazy", "Logging", "MacroTools", "Mustache", "Mux", "Reexport", "Sockets", "WebIO", "WebSockets"] 38 | git-tree-sha1 = "08d0b679fd7caa49e2bca9214b131289e19808c0" 39 | uuid = "ad839575-38b3-5650-b840-f874b8c74a25" 40 | version = "0.12.5" 41 | 42 | [[Bzip2_jll]] 43 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 44 | git-tree-sha1 = "19a35467a82e236ff51bc17a3a44b69ef35185a2" 45 | uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0" 46 | version = "1.0.8+0" 47 | 48 | [[Cairo_jll]] 49 | deps = ["Artifacts", "Bzip2_jll", "CompilerSupportLibraries_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "LZO_jll", "Libdl", "Pixman_jll", "Pkg", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"] 50 | git-tree-sha1 = "4b859a208b2397a7a623a03449e4636bdb17bcf2" 51 | uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a" 52 | version = "1.16.1+1" 53 | 54 | [[Cassette]] 55 | git-tree-sha1 = "a70f220ea09ec61401745ff338f8fb340420165c" 56 | uuid = "7057c7e9-c182-5462-911a-8362d720325c" 57 | version = "0.3.11" 58 | 59 | [[ChainRulesCore]] 60 | deps = ["Compat", "LinearAlgebra", "SparseArrays"] 61 | git-tree-sha1 = "c6d890a52d2c4d55d326439580c3b8d0875a77d9" 62 | uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" 63 | version = "1.15.7" 64 | 65 | [[ChangesOfVariables]] 66 | deps = ["ChainRulesCore", "LinearAlgebra", "Test"] 67 | git-tree-sha1 = "485193efd2176b88e6622a39a246f8c5b600e74e" 68 | uuid = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0" 69 | version = "0.1.6" 70 | 71 | [[CodecBzip2]] 72 | deps = ["Bzip2_jll", "Libdl", "TranscodingStreams"] 73 | git-tree-sha1 = "2e62a725210ce3c3c2e1a3080190e7ca491f18d7" 74 | uuid = "523fee87-0ab8-5b00-afb7-3ecf72e48cfd" 75 | version = "0.7.2" 76 | 77 | [[CodecZlib]] 78 | deps = ["TranscodingStreams", "Zlib_jll"] 79 | git-tree-sha1 = "9c209fb7536406834aa938fb149964b985de6c83" 80 | uuid = "944b1d66-785c-5afd-91f1-9de20f533193" 81 | version = "0.7.1" 82 | 83 | [[ColorTypes]] 84 | deps = ["FixedPointNumbers", "Random"] 85 | git-tree-sha1 = "eb7f0f8307f71fac7c606984ea5fb2817275d6e4" 86 | uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" 87 | version = "0.11.4" 88 | 89 | [[Colors]] 90 | deps = ["ColorTypes", "FixedPointNumbers", "Reexport"] 91 | git-tree-sha1 = "fc08e5930ee9a4e03f84bfb5211cb54e7769758a" 92 | uuid = "5ae59095-9a9b-59fe-a467-6f913c188581" 93 | version = "0.12.10" 94 | 95 | [[CommonSubexpressions]] 96 | deps = ["MacroTools", "Test"] 97 | git-tree-sha1 = "7b8a93dba8af7e3b42fecabf646260105ac373f7" 98 | uuid = "bbf7d656-a473-5ed7-a52c-81e309532950" 99 | version = "0.3.0" 100 | 101 | [[Compat]] 102 | deps = ["Dates", "LinearAlgebra", "UUIDs"] 103 | git-tree-sha1 = "7a60c856b9fa189eb34f5f8a6f6b5529b7942957" 104 | uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" 105 | version = "4.6.1" 106 | 107 | [[CompilerSupportLibraries_jll]] 108 | deps = ["Artifacts", "Libdl"] 109 | uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" 110 | 111 | [[CoordinateTransformations]] 112 | deps = ["LinearAlgebra", "StaticArrays"] 113 | git-tree-sha1 = "681ea870b918e7cff7111da58791d7f718067a19" 114 | uuid = "150eb455-5306-5404-9cee-2592286d6298" 115 | version = "0.6.2" 116 | 117 | [[DataAPI]] 118 | git-tree-sha1 = "e8119c1a33d267e16108be441a287a6981ba1630" 119 | uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" 120 | version = "1.14.0" 121 | 122 | [[DataStructures]] 123 | deps = ["Compat", "InteractiveUtils", "OrderedCollections"] 124 | git-tree-sha1 = "d1fff3a548102f48987a52a2e0d114fa97d730f0" 125 | uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" 126 | version = "0.18.13" 127 | 128 | [[DataValueInterfaces]] 129 | git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" 130 | uuid = "e2d170a0-9d28-54be-80f0-106bbe20a464" 131 | version = "1.0.0" 132 | 133 | [[Dates]] 134 | deps = ["Printf"] 135 | uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" 136 | 137 | [[DiffResults]] 138 | deps = ["StaticArraysCore"] 139 | git-tree-sha1 = "782dd5f4561f5d267313f23853baaaa4c52ea621" 140 | uuid = "163ba53b-c6d8-5494-b064-1a9d43ac40c5" 141 | version = "1.1.0" 142 | 143 | [[DiffRules]] 144 | deps = ["IrrationalConstants", "LogExpFunctions", "NaNMath", "Random", "SpecialFunctions"] 145 | git-tree-sha1 = "a4ad7ef19d2cdc2eff57abbbe68032b1cd0bd8f8" 146 | uuid = "b552c78f-8df3-52c6-915a-8e097449b14b" 147 | version = "1.13.0" 148 | 149 | [[DifferentiableCollisions]] 150 | deps = ["ForwardDiff", "LinearAlgebra", "MeshCat", "Polyhedra", "Printf", "StaticArrays"] 151 | git-tree-sha1 = "0c9d30d98fc5946251c824a9b0ba7699f6ec4047" 152 | uuid = "64b45163-ce2a-43f6-8f64-55d720633796" 153 | version = "0.1.4" 154 | 155 | [[Distributed]] 156 | deps = ["Random", "Serialization", "Sockets"] 157 | uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" 158 | 159 | [[DocStringExtensions]] 160 | deps = ["LibGit2"] 161 | git-tree-sha1 = "b19534d1895d702889b219c382a6e18010797f0b" 162 | uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" 163 | version = "0.8.6" 164 | 165 | [[Downloads]] 166 | deps = ["ArgTools", "LibCURL", "NetworkOptions"] 167 | uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" 168 | 169 | [[EarCut_jll]] 170 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 171 | git-tree-sha1 = "e3290f2d49e661fbd94046d7e3726ffcb2d41053" 172 | uuid = "5ae413db-bbd1-5e63-b57d-d24a61df00f5" 173 | version = "2.2.4+0" 174 | 175 | [[Expat_jll]] 176 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 177 | git-tree-sha1 = "bad72f730e9e91c08d9427d5e8db95478a3c323d" 178 | uuid = "2e619515-83b5-522b-bb60-26c02a35a201" 179 | version = "2.4.8+0" 180 | 181 | [[Extents]] 182 | git-tree-sha1 = "5e1e4c53fa39afe63a7d356e30452249365fba99" 183 | uuid = "411431e0-e8b7-467b-b5e0-f676ba4f2910" 184 | version = "0.1.1" 185 | 186 | [[FFMPEG]] 187 | deps = ["FFMPEG_jll"] 188 | git-tree-sha1 = "b57e3acbe22f8484b4b5ff66a7499717fe1a9cc8" 189 | uuid = "c87230d0-a227-11e9-1b43-d7ebe4e7570a" 190 | version = "0.4.1" 191 | 192 | [[FFMPEG_jll]] 193 | deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "JLLWrappers", "LAME_jll", "Libdl", "Ogg_jll", "OpenSSL_jll", "Opus_jll", "PCRE2_jll", "Pkg", "Zlib_jll", "libaom_jll", "libass_jll", "libfdk_aac_jll", "libvorbis_jll", "x264_jll", "x265_jll"] 194 | git-tree-sha1 = "74faea50c1d007c85837327f6775bea60b5492dd" 195 | uuid = "b22a6f82-2f65-5046-a5b2-351ab43fb4e5" 196 | version = "4.4.2+2" 197 | 198 | [[FileWatching]] 199 | uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" 200 | 201 | [[FixedPointNumbers]] 202 | deps = ["Statistics"] 203 | git-tree-sha1 = "335bfdceacc84c5cdf16aadc768aa5ddfc5383cc" 204 | uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" 205 | version = "0.8.4" 206 | 207 | [[Fontconfig_jll]] 208 | deps = ["Artifacts", "Bzip2_jll", "Expat_jll", "FreeType2_jll", "JLLWrappers", "Libdl", "Libuuid_jll", "Pkg", "Zlib_jll"] 209 | git-tree-sha1 = "21efd19106a55620a188615da6d3d06cd7f6ee03" 210 | uuid = "a3f928ae-7b40-5064-980b-68af3947d34b" 211 | version = "2.13.93+0" 212 | 213 | [[ForwardDiff]] 214 | deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions", "StaticArrays"] 215 | git-tree-sha1 = "00e252f4d706b3d55a8863432e742bf5717b498d" 216 | uuid = "f6369f11-7733-5829-9624-2563aa707210" 217 | version = "0.10.35" 218 | 219 | [[FreeType2_jll]] 220 | deps = ["Artifacts", "Bzip2_jll", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] 221 | git-tree-sha1 = "87eb71354d8ec1a96d4a7636bd57a7347dde3ef9" 222 | uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7" 223 | version = "2.10.4+0" 224 | 225 | [[FriBidi_jll]] 226 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 227 | git-tree-sha1 = "aa31987c2ba8704e23c6c8ba8a4f769d5d7e4f91" 228 | uuid = "559328eb-81f9-559d-9380-de523a88c83c" 229 | version = "1.0.10+0" 230 | 231 | [[FunctionalCollections]] 232 | deps = ["Test"] 233 | git-tree-sha1 = "04cb9cfaa6ba5311973994fe3496ddec19b6292a" 234 | uuid = "de31a74c-ac4f-5751-b3fd-e18cd04993ca" 235 | version = "0.5.0" 236 | 237 | [[GPUArraysCore]] 238 | deps = ["Adapt"] 239 | git-tree-sha1 = "1cd7f0af1aa58abc02ea1d872953a97359cb87fa" 240 | uuid = "46192b85-c4d5-4398-a991-12ede77f4527" 241 | version = "0.1.4" 242 | 243 | [[GenericLinearAlgebra]] 244 | deps = ["LinearAlgebra", "Printf", "Random", "libblastrampoline_jll"] 245 | git-tree-sha1 = "e8ec3260d28f3493a29cceeea572b629e87c6701" 246 | uuid = "14197337-ba66-59df-a3e3-ca00e7dcff7a" 247 | version = "0.3.9" 248 | 249 | [[GeoInterface]] 250 | deps = ["Extents"] 251 | git-tree-sha1 = "0eb6de0b312688f852f347171aba888658e29f20" 252 | uuid = "cf35fbd7-0cd7-5166-be24-54bfbe79505f" 253 | version = "1.3.0" 254 | 255 | [[GeometryBasics]] 256 | deps = ["EarCut_jll", "GeoInterface", "IterTools", "LinearAlgebra", "StaticArrays", "StructArrays", "Tables"] 257 | git-tree-sha1 = "303202358e38d2b01ba46844b92e48a3c238fd9e" 258 | uuid = "5c1252a2-5f33-56bf-86c9-59e7332b4326" 259 | version = "0.4.6" 260 | 261 | [[Gettext_jll]] 262 | deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "XML2_jll"] 263 | git-tree-sha1 = "9b02998aba7bf074d14de89f9d37ca24a1a0b046" 264 | uuid = "78b55507-aeef-58d4-861c-77aaff3498b1" 265 | version = "0.21.0+0" 266 | 267 | [[Glib_jll]] 268 | deps = ["Artifacts", "Gettext_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE2_jll", "Pkg", "Zlib_jll"] 269 | git-tree-sha1 = "d3b3624125c1474292d0d8ed0f65554ac37ddb23" 270 | uuid = "7746bdde-850d-59dc-9ae8-88ece973131d" 271 | version = "2.74.0+2" 272 | 273 | [[Graphite2_jll]] 274 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 275 | git-tree-sha1 = "344bf40dcab1073aca04aa0df4fb092f920e4011" 276 | uuid = "3b182d85-2403-5c21-9c21-1e1f0cc25472" 277 | version = "1.3.14+0" 278 | 279 | [[HTTP]] 280 | deps = ["Base64", "Dates", "IniFile", "Logging", "MbedTLS", "NetworkOptions", "Sockets", "URIs"] 281 | git-tree-sha1 = "0fa77022fe4b511826b39c894c90daf5fce3334a" 282 | uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3" 283 | version = "0.9.17" 284 | 285 | [[HarfBuzz_jll]] 286 | deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "Graphite2_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg"] 287 | git-tree-sha1 = "129acf094d168394e80ee1dc4bc06ec835e510a3" 288 | uuid = "2e76f6c2-a576-52d4-95c1-20adfe4de566" 289 | version = "2.8.1+1" 290 | 291 | [[Hiccup]] 292 | deps = ["MacroTools", "Test"] 293 | git-tree-sha1 = "6187bb2d5fcbb2007c39e7ac53308b0d371124bd" 294 | uuid = "9fb69e20-1954-56bb-a84f-559cc56a8ff7" 295 | version = "0.2.2" 296 | 297 | [[IniFile]] 298 | git-tree-sha1 = "f550e6e32074c939295eb5ea6de31849ac2c9625" 299 | uuid = "83e8ac13-25f8-5344-8a64-a9f2b223428f" 300 | version = "0.5.1" 301 | 302 | [[InteractiveUtils]] 303 | deps = ["Markdown"] 304 | uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" 305 | 306 | [[InverseFunctions]] 307 | deps = ["Test"] 308 | git-tree-sha1 = "49510dfcb407e572524ba94aeae2fced1f3feb0f" 309 | uuid = "3587e190-3f89-42d0-90ee-14403ec27112" 310 | version = "0.1.8" 311 | 312 | [[IrrationalConstants]] 313 | git-tree-sha1 = "630b497eafcc20001bba38a4651b327dcfc491d2" 314 | uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" 315 | version = "0.2.2" 316 | 317 | [[IterTools]] 318 | git-tree-sha1 = "fa6287a4469f5e048d763df38279ee729fbd44e5" 319 | uuid = "c8e1da08-722c-5040-9ed9-7db0dc04731e" 320 | version = "1.4.0" 321 | 322 | [[IteratorInterfaceExtensions]] 323 | git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856" 324 | uuid = "82899510-4779-5014-852e-03e436cf321d" 325 | version = "1.0.0" 326 | 327 | [[JLLWrappers]] 328 | deps = ["Preferences"] 329 | git-tree-sha1 = "abc9885a7ca2052a736a600f7fa66209f96506e1" 330 | uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" 331 | version = "1.4.1" 332 | 333 | [[JSExpr]] 334 | deps = ["JSON", "MacroTools", "Observables", "WebIO"] 335 | git-tree-sha1 = "b413a73785b98474d8af24fd4c8a975e31df3658" 336 | uuid = "97c1335a-c9c5-57fe-bc5d-ec35cebe8660" 337 | version = "0.5.4" 338 | 339 | [[JSON]] 340 | deps = ["Dates", "Mmap", "Parsers", "Unicode"] 341 | git-tree-sha1 = "31e996f0a15c7b280ba9f76636b3ff9e2ae58c9a" 342 | uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" 343 | version = "0.21.4" 344 | 345 | [[JuMP]] 346 | deps = ["LinearAlgebra", "MathOptInterface", "MutableArithmetics", "OrderedCollections", "Printf", "SnoopPrecompile", "SparseArrays"] 347 | git-tree-sha1 = "4ec0e68fecbbe1b78db2ddf1ac573963ed5adebc" 348 | uuid = "4076af6c-e467-56ae-b986-b466b2749572" 349 | version = "1.10.0" 350 | 351 | [[LAME_jll]] 352 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 353 | git-tree-sha1 = "f6250b16881adf048549549fba48b1161acdac8c" 354 | uuid = "c1c5ebd0-6772-5130-a774-d5fcae4a789d" 355 | version = "3.100.1+0" 356 | 357 | [[LZO_jll]] 358 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 359 | git-tree-sha1 = "e5b909bcf985c5e2605737d2ce278ed791b89be6" 360 | uuid = "dd4b983a-f0e5-5f8d-a1b7-129d4a5fb1ac" 361 | version = "2.10.1+0" 362 | 363 | [[Lazy]] 364 | deps = ["MacroTools"] 365 | git-tree-sha1 = "1370f8202dac30758f3c345f9909b97f53d87d3f" 366 | uuid = "50d2b5c4-7a5e-59d5-8109-a42b560f39c0" 367 | version = "0.15.1" 368 | 369 | [[LibCURL]] 370 | deps = ["LibCURL_jll", "MozillaCACerts_jll"] 371 | uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21" 372 | 373 | [[LibCURL_jll]] 374 | deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"] 375 | uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" 376 | 377 | [[LibGit2]] 378 | deps = ["Base64", "NetworkOptions", "Printf", "SHA"] 379 | uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" 380 | 381 | [[LibSSH2_jll]] 382 | deps = ["Artifacts", "Libdl", "MbedTLS_jll"] 383 | uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" 384 | 385 | [[Libdl]] 386 | uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" 387 | 388 | [[Libffi_jll]] 389 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 390 | git-tree-sha1 = "0b4a5d71f3e5200a7dff793393e09dfc2d874290" 391 | uuid = "e9f186c6-92d2-5b65-8a66-fee21dc1b490" 392 | version = "3.2.2+1" 393 | 394 | [[Libgcrypt_jll]] 395 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgpg_error_jll", "Pkg"] 396 | git-tree-sha1 = "64613c82a59c120435c067c2b809fc61cf5166ae" 397 | uuid = "d4300ac3-e22c-5743-9152-c294e39db1e4" 398 | version = "1.8.7+0" 399 | 400 | [[Libgpg_error_jll]] 401 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 402 | git-tree-sha1 = "c333716e46366857753e273ce6a69ee0945a6db9" 403 | uuid = "7add5ba3-2f88-524e-9cd5-f83b8a55f7b8" 404 | version = "1.42.0+0" 405 | 406 | [[Libiconv_jll]] 407 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 408 | git-tree-sha1 = "c7cb1f5d892775ba13767a87c7ada0b980ea0a71" 409 | uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531" 410 | version = "1.16.1+2" 411 | 412 | [[Libmount_jll]] 413 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 414 | git-tree-sha1 = "9c30530bf0effd46e15e0fdcf2b8636e78cbbd73" 415 | uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9" 416 | version = "2.35.0+0" 417 | 418 | [[Libuuid_jll]] 419 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 420 | git-tree-sha1 = "7f3efec06033682db852f8b3bc3c1d2b0a0ab066" 421 | uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700" 422 | version = "2.36.0+0" 423 | 424 | [[LinearAlgebra]] 425 | deps = ["Libdl"] 426 | uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" 427 | 428 | [[LogExpFunctions]] 429 | deps = ["ChainRulesCore", "ChangesOfVariables", "DocStringExtensions", "InverseFunctions", "IrrationalConstants", "LinearAlgebra"] 430 | git-tree-sha1 = "0a1b7c2863e44523180fdb3146534e265a91870b" 431 | uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" 432 | version = "0.3.23" 433 | 434 | [[Logging]] 435 | uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" 436 | 437 | [[MacroTools]] 438 | deps = ["Markdown", "Random"] 439 | git-tree-sha1 = "42324d08725e200c23d4dfb549e0d5d89dede2d2" 440 | uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" 441 | version = "0.5.10" 442 | 443 | [[Markdown]] 444 | deps = ["Base64"] 445 | uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" 446 | 447 | [[MathOptInterface]] 448 | deps = ["BenchmarkTools", "CodecBzip2", "CodecZlib", "DataStructures", "ForwardDiff", "JSON", "LinearAlgebra", "MutableArithmetics", "NaNMath", "OrderedCollections", "Printf", "SnoopPrecompile", "SparseArrays", "SpecialFunctions", "Test", "Unicode"] 449 | git-tree-sha1 = "3b38f6fbd62cbd61d8dbf625136d7b75478bf2c5" 450 | uuid = "b8f27783-ece8-5eb3-8dc8-9495eed66fee" 451 | version = "1.15.0" 452 | 453 | [[MbedTLS]] 454 | deps = ["Dates", "MbedTLS_jll", "MozillaCACerts_jll", "Random", "Sockets"] 455 | git-tree-sha1 = "03a9b9718f5682ecb107ac9f7308991db4ce395b" 456 | uuid = "739be429-bea8-5141-9913-cc70e7f3736d" 457 | version = "1.1.7" 458 | 459 | [[MbedTLS_jll]] 460 | deps = ["Artifacts", "Libdl"] 461 | uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" 462 | 463 | [[MeshCat]] 464 | deps = ["Base64", "BinDeps", "Blink", "Cassette", "Colors", "CoordinateTransformations", "DocStringExtensions", "FFMPEG", "GeometryBasics", "LinearAlgebra", "Logging", "MsgPack", "Mux", "Parameters", "Pkg", "Requires", "Rotations", "Sockets", "StaticArrays", "UUIDs", "WebSockets"] 465 | git-tree-sha1 = "bd707ee5273b7778554b0b22b3071cf97f71e1f4" 466 | uuid = "283c5d60-a78f-5afe-a0af-af636b173e11" 467 | version = "0.14.2" 468 | 469 | [[Mmap]] 470 | uuid = "a63ad114-7e13-5084-954f-fe012c677804" 471 | 472 | [[MozillaCACerts_jll]] 473 | uuid = "14a3606d-f60d-562e-9121-12d972cd8159" 474 | 475 | [[MsgPack]] 476 | deps = ["Serialization"] 477 | git-tree-sha1 = "fc8c15ca848b902015bd4a745d350f02cf791c2a" 478 | uuid = "99f44e22-a591-53d1-9472-aa23ef4bd671" 479 | version = "1.2.0" 480 | 481 | [[Mustache]] 482 | deps = ["Printf", "Tables"] 483 | git-tree-sha1 = "87c371d27dbf2449a5685652ab322be163269df0" 484 | uuid = "ffc61752-8dc7-55ee-8c37-f3e9cdd09e70" 485 | version = "1.0.15" 486 | 487 | [[MutableArithmetics]] 488 | deps = ["LinearAlgebra", "SparseArrays", "Test"] 489 | git-tree-sha1 = "3295d296288ab1a0a2528feb424b854418acff57" 490 | uuid = "d8a4904e-b15c-11e9-3269-09a3773c0cb0" 491 | version = "1.2.3" 492 | 493 | [[Mux]] 494 | deps = ["AssetRegistry", "Base64", "HTTP", "Hiccup", "Pkg", "Sockets", "WebSockets"] 495 | git-tree-sha1 = "82dfb2cead9895e10ee1b0ca37a01088456c4364" 496 | uuid = "a975b10e-0019-58db-a62f-e48ff68538c9" 497 | version = "0.7.6" 498 | 499 | [[NaNMath]] 500 | deps = ["OpenLibm_jll"] 501 | git-tree-sha1 = "0877504529a3e5c3343c6f8b4c0381e57e4387e4" 502 | uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" 503 | version = "1.0.2" 504 | 505 | [[NetworkOptions]] 506 | uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" 507 | 508 | [[Observables]] 509 | git-tree-sha1 = "6862738f9796b3edc1c09d0890afce4eca9e7e93" 510 | uuid = "510215fc-4207-5dde-b226-833fc4488ee2" 511 | version = "0.5.4" 512 | 513 | [[Ogg_jll]] 514 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 515 | git-tree-sha1 = "887579a3eb005446d514ab7aeac5d1d027658b8f" 516 | uuid = "e7412a2a-1a6e-54c0-be00-318e2571c051" 517 | version = "1.3.5+1" 518 | 519 | [[OpenLibm_jll]] 520 | deps = ["Artifacts", "Libdl"] 521 | uuid = "05823500-19ac-5b8b-9628-191a04bc5112" 522 | 523 | [[OpenSSL_jll]] 524 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 525 | git-tree-sha1 = "9ff31d101d987eb9d66bd8b176ac7c277beccd09" 526 | uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" 527 | version = "1.1.20+0" 528 | 529 | [[OpenSpecFun_jll]] 530 | deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] 531 | git-tree-sha1 = "13652491f6856acfd2db29360e1bbcd4565d04f1" 532 | uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" 533 | version = "0.5.5+0" 534 | 535 | [[Opus_jll]] 536 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 537 | git-tree-sha1 = "51a08fb14ec28da2ec7a927c4337e4332c2a4720" 538 | uuid = "91d4177d-7536-5919-b921-800302f37372" 539 | version = "1.3.2+0" 540 | 541 | [[OrderedCollections]] 542 | git-tree-sha1 = "d321bf2de576bf25ec4d3e4360faca399afca282" 543 | uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" 544 | version = "1.6.0" 545 | 546 | [[PCRE2_jll]] 547 | deps = ["Artifacts", "Libdl"] 548 | uuid = "efcefdf7-47ab-520b-bdef-62a2eaa19f15" 549 | 550 | [[Parameters]] 551 | deps = ["OrderedCollections", "UnPack"] 552 | git-tree-sha1 = "34c0e9ad262e5f7fc75b10a9952ca7692cfc5fbe" 553 | uuid = "d96e819e-fc66-5662-9728-84c9c7592b0a" 554 | version = "0.12.3" 555 | 556 | [[Parsers]] 557 | deps = ["Dates", "SnoopPrecompile"] 558 | git-tree-sha1 = "478ac6c952fddd4399e71d4779797c538d0ff2bf" 559 | uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" 560 | version = "2.5.8" 561 | 562 | [[Pidfile]] 563 | deps = ["FileWatching", "Test"] 564 | git-tree-sha1 = "2d8aaf8ee10df53d0dfb9b8ee44ae7c04ced2b03" 565 | uuid = "fa939f87-e72e-5be4-a000-7fc836dbe307" 566 | version = "1.3.0" 567 | 568 | [[Pixman_jll]] 569 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 570 | git-tree-sha1 = "b4f5d02549a10e20780a24fce72bea96b6329e29" 571 | uuid = "30392449-352a-5448-841d-b1acce4e97dc" 572 | version = "0.40.1+0" 573 | 574 | [[Pkg]] 575 | deps = ["Artifacts", "Dates", "Downloads", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"] 576 | uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" 577 | 578 | [[Polyhedra]] 579 | deps = ["GenericLinearAlgebra", "GeometryBasics", "JuMP", "LinearAlgebra", "MutableArithmetics", "RecipesBase", "SparseArrays", "StaticArrays"] 580 | git-tree-sha1 = "e7b1e266cc9f3cb046d6c8d2c3aefc418a53428d" 581 | uuid = "67491407-f73d-577b-9b50-8179a7c68029" 582 | version = "0.7.6" 583 | 584 | [[Preferences]] 585 | deps = ["TOML"] 586 | git-tree-sha1 = "47e5f437cc0e7ef2ce8406ce1e7e24d44915f88d" 587 | uuid = "21216c6a-2e73-6563-6e65-726566657250" 588 | version = "1.3.0" 589 | 590 | [[Printf]] 591 | deps = ["Unicode"] 592 | uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" 593 | 594 | [[Profile]] 595 | deps = ["Printf"] 596 | uuid = "9abbd945-dff8-562f-b5e8-e1ebf5ef1b79" 597 | 598 | [[Quaternions]] 599 | deps = ["LinearAlgebra", "Random", "RealDot"] 600 | git-tree-sha1 = "da095158bdc8eaccb7890f9884048555ab771019" 601 | uuid = "94ee1d12-ae83-5a48-8b1c-48b8ff168ae0" 602 | version = "0.7.4" 603 | 604 | [[REPL]] 605 | deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"] 606 | uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" 607 | 608 | [[Random]] 609 | deps = ["Serialization"] 610 | uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" 611 | 612 | [[RealDot]] 613 | deps = ["LinearAlgebra"] 614 | git-tree-sha1 = "9f0a1b71baaf7650f4fa8a1d168c7fb6ee41f0c9" 615 | uuid = "c1ae055f-0cd5-4b69-90a6-9a35b1a98df9" 616 | version = "0.1.0" 617 | 618 | [[RecipesBase]] 619 | deps = ["SnoopPrecompile"] 620 | git-tree-sha1 = "261dddd3b862bd2c940cf6ca4d1c8fe593e457c8" 621 | uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" 622 | version = "1.3.3" 623 | 624 | [[Reexport]] 625 | git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" 626 | uuid = "189a3867-3050-52da-a836-e630ba90ab69" 627 | version = "1.2.2" 628 | 629 | [[Requires]] 630 | deps = ["UUIDs"] 631 | git-tree-sha1 = "838a3a4188e2ded87a4f9f184b4b0d78a1e91cb7" 632 | uuid = "ae029012-a4dd-5104-9daa-d747884805df" 633 | version = "1.3.0" 634 | 635 | [[Rotations]] 636 | deps = ["LinearAlgebra", "Quaternions", "Random", "StaticArrays", "Statistics"] 637 | git-tree-sha1 = "72a6abdcd088764878b473102df7c09bbc0548de" 638 | uuid = "6038ab10-8711-5258-84ad-4b1120ba62dc" 639 | version = "1.4.0" 640 | 641 | [[SHA]] 642 | uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" 643 | 644 | [[Serialization]] 645 | uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" 646 | 647 | [[SnoopPrecompile]] 648 | deps = ["Preferences"] 649 | git-tree-sha1 = "e760a70afdcd461cf01a575947738d359234665c" 650 | uuid = "66db9d55-30c0-4569-8b51-7e840670fc0c" 651 | version = "1.0.3" 652 | 653 | [[Sockets]] 654 | uuid = "6462fe0b-24de-5631-8697-dd941f90decc" 655 | 656 | [[SparseArrays]] 657 | deps = ["LinearAlgebra", "Random"] 658 | uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" 659 | 660 | [[SpecialFunctions]] 661 | deps = ["ChainRulesCore", "IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] 662 | git-tree-sha1 = "ef28127915f4229c971eb43f3fc075dd3fe91880" 663 | uuid = "276daf66-3868-5448-9aa4-cd146d93841b" 664 | version = "2.2.0" 665 | 666 | [[StaticArrays]] 667 | deps = ["LinearAlgebra", "Random", "StaticArraysCore", "Statistics"] 668 | git-tree-sha1 = "63e84b7fdf5021026d0f17f76af7c57772313d99" 669 | uuid = "90137ffa-7385-5640-81b9-e52037218182" 670 | version = "1.5.21" 671 | 672 | [[StaticArraysCore]] 673 | git-tree-sha1 = "6b7ba252635a5eff6a0b0664a41ee140a1c9e72a" 674 | uuid = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" 675 | version = "1.4.0" 676 | 677 | [[Statistics]] 678 | deps = ["LinearAlgebra", "SparseArrays"] 679 | uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" 680 | 681 | [[StructArrays]] 682 | deps = ["Adapt", "DataAPI", "GPUArraysCore", "StaticArraysCore", "Tables"] 683 | git-tree-sha1 = "521a0e828e98bb69042fec1809c1b5a680eb7389" 684 | uuid = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" 685 | version = "0.6.15" 686 | 687 | [[TOML]] 688 | deps = ["Dates"] 689 | uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" 690 | 691 | [[TableTraits]] 692 | deps = ["IteratorInterfaceExtensions"] 693 | git-tree-sha1 = "c06b2f539df1c6efa794486abfb6ed2022561a39" 694 | uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c" 695 | version = "1.0.1" 696 | 697 | [[Tables]] 698 | deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "LinearAlgebra", "OrderedCollections", "TableTraits", "Test"] 699 | git-tree-sha1 = "1544b926975372da01227b382066ab70e574a3ec" 700 | uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" 701 | version = "1.10.1" 702 | 703 | [[Tar]] 704 | deps = ["ArgTools", "SHA"] 705 | uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" 706 | 707 | [[Test]] 708 | deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] 709 | uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" 710 | 711 | [[TranscodingStreams]] 712 | deps = ["Random", "Test"] 713 | git-tree-sha1 = "0b829474fed270a4b0ab07117dce9b9a2fa7581a" 714 | uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" 715 | version = "0.9.12" 716 | 717 | [[URIParser]] 718 | deps = ["Unicode"] 719 | git-tree-sha1 = "53a9f49546b8d2dd2e688d216421d050c9a31d0d" 720 | uuid = "30578b45-9adc-5946-b283-645ec420af67" 721 | version = "0.4.1" 722 | 723 | [[URIs]] 724 | git-tree-sha1 = "074f993b0ca030848b897beff716d93aca60f06a" 725 | uuid = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4" 726 | version = "1.4.2" 727 | 728 | [[UUIDs]] 729 | deps = ["Random", "SHA"] 730 | uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" 731 | 732 | [[UnPack]] 733 | git-tree-sha1 = "387c1f73762231e86e0c9c5443ce3b4a0a9a0c2b" 734 | uuid = "3a884ed6-31ef-47d7-9d2a-63182c4928ed" 735 | version = "1.0.2" 736 | 737 | [[Unicode]] 738 | uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" 739 | 740 | [[WebIO]] 741 | deps = ["AssetRegistry", "Base64", "Distributed", "FunctionalCollections", "JSON", "Logging", "Observables", "Pkg", "Random", "Requires", "Sockets", "UUIDs", "WebSockets", "Widgets"] 742 | git-tree-sha1 = "976d0738247f155d0dcd77607edea644f069e1e9" 743 | uuid = "0f1e0344-ec1d-5b48-a673-e5cf874b6c29" 744 | version = "0.8.20" 745 | 746 | [[WebSockets]] 747 | deps = ["Base64", "Dates", "HTTP", "Logging", "Sockets"] 748 | git-tree-sha1 = "f91a602e25fe6b89afc93cf02a4ae18ee9384ce3" 749 | uuid = "104b5d7c-a370-577a-8038-80a2059c5097" 750 | version = "1.5.9" 751 | 752 | [[Widgets]] 753 | deps = ["Colors", "Dates", "Observables", "OrderedCollections"] 754 | git-tree-sha1 = "fcdae142c1cfc7d89de2d11e08721d0f2f86c98a" 755 | uuid = "cc8bc4a8-27d6-5769-a93b-9d913e69aa62" 756 | version = "0.6.6" 757 | 758 | [[XML2_jll]] 759 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "Zlib_jll"] 760 | git-tree-sha1 = "93c41695bc1c08c46c5899f4fe06d6ead504bb73" 761 | uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" 762 | version = "2.10.3+0" 763 | 764 | [[XSLT_jll]] 765 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgcrypt_jll", "Libgpg_error_jll", "Libiconv_jll", "Pkg", "XML2_jll", "Zlib_jll"] 766 | git-tree-sha1 = "91844873c4085240b95e795f692c4cec4d805f8a" 767 | uuid = "aed1982a-8fda-507f-9586-7b0439959a61" 768 | version = "1.1.34+0" 769 | 770 | [[Xorg_libX11_jll]] 771 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libxcb_jll", "Xorg_xtrans_jll"] 772 | git-tree-sha1 = "5be649d550f3f4b95308bf0183b82e2582876527" 773 | uuid = "4f6342f7-b3d2-589e-9d20-edeb45f2b2bc" 774 | version = "1.6.9+4" 775 | 776 | [[Xorg_libXau_jll]] 777 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 778 | git-tree-sha1 = "4e490d5c960c314f33885790ed410ff3a94ce67e" 779 | uuid = "0c0b7dd1-d40b-584c-a123-a41640f87eec" 780 | version = "1.0.9+4" 781 | 782 | [[Xorg_libXdmcp_jll]] 783 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 784 | git-tree-sha1 = "4fe47bd2247248125c428978740e18a681372dd4" 785 | uuid = "a3789734-cfe1-5b06-b2d0-1dd0d9d62d05" 786 | version = "1.1.3+4" 787 | 788 | [[Xorg_libXext_jll]] 789 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] 790 | git-tree-sha1 = "b7c0aa8c376b31e4852b360222848637f481f8c3" 791 | uuid = "1082639a-0dae-5f34-9b06-72781eeb8cb3" 792 | version = "1.3.4+4" 793 | 794 | [[Xorg_libXrender_jll]] 795 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] 796 | git-tree-sha1 = "19560f30fd49f4d4efbe7002a1037f8c43d43b96" 797 | uuid = "ea2f1a96-1ddc-540d-b46f-429655e07cfa" 798 | version = "0.9.10+4" 799 | 800 | [[Xorg_libpthread_stubs_jll]] 801 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 802 | git-tree-sha1 = "6783737e45d3c59a4a4c4091f5f88cdcf0908cbb" 803 | uuid = "14d82f49-176c-5ed1-bb49-ad3f5cbd8c74" 804 | version = "0.1.0+3" 805 | 806 | [[Xorg_libxcb_jll]] 807 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "XSLT_jll", "Xorg_libXau_jll", "Xorg_libXdmcp_jll", "Xorg_libpthread_stubs_jll"] 808 | git-tree-sha1 = "daf17f441228e7a3833846cd048892861cff16d6" 809 | uuid = "c7cfdc94-dc32-55de-ac96-5a1b8d977c5b" 810 | version = "1.13.0+3" 811 | 812 | [[Xorg_xtrans_jll]] 813 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 814 | git-tree-sha1 = "79c31e7844f6ecf779705fbc12146eb190b7d845" 815 | uuid = "c5fb5394-a638-5e4d-96e5-b29de1b5cf10" 816 | version = "1.4.0+3" 817 | 818 | [[Zlib_jll]] 819 | deps = ["Libdl"] 820 | uuid = "83775a58-1f1d-513f-b197-d71354ab007a" 821 | 822 | [[libaom_jll]] 823 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 824 | git-tree-sha1 = "3a2ea60308f0996d26f1e5354e10c24e9ef905d4" 825 | uuid = "a4ae2306-e953-59d6-aa16-d00cac43593b" 826 | version = "3.4.0+0" 827 | 828 | [[libass_jll]] 829 | deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] 830 | git-tree-sha1 = "5982a94fcba20f02f42ace44b9894ee2b140fe47" 831 | uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0" 832 | version = "0.15.1+0" 833 | 834 | [[libblastrampoline_jll]] 835 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 836 | git-tree-sha1 = "576c27f2c23add3ce8f10717d72fbaee6fe120e9" 837 | uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" 838 | version = "3.1.0+2" 839 | 840 | [[libfdk_aac_jll]] 841 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 842 | git-tree-sha1 = "daacc84a041563f965be61859a36e17c4e4fcd55" 843 | uuid = "f638f0a6-7fb0-5443-88ba-1cc74229b280" 844 | version = "2.0.2+0" 845 | 846 | [[libpng_jll]] 847 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] 848 | git-tree-sha1 = "94d180a6d2b5e55e447e2d27a29ed04fe79eb30c" 849 | uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f" 850 | version = "1.6.38+0" 851 | 852 | [[libvorbis_jll]] 853 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Ogg_jll", "Pkg"] 854 | git-tree-sha1 = "b910cb81ef3fe6e78bf6acee440bda86fd6ae00c" 855 | uuid = "f27f6e37-5d2b-51aa-960f-b287f2bc3b7a" 856 | version = "1.3.7+1" 857 | 858 | [[nghttp2_jll]] 859 | deps = ["Artifacts", "Libdl"] 860 | uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" 861 | 862 | [[p7zip_jll]] 863 | deps = ["Artifacts", "Libdl"] 864 | uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" 865 | 866 | [[x264_jll]] 867 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 868 | git-tree-sha1 = "4fea590b89e6ec504593146bf8b988b2c00922b2" 869 | uuid = "1270edf5-f2f9-52d2-97e9-ab00b5d0237a" 870 | version = "2021.5.5+0" 871 | 872 | [[x265_jll]] 873 | deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] 874 | git-tree-sha1 = "ee567a171cce03570d77ad3a43e90218e38937a9" 875 | uuid = "dfaa095f-4041-5dcd-9319-2fabd8486b76" 876 | version = "3.5.0+0" 877 | -------------------------------------------------------------------------------- /meshcat_tutorial/MeshCat_guide.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": null, 6 | "id": "d18a781c", 7 | "metadata": { 8 | "scrolled": false 9 | }, 10 | "outputs": [], 11 | "source": [ 12 | "import Pkg \n", 13 | "Pkg.activate(@__DIR__)\n", 14 | "Pkg.instantiate()\n", 15 | "\n", 16 | "import DifferentiableCollisions as dc \n", 17 | "import MeshCat as mc \n", 18 | "using StaticArrays " 19 | ] 20 | }, 21 | { 22 | "cell_type": "markdown", 23 | "id": "2b9cb81e", 24 | "metadata": {}, 25 | "source": [ 26 | "# MeshCat Guide\n", 27 | "\n", 28 | "## Resources\n", 29 | "\n", 30 | "MeshCat docs: https://github.com/rdeits/MeshCat.jl/tree/master/notebooks\n", 31 | "\n", 32 | "URDF support: https://github.com/JuliaRobotics/MeshCatMechanisms.jl\n", 33 | "\n", 34 | "animate cartpole example: https://github.com/Optimal-Control-16-745/HW3_S23_solutions/blob/main/utils/cartpole_animation.jl\n", 35 | "\n", 36 | "animation with mesh example: https://github.com/Optimal-Control-16-745/HW2_S23_solutions/blob/main/utils/rendezvous.jl#L54\n", 37 | "\n", 38 | "DifferentiableCollisions.jl: https://github.com/kevin-tracy/DifferentiableCollisions.jl\n", 39 | "\n", 40 | "Examples using dc: https://github.com/kevin-tracy/DifferentiableCollisions.jl/tree/master/examples" 41 | ] 42 | }, 43 | { 44 | "cell_type": "markdown", 45 | "id": "80442038", 46 | "metadata": {}, 47 | "source": [ 48 | "### Static Arrays \n", 49 | "\n", 50 | "`DifferentiableCollisions.jl` uses StaticArrays. This means that we can't just use our normal vectors, we have to convert them to `SVector`'s first by using `SVector{vector_length}(normal_vector)` like so:\n", 51 | "\n", 52 | "```julia \n", 53 | "using StaticArrays\n", 54 | "\n", 55 | "normal_vector = [1,2,3,4.0]\n", 56 | "\n", 57 | "static_vector = SVector{4}(normal_vector)\n", 58 | "```" 59 | ] 60 | }, 61 | { 62 | "cell_type": "markdown", 63 | "id": "5acd9f22", 64 | "metadata": {}, 65 | "source": [ 66 | "## Simple Animations in MeshCat with `DifferentiableCollisions.jl`\n", 67 | "\n", 68 | "You can use any of these shapes:\n", 69 | "```julia\n", 70 | "polytope = dc.Polytope(A, b) # polytope is described by Ax <= b\n", 71 | "capsule = dc.Capsule(R, L) # radius R, length L\n", 72 | "cylinder = dc.Cylinder(R, L) # radius R, length L\n", 73 | "cone = dc.Cone(H, β) # height H, half angle β\n", 74 | "sphere = dc.Sphere(R) # radius R\n", 75 | "ellips = dc.Ellipsoid(P) # x'*P*x ≦ 1\n", 76 | "polygon = dc.Polygon(A, b, R) # polygon is described by Ay <= b, cushion radius R\n", 77 | "```\n", 78 | "\n", 79 | "Each shape has a position `r` and attitude quaternion `q`. We can update these by doing the following:\n", 80 | "\n", 81 | "```julia\n", 82 | "polytope.r = SVector{3}(randn(3)) # update with a random position \n", 83 | "polytope.q = normalize(SVector{4}(randn(4))) # random quaternion, normalized \n", 84 | "```\n", 85 | "\n", 86 | "check out https://github.com/kevin-tracy/DifferentiableCollisions.jl for more info. " 87 | ] 88 | }, 89 | { 90 | "cell_type": "code", 91 | "execution_count": 12, 92 | "id": "495535b3", 93 | "metadata": { 94 | "scrolled": false 95 | }, 96 | "outputs": [ 97 | { 98 | "name": "stderr", 99 | "output_type": "stream", 100 | "text": [ 101 | "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mMeshCat server started. You can open the visualizer by visiting the following URL in your browser:\n", 102 | "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39mhttp://127.0.0.1:8750\n" 103 | ] 104 | }, 105 | { 106 | "data": { 107 | "text/html": [ 108 | "
\n", 109 | " \n", 110 | "
\n" 111 | ], 112 | "text/plain": [ 113 | "MeshCat.DisplayedVisualizer(MeshCat.CoreVisualizer(MeshCat.SceneTrees.SceneNode(nothing, nothing, Dict{String, Vector{UInt8}}(), UInt8[0x83, 0xa7, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x82 … 0x5f, 0x61, 0x6e, 0x69, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e], Dict{String, MeshCat.SceneTrees.SceneNode}(\"meshcat\" => MeshCat.SceneTrees.SceneNode(nothing, nothing, Dict{String, Vector{UInt8}}(), nothing, Dict{String, MeshCat.SceneTrees.SceneNode}(\"capsule\" => MeshCat.SceneTrees.SceneNode(nothing, nothing, Dict{String, Vector{UInt8}}(), nothing, Dict{String, MeshCat.SceneTrees.SceneNode}(\"cyl\" => MeshCat.SceneTrees.SceneNode(UInt8[0x83, 0xa6, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x84, 0xaa … 0x61, 0x70, 0x73, 0x75, 0x6c, 0x65, 0x2f, 0x63, 0x79, 0x6c], nothing, Dict{String, Vector{UInt8}}(), nothing, Dict{String, MeshCat.SceneTrees.SceneNode}()), \"spha\" => MeshCat.SceneTrees.SceneNode(UInt8[0x83, 0xa6, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x84, 0xaa … 0x70, 0x73, 0x75, 0x6c, 0x65, 0x2f, 0x73, 0x70, 0x68, 0x61], nothing, Dict{String, Vector{UInt8}}(), nothing, Dict{String, MeshCat.SceneTrees.SceneNode}()), \"sphb\" => MeshCat.SceneTrees.SceneNode(UInt8[0x83, 0xa6, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x84, 0xaa … 0x70, 0x73, 0x75, 0x6c, 0x65, 0x2f, 0x73, 0x70, 0x68, 0x62], nothing, Dict{String, Vector{UInt8}}(), nothing, Dict{String, MeshCat.SceneTrees.SceneNode}()))))))), Set{Any}(), ip\"127.0.0.1\", 8750))" 114 | ] 115 | }, 116 | "metadata": {}, 117 | "output_type": "display_data" 118 | } 119 | ], 120 | "source": [ 121 | "function create_fake_trajectory(N)\n", 122 | " # create a fake trajectory for N steps\n", 123 | " \n", 124 | " # linearly interpolate between two random positions \n", 125 | " r1 = 5*randn(3)\n", 126 | " r2 = 5*randn(3)\n", 127 | " rs = range(r1,r2, length = N)\n", 128 | " \n", 129 | " # do the same thing with attitude using MRP's \n", 130 | " p1 = .5*randn(3)\n", 131 | " p2 = .5*randn(3)\n", 132 | " ps = range(p1,p2, length = N)\n", 133 | " \n", 134 | " # convert to quaternion (convert to StaticVector first)\n", 135 | " qs = [dc.q_from_mrp(SVector{3}(p)) for p in ps]\n", 136 | " \n", 137 | " return rs, qs \n", 138 | "end\n", 139 | "\n", 140 | "let \n", 141 | " \n", 142 | " # start meshcat visualizer \n", 143 | " vis = mc.Visualizer()\n", 144 | " \n", 145 | " # create capsule \n", 146 | " capsule = dc.Capsule(1.4, 3.0) \n", 147 | " dc.build_primitive!(vis, capsule, :capsule; color = mc.RGBA(1,0,0,1.0))\n", 148 | " \n", 149 | " # length of trajectory \n", 150 | " dt = 0.1 \n", 151 | " tf = 5.0 \n", 152 | " t_vec = 0:dt:tf \n", 153 | " N = length(t_vec)\n", 154 | " rs, qs = create_fake_trajectory(N)\n", 155 | " \n", 156 | " # animation \n", 157 | " anim = mc.Animation(floor(Int,1/dt))\n", 158 | " for k = 1:length(rs)\n", 159 | " mc.atframe(anim, k) do\n", 160 | " \n", 161 | " # update position and attitude of capsule in DifferentiableCollisions\n", 162 | " capsule.r = SVector{3}(rs[k]) # position in world frame W\n", 163 | " capsule.q = SVector{4}(qs[k]) # quaternion ᵂqᴮ\n", 164 | " \n", 165 | " # update position and attitude in MeshCat\n", 166 | " dc.update_pose!(vis[:capsule], capsule)\n", 167 | " \n", 168 | " end\n", 169 | " end\n", 170 | " mc.setanimation!(vis, anim)\n", 171 | " \n", 172 | " display(mc.render(vis))\n", 173 | " \n", 174 | "end" 175 | ] 176 | }, 177 | { 178 | "cell_type": "markdown", 179 | "id": "99c74a7e", 180 | "metadata": {}, 181 | "source": [ 182 | "## Recording\n", 183 | "\n", 184 | "You can record an animation by going to `Open Control` -> `Recording`, and it will give you instructions on how to convert the resulting images into a video using [ffmpeg](https://ffmpeg.org/). If you have a Mac with an ARM chip, you should use the following command:\n", 185 | "\n", 186 | "```\n", 187 | "ffmpeg -r 60 -i %07d.png -vcodec libx264 -pix_fmt yuv420p -preset slow -crf 18 output2.mp4\n", 188 | "```\n", 189 | "\n", 190 | "Alternatively, you can just use a screen recording tool." 191 | ] 192 | } 193 | ], 194 | "metadata": { 195 | "kernelspec": { 196 | "display_name": "Julia 1.6.7", 197 | "language": "julia", 198 | "name": "julia-1.6" 199 | }, 200 | "language_info": { 201 | "file_extension": ".jl", 202 | "mimetype": "application/julia", 203 | "name": "julia", 204 | "version": "1.6.7" 205 | } 206 | }, 207 | "nbformat": 4, 208 | "nbformat_minor": 5 209 | } 210 | -------------------------------------------------------------------------------- /meshcat_tutorial/Project.toml: -------------------------------------------------------------------------------- 1 | [deps] 2 | DifferentiableCollisions = "64b45163-ce2a-43f6-8f64-55d720633796" 3 | MeshCat = "283c5d60-a78f-5afe-a0af-af636b173e11" 4 | StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" 5 | --------------------------------------------------------------------------------