From 8c5c315380f4455025651d95137c52d2f59a0ff8 Mon Sep 17 00:00:00 2001 From: Kevin D Date: Wed, 28 Jan 2026 22:29:17 -0800 Subject: [PATCH] basic implementation of client/server for AERPAW, whole lot of mess included --- @miSim/miSim.m | 1 + @miSim/writeInits.m | 33 +++ @miSim/writeParams.m | 29 --- aerpaw/@scenario/initialize.m | 30 +++ aerpaw/@scenario/run.m | 73 +++++++ aerpaw/@scenario/scenario.m | 28 +++ aerpaw/@scenario/sendTarget.m | 24 +++ aerpaw/@scenario/setup.m | 17 ++ aerpaw/@uav/initialize.m | 27 +++ aerpaw/@uav/onYourMarks.m | 20 ++ aerpaw/@uav/uav.m | 22 ++ aerpaw/OPMODE.m | 10 + aerpaw/basic_demo/comms.cpp | 83 ++++++++ aerpaw/basic_demo/controller.cpp | 37 ++++ aerpaw/basic_demo/controller.h | 23 +++ aerpaw/basic_demo/controller_app | Bin 0 -> 24832 bytes aerpaw/basic_demo/controller_impl.cpp | 73 +++++++ aerpaw/basic_demo/controller_impl.h | 18 ++ aerpaw/basic_demo/controller_main.cpp | 16 ++ aerpaw/basic_demo/rtwtypes.h | 44 ++++ aerpaw/basic_demo/uav.py | 13 ++ aerpaw/controller.coderprj | 190 ++++++++++++++++++ aerpaw/controller.m | 59 ++++++ aerpaw/cpp/udp_comm.cpp | 32 +++ aerpaw/cpp/udp_comm.h | 15 ++ aerpaw/experiment.m | 3 - aerpaw/experiments.m | 16 ++ .../2At36Gb0jC6HQmgXbAN4ShlbqAgd.xml | 2 + .../2At36Gb0jC6HQmgXbAN4ShlbqAgp.xml | 2 + .../DT1kUQeJY6fcqPoFwxbXgNUS8lId.xml} | 0 .../DT1kUQeJY6fcqPoFwxbXgNUS8lIp.xml | 2 + .../KtdYjPriN9I6DGnwvLHvl_xju8cd.xml | 6 + .../KtdYjPriN9I6DGnwvLHvl_xju8cp.xml | 2 + .../PQMatyuPaDoQ3G5VI3BFyjZnrs8d.xml | 6 + .../PQMatyuPaDoQ3G5VI3BFyjZnrs8p.xml | 2 + .../SKpQU057yTGLn9b7Hh4v5-10P0gd.xml | 6 + .../SKpQU057yTGLn9b7Hh4v5-10P0gp.xml | 2 + .../W_Z6-ElH4gIbv9BScRTmQUQJ9Dkd.xml | 6 + .../W_Z6-ElH4gIbv9BScRTmQUQJ9Dkp.xml | 2 + .../jgOJohqRy86fwKjFIbPiQBzesd0d.xml | 6 + .../jgOJohqRy86fwKjFIbPiQBzesd0p.xml | 2 + .../uqjVJgVIW1gykl7rcImcpGWqgpkd.xml | 2 + .../uqjVJgVIW1gykl7rcImcpGWqgpkp.xml | 2 + .../wBj8Oz_Uyr5PhZoBdLum-5Y72pwd.xml | 6 + .../wBj8Oz_Uyr5PhZoBdLum-5Y72pwp.xml | 2 + .../g51F4J1JIzbS5d3g380Sl55RzeUd.xml | 2 + .../g51F4J1JIzbS5d3g380Sl55RzeUp.xml | 2 + .../vvkdLmboxiWCk6Hhn0GbursF9fUd.xml | 2 + .../vvkdLmboxiWCk6Hhn0GbursF9fUp.xml | 2 + .../_Ys1ic_sNZf0m_ccxSjoiz6J7JUd.xml | 2 + .../_Ys1ic_sNZf0m_ccxSjoiz6J7JUp.xml | 2 + .../4XBBbvgKHLBtx6tMwElTfwSe284d.xml | 2 + .../4XBBbvgKHLBtx6tMwElTfwSe284p.xml | 2 + .../8r7PXt-CEJX2YvR04X9eMkzrlZQd.xml | 2 + .../8r7PXt-CEJX2YvR04X9eMkzrlZQp.xml | 2 + .../DCnJpF90C2dRw1sMuzFvVjgI3Xkd.xml | 6 + .../DCnJpF90C2dRw1sMuzFvVjgI3Xkp.xml | 2 + .../IJIwz-tE73_VBQ8ICY5avibK2S0d.xml | 2 + .../IJIwz-tE73_VBQ8ICY5avibK2S0p.xml | 2 + .../ZjNKXjZG-sRsDFhILe8NAy5Dpp0d.xml | 2 + .../ZjNKXjZG-sRsDFhILe8NAy5Dpp0p.xml | 2 + .../jZWe5SL5GmZq60hXzvoW4_evBGgd.xml | 6 + .../jZWe5SL5GmZq60hXzvoW4_evBGgp.xml | 2 + .../m4CvAO0shQN-qrRBv-GjfKG2Ds0d.xml | 6 + .../m4CvAO0shQN-qrRBv-GjfKG2Ds0p.xml | 2 + .../qyPEe0esGV4zUGuHoZBBbbGIM5od.xml | 2 + .../qyPEe0esGV4zUGuHoZBBbbGIM5op.xml | 2 + .../yPgOee5TXt0c6zIOLdFgRaTVGogd.xml | 2 + .../yPgOee5TXt0c6zIOLdFgRaTVGogp.xml | 2 + .../7GUhSG5a7UXVHDp6DqX4w2hrX7gd.xml | 6 + .../7GUhSG5a7UXVHDp6DqX4w2hrX7gp.xml | 2 + .../DXLhLhkCzaWF6gYpAk_ChXFr2KAd.xml | 6 + .../DXLhLhkCzaWF6gYpAk_ChXFr2KAp.xml | 2 + .../Fl4xDREAxKbflqvswdZKpwkwTDEd.xml | 2 + .../Fl4xDREAxKbflqvswdZKpwkwTDEp.xml | 2 + .../Lhjp7TB6gCFEdw4kpybws1qHm9Ud.xml | 6 + .../Lhjp7TB6gCFEdw4kpybws1qHm9Up.xml | 2 + .../ce2AFn-uyNz1adDQ8rfBjxb1z3Ed.xml | 6 + .../ce2AFn-uyNz1adDQ8rfBjxb1z3Ep.xml | 2 + .../tCrFgCGq4uYlNvytkkLqXVSMdFAd.xml | 6 + .../tCrFgCGq4uYlNvytkkLqXVSMdFAp.xml | 2 + .../BtZvZtLyHugR7nfGjg6ukY77EG0p.xml | 2 - .../h1bzoK7TyH-zBPdL32X_nIgU2N8d.xml | 6 + .../h1bzoK7TyH-zBPdL32X_nIgU2N8p.xml | 2 + .../6mQ2v_zwchG2NbhdXskhyw1Og4gd.xml | 2 + .../6mQ2v_zwchG2NbhdXskhyw1Og4gp.xml | 2 + .../_KxFNwPR7rYYPY2ibP4KLhWB84Qd.xml | 6 + .../_KxFNwPR7rYYPY2ibP4KLhWB84Qp.xml | 2 + .../pZeBssw-K0rx8h6GbiB7dV60-ugd.xml | 6 + .../pZeBssw-K0rx8h6GbiB7dV60-ugp.xml | 2 + .../z8tfH801F26HKib3tGcYRNFx_9Md.xml | 6 + .../z8tfH801F26HKib3tGcYRNFx_9Mp.xml | 2 + .../3SS_Oi25FWjc4irpVUXk8BppgWUd.xml | 6 + .../3SS_Oi25FWjc4irpVUXk8BppgWUp.xml | 2 + .../5IKlFVZg8NRK_lpPXq5EzGgzrBwd.xml | 2 + .../5IKlFVZg8NRK_lpPXq5EzGgzrBwp.xml | 2 + .../HDdMOLkzfWNsdpqRunt9wIQGerwd.xml | 6 + .../HDdMOLkzfWNsdpqRunt9wIQGerwp.xml | 2 + .../vppv7WJDApfsoixY2oInidT6wGod.xml | 2 + .../vppv7WJDApfsoixY2oInidT6wGop.xml | 2 + test/parametricTestSuite.m | 5 +- 101 files changed, 1129 insertions(+), 36 deletions(-) create mode 100644 @miSim/writeInits.m delete mode 100644 @miSim/writeParams.m create mode 100644 aerpaw/@scenario/initialize.m create mode 100644 aerpaw/@scenario/run.m create mode 100644 aerpaw/@scenario/scenario.m create mode 100644 aerpaw/@scenario/sendTarget.m create mode 100644 aerpaw/@scenario/setup.m create mode 100644 aerpaw/@uav/initialize.m create mode 100644 aerpaw/@uav/onYourMarks.m create mode 100644 aerpaw/@uav/uav.m create mode 100644 aerpaw/OPMODE.m create mode 100644 aerpaw/basic_demo/comms.cpp create mode 100644 aerpaw/basic_demo/controller.cpp create mode 100644 aerpaw/basic_demo/controller.h create mode 100755 aerpaw/basic_demo/controller_app create mode 100644 aerpaw/basic_demo/controller_impl.cpp create mode 100644 aerpaw/basic_demo/controller_impl.h create mode 100644 aerpaw/basic_demo/controller_main.cpp create mode 100644 aerpaw/basic_demo/rtwtypes.h create mode 100755 aerpaw/basic_demo/uav.py create mode 100644 aerpaw/controller.coderprj create mode 100644 aerpaw/controller.m create mode 100644 aerpaw/cpp/udp_comm.cpp create mode 100644 aerpaw/cpp/udp_comm.h delete mode 100644 aerpaw/experiment.m create mode 100644 aerpaw/experiments.m create mode 100644 resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/2At36Gb0jC6HQmgXbAN4ShlbqAgd.xml create mode 100644 resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/2At36Gb0jC6HQmgXbAN4ShlbqAgp.xml rename resources/project/{SIL3u_W39LwE7HHYsarfFmr9gVQ/BtZvZtLyHugR7nfGjg6ukY77EG0d.xml => 4XBBbvgKHLBtx6tMwElTfwSe284/DT1kUQeJY6fcqPoFwxbXgNUS8lId.xml} (100%) create mode 100644 resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/DT1kUQeJY6fcqPoFwxbXgNUS8lIp.xml create mode 100644 resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/KtdYjPriN9I6DGnwvLHvl_xju8cd.xml create mode 100644 resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/KtdYjPriN9I6DGnwvLHvl_xju8cp.xml create mode 100644 resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/PQMatyuPaDoQ3G5VI3BFyjZnrs8d.xml create mode 100644 resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/PQMatyuPaDoQ3G5VI3BFyjZnrs8p.xml create mode 100644 resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/SKpQU057yTGLn9b7Hh4v5-10P0gd.xml create mode 100644 resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/SKpQU057yTGLn9b7Hh4v5-10P0gp.xml create mode 100644 resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/W_Z6-ElH4gIbv9BScRTmQUQJ9Dkd.xml create mode 100644 resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/W_Z6-ElH4gIbv9BScRTmQUQJ9Dkp.xml create mode 100644 resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/jgOJohqRy86fwKjFIbPiQBzesd0d.xml create mode 100644 resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/jgOJohqRy86fwKjFIbPiQBzesd0p.xml create mode 100644 resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/uqjVJgVIW1gykl7rcImcpGWqgpkd.xml create mode 100644 resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/uqjVJgVIW1gykl7rcImcpGWqgpkp.xml create mode 100644 resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/wBj8Oz_Uyr5PhZoBdLum-5Y72pwd.xml create mode 100644 resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/wBj8Oz_Uyr5PhZoBdLum-5Y72pwp.xml create mode 100644 resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/g51F4J1JIzbS5d3g380Sl55RzeUd.xml create mode 100644 resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/g51F4J1JIzbS5d3g380Sl55RzeUp.xml create mode 100644 resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/vvkdLmboxiWCk6Hhn0GbursF9fUd.xml create mode 100644 resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/vvkdLmboxiWCk6Hhn0GbursF9fUp.xml create mode 100644 resources/project/FI0gxbH-PhwjE_riDQGHPyYMHks/_Ys1ic_sNZf0m_ccxSjoiz6J7JUd.xml create mode 100644 resources/project/FI0gxbH-PhwjE_riDQGHPyYMHks/_Ys1ic_sNZf0m_ccxSjoiz6J7JUp.xml create mode 100644 resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/4XBBbvgKHLBtx6tMwElTfwSe284d.xml create mode 100644 resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/4XBBbvgKHLBtx6tMwElTfwSe284p.xml create mode 100644 resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/8r7PXt-CEJX2YvR04X9eMkzrlZQd.xml create mode 100644 resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/8r7PXt-CEJX2YvR04X9eMkzrlZQp.xml create mode 100644 resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/DCnJpF90C2dRw1sMuzFvVjgI3Xkd.xml create mode 100644 resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/DCnJpF90C2dRw1sMuzFvVjgI3Xkp.xml create mode 100644 resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/IJIwz-tE73_VBQ8ICY5avibK2S0d.xml create mode 100644 resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/IJIwz-tE73_VBQ8ICY5avibK2S0p.xml create mode 100644 resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/ZjNKXjZG-sRsDFhILe8NAy5Dpp0d.xml create mode 100644 resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/ZjNKXjZG-sRsDFhILe8NAy5Dpp0p.xml create mode 100644 resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/jZWe5SL5GmZq60hXzvoW4_evBGgd.xml create mode 100644 resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/jZWe5SL5GmZq60hXzvoW4_evBGgp.xml create mode 100644 resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/m4CvAO0shQN-qrRBv-GjfKG2Ds0d.xml create mode 100644 resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/m4CvAO0shQN-qrRBv-GjfKG2Ds0p.xml create mode 100644 resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/qyPEe0esGV4zUGuHoZBBbbGIM5od.xml create mode 100644 resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/qyPEe0esGV4zUGuHoZBBbbGIM5op.xml create mode 100644 resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/yPgOee5TXt0c6zIOLdFgRaTVGogd.xml create mode 100644 resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/yPgOee5TXt0c6zIOLdFgRaTVGogp.xml create mode 100644 resources/project/IJIwz-tE73_VBQ8ICY5avibK2S0/7GUhSG5a7UXVHDp6DqX4w2hrX7gd.xml create mode 100644 resources/project/IJIwz-tE73_VBQ8ICY5avibK2S0/7GUhSG5a7UXVHDp6DqX4w2hrX7gp.xml create mode 100644 resources/project/IJIwz-tE73_VBQ8ICY5avibK2S0/DXLhLhkCzaWF6gYpAk_ChXFr2KAd.xml create mode 100644 resources/project/IJIwz-tE73_VBQ8ICY5avibK2S0/DXLhLhkCzaWF6gYpAk_ChXFr2KAp.xml create mode 100644 resources/project/IJIwz-tE73_VBQ8ICY5avibK2S0/Fl4xDREAxKbflqvswdZKpwkwTDEd.xml create mode 100644 resources/project/IJIwz-tE73_VBQ8ICY5avibK2S0/Fl4xDREAxKbflqvswdZKpwkwTDEp.xml create mode 100644 resources/project/IJIwz-tE73_VBQ8ICY5avibK2S0/Lhjp7TB6gCFEdw4kpybws1qHm9Ud.xml create mode 100644 resources/project/IJIwz-tE73_VBQ8ICY5avibK2S0/Lhjp7TB6gCFEdw4kpybws1qHm9Up.xml create mode 100644 resources/project/IJIwz-tE73_VBQ8ICY5avibK2S0/ce2AFn-uyNz1adDQ8rfBjxb1z3Ed.xml create mode 100644 resources/project/IJIwz-tE73_VBQ8ICY5avibK2S0/ce2AFn-uyNz1adDQ8rfBjxb1z3Ep.xml create mode 100644 resources/project/IJIwz-tE73_VBQ8ICY5avibK2S0/tCrFgCGq4uYlNvytkkLqXVSMdFAd.xml create mode 100644 resources/project/IJIwz-tE73_VBQ8ICY5avibK2S0/tCrFgCGq4uYlNvytkkLqXVSMdFAp.xml delete mode 100644 resources/project/SIL3u_W39LwE7HHYsarfFmr9gVQ/BtZvZtLyHugR7nfGjg6ukY77EG0p.xml create mode 100644 resources/project/SIL3u_W39LwE7HHYsarfFmr9gVQ/h1bzoK7TyH-zBPdL32X_nIgU2N8d.xml create mode 100644 resources/project/SIL3u_W39LwE7HHYsarfFmr9gVQ/h1bzoK7TyH-zBPdL32X_nIgU2N8p.xml create mode 100644 resources/project/ZjNKXjZG-sRsDFhILe8NAy5Dpp0/6mQ2v_zwchG2NbhdXskhyw1Og4gd.xml create mode 100644 resources/project/ZjNKXjZG-sRsDFhILe8NAy5Dpp0/6mQ2v_zwchG2NbhdXskhyw1Og4gp.xml create mode 100644 resources/project/ZjNKXjZG-sRsDFhILe8NAy5Dpp0/_KxFNwPR7rYYPY2ibP4KLhWB84Qd.xml create mode 100644 resources/project/ZjNKXjZG-sRsDFhILe8NAy5Dpp0/_KxFNwPR7rYYPY2ibP4KLhWB84Qp.xml create mode 100644 resources/project/ZjNKXjZG-sRsDFhILe8NAy5Dpp0/pZeBssw-K0rx8h6GbiB7dV60-ugd.xml create mode 100644 resources/project/ZjNKXjZG-sRsDFhILe8NAy5Dpp0/pZeBssw-K0rx8h6GbiB7dV60-ugp.xml create mode 100644 resources/project/ZjNKXjZG-sRsDFhILe8NAy5Dpp0/z8tfH801F26HKib3tGcYRNFx_9Md.xml create mode 100644 resources/project/ZjNKXjZG-sRsDFhILe8NAy5Dpp0/z8tfH801F26HKib3tGcYRNFx_9Mp.xml create mode 100644 resources/project/qyPEe0esGV4zUGuHoZBBbbGIM5o/3SS_Oi25FWjc4irpVUXk8BppgWUd.xml create mode 100644 resources/project/qyPEe0esGV4zUGuHoZBBbbGIM5o/3SS_Oi25FWjc4irpVUXk8BppgWUp.xml create mode 100644 resources/project/qyPEe0esGV4zUGuHoZBBbbGIM5o/5IKlFVZg8NRK_lpPXq5EzGgzrBwd.xml create mode 100644 resources/project/qyPEe0esGV4zUGuHoZBBbbGIM5o/5IKlFVZg8NRK_lpPXq5EzGgzrBwp.xml create mode 100644 resources/project/qyPEe0esGV4zUGuHoZBBbbGIM5o/HDdMOLkzfWNsdpqRunt9wIQGerwd.xml create mode 100644 resources/project/qyPEe0esGV4zUGuHoZBBbbGIM5o/HDdMOLkzfWNsdpqRunt9wIQGerwp.xml create mode 100644 resources/project/yPgOee5TXt0c6zIOLdFgRaTVGog/vppv7WJDApfsoixY2oInidT6wGod.xml create mode 100644 resources/project/yPgOee5TXt0c6zIOLdFgRaTVGog/vppv7WJDApfsoixY2oInidT6wGop.xml diff --git a/@miSim/miSim.m b/@miSim/miSim.m index e80b198..7fd9f97 100644 --- a/@miSim/miSim.m +++ b/@miSim/miSim.m @@ -68,6 +68,7 @@ classdef miSim [obj] = plotH(obj); [obj] = updatePlots(obj); [obj] = teardown(obj); + writeParams(obj); validate(obj); end methods (Access = private) diff --git a/@miSim/writeInits.m b/@miSim/writeInits.m new file mode 100644 index 0000000..3719342 --- /dev/null +++ b/@miSim/writeInits.m @@ -0,0 +1,33 @@ +function writeParams(obj) + arguments (Input) + obj (1, 1) {mustBeA(obj, "miSim")}; + end + arguments (Output) + end + + % Collect agent parameters + collisionRadii = cellfun(@(x) x.collisionGeometry.radius, obj.agents); + alphaDist = cellfun(@(x) x.sensorModel.alphaDist, obj.agents); + betaDist = cellfun(@(x) x.sensorModel.betaDist, obj.agents); + alphaTilt = cellfun(@(x) x.sensorModel.alphaTilt, obj.agents); + betaTilt = cellfun(@(x) x.sensorModel.alphaDist, obj.agents); + comRanges = cellfun(@(x) x.commsGeometry.radius, obj.agents); + initialStepSize = cellfun(@(x) x.initialStepSize, obj.agents); + pos = cell2mat(cellfun(@(x) x.pos, obj.agents, 'UniformOutput', false)); + + + % Combine with simulation parameters + inits = struct("timestep", obj.timestep, "maxIter", obj.maxIter, "minAlt", obj.obstacles{end}.maxCorner(3), ... + "discretizationStep", obj.domain.objective.discretizationStep, "protectedRange", obj.domain.objective.protectedRange, ... + "sensorPerformanceMinimum", obj.domain.objective.sensorPerformanceMinimum, "initialStepSize", initialStepSize, ... + "barrierGain", obj.barrierGain, "barrierExponent", obj.barrierExponent, "numObstacles", size(obj.obstacles, 1), ... + "numAgents", size(obj.agents, 1), "collisionRadius", collisionRadii, "comRange", comRanges, "alphaDist", alphaDist, ... + "betaDist", betaDist, "alphaTilt", alphaTilt, "betaTilt", betaTilt, ... + ... % ^^^ PARAMETERS ^^^ | vvv STATES vvv + "pos", pos); + + % Save all parameters to output file + initsFile = strcat(obj.artifactName, "_miSimInits"); + initsFile = fullfile(matlab.project.rootProject().RootFolder, "sandbox", initsFile); + save(initsFile, "-struct", "inits"); +end \ No newline at end of file diff --git a/@miSim/writeParams.m b/@miSim/writeParams.m deleted file mode 100644 index d65da96..0000000 --- a/@miSim/writeParams.m +++ /dev/null @@ -1,29 +0,0 @@ -function writeParams(obj) - arguments (Input) - obj (1, 1) {mustBeA(obj, "miSim")}; - end - arguments (Output) - end - - % Collect agent parameters - collisionRadii = cellfun(@(x) x.collisionGeometry.radius, obj.agents); - alphaDist = cellfun(@(x) x.sensorModel.alphaDist, obj.agents); - betaDist = cellfun(@(x) x.sensorModel.betaDist, obj.agents); - alphaTilt = cellfun(@(x) x.sensorModel.alphaTilt, obj.agents); - betaTilt = cellfun(@(x) x.sensorModel.alphaDist, obj.agents); - comRange = cellfun(@(x) x.commsGeometry.radius, obj.agents); - initialStepSize = cellfun(@(x) x.initialStepSize, obj.agents); - - % Combine with simulation parameters - params = struct("timestep", obj.timestep, "maxIter", obj.maxIter, "minAlt", obj.obstacles{end}.maxCorner(3), "discretizationStep", obj.domain.objective.discretizationStep, ... - "sensorPerformanceMinimum", obj.domain.objective.sensorPerformanceMinimum, "collisionRadius", collisionRadii, "alphaDist", alphaDist, "betaDist", betaDist, ... - "alphaTilt", alphaTilt, "betaTilt", betaTilt, "comRange", comRange, "initialStepSize", initialStepSize, "barrierGain", obj.barrierGain, "barrierExponent", obj.barrierExponent ... - ); - - % TODO add sensorPerformanceMinimum - - % Save all parameters to output file - paramsFile = strcat(obj.artifactName, "_miSimParams"); - paramsFile = fullfile(matlab.project.rootProject().RootFolder, "sandbox", paramsFile); - save(paramsFile, "-struct", "params"); -end \ No newline at end of file diff --git a/aerpaw/@scenario/initialize.m b/aerpaw/@scenario/initialize.m new file mode 100644 index 0000000..39056bf --- /dev/null +++ b/aerpaw/@scenario/initialize.m @@ -0,0 +1,30 @@ +function obj = initialize(obj, initsPath) + arguments (Input) + obj (1, 1) {mustBeA(obj, 'scenario')}; + initsPath (1, 1) string; + end + arguments (Output) + obj (1, 1) {mustBeA(obj, 'scenario')}; + end + + obj.inits = load(initsPath); + + % Instantiate the correct number of UAVs + obj.uavs = cell(obj.inits.numAgents, 1); + [obj.uavs{:}] = deal(uav); + + % Configure ports to broadcast to drones + obj.ports = repmat(obj.basePort, [obj.inits.numAgents, 1]) + (1:obj.inits.numAgents)'; + obj.udp = cell(obj.inits.numAgents, 1); + for ii = 1:obj.inits.numAgents + obj.udp{ii} = udpport("IPV4", "LocalPort", obj.ports(ii), "Tag", sprintf("UAV %d", ii), "Timeout", obj.timeout); + end + + % Initialize UAVs in scenario's knowledge + for ii = 1:obj.inits.numAgents + obj.uavs{ii} = obj.uavs{ii}.initialize(obj.ports(ii) + obj.portOffset, obj.timeout, sprintf("UAV %d", ii)); + end + + % Update opMode + obj.opMode = OPMODE.INITIALIZED; +end \ No newline at end of file diff --git a/aerpaw/@scenario/run.m b/aerpaw/@scenario/run.m new file mode 100644 index 0000000..98659e3 --- /dev/null +++ b/aerpaw/@scenario/run.m @@ -0,0 +1,73 @@ +function obj = run(obj) + arguments (Input) + obj (1, 1) {mustBeA(obj, 'scenario')}; + end + arguments (Output) + obj (1, 1) {mustBeA(obj, 'scenario')}; + end + + count = 0; + + while true + %% UAV operations (simulated only) + if coder.target("MATLAB") + % Iterate over UAVs + for ii = 1:size(obj.uavs, 1) + % Determine behavior from UAV opMode + if obj.uavs{ii}.opMode == OPMODE.INVALID + error("Invalid UAV opMode"); + elseif obj.uavs{ii}.opMode == OPMODE.INITIALIZED + % Waiting for starting position to be sent by the controller + if all(~(isnan(obj.uavs{ii}.commandPos))) + % Teleport to starting position + obj.uavs{ii}.pos = obj.uavs{ii}.commandPos; + + % reset to no command + obj.uavs{ii}.commandPos = NaN(1, 3); + + % Acknowledge command receipt to controller by reporting a new opMode + obj.uavs{ii}.commandOpMode = OPMODE.SET; + end + else + error("Unexpected UAV opMode"); + end + end + elseif coder.target("C++") + coder.cinclude('udp_comm.h'); + % Iterate over UAVs + for ii = 1:size(obj.uavs, 1) + mode = uint8(0); + coder.ceval('recvOpMode', coder.wref(mode)); + end + end + + + %% Server operations + % Compute guidance for UAVs and issue commands + if obj.opMode == OPMODE.INVALID + error("Invalid controller opMode"); + elseif obj.opMode == OPMODE.INITIALIZED + % On the first iteration, command UAVs to go to their starting positions + commandPos = obj.inits.pos; + elseif obj.opMode == OPMODE.SET + % begin experiment once the controller and UAVs are ready + if unique(cellfun(@(x) x.opMode.id, obj.uavs)) == OPMODE.SET.id + keyboard + end + else + error("Unexpected controller opMode"); + end + + % Transmit commands + % Command drones to their starting positions + for ii = 1:size(obj.uavs, 1) + obj.uavs{ii} = obj.sendTarget(obj.uavs{ii}, commandPos(ii, 1:3)); + end + keyboard + + + + % tally iterations + count = count + 1; + end +end \ No newline at end of file diff --git a/aerpaw/@scenario/scenario.m b/aerpaw/@scenario/scenario.m new file mode 100644 index 0000000..1870d09 --- /dev/null +++ b/aerpaw/@scenario/scenario.m @@ -0,0 +1,28 @@ +classdef scenario + properties (Access = public) + % Experiment + domain = rectangularPrism; + inits; + + % State + opMode = OPMODE.INVALID; + + % UAVs + uavs; + + % Communications + timeout = 2; % seconds + basePort = 3330; + portOffset = 1110; + ports; + udp; + + end + + methods(Access = public) + [obj] = initialize(obj, initsPath); + [obj] = run(obj); + [obj] = setup(obj); + u = sendTarget(u, pos); + end +end \ No newline at end of file diff --git a/aerpaw/@scenario/sendTarget.m b/aerpaw/@scenario/sendTarget.m new file mode 100644 index 0000000..e686fc7 --- /dev/null +++ b/aerpaw/@scenario/sendTarget.m @@ -0,0 +1,24 @@ +function u = sendTarget(~, u, pos) + arguments (Input) + ~ + u (1, 1) {mustBeA(u, 'uav')}; + pos (1, 3) double; + end + arguments (Output) + u (1, 1) {mustBeA(u, 'uav')}; + end + + % Branch here depending on environment + if coder.target("MATLAB") + % Simulation - update target position + u.commandPos = pos; + + elseif coder.target("C++") + % Codegen - TX starting position to UAV + coder.cinclude("udp_comm.h"); + coder.ceval("sendTarget", coder.rref(pos)); + end + + + +end \ No newline at end of file diff --git a/aerpaw/@scenario/setup.m b/aerpaw/@scenario/setup.m new file mode 100644 index 0000000..8f13ad6 --- /dev/null +++ b/aerpaw/@scenario/setup.m @@ -0,0 +1,17 @@ +function obj = setup(obj) + arguments (Input) + obj (1, 1) {mustBeA(obj, 'scenario')}; + end + arguments (Output) + obj (1, 1) {mustBeA(obj, 'scenario')}; + end + + % Command drones to their starting positions + for ii = 1:size(obj.uavs, 1) + obj.uavs{ii} = obj.sendTarget(obj.uavs{ii}, obj.inits.pos(ii, 1:3)); + end + + % Update opMode + obj.opMode = OPMODE.SET; + +end \ No newline at end of file diff --git a/aerpaw/@uav/initialize.m b/aerpaw/@uav/initialize.m new file mode 100644 index 0000000..b5e61bb --- /dev/null +++ b/aerpaw/@uav/initialize.m @@ -0,0 +1,27 @@ +function obj = initialize(obj, port, timeout, label) + arguments (Input) + obj (1, 1) {mustBeA(obj, "uav")}; + port (1, 1) double; + timeout (1, 1) double; + label (1, 1) string; + end + arguments (Output) + obj (1, 1) {mustBeA(obj, "uav")}; + end + obj.label = label; + obj.port = port; + obj.timeout = timeout; + + % Branch here depending on environment + if coder.target("MATLAB") + obj.pos = [0, 0, 20] + rand(1, 3) * 10; % just put it somewhere so we can plot it + + elseif coder.target("C++") + % initialize ip/port + coder.cinclude('udp_comm.h'); + coder.ceval('initComs', "ip", obj.port); + end + + obj.opMode = OPMODE.INITIALIZED; + +end \ No newline at end of file diff --git a/aerpaw/@uav/onYourMarks.m b/aerpaw/@uav/onYourMarks.m new file mode 100644 index 0000000..75ccd53 --- /dev/null +++ b/aerpaw/@uav/onYourMarks.m @@ -0,0 +1,20 @@ +function obj = onYourMarks(obj) + arguments (Input) + obj (1, 1) {mustBeA(obj, "uav")}; + end + + arguments (Output) + obj (1, 1) {mustBeA(obj, "uav")}; + end + + % Receive initial position data + initialPosition = read(obj.udp, 3, "double"); + + % Acknowledge message receipt + + % teleport to desired position + obj.pos = initialPosition; + + keyboard + +end \ No newline at end of file diff --git a/aerpaw/@uav/uav.m b/aerpaw/@uav/uav.m new file mode 100644 index 0000000..aafa6d3 --- /dev/null +++ b/aerpaw/@uav/uav.m @@ -0,0 +1,22 @@ +classdef uav + properties + label = ""; + + % Communications + port; + timeout; + + % State + opMode = OPMODE.INVALID; + pos = NaN(1, 3); + + % Commanding (not for codegen) + commandOpMode = OPMODE.INVALID; + commandPos = NaN(1, 3); + end + + methods (Access = public) + obj = initialize(obj, port, timeout, label) + obj = onYourMarks(obj); + end +end \ No newline at end of file diff --git a/aerpaw/OPMODE.m b/aerpaw/OPMODE.m new file mode 100644 index 0000000..fd86fb0 --- /dev/null +++ b/aerpaw/OPMODE.m @@ -0,0 +1,10 @@ +classdef OPMODE + properties (Constant) + INVALID = uint8(0); + INITIALIZED = uint8(1); + SET = uint8(2); + RUNNING = uint8(3); + CONCLUDING = uint8(4); + FINISHED = uint8(5); + end +end diff --git a/aerpaw/basic_demo/comms.cpp b/aerpaw/basic_demo/comms.cpp new file mode 100644 index 0000000..9579959 --- /dev/null +++ b/aerpaw/basic_demo/comms.cpp @@ -0,0 +1,83 @@ +#include +#include +#include +#include +#include +#include +#include + +#define SERVER_PORT 5000 +#define SERVER_IP "127.0.0.1" + +// Socket init +void initSockets() {} +void cleanupSockets() {} + +int serverSocket = -1; +std::vector clientSockets; + +extern "C" { + +// Initialize server (call once) +void initServer() { + initSockets(); + serverSocket = socket(AF_INET, SOCK_STREAM, 0); + if(serverSocket < 0) { std::cerr << "Socket creation failed\n"; return; } + + sockaddr_in serverAddr; + serverAddr.sin_family = AF_INET; + serverAddr.sin_addr.s_addr = INADDR_ANY; + serverAddr.sin_port = htons(SERVER_PORT); + + int opt = 1; + setsockopt(serverSocket, SOL_SOCKET, SO_REUSEADDR, (char*)&opt, sizeof(opt)); + + if(bind(serverSocket, (sockaddr*)&serverAddr, sizeof(serverAddr)) < 0) { + std::cerr << "Bind failed\n"; return; + } + if(listen(serverSocket, 5) < 0) { + std::cerr << "Listen failed\n"; return; + } + + std::cout << "Server initialized, waiting for clients...\n"; +} + +// Accept client connections (call once per client) +void acceptClient(int clientId) { + sockaddr_in clientAddr; + socklen_t addrLen = sizeof(clientAddr); + int clientSock = accept(serverSocket, (sockaddr*)&clientAddr, &addrLen); + if(clientSock < 0) { std::cerr << "Accept failed for client " << clientId << "\n"; return; } + clientSockets.push_back(clientSock); + std::cout << "Client " << clientId << " connected\n"; +} + +// Send a message to a specific client +void sendMessage(int clientId) { + if(clientId <= 0 || clientId > clientSockets.size()) return; + const char* msg = "Hello from server"; + send(clientSockets[clientId-1], msg, strlen(msg), 0); + std::cout << "Sent message to client " << clientId << "\n"; +} + +// Receive ACK from a specific client +int receiveAck(int clientId) { + if(clientId <= 0 || clientId > clientSockets.size()) return 0; + char buffer[1024]; + int len = recv(clientSockets[clientId-1], buffer, sizeof(buffer)-1, 0); + if(len <= 0) return 0; + buffer[len] = '\0'; + std::cout << "Received ACK from client " << clientId << ": " << buffer << "\n"; + return 1; +} + +// Cleanup server +void closeServer() { + for(auto sock : clientSockets) { + close(sock); + } + close(serverSocket); + cleanupSockets(); +} + +} \ No newline at end of file diff --git a/aerpaw/basic_demo/controller.cpp b/aerpaw/basic_demo/controller.cpp new file mode 100644 index 0000000..32f5aef --- /dev/null +++ b/aerpaw/basic_demo/controller.cpp @@ -0,0 +1,37 @@ +// +// Academic License - for use in teaching, academic research, and meeting +// course requirements at degree granting institutions only. Not for +// government, commercial, or other organizational use. +// +// controller.cpp +// +// Code generation for function 'controller' +// + +// Include files +#include "controller.h" +#include "controller_impl.h" + +// Function Definitions +void controller(int numClients) +{ + // Initialize server + initServer(); + // Accept clients + for (int i{0}; i < numClients; i++) { + acceptClient(i + 1); + } + // Send messages to clients + for (int i{0}; i < numClients; i++) { + sendMessage(i + 1); + } + // Receive acknowledgements + for (int i{0}; i < numClients; i++) { + receiveAck(i + 1); + } + // Digest ACKs + // Close server + closeServer(); +} + +// End of code generation (controller.cpp) diff --git a/aerpaw/basic_demo/controller.h b/aerpaw/basic_demo/controller.h new file mode 100644 index 0000000..601942e --- /dev/null +++ b/aerpaw/basic_demo/controller.h @@ -0,0 +1,23 @@ +// +// Academic License - for use in teaching, academic research, and meeting +// course requirements at degree granting institutions only. Not for +// government, commercial, or other organizational use. +// +// controller.h +// +// Code generation for function 'controller' +// + +#ifndef CONTROLLER_H +#define CONTROLLER_H + +// Include files +#include "rtwtypes.h" +#include +#include + +// Function Declarations +extern void controller(int numClients); + +#endif +// End of code generation (controller.h) diff --git a/aerpaw/basic_demo/controller_app b/aerpaw/basic_demo/controller_app new file mode 100755 index 0000000000000000000000000000000000000000..e917ebbcd0ef54f1b06b07bd55eab641d6d98acd GIT binary patch literal 24832 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 I1~e`M058bHWdHyG literal 0 HcmV?d00001 diff --git a/aerpaw/basic_demo/controller_impl.cpp b/aerpaw/basic_demo/controller_impl.cpp new file mode 100644 index 0000000..dcfa649 --- /dev/null +++ b/aerpaw/basic_demo/controller_impl.cpp @@ -0,0 +1,73 @@ +#include "controller_impl.h" +#include +#include +#include +#include +#include +#include + +#define SERVER_PORT 5000 +#define SERVER_IP "127.0.0.1" + +static int serverSocket = -1; +static std::vector clientSockets; + +void initSockets() {} +void cleanupSockets() {} + +void initServer() { + initSockets(); + serverSocket = socket(AF_INET, SOCK_STREAM, 0); + if(serverSocket < 0) { std::cerr << "Socket creation failed\n"; return; } + + sockaddr_in serverAddr; + serverAddr.sin_family = AF_INET; + serverAddr.sin_addr.s_addr = INADDR_ANY; + serverAddr.sin_port = htons(SERVER_PORT); + + int opt = 1; + setsockopt(serverSocket, SOL_SOCKET, SO_REUSEADDR, (char*)&opt, sizeof(opt)); + + if(bind(serverSocket, (sockaddr*)&serverAddr, sizeof(serverAddr)) < 0) { + std::cerr << "Bind failed\n"; return; + } + if(listen(serverSocket, 5) < 0) { + std::cerr << "Listen failed\n"; return; + } + + std::cout << "Server initialized\n"; +} + +void acceptClient(int clientId) { + sockaddr_in clientAddr; + socklen_t addrLen = sizeof(clientAddr); + int clientSock = accept(serverSocket, (sockaddr*)&clientAddr, &addrLen); + if(clientSock < 0) { std::cerr << "Accept failed for client " << clientId << "\n"; return; } + clientSockets.push_back(clientSock); + std::cout << "Client " << clientId << " connected\n"; +} + +void sendMessage(int clientId) { + if(clientId <= 0 || clientId > clientSockets.size()) return; + const char* msg = "Hello from server"; + send(clientSockets[clientId-1], msg, strlen(msg), 0); + std::cout << "Sent message to client " << clientId << "\n"; +} + +int receiveAck(int clientId) { + if(clientId <= 0 || clientId > clientSockets.size()) return 0; + char buffer[1024]; + int len = recv(clientSockets[clientId-1], buffer, sizeof(buffer)-1, 0); + if(len <= 0) return 0; + buffer[len] = '\0'; + std::cout << "Received ACK from client " << clientId << ": " << buffer << "\n"; + return 1; +} + +void closeServer() { + for(auto sock : clientSockets) { + close(sock); + } + close(serverSocket); + cleanupSockets(); +} diff --git a/aerpaw/basic_demo/controller_impl.h b/aerpaw/basic_demo/controller_impl.h new file mode 100644 index 0000000..0e1328a --- /dev/null +++ b/aerpaw/basic_demo/controller_impl.h @@ -0,0 +1,18 @@ +#ifndef CONTROLLER_IMPL_H +#define CONTROLLER_IMPL_H + +#ifdef __cplusplus +extern "C" { +#endif + +void initServer(); +void acceptClient(int clientId); +void sendMessage(int clientId); +int receiveAck(int clientId); +void closeServer(); + +#ifdef __cplusplus +} +#endif + +#endif // CONTROLLER_IMPL_H diff --git a/aerpaw/basic_demo/controller_main.cpp b/aerpaw/basic_demo/controller_main.cpp new file mode 100644 index 0000000..7c495f0 --- /dev/null +++ b/aerpaw/basic_demo/controller_main.cpp @@ -0,0 +1,16 @@ +#include +#include "controller.h" // Generated by MATLAB Coder +#include "controller_impl.h" // Your TCP implementation header + +int main() { + // Number of clients to handle + int numClients = 2; // Example: change as needed + + std::cout << "Initializing TCP server...\n"; + + // Call MATLAB-generated server function + controller(numClients); + + std::cout << "Server finished.\n"; + return 0; +} diff --git a/aerpaw/basic_demo/rtwtypes.h b/aerpaw/basic_demo/rtwtypes.h new file mode 100644 index 0000000..85c8e3f --- /dev/null +++ b/aerpaw/basic_demo/rtwtypes.h @@ -0,0 +1,44 @@ +// +// Academic License - for use in teaching, academic research, and meeting +// course requirements at degree granting institutions only. Not for +// government, commercial, or other organizational use. +// +// rtwtypes.h +// +// Code generation for function 'controller' +// + +#ifndef RTWTYPES_H +#define RTWTYPES_H + +/*=======================================================================* + * Fixed width word size data types: * + * int64_T - signed 64 bit integers * + * uint64_T - unsigned 64 bit integers * + *=======================================================================*/ + +#if defined(__APPLE__) +#ifndef INT64_T +#define INT64_T long +#define FMT64 "l" +#if defined(__LP64__) && !defined(INT_TYPE_64_IS_LONG) +#define INT_TYPE_64_IS_LONG +#endif +#endif +#endif + +#if defined(__APPLE__) +#ifndef UINT64_T +#define UINT64_T unsigned long +#define FMT64 "l" +#if defined(__LP64__) && !defined(INT_TYPE_64_IS_LONG) +#define INT_TYPE_64_IS_LONG +#endif +#endif +#endif + +// Include files +#include "tmwtypes.h" + +#endif +// End of code generation (rtwtypes.h) diff --git a/aerpaw/basic_demo/uav.py b/aerpaw/basic_demo/uav.py new file mode 100755 index 0000000..d88f923 --- /dev/null +++ b/aerpaw/basic_demo/uav.py @@ -0,0 +1,13 @@ +#!/bin/python3 +import socket + +SERVER_IP = "127.0.0.1" +SERVER_PORT = 5000 + +for client_id in range(2): # match numClients + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + s.connect((SERVER_IP, SERVER_PORT)) + data = s.recv(1024) # receive message from server + print(f"Client {client_id+1} received: {data.decode()}") + s.sendall(b"ACK") # send acknowledgment + s.close() diff --git a/aerpaw/controller.coderprj b/aerpaw/controller.coderprj new file mode 100644 index 0000000..abdcf5b --- /dev/null +++ b/aerpaw/controller.coderprj @@ -0,0 +1,190 @@ + + + + + + + + + + + + + + + + + + + + + false + numClients + + + + true + + controller.m + + controller + + + + + + + int32 + + + + + + + + + + + + + + + + NOT_PLANNED + SUCCESS + MATLAB Host Computer + C++ + LIB + + + + LIB + /home/kdee/Desktop/miSim/aerpaw/codegen/lib/controller + + + CODEGEN_REPORT + + /home/kdee/Desktop/miSim/aerpaw/codegen/lib/controller/html/report.mldatx + + CODEGEN_REPORT + + + + /home/kdee/Desktop/miSim/aerpaw/codegen/lib/controller/controller.cpp + + GENERATED_SOURCE + + + + /home/kdee/Desktop/miSim/aerpaw/codegen/lib/controller/controller.h + + GENERATED_SOURCE + + + + /home/kdee/Desktop/miSim/aerpaw/codegen/lib/controller/controller_data.h + + GENERATED_SOURCE + + + + /home/kdee/Desktop/miSim/aerpaw/codegen/lib/controller/controller_impl.h + + GENERATED_SOURCE + + + + /home/kdee/Desktop/miSim/aerpaw/codegen/lib/controller/controller_initialize.cpp + + GENERATED_SOURCE + + + + /home/kdee/Desktop/miSim/aerpaw/codegen/lib/controller/controller_initialize.h + + GENERATED_SOURCE + + + + /home/kdee/Desktop/miSim/aerpaw/codegen/lib/controller/controller_terminate.cpp + + GENERATED_SOURCE + + + + /home/kdee/Desktop/miSim/aerpaw/codegen/lib/controller/controller_terminate.h + + GENERATED_SOURCE + + + + /home/kdee/Desktop/miSim/aerpaw/codegen/lib/controller/controller_types.h + + GENERATED_SOURCE + + + + /home/kdee/Desktop/miSim/aerpaw/codegen/lib/controller/rtwtypes.h + + GENERATED_SOURCE + + + + /home/kdee/Desktop/miSim/aerpaw/comms.cpp + + GENERATED_SOURCE + + + + /home/kdee/matlab/R2025a/extern/include/tmwtypes.h + + GENERATED_SOURCE + + + + /home/kdee/Desktop/miSim/aerpaw/codegen/lib/controller/examples/main.cpp + + GENERATED_SOURCE + + + + /home/kdee/Desktop/miSim/aerpaw/codegen/lib/controller/examples/main.h + + GENERATED_SOURCE + + + true + 2026-01-28T21:28:33 + + + + + + + + + customSource + + /home/kdee/Desktop/miSim/aerpaw/comms.cpp + + + + + targetLang + + C++ + + + + + + + + + + + + + + + diff --git a/aerpaw/controller.m b/aerpaw/controller.m new file mode 100644 index 0000000..cfb67d5 --- /dev/null +++ b/aerpaw/controller.m @@ -0,0 +1,59 @@ +function controller(numClients) +arguments (Input) + numClients (1, 1) int32; +end + +coder.extrinsic('disp'); + +% Initialize server +if coder.target('MATLAB') + disp('Initializing server (simulation)...'); +else + coder.cinclude('controller_impl.h'); + coder.ceval('initServer'); +end + + +% Accept clients +for i = 1:numClients + if coder.target('MATLAB') + disp(['Accepting client ', num2str(i)]); + else + coder.ceval('acceptClient', int32(i)); + end +end + + +% Send messages to clients +for i = 1:numClients + if coder.target('MATLAB') + disp(['Sending message to client ', num2str(i)]); + else + coder.ceval('sendMessage', int32(i)); + end +end + +% Receive acknowledgements +acksReceived = zeros(1, numClients, 'int32'); +for i = 1:numClients + if coder.target('MATLAB') + disp(['Receiving ACK from client ', num2str(i)]); + acksReceived(i) = 1; % Simulate successful ACK + else + acksReceived(i) = coder.ceval('receiveAck', int32(i)); + end +end + + +% Digest ACKs +if coder.target('MATLAB') + disp(['All ACKs received: ', num2str(acksReceived)]); +end + + +% Close server +if ~coder.target('MATLAB') + coder.ceval('closeServer'); +end + +end \ No newline at end of file diff --git a/aerpaw/cpp/udp_comm.cpp b/aerpaw/cpp/udp_comm.cpp new file mode 100644 index 0000000..c3fd63c --- /dev/null +++ b/aerpaw/cpp/udp_comm.cpp @@ -0,0 +1,32 @@ +#include "udp_comm.h" +#include +#include +#include +#include + +static int sock = -1; +static sockaddr_in remote_addr; + +void initComms(const char* ip, uint16_t port) +{ + if (sock != -1) return; + + sock = socket(AF_INET, SOCK_DGRAM, 0); + + memset(&remote_addr, 0, sizeof(remote_addr)); + remote_addr.sin_family = AF_INET; + remote_addr.sin_port = htons(port); + inet_pton(AF_INET, ip, &remote_addr.sin_addr); +} + +void sendTarget(const double* pos) +{ + sendto(sock, pos, 3*sizeof(double), 0, + (sockaddr*)&remote_addr, sizeof(remote_addr)); +} + +void recvOpMode(uint8_t* mode) +{ + recvfrom(sock, mode, sizeof(uint8_t), MSG_DONTWAIT, + nullptr, nullptr); +} \ No newline at end of file diff --git a/aerpaw/cpp/udp_comm.h b/aerpaw/cpp/udp_comm.h new file mode 100644 index 0000000..480d755 --- /dev/null +++ b/aerpaw/cpp/udp_comm.h @@ -0,0 +1,15 @@ +#ifndef UDP_COMM_H +#define UDP_COMM_H + +#ifdef __cplusplus +extern "C" { +#endif + +void initComms(const char* ip, uint16_t port); +void sendTarget(const double* pos); + +#ifdef __cplusplus +} +#endif + +#endif \ No newline at end of file diff --git a/aerpaw/experiment.m b/aerpaw/experiment.m deleted file mode 100644 index e324df2..0000000 --- a/aerpaw/experiment.m +++ /dev/null @@ -1,3 +0,0 @@ -classdef experiment - -end \ No newline at end of file diff --git a/aerpaw/experiments.m b/aerpaw/experiments.m new file mode 100644 index 0000000..47cd4da --- /dev/null +++ b/aerpaw/experiments.m @@ -0,0 +1,16 @@ +classdef experiments < matlab.unittest.TestCase + methods (Test) + function Test1(tc) + s = scenario; + + % TODO - define test case in simulation in here and generate the inits on the fly as needed + s = s.initialize("2026_01_28_16_11_39_miSimInits.mat"); + + s = s.run(); + + + + end + end + +end \ No newline at end of file diff --git a/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/2At36Gb0jC6HQmgXbAN4ShlbqAgd.xml b/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/2At36Gb0jC6HQmgXbAN4ShlbqAgd.xml new file mode 100644 index 0000000..4356a6a --- /dev/null +++ b/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/2At36Gb0jC6HQmgXbAN4ShlbqAgd.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/2At36Gb0jC6HQmgXbAN4ShlbqAgp.xml b/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/2At36Gb0jC6HQmgXbAN4ShlbqAgp.xml new file mode 100644 index 0000000..01cb34e --- /dev/null +++ b/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/2At36Gb0jC6HQmgXbAN4ShlbqAgp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/SIL3u_W39LwE7HHYsarfFmr9gVQ/BtZvZtLyHugR7nfGjg6ukY77EG0d.xml b/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/DT1kUQeJY6fcqPoFwxbXgNUS8lId.xml similarity index 100% rename from resources/project/SIL3u_W39LwE7HHYsarfFmr9gVQ/BtZvZtLyHugR7nfGjg6ukY77EG0d.xml rename to resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/DT1kUQeJY6fcqPoFwxbXgNUS8lId.xml diff --git a/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/DT1kUQeJY6fcqPoFwxbXgNUS8lIp.xml b/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/DT1kUQeJY6fcqPoFwxbXgNUS8lIp.xml new file mode 100644 index 0000000..7625d02 --- /dev/null +++ b/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/DT1kUQeJY6fcqPoFwxbXgNUS8lIp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/KtdYjPriN9I6DGnwvLHvl_xju8cd.xml b/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/KtdYjPriN9I6DGnwvLHvl_xju8cd.xml new file mode 100644 index 0000000..99772b4 --- /dev/null +++ b/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/KtdYjPriN9I6DGnwvLHvl_xju8cd.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/KtdYjPriN9I6DGnwvLHvl_xju8cp.xml b/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/KtdYjPriN9I6DGnwvLHvl_xju8cp.xml new file mode 100644 index 0000000..8ae81d3 --- /dev/null +++ b/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/KtdYjPriN9I6DGnwvLHvl_xju8cp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/PQMatyuPaDoQ3G5VI3BFyjZnrs8d.xml b/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/PQMatyuPaDoQ3G5VI3BFyjZnrs8d.xml new file mode 100644 index 0000000..99772b4 --- /dev/null +++ b/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/PQMatyuPaDoQ3G5VI3BFyjZnrs8d.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/PQMatyuPaDoQ3G5VI3BFyjZnrs8p.xml b/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/PQMatyuPaDoQ3G5VI3BFyjZnrs8p.xml new file mode 100644 index 0000000..ca3fd64 --- /dev/null +++ b/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/PQMatyuPaDoQ3G5VI3BFyjZnrs8p.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/SKpQU057yTGLn9b7Hh4v5-10P0gd.xml b/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/SKpQU057yTGLn9b7Hh4v5-10P0gd.xml new file mode 100644 index 0000000..99772b4 --- /dev/null +++ b/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/SKpQU057yTGLn9b7Hh4v5-10P0gd.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/SKpQU057yTGLn9b7Hh4v5-10P0gp.xml b/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/SKpQU057yTGLn9b7Hh4v5-10P0gp.xml new file mode 100644 index 0000000..324d3fc --- /dev/null +++ b/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/SKpQU057yTGLn9b7Hh4v5-10P0gp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/W_Z6-ElH4gIbv9BScRTmQUQJ9Dkd.xml b/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/W_Z6-ElH4gIbv9BScRTmQUQJ9Dkd.xml new file mode 100644 index 0000000..99772b4 --- /dev/null +++ b/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/W_Z6-ElH4gIbv9BScRTmQUQJ9Dkd.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/W_Z6-ElH4gIbv9BScRTmQUQJ9Dkp.xml b/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/W_Z6-ElH4gIbv9BScRTmQUQJ9Dkp.xml new file mode 100644 index 0000000..c37029c --- /dev/null +++ b/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/W_Z6-ElH4gIbv9BScRTmQUQJ9Dkp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/jgOJohqRy86fwKjFIbPiQBzesd0d.xml b/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/jgOJohqRy86fwKjFIbPiQBzesd0d.xml new file mode 100644 index 0000000..99772b4 --- /dev/null +++ b/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/jgOJohqRy86fwKjFIbPiQBzesd0d.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/jgOJohqRy86fwKjFIbPiQBzesd0p.xml b/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/jgOJohqRy86fwKjFIbPiQBzesd0p.xml new file mode 100644 index 0000000..f8aa85c --- /dev/null +++ b/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/jgOJohqRy86fwKjFIbPiQBzesd0p.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/uqjVJgVIW1gykl7rcImcpGWqgpkd.xml b/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/uqjVJgVIW1gykl7rcImcpGWqgpkd.xml new file mode 100644 index 0000000..4356a6a --- /dev/null +++ b/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/uqjVJgVIW1gykl7rcImcpGWqgpkd.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/uqjVJgVIW1gykl7rcImcpGWqgpkp.xml b/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/uqjVJgVIW1gykl7rcImcpGWqgpkp.xml new file mode 100644 index 0000000..4ba9f39 --- /dev/null +++ b/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/uqjVJgVIW1gykl7rcImcpGWqgpkp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/wBj8Oz_Uyr5PhZoBdLum-5Y72pwd.xml b/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/wBj8Oz_Uyr5PhZoBdLum-5Y72pwd.xml new file mode 100644 index 0000000..99772b4 --- /dev/null +++ b/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/wBj8Oz_Uyr5PhZoBdLum-5Y72pwd.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/wBj8Oz_Uyr5PhZoBdLum-5Y72pwp.xml b/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/wBj8Oz_Uyr5PhZoBdLum-5Y72pwp.xml new file mode 100644 index 0000000..1b76f50 --- /dev/null +++ b/resources/project/4XBBbvgKHLBtx6tMwElTfwSe284/wBj8Oz_Uyr5PhZoBdLum-5Y72pwp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/g51F4J1JIzbS5d3g380Sl55RzeUd.xml b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/g51F4J1JIzbS5d3g380Sl55RzeUd.xml new file mode 100644 index 0000000..c2a83cd --- /dev/null +++ b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/g51F4J1JIzbS5d3g380Sl55RzeUd.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/g51F4J1JIzbS5d3g380Sl55RzeUp.xml b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/g51F4J1JIzbS5d3g380Sl55RzeUp.xml new file mode 100644 index 0000000..22bb13c --- /dev/null +++ b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/g51F4J1JIzbS5d3g380Sl55RzeUp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/vvkdLmboxiWCk6Hhn0GbursF9fUd.xml b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/vvkdLmboxiWCk6Hhn0GbursF9fUd.xml new file mode 100644 index 0000000..1034b5b --- /dev/null +++ b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/vvkdLmboxiWCk6Hhn0GbursF9fUd.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/vvkdLmboxiWCk6Hhn0GbursF9fUp.xml b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/vvkdLmboxiWCk6Hhn0GbursF9fUp.xml new file mode 100644 index 0000000..803e56c --- /dev/null +++ b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/vvkdLmboxiWCk6Hhn0GbursF9fUp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/FI0gxbH-PhwjE_riDQGHPyYMHks/_Ys1ic_sNZf0m_ccxSjoiz6J7JUd.xml b/resources/project/FI0gxbH-PhwjE_riDQGHPyYMHks/_Ys1ic_sNZf0m_ccxSjoiz6J7JUd.xml new file mode 100644 index 0000000..4356a6a --- /dev/null +++ b/resources/project/FI0gxbH-PhwjE_riDQGHPyYMHks/_Ys1ic_sNZf0m_ccxSjoiz6J7JUd.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/FI0gxbH-PhwjE_riDQGHPyYMHks/_Ys1ic_sNZf0m_ccxSjoiz6J7JUp.xml b/resources/project/FI0gxbH-PhwjE_riDQGHPyYMHks/_Ys1ic_sNZf0m_ccxSjoiz6J7JUp.xml new file mode 100644 index 0000000..74c5707 --- /dev/null +++ b/resources/project/FI0gxbH-PhwjE_riDQGHPyYMHks/_Ys1ic_sNZf0m_ccxSjoiz6J7JUp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/4XBBbvgKHLBtx6tMwElTfwSe284d.xml b/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/4XBBbvgKHLBtx6tMwElTfwSe284d.xml new file mode 100644 index 0000000..4356a6a --- /dev/null +++ b/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/4XBBbvgKHLBtx6tMwElTfwSe284d.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/4XBBbvgKHLBtx6tMwElTfwSe284p.xml b/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/4XBBbvgKHLBtx6tMwElTfwSe284p.xml new file mode 100644 index 0000000..a0fcfbf --- /dev/null +++ b/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/4XBBbvgKHLBtx6tMwElTfwSe284p.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/8r7PXt-CEJX2YvR04X9eMkzrlZQd.xml b/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/8r7PXt-CEJX2YvR04X9eMkzrlZQd.xml new file mode 100644 index 0000000..4356a6a --- /dev/null +++ b/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/8r7PXt-CEJX2YvR04X9eMkzrlZQd.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/8r7PXt-CEJX2YvR04X9eMkzrlZQp.xml b/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/8r7PXt-CEJX2YvR04X9eMkzrlZQp.xml new file mode 100644 index 0000000..70ece17 --- /dev/null +++ b/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/8r7PXt-CEJX2YvR04X9eMkzrlZQp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/DCnJpF90C2dRw1sMuzFvVjgI3Xkd.xml b/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/DCnJpF90C2dRw1sMuzFvVjgI3Xkd.xml new file mode 100644 index 0000000..378b613 --- /dev/null +++ b/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/DCnJpF90C2dRw1sMuzFvVjgI3Xkd.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/DCnJpF90C2dRw1sMuzFvVjgI3Xkp.xml b/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/DCnJpF90C2dRw1sMuzFvVjgI3Xkp.xml new file mode 100644 index 0000000..56c3467 --- /dev/null +++ b/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/DCnJpF90C2dRw1sMuzFvVjgI3Xkp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/IJIwz-tE73_VBQ8ICY5avibK2S0d.xml b/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/IJIwz-tE73_VBQ8ICY5avibK2S0d.xml new file mode 100644 index 0000000..4356a6a --- /dev/null +++ b/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/IJIwz-tE73_VBQ8ICY5avibK2S0d.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/IJIwz-tE73_VBQ8ICY5avibK2S0p.xml b/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/IJIwz-tE73_VBQ8ICY5avibK2S0p.xml new file mode 100644 index 0000000..6b992e9 --- /dev/null +++ b/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/IJIwz-tE73_VBQ8ICY5avibK2S0p.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/ZjNKXjZG-sRsDFhILe8NAy5Dpp0d.xml b/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/ZjNKXjZG-sRsDFhILe8NAy5Dpp0d.xml new file mode 100644 index 0000000..4356a6a --- /dev/null +++ b/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/ZjNKXjZG-sRsDFhILe8NAy5Dpp0d.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/ZjNKXjZG-sRsDFhILe8NAy5Dpp0p.xml b/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/ZjNKXjZG-sRsDFhILe8NAy5Dpp0p.xml new file mode 100644 index 0000000..c07fb6a --- /dev/null +++ b/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/ZjNKXjZG-sRsDFhILe8NAy5Dpp0p.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/jZWe5SL5GmZq60hXzvoW4_evBGgd.xml b/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/jZWe5SL5GmZq60hXzvoW4_evBGgd.xml new file mode 100644 index 0000000..99772b4 --- /dev/null +++ b/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/jZWe5SL5GmZq60hXzvoW4_evBGgd.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/jZWe5SL5GmZq60hXzvoW4_evBGgp.xml b/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/jZWe5SL5GmZq60hXzvoW4_evBGgp.xml new file mode 100644 index 0000000..0956e95 --- /dev/null +++ b/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/jZWe5SL5GmZq60hXzvoW4_evBGgp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/m4CvAO0shQN-qrRBv-GjfKG2Ds0d.xml b/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/m4CvAO0shQN-qrRBv-GjfKG2Ds0d.xml new file mode 100644 index 0000000..99772b4 --- /dev/null +++ b/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/m4CvAO0shQN-qrRBv-GjfKG2Ds0d.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/m4CvAO0shQN-qrRBv-GjfKG2Ds0p.xml b/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/m4CvAO0shQN-qrRBv-GjfKG2Ds0p.xml new file mode 100644 index 0000000..870f1aa --- /dev/null +++ b/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/m4CvAO0shQN-qrRBv-GjfKG2Ds0p.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/qyPEe0esGV4zUGuHoZBBbbGIM5od.xml b/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/qyPEe0esGV4zUGuHoZBBbbGIM5od.xml new file mode 100644 index 0000000..4356a6a --- /dev/null +++ b/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/qyPEe0esGV4zUGuHoZBBbbGIM5od.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/qyPEe0esGV4zUGuHoZBBbbGIM5op.xml b/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/qyPEe0esGV4zUGuHoZBBbbGIM5op.xml new file mode 100644 index 0000000..f0bab46 --- /dev/null +++ b/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/qyPEe0esGV4zUGuHoZBBbbGIM5op.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/yPgOee5TXt0c6zIOLdFgRaTVGogd.xml b/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/yPgOee5TXt0c6zIOLdFgRaTVGogd.xml new file mode 100644 index 0000000..4356a6a --- /dev/null +++ b/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/yPgOee5TXt0c6zIOLdFgRaTVGogd.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/yPgOee5TXt0c6zIOLdFgRaTVGogp.xml b/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/yPgOee5TXt0c6zIOLdFgRaTVGogp.xml new file mode 100644 index 0000000..c2b9a2c --- /dev/null +++ b/resources/project/Gnz6T47dAsmf4YcBHB3EkpeZeYA/yPgOee5TXt0c6zIOLdFgRaTVGogp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/IJIwz-tE73_VBQ8ICY5avibK2S0/7GUhSG5a7UXVHDp6DqX4w2hrX7gd.xml b/resources/project/IJIwz-tE73_VBQ8ICY5avibK2S0/7GUhSG5a7UXVHDp6DqX4w2hrX7gd.xml new file mode 100644 index 0000000..99772b4 --- /dev/null +++ b/resources/project/IJIwz-tE73_VBQ8ICY5avibK2S0/7GUhSG5a7UXVHDp6DqX4w2hrX7gd.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/resources/project/IJIwz-tE73_VBQ8ICY5avibK2S0/7GUhSG5a7UXVHDp6DqX4w2hrX7gp.xml b/resources/project/IJIwz-tE73_VBQ8ICY5avibK2S0/7GUhSG5a7UXVHDp6DqX4w2hrX7gp.xml new file mode 100644 index 0000000..844d632 --- /dev/null +++ b/resources/project/IJIwz-tE73_VBQ8ICY5avibK2S0/7GUhSG5a7UXVHDp6DqX4w2hrX7gp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/IJIwz-tE73_VBQ8ICY5avibK2S0/DXLhLhkCzaWF6gYpAk_ChXFr2KAd.xml b/resources/project/IJIwz-tE73_VBQ8ICY5avibK2S0/DXLhLhkCzaWF6gYpAk_ChXFr2KAd.xml new file mode 100644 index 0000000..99772b4 --- /dev/null +++ b/resources/project/IJIwz-tE73_VBQ8ICY5avibK2S0/DXLhLhkCzaWF6gYpAk_ChXFr2KAd.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/resources/project/IJIwz-tE73_VBQ8ICY5avibK2S0/DXLhLhkCzaWF6gYpAk_ChXFr2KAp.xml b/resources/project/IJIwz-tE73_VBQ8ICY5avibK2S0/DXLhLhkCzaWF6gYpAk_ChXFr2KAp.xml new file mode 100644 index 0000000..6fcfc29 --- /dev/null +++ b/resources/project/IJIwz-tE73_VBQ8ICY5avibK2S0/DXLhLhkCzaWF6gYpAk_ChXFr2KAp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/IJIwz-tE73_VBQ8ICY5avibK2S0/Fl4xDREAxKbflqvswdZKpwkwTDEd.xml b/resources/project/IJIwz-tE73_VBQ8ICY5avibK2S0/Fl4xDREAxKbflqvswdZKpwkwTDEd.xml new file mode 100644 index 0000000..4356a6a --- /dev/null +++ b/resources/project/IJIwz-tE73_VBQ8ICY5avibK2S0/Fl4xDREAxKbflqvswdZKpwkwTDEd.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/IJIwz-tE73_VBQ8ICY5avibK2S0/Fl4xDREAxKbflqvswdZKpwkwTDEp.xml b/resources/project/IJIwz-tE73_VBQ8ICY5avibK2S0/Fl4xDREAxKbflqvswdZKpwkwTDEp.xml new file mode 100644 index 0000000..01cb34e --- /dev/null +++ b/resources/project/IJIwz-tE73_VBQ8ICY5avibK2S0/Fl4xDREAxKbflqvswdZKpwkwTDEp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/IJIwz-tE73_VBQ8ICY5avibK2S0/Lhjp7TB6gCFEdw4kpybws1qHm9Ud.xml b/resources/project/IJIwz-tE73_VBQ8ICY5avibK2S0/Lhjp7TB6gCFEdw4kpybws1qHm9Ud.xml new file mode 100644 index 0000000..99772b4 --- /dev/null +++ b/resources/project/IJIwz-tE73_VBQ8ICY5avibK2S0/Lhjp7TB6gCFEdw4kpybws1qHm9Ud.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/resources/project/IJIwz-tE73_VBQ8ICY5avibK2S0/Lhjp7TB6gCFEdw4kpybws1qHm9Up.xml b/resources/project/IJIwz-tE73_VBQ8ICY5avibK2S0/Lhjp7TB6gCFEdw4kpybws1qHm9Up.xml new file mode 100644 index 0000000..fa915a2 --- /dev/null +++ b/resources/project/IJIwz-tE73_VBQ8ICY5avibK2S0/Lhjp7TB6gCFEdw4kpybws1qHm9Up.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/IJIwz-tE73_VBQ8ICY5avibK2S0/ce2AFn-uyNz1adDQ8rfBjxb1z3Ed.xml b/resources/project/IJIwz-tE73_VBQ8ICY5avibK2S0/ce2AFn-uyNz1adDQ8rfBjxb1z3Ed.xml new file mode 100644 index 0000000..99772b4 --- /dev/null +++ b/resources/project/IJIwz-tE73_VBQ8ICY5avibK2S0/ce2AFn-uyNz1adDQ8rfBjxb1z3Ed.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/resources/project/IJIwz-tE73_VBQ8ICY5avibK2S0/ce2AFn-uyNz1adDQ8rfBjxb1z3Ep.xml b/resources/project/IJIwz-tE73_VBQ8ICY5avibK2S0/ce2AFn-uyNz1adDQ8rfBjxb1z3Ep.xml new file mode 100644 index 0000000..a6be923 --- /dev/null +++ b/resources/project/IJIwz-tE73_VBQ8ICY5avibK2S0/ce2AFn-uyNz1adDQ8rfBjxb1z3Ep.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/IJIwz-tE73_VBQ8ICY5avibK2S0/tCrFgCGq4uYlNvytkkLqXVSMdFAd.xml b/resources/project/IJIwz-tE73_VBQ8ICY5avibK2S0/tCrFgCGq4uYlNvytkkLqXVSMdFAd.xml new file mode 100644 index 0000000..99772b4 --- /dev/null +++ b/resources/project/IJIwz-tE73_VBQ8ICY5avibK2S0/tCrFgCGq4uYlNvytkkLqXVSMdFAd.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/resources/project/IJIwz-tE73_VBQ8ICY5avibK2S0/tCrFgCGq4uYlNvytkkLqXVSMdFAp.xml b/resources/project/IJIwz-tE73_VBQ8ICY5avibK2S0/tCrFgCGq4uYlNvytkkLqXVSMdFAp.xml new file mode 100644 index 0000000..9bc5a07 --- /dev/null +++ b/resources/project/IJIwz-tE73_VBQ8ICY5avibK2S0/tCrFgCGq4uYlNvytkkLqXVSMdFAp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/SIL3u_W39LwE7HHYsarfFmr9gVQ/BtZvZtLyHugR7nfGjg6ukY77EG0p.xml b/resources/project/SIL3u_W39LwE7HHYsarfFmr9gVQ/BtZvZtLyHugR7nfGjg6ukY77EG0p.xml deleted file mode 100644 index 54e0a8a..0000000 --- a/resources/project/SIL3u_W39LwE7HHYsarfFmr9gVQ/BtZvZtLyHugR7nfGjg6ukY77EG0p.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/resources/project/SIL3u_W39LwE7HHYsarfFmr9gVQ/h1bzoK7TyH-zBPdL32X_nIgU2N8d.xml b/resources/project/SIL3u_W39LwE7HHYsarfFmr9gVQ/h1bzoK7TyH-zBPdL32X_nIgU2N8d.xml new file mode 100644 index 0000000..99772b4 --- /dev/null +++ b/resources/project/SIL3u_W39LwE7HHYsarfFmr9gVQ/h1bzoK7TyH-zBPdL32X_nIgU2N8d.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/resources/project/SIL3u_W39LwE7HHYsarfFmr9gVQ/h1bzoK7TyH-zBPdL32X_nIgU2N8p.xml b/resources/project/SIL3u_W39LwE7HHYsarfFmr9gVQ/h1bzoK7TyH-zBPdL32X_nIgU2N8p.xml new file mode 100644 index 0000000..3c8f41d --- /dev/null +++ b/resources/project/SIL3u_W39LwE7HHYsarfFmr9gVQ/h1bzoK7TyH-zBPdL32X_nIgU2N8p.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/ZjNKXjZG-sRsDFhILe8NAy5Dpp0/6mQ2v_zwchG2NbhdXskhyw1Og4gd.xml b/resources/project/ZjNKXjZG-sRsDFhILe8NAy5Dpp0/6mQ2v_zwchG2NbhdXskhyw1Og4gd.xml new file mode 100644 index 0000000..4356a6a --- /dev/null +++ b/resources/project/ZjNKXjZG-sRsDFhILe8NAy5Dpp0/6mQ2v_zwchG2NbhdXskhyw1Og4gd.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/ZjNKXjZG-sRsDFhILe8NAy5Dpp0/6mQ2v_zwchG2NbhdXskhyw1Og4gp.xml b/resources/project/ZjNKXjZG-sRsDFhILe8NAy5Dpp0/6mQ2v_zwchG2NbhdXskhyw1Og4gp.xml new file mode 100644 index 0000000..01cb34e --- /dev/null +++ b/resources/project/ZjNKXjZG-sRsDFhILe8NAy5Dpp0/6mQ2v_zwchG2NbhdXskhyw1Og4gp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/ZjNKXjZG-sRsDFhILe8NAy5Dpp0/_KxFNwPR7rYYPY2ibP4KLhWB84Qd.xml b/resources/project/ZjNKXjZG-sRsDFhILe8NAy5Dpp0/_KxFNwPR7rYYPY2ibP4KLhWB84Qd.xml new file mode 100644 index 0000000..99772b4 --- /dev/null +++ b/resources/project/ZjNKXjZG-sRsDFhILe8NAy5Dpp0/_KxFNwPR7rYYPY2ibP4KLhWB84Qd.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/resources/project/ZjNKXjZG-sRsDFhILe8NAy5Dpp0/_KxFNwPR7rYYPY2ibP4KLhWB84Qp.xml b/resources/project/ZjNKXjZG-sRsDFhILe8NAy5Dpp0/_KxFNwPR7rYYPY2ibP4KLhWB84Qp.xml new file mode 100644 index 0000000..844d632 --- /dev/null +++ b/resources/project/ZjNKXjZG-sRsDFhILe8NAy5Dpp0/_KxFNwPR7rYYPY2ibP4KLhWB84Qp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/ZjNKXjZG-sRsDFhILe8NAy5Dpp0/pZeBssw-K0rx8h6GbiB7dV60-ugd.xml b/resources/project/ZjNKXjZG-sRsDFhILe8NAy5Dpp0/pZeBssw-K0rx8h6GbiB7dV60-ugd.xml new file mode 100644 index 0000000..99772b4 --- /dev/null +++ b/resources/project/ZjNKXjZG-sRsDFhILe8NAy5Dpp0/pZeBssw-K0rx8h6GbiB7dV60-ugd.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/resources/project/ZjNKXjZG-sRsDFhILe8NAy5Dpp0/pZeBssw-K0rx8h6GbiB7dV60-ugp.xml b/resources/project/ZjNKXjZG-sRsDFhILe8NAy5Dpp0/pZeBssw-K0rx8h6GbiB7dV60-ugp.xml new file mode 100644 index 0000000..21e3f5f --- /dev/null +++ b/resources/project/ZjNKXjZG-sRsDFhILe8NAy5Dpp0/pZeBssw-K0rx8h6GbiB7dV60-ugp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/ZjNKXjZG-sRsDFhILe8NAy5Dpp0/z8tfH801F26HKib3tGcYRNFx_9Md.xml b/resources/project/ZjNKXjZG-sRsDFhILe8NAy5Dpp0/z8tfH801F26HKib3tGcYRNFx_9Md.xml new file mode 100644 index 0000000..99772b4 --- /dev/null +++ b/resources/project/ZjNKXjZG-sRsDFhILe8NAy5Dpp0/z8tfH801F26HKib3tGcYRNFx_9Md.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/resources/project/ZjNKXjZG-sRsDFhILe8NAy5Dpp0/z8tfH801F26HKib3tGcYRNFx_9Mp.xml b/resources/project/ZjNKXjZG-sRsDFhILe8NAy5Dpp0/z8tfH801F26HKib3tGcYRNFx_9Mp.xml new file mode 100644 index 0000000..d2a9001 --- /dev/null +++ b/resources/project/ZjNKXjZG-sRsDFhILe8NAy5Dpp0/z8tfH801F26HKib3tGcYRNFx_9Mp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/qyPEe0esGV4zUGuHoZBBbbGIM5o/3SS_Oi25FWjc4irpVUXk8BppgWUd.xml b/resources/project/qyPEe0esGV4zUGuHoZBBbbGIM5o/3SS_Oi25FWjc4irpVUXk8BppgWUd.xml new file mode 100644 index 0000000..99772b4 --- /dev/null +++ b/resources/project/qyPEe0esGV4zUGuHoZBBbbGIM5o/3SS_Oi25FWjc4irpVUXk8BppgWUd.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/resources/project/qyPEe0esGV4zUGuHoZBBbbGIM5o/3SS_Oi25FWjc4irpVUXk8BppgWUp.xml b/resources/project/qyPEe0esGV4zUGuHoZBBbbGIM5o/3SS_Oi25FWjc4irpVUXk8BppgWUp.xml new file mode 100644 index 0000000..dd43736 --- /dev/null +++ b/resources/project/qyPEe0esGV4zUGuHoZBBbbGIM5o/3SS_Oi25FWjc4irpVUXk8BppgWUp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/qyPEe0esGV4zUGuHoZBBbbGIM5o/5IKlFVZg8NRK_lpPXq5EzGgzrBwd.xml b/resources/project/qyPEe0esGV4zUGuHoZBBbbGIM5o/5IKlFVZg8NRK_lpPXq5EzGgzrBwd.xml new file mode 100644 index 0000000..4356a6a --- /dev/null +++ b/resources/project/qyPEe0esGV4zUGuHoZBBbbGIM5o/5IKlFVZg8NRK_lpPXq5EzGgzrBwd.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/qyPEe0esGV4zUGuHoZBBbbGIM5o/5IKlFVZg8NRK_lpPXq5EzGgzrBwp.xml b/resources/project/qyPEe0esGV4zUGuHoZBBbbGIM5o/5IKlFVZg8NRK_lpPXq5EzGgzrBwp.xml new file mode 100644 index 0000000..01cb34e --- /dev/null +++ b/resources/project/qyPEe0esGV4zUGuHoZBBbbGIM5o/5IKlFVZg8NRK_lpPXq5EzGgzrBwp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/qyPEe0esGV4zUGuHoZBBbbGIM5o/HDdMOLkzfWNsdpqRunt9wIQGerwd.xml b/resources/project/qyPEe0esGV4zUGuHoZBBbbGIM5o/HDdMOLkzfWNsdpqRunt9wIQGerwd.xml new file mode 100644 index 0000000..99772b4 --- /dev/null +++ b/resources/project/qyPEe0esGV4zUGuHoZBBbbGIM5o/HDdMOLkzfWNsdpqRunt9wIQGerwd.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/resources/project/qyPEe0esGV4zUGuHoZBBbbGIM5o/HDdMOLkzfWNsdpqRunt9wIQGerwp.xml b/resources/project/qyPEe0esGV4zUGuHoZBBbbGIM5o/HDdMOLkzfWNsdpqRunt9wIQGerwp.xml new file mode 100644 index 0000000..98dade5 --- /dev/null +++ b/resources/project/qyPEe0esGV4zUGuHoZBBbbGIM5o/HDdMOLkzfWNsdpqRunt9wIQGerwp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/yPgOee5TXt0c6zIOLdFgRaTVGog/vppv7WJDApfsoixY2oInidT6wGod.xml b/resources/project/yPgOee5TXt0c6zIOLdFgRaTVGog/vppv7WJDApfsoixY2oInidT6wGod.xml new file mode 100644 index 0000000..4356a6a --- /dev/null +++ b/resources/project/yPgOee5TXt0c6zIOLdFgRaTVGog/vppv7WJDApfsoixY2oInidT6wGod.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/yPgOee5TXt0c6zIOLdFgRaTVGog/vppv7WJDApfsoixY2oInidT6wGop.xml b/resources/project/yPgOee5TXt0c6zIOLdFgRaTVGog/vppv7WJDApfsoixY2oInidT6wGop.xml new file mode 100644 index 0000000..01cb34e --- /dev/null +++ b/resources/project/yPgOee5TXt0c6zIOLdFgRaTVGog/vppv7WJDApfsoixY2oInidT6wGop.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/test/parametricTestSuite.m b/test/parametricTestSuite.m index 14985a1..f014593 100644 --- a/test/parametricTestSuite.m +++ b/test/parametricTestSuite.m @@ -50,7 +50,8 @@ classdef parametricTestSuite < matlab.unittest.TestCase params = struct("timestep", csv.timestep, "maxIter", csv.maxIter, "minAlt", csv.minAlt, "discretizationStep", csv.discretizationStep, ... "protectedRange", csv.protectedRange, "sensorPerformanceMinimum", csv.sensorPerformanceMinimum, "initialStepSize", csv.initialStepSize, ... "barrierGain", csv.barrierGain, "barrierExponent", csv.barrierExponent, "numObstacles", csv.numObstacles,... - "numAgents", csv.numAgents, "collisionRadius", csv.collisionRadius, "comRange", csv.comRange, "alphaDist", csv.alphaDist, "betaDist", csv.betaDist, "alphaTilt", csv.alphaTilt, "betaTilt", csv.betaTilt); + "numAgents", csv.numAgents, "collisionRadius", csv.collisionRadius, "comRange", csv.comRange, "alphaDist", csv.alphaDist, ... + "betaDist", csv.betaDist, "alphaTilt", csv.alphaTilt, "betaTilt", csv.betaTilt); end end @@ -203,7 +204,7 @@ classdef parametricTestSuite < matlab.unittest.TestCase tc.testClass = tc.testClass.initialize(tc.domain, agents, params.barrierGain(ii), params.barrierExponent(ii), params.minAlt(ii), params.timestep(ii), params.maxIter(ii), obstacles, tc.makePlots, tc.makeVideo); % Save simulation parameters to output file - tc.testClass.writeParams(); + tc.testClass.writeInits(); % Run tc.testClass = tc.testClass.run();