This commit is contained in:
Anson 2022-04-24 21:40:17 -07:00
parent b15dc55b7a
commit 8d3aebc70c
8 changed files with 1709 additions and 68 deletions

View File

@ -0,0 +1 @@
0.5.0

View File

@ -0,0 +1,248 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "a45c1344",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"(process:28652): GLib-GIO-WARNING **: 12:50:31.472: Unexpectedly, UWP app `KDEe.V.Okular_21.1203.941.0_x64__7vt06qxq7ptv8' (AUMId `KDEe.V.Okular_7vt06qxq7ptv8!KDEe.V.Okular') supports 5 extensions but has no verbs\n"
]
}
],
"source": [
"import IJulia\n",
"\n",
"# The julia kernel has built in support for Revise.jl, so this is the \n",
"# recommended approach for long-running sessions:\n",
"# https://github.com/JuliaLang/IJulia.jl/blob/9b10fa9b879574bbf720f5285029e07758e50a5e/src/kernel.jl#L46-L51\n",
"\n",
"# Users should enable revise within .julia/config/startup_ijulia.jl:\n",
"# https://timholy.github.io/Revise.jl/stable/config/#Using-Revise-automatically-within-Jupyter/IJulia-1\n",
"\n",
"# clear console history\n",
"IJulia.clear_history()\n",
"\n",
"# Intialize Plots w/ default fig width/height\n",
"try\n",
" fig_width = 7\n",
" fig_height = 5\n",
" fig_format = :retina\n",
" fig_dpi = 96\n",
" # no retina format type, use svg for high quality type/marks\n",
" if fig_format == :retina\n",
" fig_format = :svg\n",
" # IJulia doesn't support PDF output so use png (if the DPI \n",
" # remains the default of 300 then set to 96)\n",
" elseif fig_format == :pdf\n",
" fig_format = :png\n",
" fig_dpi = 96\n",
" end\n",
" # convert inches to pixels\n",
" fig_width = fig_width * fig_dpi\n",
" fig_height = fig_height * fig_dpi\n",
" using Plots\n",
" gr(size=(fig_width, fig_height), fmt = fig_format, dpi = fig_dpi)\n",
"catch e\n",
" # @warn \"Plots init\" exception=(e, catch_backtrace())\n",
"end\n",
"\n",
"# Set run_path if specified\n",
"try\n",
" run_path = \"\"\n",
" if !isempty(run_path)\n",
" cd(run_path)\n",
" end\n",
"catch e\n",
" @warn \"Run path init:\" exception=(e, catch_backtrace())\n",
"end\n",
"\n",
"# don't return kernel dependencies (b/c Revise should take care of dependencies)\n",
"nothing\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "189db2ad",
"metadata": {},
"outputs": [],
"source": [
"#| code-fold: true\n",
"#| output: false\n",
"using FileIO\n",
"using MeshIO\n",
"\n",
"using stlProcess\n",
"\n",
"using CSV\n",
"using DataFrames\n",
"\n",
"using LinearAlgebra"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "5e47d862",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div class=\"data-frame\"><p>0 rows × 8 columns (omitted printing of 1 columns)</p><table class=\"data-frame\"><thead><tr><th></th><th>surface_area</th><th>characteristic_length</th><th>sbx</th><th>sby</th><th>sbz</th><th>Ix</th><th>Iy</th></tr><tr><th></th><th title=\"Float64\">Float64</th><th title=\"Float64\">Float64</th><th title=\"Float64\">Float64</th><th title=\"Float64\">Float64</th><th title=\"Float64\">Float64</th><th title=\"Float64\">Float64</th><th title=\"Float64\">Float64</th></tr></thead><tbody></tbody></table></div>"
],
"text/latex": [
"\\begin{tabular}{r|cccccccc}\n",
"\t& surface\\_area & characteristic\\_length & sbx & sby & sbz & Ix & Iy & \\\\\n",
"\t\\hline\n",
"\t& Float64 & Float64 & Float64 & Float64 & Float64 & Float64 & Float64 & \\\\\n",
"\t\\hline\n",
"\\end{tabular}\n"
],
"text/plain": [
"\u001b[1m0×8 DataFrame\u001b[0m"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# local path to https://gitlab.com/orbital-debris-research/fake-satellite-dataset\n",
"dataset_path = raw\"C:\\Coding\\fake-satellite-dataset\"\n",
"\n",
"folders = [\"1_5U\", \"assembly1\", \"cubesat\"]\n",
"\n",
"df = DataFrame(;\n",
" surface_area=Float64[],\n",
" characteristic_length=Float64[],\n",
" sbx=Float64[],\n",
" sby=Float64[],\n",
" sbz=Float64[],\n",
" Ix=Float64[],\n",
" Iy=Float64[],\n",
" Iz=Float64[],\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "6c55224d",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Processing Path: C:\\Coding\\fake-satellite-dataset\\1_5U\n",
"Processing Path: C:\\Coding\\fake-satellite-dataset\\assembly1\n",
"Processing Path: C:\\Coding\\fake-satellite-dataset\\cubesat\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"┌ Warning: Characteristic Length Algorithm failed to converge, this usually means stl is flat. Setting length in dir to 0.\n",
"└ @ stlProcess C:\\Users\\albig\\.julia\\packages\\stlProcess\\8rsc7\\src\\stlProcess.jl:153\n"
]
}
],
"source": [
"for path in dataset_path * \"\\\\\" .* folders\n",
" println(\"Processing Path: \", path)\n",
" Threads.@threads for file in readdir(path)\n",
" stl = load(path * \"\\\\\" * file)\n",
" scale = find_scale(stl)\n",
" props = get_mass_properties(stl; scale=scale)\n",
"\n",
" eigs = eigvals(props.inertia)\n",
" sort_index = sortperm(eigs)\n",
" Ix, Iy, Iz = eigs[sort_index]\n",
" sbx, sby, sbz = props.sb_values[sort_index]\n",
"\n",
" push!(\n",
" df,\n",
" [props.surface_area, props.characteristic_length, sbx, sby, sbz, Ix, Iy, Iz],\n",
" )\n",
" end\n",
"end"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "2e520bb3",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div class=\"data-frame\"><p>8 rows × 7 columns</p><table class=\"data-frame\"><thead><tr><th></th><th>variable</th><th>mean</th><th>min</th><th>median</th><th>max</th><th>nmissing</th><th>eltype</th></tr><tr><th></th><th title=\"Symbol\">Symbol</th><th title=\"Float64\">Float64</th><th title=\"Float64\">Float64</th><th title=\"Float64\">Float64</th><th title=\"Float64\">Float64</th><th title=\"Int64\">Int64</th><th title=\"DataType\">DataType</th></tr></thead><tbody><tr><th>1</th><td>surface_area</td><td>25.2002</td><td>5.60865</td><td>13.3338</td><td>159.406</td><td>0</td><td>Float64</td></tr><tr><th>2</th><td>characteristic_length</td><td>79.5481</td><td>0.158521</td><td>1.55816</td><td>1582.23</td><td>0</td><td>Float64</td></tr><tr><th>3</th><td>sbx</td><td>1.40222</td><td>0.0417367</td><td>0.967078</td><td>10.0663</td><td>0</td><td>Float64</td></tr><tr><th>4</th><td>sby</td><td>3.3367</td><td>0.0125824</td><td>2.68461</td><td>9.68361</td><td>0</td><td>Float64</td></tr><tr><th>5</th><td>sbz</td><td>3.91184</td><td>0.29006</td><td>1.8185</td><td>14.7434</td><td>0</td><td>Float64</td></tr><tr><th>6</th><td>Ix</td><td>1.58725</td><td>0.0311782</td><td>0.23401</td><td>11.1335</td><td>0</td><td>Float64</td></tr><tr><th>7</th><td>Iy</td><td>3.74345</td><td>0.178598</td><td>1.01592</td><td>24.6735</td><td>0</td><td>Float64</td></tr><tr><th>8</th><td>Iz</td><td>5.20207</td><td>0.178686</td><td>1.742</td><td>32.0083</td><td>0</td><td>Float64</td></tr></tbody></table></div>"
],
"text/latex": [
"\\begin{tabular}{r|ccccccc}\n",
"\t& variable & mean & min & median & max & nmissing & eltype\\\\\n",
"\t\\hline\n",
"\t& Symbol & Float64 & Float64 & Float64 & Float64 & Int64 & DataType\\\\\n",
"\t\\hline\n",
"\t1 & surface\\_area & 25.2002 & 5.60865 & 13.3338 & 159.406 & 0 & Float64 \\\\\n",
"\t2 & characteristic\\_length & 79.5481 & 0.158521 & 1.55816 & 1582.23 & 0 & Float64 \\\\\n",
"\t3 & sbx & 1.40222 & 0.0417367 & 0.967078 & 10.0663 & 0 & Float64 \\\\\n",
"\t4 & sby & 3.3367 & 0.0125824 & 2.68461 & 9.68361 & 0 & Float64 \\\\\n",
"\t5 & sbz & 3.91184 & 0.29006 & 1.8185 & 14.7434 & 0 & Float64 \\\\\n",
"\t6 & Ix & 1.58725 & 0.0311782 & 0.23401 & 11.1335 & 0 & Float64 \\\\\n",
"\t7 & Iy & 3.74345 & 0.178598 & 1.01592 & 24.6735 & 0 & Float64 \\\\\n",
"\t8 & Iz & 5.20207 & 0.178686 & 1.742 & 32.0083 & 0 & Float64 \\\\\n",
"\\end{tabular}\n"
],
"text/plain": [
"\u001b[1m8×7 DataFrame\u001b[0m\n",
"\u001b[1m Row \u001b[0m│\u001b[1m variable \u001b[0m\u001b[1m mean \u001b[0m\u001b[1m min \u001b[0m\u001b[1m median \u001b[0m\u001b[1m max \u001b[0m\u001b[1m nmis\u001b[0m ⋯\n",
"\u001b[1m \u001b[0m│\u001b[90m Symbol \u001b[0m\u001b[90m Float64 \u001b[0m\u001b[90m Float64 \u001b[0m\u001b[90m Float64 \u001b[0m\u001b[90m Float64 \u001b[0m\u001b[90m Int6\u001b[0m ⋯\n",
"─────┼──────────────────────────────────────────────────────────────────────────\n",
" 1 │ surface_area 25.2002 5.60865 13.3338 159.406 ⋯\n",
" 2 │ characteristic_length 79.5481 0.158521 1.55816 1582.23\n",
" 3 │ sbx 1.40222 0.0417367 0.967078 10.0663\n",
" 4 │ sby 3.3367 0.0125824 2.68461 9.68361\n",
" 5 │ sbz 3.91184 0.29006 1.8185 14.7434 ⋯\n",
" 6 │ Ix 1.58725 0.0311782 0.23401 11.1335\n",
" 7 │ Iy 3.74345 0.178598 1.01592 24.6735\n",
" 8 │ Iz 5.20207 0.178686 1.742 32.0083\n",
"\u001b[36m 2 columns omitted\u001b[0m"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"describe(df)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Julia 1.8.0-beta3",
"language": "julia",
"name": "julia-1.8"
},
"language_info": {
"file_extension": ".jl",
"mimetype": "application/julia",
"name": "julia",
"version": "1.8.0"
}
},
"nbformat": 4,
"nbformat_minor": 5
}

