commit 475b8d16bc184e81e16ceb85bb80b63fe2fb5f69 Author: Aik-Siong Koh Date: Wed Apr 26 17:23:31 2023 -0600 First commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fdeeb7b --- /dev/null +++ b/.gitignore @@ -0,0 +1,35 @@ +# Prerequisites +*.d + +# Compiled Object files +*.slo +*.lo +*.o +*.obj + +# Precompiled Headers +*.gch +*.pch + +# Compiled Dynamic libraries +*.so +*.dylib +*.dll + +# Fortran module files +*.mod +*.smod + +# Compiled Static libraries +*.lai +*.la +*.a +*.lib + +# Executables +*.exe +*.out +*.app + +.vs +x64/ \ No newline at end of file diff --git a/MbDCode.sln b/MbDCode.sln new file mode 100644 index 0000000..c42740d --- /dev/null +++ b/MbDCode.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.5.33530.505 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MbDCode", "MbDCode\MbDCode.vcxproj", "{80F56CBC-B685-4C36-B834-A2DCDF0A98B7}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {80F56CBC-B685-4C36-B834-A2DCDF0A98B7}.Debug|x64.ActiveCfg = Debug|x64 + {80F56CBC-B685-4C36-B834-A2DCDF0A98B7}.Debug|x64.Build.0 = Debug|x64 + {80F56CBC-B685-4C36-B834-A2DCDF0A98B7}.Debug|x86.ActiveCfg = Debug|Win32 + {80F56CBC-B685-4C36-B834-A2DCDF0A98B7}.Debug|x86.Build.0 = Debug|Win32 + {80F56CBC-B685-4C36-B834-A2DCDF0A98B7}.Release|x64.ActiveCfg = Release|x64 + {80F56CBC-B685-4C36-B834-A2DCDF0A98B7}.Release|x64.Build.0 = Release|x64 + {80F56CBC-B685-4C36-B834-A2DCDF0A98B7}.Release|x86.ActiveCfg = Release|Win32 + {80F56CBC-B685-4C36-B834-A2DCDF0A98B7}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {BD48A6EF-4E93-4C09-BCE1-84F0439DB2D9} + EndGlobalSection +EndGlobal diff --git a/MbDCode/AbsConstraint.cpp b/MbDCode/AbsConstraint.cpp new file mode 100644 index 0000000..3e8a9c6 --- /dev/null +++ b/MbDCode/AbsConstraint.cpp @@ -0,0 +1 @@ +#include "AbsConstraint.h" diff --git a/MbDCode/AbsConstraint.h b/MbDCode/AbsConstraint.h new file mode 100644 index 0000000..d18ff60 --- /dev/null +++ b/MbDCode/AbsConstraint.h @@ -0,0 +1,12 @@ +#pragma once +#include "Constraint.h" +namespace MbD { + class AbsConstraint : + public Constraint + { + //axis iqXminusOnePlusAxis + int axis; + int iqXminusOnePlusAxis; + }; +} + diff --git a/MbDCode/Array.cpp b/MbDCode/Array.cpp new file mode 100644 index 0000000..172253a --- /dev/null +++ b/MbDCode/Array.cpp @@ -0,0 +1 @@ +#include "Array.h" diff --git a/MbDCode/Array.h b/MbDCode/Array.h new file mode 100644 index 0000000..eb1f4fd --- /dev/null +++ b/MbDCode/Array.h @@ -0,0 +1,14 @@ +#pragma once +#include + +namespace MbD { + template + class Array : public std::vector + { + public: + Array(){} + Array(int i) : std::vector(i) {} + Array(std::initializer_list list) : std::vector{ list } {} + }; +} + diff --git a/MbDCode/CartesianFrame.cpp b/MbDCode/CartesianFrame.cpp new file mode 100644 index 0000000..4b8c192 --- /dev/null +++ b/MbDCode/CartesianFrame.cpp @@ -0,0 +1 @@ +#include "CartesianFrame.h" diff --git a/MbDCode/CartesianFrame.h b/MbDCode/CartesianFrame.h new file mode 100644 index 0000000..98733d5 --- /dev/null +++ b/MbDCode/CartesianFrame.h @@ -0,0 +1,9 @@ +#pragma once +#include "Item.h" +namespace MbD { + class CartesianFrame : + public Item + { + }; +} + diff --git a/MbDCode/Constraint.cpp b/MbDCode/Constraint.cpp new file mode 100644 index 0000000..26b24dc --- /dev/null +++ b/MbDCode/Constraint.cpp @@ -0,0 +1 @@ +#include "Constraint.h" diff --git a/MbDCode/Constraint.h b/MbDCode/Constraint.h new file mode 100644 index 0000000..7924c32 --- /dev/null +++ b/MbDCode/Constraint.h @@ -0,0 +1,28 @@ +#pragma once +#include + +#include "Item.h" + +namespace MbD { + class Constraint : public Item + { + public: + Constraint() : Item() { + iG = -1; + aG = 0.0; + lam = 0.0; + } + void setOwner(std::shared_ptr x) { + owner = x; + } + std::shared_ptr getOwner() { + return owner.lock(); + } + //iG aG lam mu lamDeriv owner + int iG; + double aG; //Constraint function + double lam; //Lambda is Lagrange Multiplier + std::weak_ptr owner; //A Joint or PartFrame owns the constraint + }; +} + diff --git a/MbDCode/EulerConstraint.cpp b/MbDCode/EulerConstraint.cpp new file mode 100644 index 0000000..f5f93e4 --- /dev/null +++ b/MbDCode/EulerConstraint.cpp @@ -0,0 +1 @@ +#include "EulerConstraint.h" diff --git a/MbDCode/EulerConstraint.h b/MbDCode/EulerConstraint.h new file mode 100644 index 0000000..5479e5b --- /dev/null +++ b/MbDCode/EulerConstraint.h @@ -0,0 +1,22 @@ +#pragma once +#include +#include + +#include "Constraint.h" +#include "FullRow.h" + +namespace MbD { + using FullRowDPtr = std::shared_ptr>; + + class EulerConstraint : public Constraint + { + public: + EulerConstraint() : Constraint() { + pGpE = std::make_shared>(4); + } + //pGpE iqE + FullRowDPtr pGpE; //partial derivative of G wrt pE + int iqE; + }; +} + diff --git a/MbDCode/FullColumn.cpp b/MbDCode/FullColumn.cpp new file mode 100644 index 0000000..36d7990 --- /dev/null +++ b/MbDCode/FullColumn.cpp @@ -0,0 +1 @@ +#include "FullColumn.h" diff --git a/MbDCode/FullColumn.h b/MbDCode/FullColumn.h new file mode 100644 index 0000000..6b809b6 --- /dev/null +++ b/MbDCode/FullColumn.h @@ -0,0 +1,11 @@ +#pragma once +#include "Vector.h" +namespace MbD { + template + class FullColumn : public Vector + { + public: + FullColumn(std::initializer_list list) : Vector{ list } {} + }; +} + diff --git a/MbDCode/FullRow.cpp b/MbDCode/FullRow.cpp new file mode 100644 index 0000000..c730096 --- /dev/null +++ b/MbDCode/FullRow.cpp @@ -0,0 +1 @@ +#include "FullRow.h" diff --git a/MbDCode/FullRow.h b/MbDCode/FullRow.h new file mode 100644 index 0000000..b9498c5 --- /dev/null +++ b/MbDCode/FullRow.h @@ -0,0 +1,13 @@ +#pragma once +#include "Vector.h" +namespace MbD { + template + class FullRow : public Vector + { + public: + FullRow() {} + FullRow(int i) : Vector(i) {} + FullRow(std::initializer_list list) : Vector{ list } {} + }; +} + diff --git a/MbDCode/Item.cpp b/MbDCode/Item.cpp new file mode 100644 index 0000000..07d7e84 --- /dev/null +++ b/MbDCode/Item.cpp @@ -0,0 +1,21 @@ +#include "Item.h" + +void MbD::Item::setName(std::string& str) +{ + name = str; +} + +const std::string& MbD::Item::getName() const +{ + return name; +} +// +//void MbD::Item::setMyInt(int val) +//{ +// myInt = val; +//} +// +//int MbD::Item::getMyInt() +//{ +// return myInt; +//} diff --git a/MbDCode/Item.h b/MbDCode/Item.h new file mode 100644 index 0000000..a915708 --- /dev/null +++ b/MbDCode/Item.h @@ -0,0 +1,14 @@ +#pragma once +#include +namespace MbD { + class Item + { + public: + Item() {} + void setName(std::string& str); + const std::string& getName() const; + private: + std::string name; + }; +} + diff --git a/MbDCode/Joint.cpp b/MbDCode/Joint.cpp new file mode 100644 index 0000000..f99eb74 --- /dev/null +++ b/MbDCode/Joint.cpp @@ -0,0 +1 @@ +#include "Joint.h" diff --git a/MbDCode/Joint.h b/MbDCode/Joint.h new file mode 100644 index 0000000..d13b886 --- /dev/null +++ b/MbDCode/Joint.h @@ -0,0 +1,9 @@ +#pragma once +#include "Item.h" +namespace MbD { + class Joint : + public Item + { + }; +} + diff --git a/MbDCode/MarkerFrame.cpp b/MbDCode/MarkerFrame.cpp new file mode 100644 index 0000000..476f7c5 --- /dev/null +++ b/MbDCode/MarkerFrame.cpp @@ -0,0 +1 @@ +#include "MarkerFrame.h" diff --git a/MbDCode/MarkerFrame.h b/MbDCode/MarkerFrame.h new file mode 100644 index 0000000..0d87ffe --- /dev/null +++ b/MbDCode/MarkerFrame.h @@ -0,0 +1,9 @@ +#pragma once +#include "CartesianFrame.h" +namespace MbD { + class MarkerFrame : + public CartesianFrame + { + }; +} + diff --git a/MbDCode/MbDCode.cpp b/MbDCode/MbDCode.cpp new file mode 100644 index 0000000..23214b2 --- /dev/null +++ b/MbDCode/MbDCode.cpp @@ -0,0 +1,17 @@ +#include +#include "Item.h" +#include "System.h" + +using namespace MbD; + +int main() +{ + std::cout << "Hello World!\n"; + auto& TheSystem = System::getInstance(); + std::string str = "TheSystem"; + TheSystem.setName(str); + std::cout << TheSystem.getName(); + //auto fixedPart = std::make_shared(); + //str = "FixedPart"; + //fixedPart->setName(str); +} \ No newline at end of file diff --git a/MbDCode/MbDCode.vcxproj b/MbDCode/MbDCode.vcxproj new file mode 100644 index 0000000..c1ce89f --- /dev/null +++ b/MbDCode/MbDCode.vcxproj @@ -0,0 +1,169 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + Win32Proj + {80f56cbc-b685-4c36-b834-a2dcdf0a98b7} + MbDCode + 10.0 + + + + Application + true + v143 + Unicode + + + Application + false + v143 + true + Unicode + + + Application + true + v143 + Unicode + + + Application + false + v143 + true + Unicode + + + + + + + + + + + + + + + + + + + + + + Level3 + true + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + Level3 + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/MbDCode/MbDCode.vcxproj.filters b/MbDCode/MbDCode.vcxproj.filters new file mode 100644 index 0000000..d6dc645 --- /dev/null +++ b/MbDCode/MbDCode.vcxproj.filters @@ -0,0 +1,120 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + \ No newline at end of file diff --git a/MbDCode/MbDCode.vcxproj.user b/MbDCode/MbDCode.vcxproj.user new file mode 100644 index 0000000..88a5509 --- /dev/null +++ b/MbDCode/MbDCode.vcxproj.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/MbDCode/NewtonRaphson.cpp b/MbDCode/NewtonRaphson.cpp new file mode 100644 index 0000000..860afa9 --- /dev/null +++ b/MbDCode/NewtonRaphson.cpp @@ -0,0 +1 @@ +#include "NewtonRaphson.h" diff --git a/MbDCode/NewtonRaphson.h b/MbDCode/NewtonRaphson.h new file mode 100644 index 0000000..822fccc --- /dev/null +++ b/MbDCode/NewtonRaphson.h @@ -0,0 +1,9 @@ +#pragma once +#include "Solver.h" +namespace MbD { + class NewtonRaphson : + public Solver + { + }; +} + diff --git a/MbDCode/Part.cpp b/MbDCode/Part.cpp new file mode 100644 index 0000000..9dbf298 --- /dev/null +++ b/MbDCode/Part.cpp @@ -0,0 +1 @@ +#include "Part.h" diff --git a/MbDCode/Part.h b/MbDCode/Part.h new file mode 100644 index 0000000..1aa7347 --- /dev/null +++ b/MbDCode/Part.h @@ -0,0 +1,28 @@ +#pragma once +#include + +#include "Item.h" +#include "PartFrame.h" +#include "FullColumn.h" + + +namespace MbD { + class PartFrame; + + class Part : public Item + { + public: + Part() { + partFrame = std::make_shared(); + } + void setqX(FullColumn* x) { + partFrame.get()->setqX(x); + } + FullColumn* getqX() { + return partFrame.get()->getqX(); + } + //ToDo: Needed members ipX ipE m aJ partFrame pX pXdot pE pEdot mX mE mEdot pTpE ppTpEpE ppTpEpEdot + std::shared_ptr partFrame; + }; +} + diff --git a/MbDCode/PartFrame.cpp b/MbDCode/PartFrame.cpp new file mode 100644 index 0000000..3d043f1 --- /dev/null +++ b/MbDCode/PartFrame.cpp @@ -0,0 +1,12 @@ +#include "PartFrame.h" +#include "AbsConstraint.h" +#include "MarkerFrame.h" + +namespace MbD { + + PartFrame::PartFrame() + { + aGabs = std::vector>(); + markerFrames = std::vector>(); + } +} \ No newline at end of file diff --git a/MbDCode/PartFrame.h b/MbDCode/PartFrame.h new file mode 100644 index 0000000..481fd62 --- /dev/null +++ b/MbDCode/PartFrame.h @@ -0,0 +1,42 @@ +#pragma once +#include +#include + +#include "CartesianFrame.h" +#include "Part.h" +#include "MarkerFrame.h" +#include "EulerConstraint.h" +#include "AbsConstraint.h" +#include "FullColumn.h" + +namespace MbD { + class Part; + class MarkerFrame; + + class PartFrame : public CartesianFrame + { + public: + PartFrame(); + void setqX(FullColumn* x) { + qX = x; + } + FullColumn* getqX() { + return qX; + } + void setPart(std::shared_ptr x) { + part = x; + } + std::shared_ptr getPart() { + return part.lock(); + } + //part iqX iqE qX qE qXdot qEdot qXddot qEddot aGeu aGabs markerFrames + std::weak_ptr part; + int iqX, iqE; //Position index of frame variables qX and qE in system list of variables + FullColumn* qX; + FullColumn* qE; + std::shared_ptr aGeu; + std::vector> aGabs; + std::vector> markerFrames; + }; +} + diff --git a/MbDCode/Solver.cpp b/MbDCode/Solver.cpp new file mode 100644 index 0000000..ef27f99 --- /dev/null +++ b/MbDCode/Solver.cpp @@ -0,0 +1 @@ +#include "Solver.h" diff --git a/MbDCode/Solver.h b/MbDCode/Solver.h new file mode 100644 index 0000000..01e7b97 --- /dev/null +++ b/MbDCode/Solver.h @@ -0,0 +1,7 @@ +#pragma once +namespace MbD { + class Solver + { + }; +} + diff --git a/MbDCode/System.cpp b/MbDCode/System.cpp new file mode 100644 index 0000000..183b648 --- /dev/null +++ b/MbDCode/System.cpp @@ -0,0 +1 @@ +#include "System.h" diff --git a/MbDCode/System.h b/MbDCode/System.h new file mode 100644 index 0000000..872ad42 --- /dev/null +++ b/MbDCode/System.h @@ -0,0 +1,36 @@ +#pragma once +#include +#include + +#include "Item.h" +#include "Part.h" +#include "Joint.h" +#include "SystemSolver.h" + +namespace MbD { + class SystemSolver; + class System : public Item + { + //ToDo: Needed members admSystem namedItems mbdTime parts jointsMotions forcesTorques sensors variables hasChanged mbdSystemSolver + public: + static System& getInstance() { + //https://medium.com/@caglayandokme/further-enhancing-the-singleton-pattern-in-c-8278b02b1ac7 + static System singleInstance; // Block-scoped static Singleton instance + return singleInstance; + }; + std::vector> parts; + std::vector> jointsMotions; + bool hasChanged = false; + std::shared_ptr systemSolver; + private: + System() { + parts = std::vector>(); + jointsMotions = std::vector>(); + systemSolver = std::make_shared(*this); + } + //System() = default; // Private constructor + System(const System&) = delete; + System& operator=(const System&) = delete; // Deleted copy assignment + ~System() = default; // Private destructor + }; +} diff --git a/MbDCode/SystemSolver.cpp b/MbDCode/SystemSolver.cpp new file mode 100644 index 0000000..c6681c7 --- /dev/null +++ b/MbDCode/SystemSolver.cpp @@ -0,0 +1 @@ +#include "SystemSolver.h" diff --git a/MbDCode/SystemSolver.h b/MbDCode/SystemSolver.h new file mode 100644 index 0000000..139e582 --- /dev/null +++ b/MbDCode/SystemSolver.h @@ -0,0 +1,22 @@ +#pragma once +#include + +#include "Solver.h" +#include "System.h" +#include "NewtonRaphson.h" + +namespace MbD { + class System; + class SystemSolver : public Solver + { + //system parts jointsMotions forcesTorques sensors variables icTypeSolver setsOfRedundantConstraints errorTolPosKine errorTolAccKine + //iterMaxPosKine iterMaxAccKine basicIntegrator tstartPasts tstart hmin hmax tend toutFirst hout direction corAbsTol corRelTol + //intAbsTol intRelTol iterMaxDyn orderMax translationLimit rotationLimit + public: + SystemSolver(System& x) : system(x) { + } + std::shared_ptr icTypeSolver; + System& system; + }; +} + diff --git a/MbDCode/Vector.cpp b/MbDCode/Vector.cpp new file mode 100644 index 0000000..1a0d306 --- /dev/null +++ b/MbDCode/Vector.cpp @@ -0,0 +1 @@ +#include "Vector.h" diff --git a/MbDCode/Vector.h b/MbDCode/Vector.h new file mode 100644 index 0000000..100516c --- /dev/null +++ b/MbDCode/Vector.h @@ -0,0 +1,12 @@ +#pragma once +#include "Array.h" +namespace MbD { + template + class Vector : public Array + { + public: + Vector(int i) : Array(i) {} + Vector(std::initializer_list list) : Array{ list } {} + }; +} +