View File

@ -0,0 +1,237 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "129f639c",
"metadata": {},
"outputs": [],
"source": [
"import IJulia\n",
"\n",
"# The julia kernel has built in support for Revise.jl, so this is the \n",
"# recommended approach for long-running sessions:\n",
"# https://github.com/JuliaLang/IJulia.jl/blob/9b10fa9b879574bbf720f5285029e07758e50a5e/src/kernel.jl#L46-L51\n",
"\n",
"# Users should enable revise within .julia/config/startup_ijulia.jl:\n",
"# https://timholy.github.io/Revise.jl/stable/config/#Using-Revise-automatically-within-Jupyter/IJulia-1\n",
"\n",
"# clear console history\n",
"IJulia.clear_history()\n",
"\n",
"# Intialize Plots w/ default fig width/height\n",
"try\n",
" fig_width = 7\n",
" fig_height = 5\n",
" fig_format = :retina\n",
" fig_dpi = 96\n",
" # no retina format type, use svg for high quality type/marks\n",
" if fig_format == :retina\n",
" fig_format = :svg\n",
" # IJulia doesn't support PDF output so use png (if the DPI \n",
" # remains the default of 300 then set to 96)\n",
" elseif fig_format == :pdf\n",
" fig_format = :png\n",
" fig_dpi = 96\n",
" end\n",
" # convert inches to pixels\n",
" fig_width = fig_width * fig_dpi\n",
" fig_height = fig_height * fig_dpi\n",
" using Plots\n",
" gr(size=(fig_width, fig_height), fmt = fig_format, dpi = fig_dpi)\n",
"catch e\n",
" # @warn \"Plots init\" exception=(e, catch_backtrace())\n",
"end\n",
"\n",
"# Set run_path if specified\n",
"try\n",
" run_path = \"\"\n",
" if !isempty(run_path)\n",
" cd(run_path)\n",
" end\n",
"catch e\n",
" @warn \"Run path init:\" exception=(e, catch_backtrace())\n",
"end\n",
"\n",
"# don't return kernel dependencies (b/c Revise should take care of dependencies)\n",
"nothing\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "8b15e8a8",
"metadata": {},
"outputs": [],
"source": [
"#| code-fold: true\n",
"#| output: false\n",
"\n",
"using FileIO\n",
"using MeshIO\n",
"\n",
"using stlProcess\n",
"\n",
"using CSV\n",
"using DataFrames\n",
"\n",
"using LinearAlgebra"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "f40c9594",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div class=\"data-frame\"><p>0 rows × 8 columns (omitted printing of 1 columns)</p><table class=\"data-frame\"><thead><tr><th></th><th>surface_area</th><th>characteristic_length</th><th>sbx</th><th>sby</th><th>sbz</th><th>Ix</th><th>Iy</th></tr><tr><th></th><th title=\"Float64\">Float64</th><th title=\"Float64\">Float64</th><th title=\"Float64\">Float64</th><th title=\"Float64\">Float64</th><th title=\"Float64\">Float64</th><th title=\"Float64\">Float64</th><th title=\"Float64\">Float64</th></tr></thead><tbody></tbody></table></div>"
],
"text/latex": [
"\\begin{tabular}{r|cccccccc}\n",
"\t& surface\\_area & characteristic\\_length & sbx & sby & sbz & Ix & Iy & \\\\\n",
"\t\\hline\n",
"\t& Float64 & Float64 & Float64 & Float64 & Float64 & Float64 & Float64 & \\\\\n",
"\t\\hline\n",
"\\end{tabular}\n"
],
"text/plain": [
"\u001b[1m0×8 DataFrame\u001b[0m"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#| code-fold: true\n",
"#| output: false\n",
"\n",
"# local path to https://gitlab.com/orbital-debris-research/fake-satellite-dataset\n",
"dataset_path = raw\"C:\\Coding\\fake-satellite-dataset\"\n",
"\n",
"folders = [\"1_5U\", \"assembly1\", \"cubesat\"]\n",
"\n",
"df = DataFrame(;\n",
" surface_area=Float64[],\n",
" characteristic_length=Float64[],\n",
" sbx=Float64[],\n",
" sby=Float64[],\n",
" sbz=Float64[],\n",
" Ix=Float64[],\n",
" Iy=Float64[],\n",
" Iz=Float64[],\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "bb8f7086",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Processing Path: C:\\Coding\\fake-satellite-dataset\\1_5U\n",
"Processing Path: C:\\Coding\\fake-satellite-dataset\\assembly1\n",
"Processing Path: C:\\Coding\\fake-satellite-dataset\\cubesat\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"┌ Warning: Characteristic Length Algorithm failed to converge, this usually means stl is flat. Setting length in dir to 0.\n",
"└ @ stlProcess C:\\Users\\albig\\.julia\\packages\\stlProcess\\8rsc7\\src\\stlProcess.jl:153\n"
]
}
],
"source": [
"for path in dataset_path * \"\\\\\" .* folders\n",
" println(\"Processing Path: \", path)\n",
" Threads.@threads for file in readdir(path)\n",
" stl = load(path * \"\\\\\" * file)\n",
" scale = find_scale(stl)\n",
" props = get_mass_properties(stl; scale=scale)\n",
"\n",
" eigs = eigvals(props.inertia)\n",
" sort_index = sortperm(eigs)\n",
" Ix, Iy, Iz = eigs[sort_index]\n",
" sbx, sby, sbz = props.sb_values[sort_index]\n",
"\n",
" push!(\n",
" df,\n",
" [props.surface_area, props.characteristic_length, sbx, sby, sbz, Ix, Iy, Iz],\n",
" )\n",
" end\n",
"end"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "a51a601f",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div class=\"data-frame\"><p>8 rows × 7 columns</p><table class=\"data-frame\"><thead><tr><th></th><th>variable</th><th>mean</th><th>min</th><th>median</th><th>max</th><th>nmissing</th><th>eltype</th></tr><tr><th></th><th title=\"Symbol\">Symbol</th><th title=\"Float64\">Float64</th><th title=\"Float64\">Float64</th><th title=\"Float64\">Float64</th><th title=\"Float64\">Float64</th><th title=\"Int64\">Int64</th><th title=\"DataType\">DataType</th></tr></thead><tbody><tr><th>1</th><td>surface_area</td><td>25.2002</td><td>5.60865</td><td>13.3338</td><td>159.406</td><td>0</td><td>Float64</td></tr><tr><th>2</th><td>characteristic_length</td><td>79.5481</td><td>0.158521</td><td>1.55816</td><td>1582.23</td><td>0</td><td>Float64</td></tr><tr><th>3</th><td>sbx</td><td>1.40222</td><td>0.0417367</td><td>0.967078</td><td>10.0663</td><td>0</td><td>Float64</td></tr><tr><th>4</th><td>sby</td><td>3.3367</td><td>0.0125824</td><td>2.68461</td><td>9.68361</td><td>0</td><td>Float64</td></tr><tr><th>5</th><td>sbz</td><td>3.91184</td><td>0.29006</td><td>1.8185</td><td>14.7434</td><td>0</td><td>Float64</td></tr><tr><th>6</th><td>Ix</td><td>1.58725</td><td>0.0311782</td><td>0.23401</td><td>11.1335</td><td>0</td><td>Float64</td></tr><tr><th>7</th><td>Iy</td><td>3.74345</td><td>0.178598</td><td>1.01592</td><td>24.6735</td><td>0</td><td>Float64</td></tr><tr><th>8</th><td>Iz</td><td>5.20207</td><td>0.178686</td><td>1.742</td><td>32.0083</td><td>0</td><td>Float64</td></tr></tbody></table></div>"
],
"text/latex": [
"\\begin{tabular}{r|ccccccc}\n",
"\t& variable & mean & min & median & max & nmissing & eltype\\\\\n",
"\t\\hline\n",
"\t& Symbol & Float64 & Float64 & Float64 & Float64 & Int64 & DataType\\\\\n",
"\t\\hline\n",
"\t1 & surface\\_area & 25.2002 & 5.60865 & 13.3338 & 159.406 & 0 & Float64 \\\\\n",
"\t2 & characteristic\\_length & 79.5481 & 0.158521 & 1.55816 & 1582.23 & 0 & Float64 \\\\\n",
"\t3 & sbx & 1.40222 & 0.0417367 & 0.967078 & 10.0663 & 0 & Float64 \\\\\n",
"\t4 & sby & 3.3367 & 0.0125824 & 2.68461 & 9.68361 & 0 & Float64 \\\\\n",
"\t5 & sbz & 3.91184 & 0.29006 & 1.8185 & 14.7434 & 0 & Float64 \\\\\n",
"\t6 & Ix & 1.58725 & 0.0311782 & 0.23401 & 11.1335 & 0 & Float64 \\\\\n",
"\t7 & Iy & 3.74345 & 0.178598 & 1.01592 & 24.6735 & 0 & Float64 \\\\\n",
"\t8 & Iz & 5.20207 & 0.178686 & 1.742 & 32.0083 & 0 & Float64 \\\\\n",
"\\end{tabular}\n"
],
"text/plain": [
"\u001b[1m8×7 DataFrame\u001b[0m\n",
"\u001b[1m Row \u001b[0m│\u001b[1m variable \u001b[0m\u001b[1m mean \u001b[0m\u001b[1m min \u001b[0m\u001b[1m median \u001b[0m\u001b[1m max \u001b[0m\u001b[1m nmis\u001b[0m ⋯\n",
"\u001b[1m \u001b[0m│\u001b[90m Symbol \u001b[0m\u001b[90m Float64 \u001b[0m\u001b[90m Float64 \u001b[0m\u001b[90m Float64 \u001b[0m\u001b[90m Float64 \u001b[0m\u001b[90m Int6\u001b[0m ⋯\n",
"─────┼──────────────────────────────────────────────────────────────────────────\n",
" 1 │ surface_area 25.2002 5.60865 13.3338 159.406 ⋯\n",
" 2 │ characteristic_length 79.5481 0.158521 1.55816 1582.23\n",
" 3 │ sbx 1.40222 0.0417367 0.967078 10.0663\n",
" 4 │ sby 3.3367 0.0125824 2.68461 9.68361\n",
" 5 │ sbz 3.91184 0.29006 1.8185 14.7434 ⋯\n",
" 6 │ Ix 1.58725 0.0311782 0.23401 11.1335\n",
" 7 │ Iy 3.74345 0.178598 1.01592 24.6735\n",
" 8 │ Iz 5.20207 0.178686 1.742 32.0083\n",
"\u001b[36m 2 columns omitted\u001b[0m"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"describe(df)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Julia 1.8.0-beta3",
"language": "julia",
"name": "julia-1.8"
}
},
"nbformat": 4,
"nbformat_minor": 5
}

BIN
.jupyter_cache/global.db Normal file

Binary file not shown.

1012
Manifest.toml Normal file

File diff suppressed because it is too large Load Diff

8
Project.toml Normal file
View File

@ -0,0 +1,8 @@
[deps]
CSV = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b"
DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0"
FileIO = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549"
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
MeshIO = "7269a6da-0436-5bbc-96c2-40638cbb6118"
Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80"
stlProcess = "68914fc9-42cf-4b37-b06f-0b65edf9b8fa"

File diff suppressed because one or more lines are too long

View File

@ -7,21 +7,85 @@ latex-auto-install: true
format:
html:
self-contained: true
title-block-banner: true
pdf: default
# reference-location: margin
reference-location: margin
citation-location: margin
bibliography: citations.bib
execute:
cache: true
---
```{julia}
#| code-fold: true
#| output: false
using FileIO
using MeshIO
using stlProcess
using CSV
using DataFrames
using LinearAlgebra
```
```{julia}
#| code-fold: true
#| output: false
# local path to https://gitlab.com/orbital-debris-research/fake-satellite-dataset
dataset_path = raw"C:\Coding\fake-satellite-dataset"
folders = ["1_5U", "assembly1", "cubesat"]
df = DataFrame(;
surface_area=Float64[],
characteristic_length=Float64[],
sbx=Float64[],
sby=Float64[],
sbz=Float64[],
Ix=Float64[],
Iy=Float64[],
Iz=Float64[],
)
```
```{julia}
for path in dataset_path * "\\" .* folders
println("Processing Path: ", path)
Threads.@threads for file in readdir(path)
stl = load(path * "\\" * file)
scale = find_scale(stl)
props = get_mass_properties(stl; scale=scale)
eigs = eigvals(props.inertia)
sort_index = sortperm(eigs)
Ix, Iy, Iz = eigs[sort_index]
sbx, sby, sbz = props.sb_values[sort_index]
push!(
df,
[props.surface_area, props.characteristic_length, sbx, sby, sbz, Ix, Iy, Iz],
)
end
end
```
```{julia}
describe(df)
```
## Gathering Data
To get started on the project before any scans of the actual debris are made available, I opted to
find 3D models online and process them as if they were data collected by my team. GrabCAD is an
excellent source of high-quality 3D models, and all the models have, at worst, a non-commercial
^[This is a test] license making them suitable for this study. The current dataset uses three
separate satellite assemblies found on GrabCAD, below is an example of one of the satellites that
was used.
license making them suitable for this study. The current dataset uses three separate satellite
assemblies found on GrabCAD, below is an example of one of the satellites that was used.
![Example CubeSat Used for Analysis](Figures/assembly.jpg)