diff --git a/.github/_nixshell b/.github/_nixshell new file mode 100644 index 0000000..e519ea2 --- /dev/null +++ b/.github/_nixshell @@ -0,0 +1,13 @@ +let pkgs = import (builtins.fetchTarball + "https://github.com/goromal/anixpkgs/archive/refs/tags/v6.22.0.tar.gz") {}; +in with pkgs; mkShell { + nativeBuildInputs = [ + cmake + lcov + ]; + buildInputs = [ + boost + eigen + manif-geom-cpp + ]; +} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 5ee0cca..1b87430 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -20,4 +20,58 @@ jobs: authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}' - run: > git config --global url."https://github.com/".insteadOf ssh://git@github.com/ - - run: export NIXPKGS_ALLOW_UNFREE=1 && nix-build -E 'with (import (fetchTarball "https://github.com/goromal/anixpkgs/archive/refs/tags/v0.5.0.tar.gz") {}); signals-cpp.override { pkg-src = lib.cleanSource ./.; }' + - run: export NIXPKGS_ALLOW_UNFREE=1 && nix-build -E 'with (import (fetchTarball "https://github.com/goromal/anixpkgs/archive/refs/heads/master.tar.gz") {}); signals-cpp.override { pkg-src = lib.cleanSource ./.; }' + code-cov: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: cachix/install-nix-action@v25 + with: + nix_path: nixpkgs=channel:nixos-unstable + - uses: cachix/cachix-action@v10 + with: + name: github-public + authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}' + - name: Build, test, and generate coverage HTML report + run: | + mkdir build && cd build + nix-shell ../.github/_nixshell --run "cmake .. -DCMAKE_BUILD_TYPE=Debug && make unit-tests" + nix-shell ../.github/_nixshell --run "lcov --capture --directory . --output-file coverage.info && \ + lcov --remove coverage.info '/usr/*' '*/test/*' --output-file coverage.info.cleaned && \ + genhtml --branch-coverage --ignore-errors source --output-directory coverage_report coverage.info.cleaned" + - name: Upload coverage report artifact + uses: actions/upload-artifact@v4 + with: + name: code-coverage-report + path: build/coverage_report + - name: Post PR comment with coverage artifact (optional) + if: github.event_name == 'pull_request' + uses: actions/github-script@v7 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const artifactUrl = `https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}`; + const comment = ` + ### 🧪 Code Coverage Report + The code coverage report has been generated for this PR. + + ➡️ [View coverage artifact](${artifactUrl}) + `; + github.rest.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: comment + }); + - name: Copy coverage report into docs/ + run: | + mkdir -p docs/coverage + cp -r build/coverage_report/* docs/coverage/ + - name: Commit coverage report to docs/ + if: github.ref == 'refs/heads/master' + run: | + git config --global user.name "github-actions" + git config --global user.email "github-actions@github.com" + git add docs/coverage + git commit -m "Update coverage report [skip ci]" || echo "No changes to commit" + git push diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..10beb96 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "docs/doxygen-awesome-css"] + path = docs/doxygen-awesome-css + url = https://github.com/jothepro/doxygen-awesome-css.git diff --git a/CMakeLists.txt b/CMakeLists.txt index fb4d27b..fe98b88 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,10 +3,18 @@ cmake_minimum_required (VERSION 3.16) set(PROJ_NAME signals-cpp) project(${PROJ_NAME}) +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE) +endif() + set(CMAKE_CXX_STANDARD 17) option(BUILD_TESTS "Build Tests" ON) +if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage -O0 -g") +endif() + find_package(Eigen3 REQUIRED NO_MODULE) find_package(manif-geom-cpp REQUIRED) diff --git a/Doxyfile b/Doxyfile new file mode 100644 index 0000000..b4c6ed2 --- /dev/null +++ b/Doxyfile @@ -0,0 +1,31 @@ +# Project-related information +PROJECT_NAME = "signals-cpp" +OUTPUT_DIRECTORY = "docs" # Directory where the docs are generated +RECURSIVE = YES # Recursively scan all subdirectories +EXTRACT_ALL = YES # Extract all code comments + +# HTML output settings +GENERATE_HTML = YES # Enable HTML documentation +GENERATE_LATEX = NO # Disable LaTeX documentation +HTML_OUTPUT = . # Specify HTML output directory + +# Awesome style settings +GENERATE_TREEVIEW = YES # optional. Also works without treeview +DISABLE_INDEX = NO +FULL_SIDEBAR = NO +HTML_EXTRA_STYLESHEET = docs/doxygen-awesome-css/doxygen-awesome.css +HTML_COLORSTYLE = LIGHT # required with Doxygen >= 1.9.5 + +# MathJax integration (for math rendering) +USE_MATHJAX = YES # Enable MathJax support for math rendering + +# Input settings (multiple directories) +INPUT = include # Include both C++ and Python directories for parsing + +# File patterns +FILE_PATTERNS = *.cpp *.h *.py # Specify the file types to be parsed + +# Additional settings for LaTeX-style math +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = YES +EXPAND_ONLY_PREDEF = NO \ No newline at end of file diff --git a/README.md b/README.md index 4086328..8e9a2b0 100644 --- a/README.md +++ b/README.md @@ -4,32 +4,26 @@ Header-only templated C++ library implementing rigid-body dynamics, derivatives, integrals, and interpolation. -**Under construction** +View the library documentation [HERE](https://andrewtorgesen.com/signals-cpp). -## Implemented Types +## Installation -### Signal Types +This code is meant to be built as a static library with CMake. It should be compatible with the latest versions of +Eigen and Boost (unit test framework only). +The library [manif-geom-cpp](https://github.com/goromal/manif-geom-cpp) must also be installed. -Scalar signal type: +Install with -```cpp -ScalarSignal x; +```bash +mkdir build +cd build +cmake .. +make # or make install ``` -Vector signal types: +By default, building will also build and run the unit tests, but this can be turned off with the CMake option `BUILD_TESTS`. -```cpp -Vector1Signal x; -Vector2Signal x; -Vector3Signal x; -Vector4Signal x; -Vector5Signal x; -Vector6Signal x; -Vector7Signal x; -Vector8Signal x; -Vector9Signal x; -Vector10Signal x; -``` +### Signals Manifold signal types: @@ -56,7 +50,7 @@ f(SignalType &xInt, TangentSignalType x, double t, bool insertHistory = false); f(SignalType &xInt, TangentSignalType x, double t, double dt, bool insertHistory = false); ``` -### Models +### System Models *Pending implementations:* @@ -74,3 +68,12 @@ f(SignalType &xInt, TangentSignalType x, double t, double dt, bool insertHistory - Rigid body system confined to a plane (unicycle model). - `RigidBodyDynamics6DOF` - Rigid body system in 3D space. + +## Docs Generation + +Generate updated docs in the `docs/` directory with + +```bash +doxygen Doxyfile +``` + diff --git a/docs/Integration_8h.html b/docs/Integration_8h.html new file mode 100644 index 0000000..6e6e4b0 --- /dev/null +++ b/docs/Integration_8h.html @@ -0,0 +1,219 @@ + + + + + + + +signals-cpp: include/signals/Integration.h File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Integration.h File Reference
+
+
+
#include "signals/Signal.h"
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + +

+Classes

struct  Integrator< IntegratorType >
 Base type for all integrators. More...
 
struct  EulerIntegratorSpec
 Specification for numerically integrating a black box function using Euler's method. More...
 
struct  TrapezoidalIntegratorSpec
 Specification for numerically integrating a black box function using the Trapezoidal method. More...
 
struct  SimpsonIntegratorSpec
 Specification for numerically integrating a black box function using Simpson's method. More...
 
+ + + +

+Macros

#define MAKE_INTEGRATOR(IntegratorName)
 
+ + + + + + + +

+Typedefs

typedef Integrator< EulerIntegratorSpecEulerIntegrator
 
typedef Integrator< TrapezoidalIntegratorSpecTrapezoidalIntegrator
 
typedef Integrator< SimpsonIntegratorSpecSimpsonIntegrator
 
+

Macro Definition Documentation

+ +

◆ MAKE_INTEGRATOR

+ +
+
+ + + + + + + +
#define MAKE_INTEGRATOR( IntegratorName)
+
+Value:
+
Base type for all integrators.
Definition Integration.h:18
+
+
+
+

Typedef Documentation

+ +

◆ EulerIntegrator

+ +
+
+ +
+
+ +

◆ SimpsonIntegrator

+ +
+
+ +
+
+ +

◆ TrapezoidalIntegrator

+ + +
+
+ + + + diff --git a/docs/Integration_8h.js b/docs/Integration_8h.js new file mode 100644 index 0000000..bc66010 --- /dev/null +++ b/docs/Integration_8h.js @@ -0,0 +1,11 @@ +var Integration_8h = +[ + [ "Integrator< IntegratorType >", "structIntegrator.html", null ], + [ "EulerIntegratorSpec", "structEulerIntegratorSpec.html", null ], + [ "TrapezoidalIntegratorSpec", "structTrapezoidalIntegratorSpec.html", null ], + [ "SimpsonIntegratorSpec", "structSimpsonIntegratorSpec.html", null ], + [ "MAKE_INTEGRATOR", "Integration_8h.html#ac22028f5bd0a2ecee786d53a348e4073", null ], + [ "EulerIntegrator", "Integration_8h.html#a0e36b47220a522ff9899d9624dd7c01b", null ], + [ "SimpsonIntegrator", "Integration_8h.html#a3ac408f7f30b4b1b5b218e5d48eca5ed", null ], + [ "TrapezoidalIntegrator", "Integration_8h.html#a123a7b32e66b7e1acc68d61a997abc96", null ] +]; \ No newline at end of file diff --git a/docs/Integration_8h_source.html b/docs/Integration_8h_source.html new file mode 100644 index 0000000..1dc2876 --- /dev/null +++ b/docs/Integration_8h_source.html @@ -0,0 +1,250 @@ + + + + + + + +signals-cpp: include/signals/Integration.h Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Integration.h
+
+
+Go to the documentation of this file.
1#pragma once
+
2#include "signals/Signal.h"
+
3
+
16template<typename IntegratorType>
+
+ +
18{
+
27 template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
+
+ + +
30 const double& tf,
+
31 const bool& insertIntoHistory = false)
+
32 {
+
33 double t0 = xInt.t();
+
34 double dt;
+
35 if (!signal_utils::getTimeDelta(dt, t0, tf))
+
36 {
+
37 return false;
+
38 }
+
39 return IntegratorType::integrate(xInt, x, t0, tf, insertIntoHistory);
+
40 }
+
+
41
+
52 template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
+
+ + +
55 const double& >>>>>>> master tf,
+
56 const double& dt,
+
57 const bool& insertIntoHistory = false)
+
58 {
+
59 double t_k = xInt.t();
+
60 bool success = true;
+
61 while (t_k < tf && success)
+
62 {
+
63 double dt_k;
+
64 if (signal_utils::getTimeDelta(dt_k, t_k, tf, dt))
+
65 {
+
66 double t_kp1 = t_k + dt_k;
+
67 success &= IntegratorType::integrate(xInt, x, t_k, t_kp1, insertIntoHistory);
+
68 t_k = t_kp1;
+
69 }
+
70 else
+
71 {
+
72 success = false;
+
73 }
+
74 }
+
75 return success;
+
76 }
+
+
77};
+
+
78
+
+ +
83{
+
97 template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
+
+ + +
100 const double& t0,
+
101 const double& tf,
+
102 const bool& insertIntoHistory)
+
103 {
+
104 double dt = tf - t0;
+
105 return xInt.update(tf, xInt() + x(tf) * dt, x(tf), insertIntoHistory);
+
106 }
+
+
107};
+
+
108
+
+ +
113{
+
127 template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
+
+ + +
130 const double& t0,
+
131 const double& tf,
+
132 const bool& insertIntoHistory)
+
133 {
+
134 double dt = tf - t0;
+
135 return xInt.update(tf, xInt() + (x(t0) + x(tf)) * dt / 2.0, x(tf), insertIntoHistory);
+
136 }
+
+
137};
+
+
138
+
+ +
143{
+
157 template<typename BaseSignalSpec, typename TangentSignalSpec>
+
+ + +
160 const double& t0,
+
161 const double& tf,
+
162 const bool& insertIntoHistory)
+
163 {
+
164 double dt = tf - t0;
+
165 return xInt.update(tf,
+
166 xInt() + (x(t0) + 4.0 * x((t0 + tf) / 2.0) + x(tf)) * dt / 6.0,
+
167 x(tf),
+
168 insertIntoHistory);
+
169 }
+
+
170};
+
+
171
+
172#define MAKE_INTEGRATOR(IntegratorName) typedef Integrator<IntegratorName##IntegratorSpec> IntegratorName##Integrator;
+
173
+ +
175MAKE_INTEGRATOR(Trapezoidal)
+ +
#define MAKE_INTEGRATOR(IntegratorName)
Definition Integration.h:172
+ +
Template class for time-series signals with interpolation, extrapolation, and derivative capabilities...
Definition Signal.h:63
+
double t() const
Get the current time of the signal.
Definition Signal.h:151
+
bool update(const double &_t, const BaseType &_x, bool insertHistory=false)
Update the signal with a new value at a given time, computing derivative automatically.
Definition Signal.h:270
+
bool getTimeDelta(double &dt, const double &t0, const double &tf, const double &dt_max=std::numeric_limits< double >::max())
Definition Utils.h:11
+
Specification for numerically integrating a black box function using Euler's method.
Definition Integration.h:83
+
static bool integrate(Signal< T, BaseSignalSpec, TangentSignalSpec > &xInt, const Signal< T, TangentSignalSpec, TangentSignalSpec > &x, const double &t0, const double &tf, const bool &insertIntoHistory)
Euler integration implementation.
Definition Integration.h:98
+
Base type for all integrators.
Definition Integration.h:18
+
static bool integrate(Signal< T, BaseSignalSpec, TangentSignalSpec > &xInt, const Signal< T, TangentSignalSpec, TangentSignalSpec > &x, const double &tf, const bool &insertIntoHistory=false)
Integrate a signal from the current time to the specified end time.
Definition Integration.h:28
+
static bool integrate(Signal< T, BaseSignalSpec, TangentSignalSpec > &xInt, const Signal< T, TangentSignalSpec, TangentSignalSpec > &x, const double & > > > > > > > master tf, const double &dt, const bool &insertIntoHistory=false)
Integrate a signal from the current time to the specified end time, chunked up into smaller integrati...
Definition Integration.h:53
+
Specification for numerically integrating a black box function using Simpson's method.
Definition Integration.h:143
+
static bool integrate(Signal< BaseSignalSpec, TangentSignalSpec > &xInt, const Signal< TangentSignalSpec, TangentSignalSpec > &x, const double &t0, const double &tf, const bool &insertIntoHistory)
Simpson integration implementation.
Definition Integration.h:158
+
Specification for numerically integrating a black box function using the Trapezoidal method.
Definition Integration.h:113
+
static bool integrate(Signal< T, BaseSignalSpec, TangentSignalSpec > &xInt, const Signal< T, TangentSignalSpec, TangentSignalSpec > &x, const double &t0, const double &tf, const bool &insertIntoHistory)
Trapezoidal integration implementation.
Definition Integration.h:128
+
+
+ + + + diff --git a/docs/Models_8h.html b/docs/Models_8h.html new file mode 100644 index 0000000..cf88279 --- /dev/null +++ b/docs/Models_8h.html @@ -0,0 +1,509 @@ + + + + + + + +signals-cpp: include/signals/Models.h File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Models.h File Reference
+
+
+
#include <optional>
+#include "signals/State.h"
+#include "signals/Integration.h"
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Classes

class  Model< DynamicsType >
 Base type for all model simulators. More...
 
struct  RigidBodyParams1D
 Parameters for a 1D rigid body model. More...
 
struct  RigidBodyParams2D
 Parameters for a 2D rigid body model. More...
 
struct  RigidBodyParams3D
 Parameters for a 3D rigid body model. More...
 
struct  TranslationalDynamicsBase< IST, SST, SDST, d, PT >
 Base class for defining the dynamics for 1D, 2D, and 3D point masses. More...
 
struct  RotationalDynamics1DOF< T >
 Definition of the dynamics for planar rotation-only motion of a mass. More...
 
struct  RotationalDynamics3DOF< T >
 Definition of the dynamics for 3D rotation-only motion of a mass. More...
 
struct  RigidBodyDynamics3DOF< T >
 Definition of the dynamics for planar motion of a mass that's allowed to rotate. More...
 
struct  RigidBodyDynamics6DOF< T >
 Definition of the dynamics for a 3D rigid body that can rotate about any axis. More...
 
+ + + +

+Macros

#define MAKE_MODEL(ModelBaseName, ModelDOF)
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Typedefs

template<typename T>
using TranslationalDynamics1DOF
 
template<typename T>
using TranslationalDynamics2DOF
 
template<typename T>
using TranslationalDynamics3DOF
 
template<typename T>
using Translational1DOFModel = Model<TranslationalDynamics1DOF<T>>
 
typedef Translational1DOFModel< double > Translational1DOFModeld
 
template<typename T>
using Translational2DOFModel = Model<TranslationalDynamics2DOF<T>>
 
typedef Translational2DOFModel< double > Translational2DOFModeld
 
template<typename T>
using Translational3DOFModel = Model<TranslationalDynamics3DOF<T>>
 
typedef Translational3DOFModel< double > Translational3DOFModeld
 
template<typename T>
using Rotational1DOFModel = Model<RotationalDynamics1DOF<T>>
 
typedef Rotational1DOFModel< double > Rotational1DOFModeld
 
template<typename T>
using Rotational3DOFModel = Model<RotationalDynamics3DOF<T>>
 
typedef Rotational3DOFModel< double > Rotational3DOFModeld
 
template<typename T>
using RigidBody3DOFModel = Model<RigidBodyDynamics3DOF<T>>
 
typedef RigidBody3DOFModel< double > RigidBody3DOFModeld
 
template<typename T>
using RigidBody6DOFModel = Model<RigidBodyDynamics6DOF<T>>
 
typedef RigidBody6DOFModel< double > RigidBody6DOFModeld
 
+

Macro Definition Documentation

+ +

◆ MAKE_MODEL

+ +
+
+ + + + + + + + + + + +
#define MAKE_MODEL( ModelBaseName,
ModelDOF )
+
+Value:
template<typename T> \
+
using ModelBaseName##ModelDOF##Model = Model<ModelBaseName##Dynamics##ModelDOF<T>>; \
+
typedef ModelBaseName##ModelDOF##Model<double> ModelBaseName##ModelDOF##Modeld;
+
Base type for all model simulators.
Definition Models.h:25
+
+
+
+

Typedef Documentation

+ +

◆ RigidBody3DOFModel

+ +
+
+
+template<typename T>
+ + + + +
using RigidBody3DOFModel = Model<RigidBodyDynamics3DOF<T>>
+
+ +
+
+ +

◆ RigidBody3DOFModeld

+ +
+
+ + + + +
typedef RigidBody3DOFModel<double> RigidBody3DOFModeld
+
+ +
+
+ +

◆ RigidBody6DOFModel

+ +
+
+
+template<typename T>
+ + + + +
using RigidBody6DOFModel = Model<RigidBodyDynamics6DOF<T>>
+
+ +
+
+ +

◆ RigidBody6DOFModeld

+ +
+
+ + + + +
typedef RigidBody6DOFModel<double> RigidBody6DOFModeld
+
+ +
+
+ +

◆ Rotational1DOFModel

+ +
+
+
+template<typename T>
+ + + + +
using Rotational1DOFModel = Model<RotationalDynamics1DOF<T>>
+
+ +
+
+ +

◆ Rotational1DOFModeld

+ +
+
+ + + + +
typedef Rotational1DOFModel<double> Rotational1DOFModeld
+
+ +
+
+ +

◆ Rotational3DOFModel

+ +
+
+
+template<typename T>
+ + + + +
using Rotational3DOFModel = Model<RotationalDynamics3DOF<T>>
+
+ +
+
+ +

◆ Rotational3DOFModeld

+ +
+
+ + + + +
typedef Rotational3DOFModel<double> Rotational3DOFModeld
+
+ +
+
+ +

◆ Translational1DOFModel

+ +
+
+
+template<typename T>
+ + + + +
using Translational1DOFModel = Model<TranslationalDynamics1DOF<T>>
+
+ +
+
+ +

◆ Translational1DOFModeld

+ +
+
+ + + + +
typedef Translational1DOFModel<double> Translational1DOFModeld
+
+ +
+
+ +

◆ Translational2DOFModel

+ +
+
+
+template<typename T>
+ + + + +
using Translational2DOFModel = Model<TranslationalDynamics2DOF<T>>
+
+ +
+
+ +

◆ Translational2DOFModeld

+ +
+
+ + + + +
typedef Translational2DOFModel<double> Translational2DOFModeld
+
+ +
+
+ +

◆ Translational3DOFModel

+ +
+
+
+template<typename T>
+ + + + +
using Translational3DOFModel = Model<TranslationalDynamics3DOF<T>>
+
+ +
+
+ +

◆ Translational3DOFModeld

+ +
+
+ + + + +
typedef Translational3DOFModel<double> Translational3DOFModeld
+
+ +
+
+ +

◆ TranslationalDynamics1DOF

+ +
+
+
+template<typename T>
+ + + + +
using TranslationalDynamics1DOF
+
+Initial value:
+ +
Signal< T, ScalarStateSignalSpec< T >, ScalarStateSignalSpec< T > > ScalarStateSignal
Definition State.h:326
+
Parameters for a 1D rigid body model.
Definition Models.h:168
+
Base class for defining the dynamics for 1D, 2D, and 3D point masses.
Definition Models.h:239
+
+
+
+ +

◆ TranslationalDynamics2DOF

+ +
+
+
+template<typename T>
+ + + + +
using TranslationalDynamics2DOF
+
+Initial value:
+ +
VectorStateSignal< T, 2 > Vector2StateSignal
Definition State.h:377
+
Parameters for a 2D rigid body model.
Definition Models.h:188
+
+
+
+ +

◆ TranslationalDynamics3DOF

+ +
+
+
+template<typename T>
+ + + + +
using TranslationalDynamics3DOF
+
+Initial value:
+ +
VectorStateSignal< T, 3 > Vector3StateSignal
Definition State.h:378
+
Parameters for a 3D rigid body model.
Definition Models.h:214
+
+
+
+
+
+ + + + diff --git a/docs/Models_8h.js b/docs/Models_8h.js new file mode 100644 index 0000000..e54d3a9 --- /dev/null +++ b/docs/Models_8h.js @@ -0,0 +1,30 @@ +var Models_8h = +[ + [ "Model< DynamicsType >", "classModel.html", "classModel" ], + [ "RigidBodyParams1D", "structRigidBodyParams1D.html", "structRigidBodyParams1D" ], + [ "RigidBodyParams2D", "structRigidBodyParams2D.html", "structRigidBodyParams2D" ], + [ "RigidBodyParams3D", "structRigidBodyParams3D.html", "structRigidBodyParams3D" ], + [ "TranslationalDynamicsBase< IST, SST, SDST, d, PT >", "structTranslationalDynamicsBase.html", "structTranslationalDynamicsBase" ], + [ "RotationalDynamics1DOF< T >", "structRotationalDynamics1DOF.html", "structRotationalDynamics1DOF" ], + [ "RotationalDynamics3DOF< T >", "structRotationalDynamics3DOF.html", "structRotationalDynamics3DOF" ], + [ "RigidBodyDynamics3DOF< T >", "structRigidBodyDynamics3DOF.html", "structRigidBodyDynamics3DOF" ], + [ "RigidBodyDynamics6DOF< T >", "structRigidBodyDynamics6DOF.html", "structRigidBodyDynamics6DOF" ], + [ "MAKE_MODEL", "Models_8h.html#a01637abb86bd3009fcff2cebc8a8735a", null ], + [ "RigidBody3DOFModel", "Models_8h.html#ab084e172ef604e5975b5ff17e33d06ce", null ], + [ "RigidBody3DOFModeld", "Models_8h.html#a46f2319cb159c02e4eb4801d850d54d9", null ], + [ "RigidBody6DOFModel", "Models_8h.html#a8f7d8c7063cb9c51d2bb794931db3a34", null ], + [ "RigidBody6DOFModeld", "Models_8h.html#a40c2fc8d427c1bd6dfee02295ccb3cb6", null ], + [ "Rotational1DOFModel", "Models_8h.html#abc1d5223da3343a9537cc0a6f5abd239", null ], + [ "Rotational1DOFModeld", "Models_8h.html#af9b104589a404874af160185cf8a725c", null ], + [ "Rotational3DOFModel", "Models_8h.html#a287ab38fdf9b2634bf844a17719b9115", null ], + [ "Rotational3DOFModeld", "Models_8h.html#a51e40a2924a4b6ff134878368461bb1a", null ], + [ "Translational1DOFModel", "Models_8h.html#af9ad4901a092a7e81f8b092d1dbcf5f5", null ], + [ "Translational1DOFModeld", "Models_8h.html#ab405c6c48aa770f74c7e942302b956c5", null ], + [ "Translational2DOFModel", "Models_8h.html#aee5681b9331f5514938a77680e9e1162", null ], + [ "Translational2DOFModeld", "Models_8h.html#a7768cd6b33a5d94a677357664052d096", null ], + [ "Translational3DOFModel", "Models_8h.html#a3d0d9bd06d48c1d0022090b040895a62", null ], + [ "Translational3DOFModeld", "Models_8h.html#a3c501b1f5d946eb9aa36b92d2ec611c5", null ], + [ "TranslationalDynamics1DOF", "Models_8h.html#aac436ed3df206f07f93110e3daffe773", null ], + [ "TranslationalDynamics2DOF", "Models_8h.html#ae3889fdff8dd169aef62fcdf6340e0e1", null ], + [ "TranslationalDynamics3DOF", "Models_8h.html#ad1ba77eac61f5da29df59b8b4b0d7a0d", null ] +]; \ No newline at end of file diff --git a/docs/Models_8h_source.html b/docs/Models_8h_source.html new file mode 100644 index 0000000..a45f54d --- /dev/null +++ b/docs/Models_8h_source.html @@ -0,0 +1,632 @@ + + + + + + + +signals-cpp: include/signals/Models.h Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Models.h
+
+
+Go to the documentation of this file.
1#pragma once
+
2#include <optional>
+
3#include "signals/State.h"
+ +
5
+
6using namespace Eigen;
+
7
+
23template<typename DynamicsType>
+
+
24class Model
+
25{
+
26public:
+
27 using InputSignalType = typename DynamicsType::InputSignalType;
+
28 using StateDotSignalType = typename DynamicsType::StateDotSignalType;
+
29 using StateSignalType = typename DynamicsType::StateSignalType;
+
30 using ParamsType = typename DynamicsType::ParamsType;
+
31
+ + +
40
+
+
44 Model() : params_{std::nullopt}
+
45 {
+
46 reset();
+
47 }
+
+
48
+
+
54 void setParams(const ParamsType& params)
+
55 {
+
56 params_ = params;
+
57 }
+
+
58
+
+
62 bool hasParams()
+
63 {
+
64 return params_.has_value();
+
65 }
+
+
66
+
+
70 void reset()
+
71 {
+
72 x.reset();
+
73 xdot.reset();
+
74 }
+
+
75
+
+
79 double t() const
+
80 {
+
81 return x.t();
+
82 }
+
+
83
+
92 template<typename IntegratorType>
+
+ +
94 const double& tf,
+
95 const bool& insertIntoHistory = false,
+
96 const bool& calculateXddot = false)
+
97 {
+
98 if (!hasParams())
+
99 return false;
+
100 double t0 = x.t();
+
101 double dt;
+
102 if (!signal_utils::getTimeDelta(dt, t0, tf))
+
103 {
+
104 return false;
+
105 }
+
106 if (!DynamicsType::update(xdot, x, u, t0, tf, params_.value(), insertIntoHistory, calculateXddot))
+
107 {
+
108 return false;
+
109 }
+
110 if (!IntegratorType::integrate(x, xdot, tf, insertIntoHistory))
+
111 {
+
112 return false;
+
113 }
+
114 return true;
+
115 }
+
+
116
+
127 template<typename IntegratorType>
+
+ +
129 const double& tf,
+
130 const double& dt,
+
131 const bool& insertIntoHistory = false,
+
132 const bool& calculateXddot = false)
+
133 {
+
134 if (!hasParams())
+
135 return false;
+
136 double t_k = x.t();
+
137 while (t_k < tf)
+
138 {
+
139 double dt_k;
+
140 if (!signal_utils::getTimeDelta(dt_k, t_k, tf, dt))
+
141 {
+
142 return false;
+
143 }
+
144 double t_kp1 = t_k + dt_k;
+
145 if (!DynamicsType::update(xdot, x, u, t_k, t_kp1, params_.value(), insertIntoHistory, calculateXddot))
+
146 {
+
147 return false;
+
148 }
+
149 if (!IntegratorType::integrate(x, xdot, t_kp1, insertIntoHistory))
+
150 {
+
151 return false;
+
152 }
+
153 t_k = t_kp1;
+
154 }
+
155 return true;
+
156 }
+
+
157
+
158private:
+
159 std::optional<ParamsType> params_;
+
160};
+
+
161
+
+ +
168{
+
169 RigidBodyParams1D() : m(1), g(0) {}
+
173 double m;
+
179 double g;
+
180};
+
+
181
+
+ +
188{
+
189 RigidBodyParams2D() : m(1), J(1), g(Vector2d::Zero()) {}
+
193 double m;
+
199 double J;
+
205 Vector2d g;
+
206};
+
+
207
+
+ +
214{
+
215 RigidBodyParams3D() : m(1), J(Matrix3d::Identity()), g(Vector3d::Zero()) {}
+
219 double m;
+
225 Matrix3d J;
+
231 Vector3d g;
+
232};
+
+
233
+
237template<typename IST, typename SST, typename SDST, size_t d, typename PT>
+
+ +
239{
+
240 using InputSignalType = IST;
+ +
242 using StateSignalType = SDST;
+
243
+
244 using InputType = typename InputSignalType::BaseType;
+
245 using StateType = typename StateSignalType::BaseType;
+
246 using StateDotType = typename StateDotSignalType::BaseType;
+
247 using StateDotDotType = typename StateDotSignalType::TangentType;
+
248
+
249 using ParamsType = PT;
+
250
+
+
262 static bool update(StateDotSignalType& xdot,
+
263 const StateSignalType& x,
+
264 const InputSignalType& u,
+
265 const double& t0,
+
266 const double& tf,
+
267 const ParamsType& params,
+
268 const bool& insertIntoHistory = false,
+
269 const bool& calculateXddot = false)
+
270 {
+
271 InputType u_k = u(t0);
+
272 StateType x_k = x(t0);
+
273
+
274 StateDotType xdot_k;
+
275 xdot_k.pose = x_k.twist;
+
276 xdot_k.twist = -params.g + u_k / params.m;
+
277
+
278 if (calculateXddot)
+
279 {
+
280 return xdot.update(tf, xdot_k, insertIntoHistory);
+
281 }
+
282 else
+
283 {
+
284 return xdot.update(tf, xdot_k, StateDotDotType::identity(), insertIntoHistory);
+
285 }
+
286 }
+
+
287};
+
+
288
+
289template<typename T>
+ + +
292
+
293template<typename T>
+ + +
296
+
297template<typename T>
+ + +
300
+
304template<typename T>
+
+ +
306{
+ + + +
310
+ + + + +
315
+ +
317
+
+
329 static bool update(StateDotSignalType& xdot,
+
330 const StateSignalType& x,
+
331 const InputSignalType& u,
+
332 const double& t0,
+
333 const double& tf,
+
334 const ParamsType& params,
+
335 const bool& insertIntoHistory = false,
+
336 const bool& calculateXddot = false)
+
337 {
+
338 InputType u_k = u(t0);
+
339 StateType x_k = x(t0);
+
340
+
341 StateDotType xdot_k;
+
342 xdot_k.pose = x_k.twist;
+
343 xdot_k.twist = u_k / params.J;
+
344
+
345 if (calculateXddot)
+
346 {
+
347 return xdot.update(tf, xdot_k, insertIntoHistory);
+
348 }
+
349 else
+
350 {
+
351 return xdot.update(tf, xdot_k, StateDotDotType::identity(), insertIntoHistory);
+
352 }
+
353 }
+
+
354};
+
+
355
+
359template<typename T>
+
+ +
361{
+ + + +
365
+ + + + +
370
+ +
372
+
+
384 static bool update(StateDotSignalType& xdot,
+
385 const StateSignalType& x,
+
386 const InputSignalType& u,
+
387 const double& t0,
+
388 const double& tf,
+
389 const ParamsType& params,
+
390 const bool& insertIntoHistory = false,
+
391 const bool& calculateXddot = false)
+
392 {
+
393 InputType u_k = u(t0);
+
394 StateType x_k = x(t0);
+
395
+
396 StateDotType xdot_k;
+
397 xdot_k.pose = x_k.twist;
+
398 xdot_k.twist = params.J.inverse() * (-x_k.twist.cross(params.J * x_k.twist) + u_k);
+
399
+
400 if (calculateXddot)
+
401 {
+
402 return xdot.update(tf, xdot_k, insertIntoHistory);
+
403 }
+
404 else
+
405 {
+
406 return xdot.update(tf, xdot_k, StateDotDotType::identity(), insertIntoHistory);
+
407 }
+
408 }
+
+
409};
+
+
410
+
414template<typename T>
+
+ +
416{
+ + + +
420
+ + + + +
425
+ +
427
+
+
439 static bool update(StateDotSignalType& xdot,
+
440 const StateSignalType& x,
+
441 const InputSignalType& u,
+
442 const double& t0,
+
443 const double& tf,
+
444 const ParamsType& params,
+
445 const bool& insertIntoHistory = false,
+
446 const bool& calculateXddot = false)
+
447 {
+
448 InputType u_k = u(t0);
+
449 StateType x_k = x(t0);
+
450
+
451 StateDotType xdot_k;
+
452 xdot_k.pose = x_k.twist;
+
453 xdot_k.twist.template block<2, 1>(0, 0) = -(x_k.pose.q().inverse() * params.g) -
+
454 x_k.twist(2) * Matrix<T, 2, 1>(-x_k.twist(1), x_k.twist(0)) +
+
455 1.0 / params.m * u_k.template block<2, 1>(0, 0);
+
456 xdot_k.twist(2) = u_k(2) / params.J;
+
457
+
458 if (calculateXddot)
+
459 {
+
460 return xdot.update(tf, xdot_k, insertIntoHistory);
+
461 }
+
462 else
+
463 {
+
464 return xdot.update(tf, xdot_k, StateDotDotType::identity(), insertIntoHistory);
+
465 }
+
466 }
+
+
467};
+
+
468
+
472template<typename T>
+
+ +
474{
+ + + +
478
+ + + + +
483
+ +
485
+
+
497 static bool update(StateDotSignalType& xdot,
+
498 const StateSignalType& x,
+
499 const InputSignalType& u,
+
500 const double& t0,
+
501 const double& tf,
+
502 const ParamsType& params,
+
503 const bool& insertIntoHistory = false,
+
504 const bool& calculateXddot = false)
+
505 {
+
506 InputType u_k = u(t0);
+
507 StateType x_k = x(t0);
+
508
+
509 // The entire xdot vector is in the body-frame, since we're using it as a local perturbation
+
510 // vector for the oplus and ominus operations from SE(3). i.e., we increment the translation
+
511 // vector and attitude jointly, unlike with many filter/controller implementations.
+
512 StateDotType xdot_k;
+
513 xdot_k.pose = x_k.twist;
+
514 xdot_k.twist.template block<3, 1>(0, 0) =
+
515 -(x_k.pose.q().inverse() * params.g) -
+
516 x_k.twist.template block<3, 1>(3, 0).cross(x_k.twist.template block<3, 1>(0, 0)) +
+
517 1.0 / params.m * u_k.template block<3, 1>(0, 0);
+
518 xdot_k.twist.template block<3, 1>(3, 0) =
+
519 params.J.inverse() *
+
520 (-x_k.twist.template block<3, 1>(3, 0).cross(params.J * x_k.twist.template block<3, 1>(3, 0)) +
+
521 u_k.template block<3, 1>(3, 0));
+
522
+
523 if (calculateXddot)
+
524 {
+
525 return xdot.update(tf, xdot_k, insertIntoHistory);
+
526 }
+
527 else
+
528 {
+
529 return xdot.update(tf, xdot_k, StateDotDotType::identity(), insertIntoHistory);
+
530 }
+
531 }
+
+
532};
+
+
533
+
+
534#define MAKE_MODEL(ModelBaseName, ModelDOF) \
+
535 template<typename T> \
+
536 using ModelBaseName##ModelDOF##Model = Model<ModelBaseName##Dynamics##ModelDOF<T>>; \
+
537 typedef ModelBaseName##ModelDOF##Model<double> ModelBaseName##ModelDOF##Modeld;
+
+
538
+
539MAKE_MODEL(Translational, 1DOF)
+
540MAKE_MODEL(Translational, 2DOF)
+
541MAKE_MODEL(Translational, 3DOF)
+
542MAKE_MODEL(Rotational, 1DOF)
+
543MAKE_MODEL(Rotational, 3DOF)
+
544MAKE_MODEL(RigidBody, 3DOF)
+
545MAKE_MODEL(RigidBody, 6DOF)
+ +
#define MAKE_MODEL(ModelBaseName, ModelDOF)
Definition Models.h:534
+
TranslationalDynamicsBase< ScalarSignal< T >, ScalarStateSignal< T >, ScalarStateSignal< T >, 1, RigidBodyParams1D > TranslationalDynamics1DOF
Definition Models.h:290
+
TranslationalDynamicsBase< Vector3Signal< T >, Vector3StateSignal< T >, Vector3StateSignal< T >, 3, RigidBodyParams3D > TranslationalDynamics3DOF
Definition Models.h:298
+
TranslationalDynamicsBase< Vector2Signal< T >, Vector2StateSignal< T >, Vector2StateSignal< T >, 2, RigidBodyParams2D > TranslationalDynamics2DOF
Definition Models.h:294
+
VectorSignal< T, 6 > Vector6Signal
Definition Signal.h:945
+
VectorSignal< T, 1 > Vector1Signal
Definition Signal.h:940
+
VectorSignal< T, 3 > Vector3Signal
Definition Signal.h:942
+ +
ManifoldStateSignal< T, SO3< T >, 4, 3 > SO3StateSignal
Definition State.h:387
+
VectorStateSignal< T, 6 > Vector6StateSignal
Definition State.h:381
+
ManifoldStateSignal< T, SE3< T >, 7, 6 > SE3StateSignal
Definition State.h:389
+
ManifoldStateSignal< T, SO2< T >, 2, 1 > SO2StateSignal
Definition State.h:386
+
Signal< T, ScalarStateSignalSpec< T >, ScalarStateSignalSpec< T > > ScalarStateSignal
Definition State.h:326
+
VectorStateSignal< T, 2 > Vector2StateSignal
Definition State.h:377
+
VectorStateSignal< T, 1 > Vector1StateSignal
Definition State.h:376
+
VectorStateSignal< T, 3 > Vector3StateSignal
Definition State.h:378
+
ManifoldStateSignal< T, SE2< T >, 4, 3 > SE2StateSignal
Definition State.h:388
+
Model()
Initialize a model with no parameters.
Definition Models.h:44
+
bool hasParams()
Definition Models.h:62
+
typename DynamicsType::StateSignalType StateSignalType
Definition Models.h:29
+
double t() const
Definition Models.h:79
+
void reset()
Zero out the model state and derivative variables and reset simulation time to zero.
Definition Models.h:70
+
typename DynamicsType::StateDotSignalType StateDotSignalType
Definition Models.h:28
+
void setParams(const ParamsType &params)
Definition Models.h:54
+
StateDotSignalType xdot
Definition Models.h:39
+
StateSignalType x
Definition Models.h:35
+
bool simulate(const InputSignalType &u, const double &tf, const double &dt, const bool &insertIntoHistory=false, const bool &calculateXddot=false)
Definition Models.h:128
+
bool simulate(const InputSignalType &u, const double &tf, const bool &insertIntoHistory=false, const bool &calculateXddot=false)
Definition Models.h:93
+
typename DynamicsType::InputSignalType InputSignalType
Definition Models.h:27
+
typename DynamicsType::ParamsType ParamsType
Definition Models.h:30
+
typename VectorSignalSpec< T, d >::Type BaseType
Definition Signal.h:65
+
bool update(const double &_t, const BaseType &_x, bool insertHistory=false)
Update the signal with a new value at a given time, computing derivative automatically.
Definition Signal.h:270
+
typename VectorStateSignalSpec< T, d >::Type TangentType
Definition Signal.h:66
+
bool getTimeDelta(double &dt, const double &t0, const double &tf, const double &dt_max=std::numeric_limits< double >::max())
Definition Utils.h:11
+
Definition of the dynamics for planar motion of a mass that's allowed to rotate.
Definition Models.h:416
+
SE2StateSignal< T > StateSignalType
Definition Models.h:418
+
Vector3StateSignal< T > StateDotSignalType
Definition Models.h:419
+
Vector3Signal< T > InputSignalType
Definition Models.h:417
+
typename StateSignalType::BaseType StateType
Definition Models.h:422
+
typename StateDotSignalType::TangentType StateDotDotType
Definition Models.h:424
+
typename StateDotSignalType::BaseType StateDotType
Definition Models.h:423
+
typename InputSignalType::BaseType InputType
Definition Models.h:421
+
static bool update(StateDotSignalType &xdot, const StateSignalType &x, const InputSignalType &u, const double &t0, const double &tf, const ParamsType &params, const bool &insertIntoHistory=false, const bool &calculateXddot=false)
Update a provided state time derivative given an input and time interval.
Definition Models.h:439
+
RigidBodyParams2D ParamsType
Definition Models.h:426
+
Definition of the dynamics for a 3D rigid body that can rotate about any axis.
Definition Models.h:474
+
typename StateDotSignalType::TangentType StateDotDotType
Definition Models.h:482
+
Vector6Signal< T > InputSignalType
Definition Models.h:475
+
typename StateDotSignalType::BaseType StateDotType
Definition Models.h:481
+
typename InputSignalType::BaseType InputType
Definition Models.h:479
+
RigidBodyParams3D ParamsType
Definition Models.h:484
+
SE3StateSignal< T > StateSignalType
Definition Models.h:476
+
typename StateSignalType::BaseType StateType
Definition Models.h:480
+
static bool update(StateDotSignalType &xdot, const StateSignalType &x, const InputSignalType &u, const double &t0, const double &tf, const ParamsType &params, const bool &insertIntoHistory=false, const bool &calculateXddot=false)
Update a provided state time derivative given an input and time interval.
Definition Models.h:497
+
Vector6StateSignal< T > StateDotSignalType
Definition Models.h:477
+
Parameters for a 1D rigid body model.
Definition Models.h:168
+
double m
Model mass.
Definition Models.h:173
+
double g
Gravitational constant.
Definition Models.h:179
+
RigidBodyParams1D()
Definition Models.h:169
+
Parameters for a 2D rigid body model.
Definition Models.h:188
+
double m
Model mass.
Definition Models.h:193
+
RigidBodyParams2D()
Definition Models.h:189
+
double J
Moment of inertia.
Definition Models.h:199
+
Vector2d g
Gravitational vector.
Definition Models.h:205
+
Parameters for a 3D rigid body model.
Definition Models.h:214
+
Matrix3d J
Moment of inertia.
Definition Models.h:225
+
Vector3d g
Gravitational vector.
Definition Models.h:231
+
RigidBodyParams3D()
Definition Models.h:215
+
double m
Model mass.
Definition Models.h:219
+
Definition of the dynamics for planar rotation-only motion of a mass.
Definition Models.h:306
+
Vector1StateSignal< T > StateDotSignalType
Definition Models.h:309
+
RigidBodyParams2D ParamsType
Definition Models.h:316
+
static bool update(StateDotSignalType &xdot, const StateSignalType &x, const InputSignalType &u, const double &t0, const double &tf, const ParamsType &params, const bool &insertIntoHistory=false, const bool &calculateXddot=false)
Update a provided state time derivative given an input and time interval.
Definition Models.h:329
+
typename StateDotSignalType::TangentType StateDotDotType
Definition Models.h:314
+
typename StateDotSignalType::BaseType StateDotType
Definition Models.h:313
+
Vector1Signal< T > InputSignalType
Definition Models.h:307
+
typename StateSignalType::BaseType StateType
Definition Models.h:312
+
SO2StateSignal< T > StateSignalType
Definition Models.h:308
+
typename InputSignalType::BaseType InputType
Definition Models.h:311
+
Definition of the dynamics for 3D rotation-only motion of a mass.
Definition Models.h:361
+
SO3StateSignal< T > StateSignalType
Definition Models.h:363
+
RigidBodyParams3D ParamsType
Definition Models.h:371
+
typename StateDotSignalType::BaseType StateDotType
Definition Models.h:368
+
Vector3StateSignal< T > StateDotSignalType
Definition Models.h:364
+
typename StateDotSignalType::TangentType StateDotDotType
Definition Models.h:369
+
Vector3Signal< T > InputSignalType
Definition Models.h:362
+
typename StateSignalType::BaseType StateType
Definition Models.h:367
+
typename InputSignalType::BaseType InputType
Definition Models.h:366
+
static bool update(StateDotSignalType &xdot, const StateSignalType &x, const InputSignalType &u, const double &t0, const double &tf, const ParamsType &params, const bool &insertIntoHistory=false, const bool &calculateXddot=false)
Update a provided state time derivative given an input and time interval.
Definition Models.h:384
+
Base class for defining the dynamics for 1D, 2D, and 3D point masses.
Definition Models.h:239
+
SDST StateSignalType
Definition Models.h:242
+
typename StateDotSignalType::BaseType StateDotType
Definition Models.h:246
+
SST StateDotSignalType
Definition Models.h:241
+
static bool update(StateDotSignalType &xdot, const StateSignalType &x, const InputSignalType &u, const double &t0, const double &tf, const ParamsType &params, const bool &insertIntoHistory=false, const bool &calculateXddot=false)
Update a provided state time derivative given an input and time interval.
Definition Models.h:262
+
typename StateDotSignalType::TangentType StateDotDotType
Definition Models.h:247
+
PT ParamsType
Definition Models.h:249
+
typename StateSignalType::BaseType StateType
Definition Models.h:245
+
IST InputSignalType
Definition Models.h:240
+
typename InputSignalType::BaseType InputType
Definition Models.h:244
+
+
+ + + + diff --git a/docs/Signal_8h.html b/docs/Signal_8h.html new file mode 100644 index 0000000..4f3fe6d --- /dev/null +++ b/docs/Signal_8h.html @@ -0,0 +1,1121 @@ + + + + + + + +signals-cpp: include/signals/Signal.h File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Signal.h File Reference
+
+
+
#include <algorithm>
+#include <limits>
+#include <Eigen/Core>
+#include <SO2.h>
+#include <SO3.h>
+#include <SE2.h>
+#include <SE3.h>
+#include "Utils.h"
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + +

+Classes

class  Signal< T, BaseSignalSpec, TangentSignalSpec >
 Template class for time-series signals with interpolation, extrapolation, and derivative capabilities. More...
 
struct  Signal< T, BaseSignalSpec, TangentSignalSpec >::SignalDP
 Data point structure storing time, value, and derivative. More...
 
struct  ScalarSignalSpec< T >
 Type specification for scalar-valued signals. More...
 
struct  VectorSignalSpec< T, d >
 Type specification for vector-valued signals. More...
 
struct  ManifoldSignalSpec< T, ManifoldType >
 Type specification for manifold-valued signals (e.g., SO2, SO3, SE2, SE3). More...
 
+ + + + + +

+Macros

#define MAKE_VECTOR_SIGNAL(Dimension)
 
#define MAKE_MANIF_SIGNAL(Manif, Dimension)
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Typedefs

template<typename T>
using ScalarSignal = Signal<T, ScalarSignalSpec<T>, ScalarSignalSpec<T>>
 
template<typename T, size_t d>
using VectorSignal = Signal<T, VectorSignalSpec<T, d>, VectorSignalSpec<T, d>>
 
template<typename T, typename ManifoldType, size_t d>
using ManifoldSignal = Signal<T, ManifoldSignalSpec<T, ManifoldType>, VectorSignalSpec<T, d>>
 
typedef ScalarSignal< double > ScalardSignal
 
template<typename T>
using Vector1Signal = VectorSignal<T, 1>
 
typedef Vector1Signal< double > Vector1dSignal
 
template<typename T>
using Vector2Signal = VectorSignal<T, 2>
 
typedef Vector2Signal< double > Vector2dSignal
 
template<typename T>
using Vector3Signal = VectorSignal<T, 3>
 
typedef Vector3Signal< double > Vector3dSignal
 
template<typename T>
using Vector4Signal = VectorSignal<T, 4>
 
typedef Vector4Signal< double > Vector4dSignal
 
template<typename T>
using Vector5Signal = VectorSignal<T, 5>
 
typedef Vector5Signal< double > Vector5dSignal
 
template<typename T>
using Vector6Signal = VectorSignal<T, 6>
 
typedef Vector6Signal< double > Vector6dSignal
 
template<typename T>
using Vector7Signal = VectorSignal<T, 7>
 
typedef Vector7Signal< double > Vector7dSignal
 
template<typename T>
using Vector8Signal = VectorSignal<T, 8>
 
typedef Vector8Signal< double > Vector8dSignal
 
template<typename T>
using Vector9Signal = VectorSignal<T, 9>
 
typedef Vector9Signal< double > Vector9dSignal
 
template<typename T>
using Vector10Signal = VectorSignal<T, 10>
 
typedef Vector10Signal< double > Vector10dSignal
 
template<typename T>
using SO2Signal = ManifoldSignal<T, SO2<T>, 1>
 
typedef SO2Signal< double > SO2dSignal
 
template<typename T>
using SO3Signal = ManifoldSignal<T, SO3<T>, 3>
 
typedef SO3Signal< double > SO3dSignal
 
template<typename T>
using SE2Signal = ManifoldSignal<T, SE2<T>, 3>
 
typedef SE2Signal< double > SE2dSignal
 
template<typename T>
using SE3Signal = ManifoldSignal<T, SE3<T>, 6>
 
typedef SE3Signal< double > SE3dSignal
 
+ + + + + + + + + + +

+Enumerations

enum  InterpolationMethod { ZERO_ORDER_HOLD +, LINEAR +, CUBIC_SPLINE + }
 Methods for interpolating signal values between discrete time points. More...
 
enum  ExtrapolationMethod { NANS +, ZEROS +, CLOSEST + }
 Methods for extrapolating signal values outside the defined time range. More...
 
enum  DerivativeMethod { DIRTY +, FINITE_DIFF + }
 Methods for computing numerical derivatives of signals. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
Signal< T, BaseSignalSpec, TangentSignalSpec > operator+ (const Signal< T, BaseSignalSpec, TangentSignalSpec > &l, const Signal< T, TangentSignalSpec, TangentSignalSpec > &r)
 Add a tangent signal to a base signal.
 
template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
Signal< T, TangentSignalSpec, TangentSignalSpec > operator- (const Signal< T, BaseSignalSpec, TangentSignalSpec > &l, const Signal< T, BaseSignalSpec, TangentSignalSpec > &r)
 Subtract one signal from another, producing a tangent signal.
 
template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
Signal< T, BaseSignalSpec, TangentSignalSpec > operator* (const double &l, const Signal< T, BaseSignalSpec, TangentSignalSpec > &r)
 Multiply a signal by a scalar from the left.
 
template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
Signal< T, BaseSignalSpec, TangentSignalSpec > operator* (const Signal< T, BaseSignalSpec, TangentSignalSpec > &l, const double &r)
 Multiply a signal by a scalar from the right.
 
template<typename T>
std::ostream & operator<< (std::ostream &os, const ScalarSignal< T > &x)
 
template<typename T, size_t d>
std::ostream & operator<< (std::ostream &os, const VectorSignal< T, d > &x)
 
template<typename T, typename ManifoldType, size_t d>
std::ostream & operator<< (std::ostream &os, const ManifoldSignal< T, ManifoldType, d > &x)
 
+

Macro Definition Documentation

+ +

◆ MAKE_MANIF_SIGNAL

+ +
+
+ + + + + + + + + + + +
#define MAKE_MANIF_SIGNAL( Manif,
Dimension )
+
+Value:
template<typename T> \
+
using Manif##Signal = ManifoldSignal<T, Manif<T>, Dimension>; \
+
typedef Manif##Signal<double> Manif##dSignal;
+
Signal< T, ManifoldSignalSpec< T, ManifoldType >, VectorSignalSpec< T, d > > ManifoldSignal
Definition Signal.h:920
+
Template class for time-series signals with interpolation, extrapolation, and derivative capabilities...
Definition Signal.h:63
+
+
+
+ +

◆ MAKE_VECTOR_SIGNAL

+ +
+
+ + + + + + + +
#define MAKE_VECTOR_SIGNAL( Dimension)
+
+Value:
template<typename T> \
+
using Vector##Dimension##Signal = VectorSignal<T, Dimension>; \
+
typedef Vector##Dimension##Signal<double> Vector##Dimension##dSignal;
+
Signal< T, VectorSignalSpec< T, d >, VectorSignalSpec< T, d > > VectorSignal
Definition Signal.h:910
+
+
+
+

Typedef Documentation

+ +

◆ ManifoldSignal

+ +
+
+
+template<typename T, typename ManifoldType, size_t d>
+ + + + +
using ManifoldSignal = Signal<T, ManifoldSignalSpec<T, ManifoldType>, VectorSignalSpec<T, d>>
+
+ +
+
+ +

◆ ScalardSignal

+ +
+
+ + + + +
typedef ScalarSignal<double> ScalardSignal
+
+ +
+
+ +

◆ ScalarSignal

+ +
+
+
+template<typename T>
+ + + + +
using ScalarSignal = Signal<T, ScalarSignalSpec<T>, ScalarSignalSpec<T>>
+
+ +
+
+ +

◆ SE2dSignal

+ +
+
+ + + + +
typedef SE2Signal<double> SE2dSignal
+
+ +
+
+ +

◆ SE2Signal

+ +
+
+
+template<typename T>
+ + + + +
using SE2Signal = ManifoldSignal<T, SE2<T>, 3>
+
+ +
+
+ +

◆ SE3dSignal

+ +
+
+ + + + +
typedef SE3Signal<double> SE3dSignal
+
+ +
+
+ +

◆ SE3Signal

+ +
+
+
+template<typename T>
+ + + + +
using SE3Signal = ManifoldSignal<T, SE3<T>, 6>
+
+ +
+
+ +

◆ SO2dSignal

+ +
+
+ + + + +
typedef SO2Signal<double> SO2dSignal
+
+ +
+
+ +

◆ SO2Signal

+ +
+
+
+template<typename T>
+ + + + +
using SO2Signal = ManifoldSignal<T, SO2<T>, 1>
+
+ +
+
+ +

◆ SO3dSignal

+ +
+
+ + + + +
typedef SO3Signal<double> SO3dSignal
+
+ +
+
+ +

◆ SO3Signal

+ +
+
+
+template<typename T>
+ + + + +
using SO3Signal = ManifoldSignal<T, SO3<T>, 3>
+
+ +
+
+ +

◆ Vector10dSignal

+ +
+
+ + + + +
typedef Vector10Signal<double> Vector10dSignal
+
+ +
+
+ +

◆ Vector10Signal

+ +
+
+
+template<typename T>
+ + + + +
using Vector10Signal = VectorSignal<T, 10>
+
+ +
+
+ +

◆ Vector1dSignal

+ +
+
+ + + + +
typedef Vector1Signal<double> Vector1dSignal
+
+ +
+
+ +

◆ Vector1Signal

+ +
+
+
+template<typename T>
+ + + + +
using Vector1Signal = VectorSignal<T, 1>
+
+ +
+
+ +

◆ Vector2dSignal

+ +
+
+ + + + +
typedef Vector2Signal<double> Vector2dSignal
+
+ +
+
+ +

◆ Vector2Signal

+ +
+
+
+template<typename T>
+ + + + +
using Vector2Signal = VectorSignal<T, 2>
+
+ +
+
+ +

◆ Vector3dSignal

+ +
+
+ + + + +
typedef Vector3Signal<double> Vector3dSignal
+
+ +
+
+ +

◆ Vector3Signal

+ +
+
+
+template<typename T>
+ + + + +
using Vector3Signal = VectorSignal<T, 3>
+
+ +
+
+ +

◆ Vector4dSignal

+ +
+
+ + + + +
typedef Vector4Signal<double> Vector4dSignal
+
+ +
+
+ +

◆ Vector4Signal

+ +
+
+
+template<typename T>
+ + + + +
using Vector4Signal = VectorSignal<T, 4>
+
+ +
+
+ +

◆ Vector5dSignal

+ +
+
+ + + + +
typedef Vector5Signal<double> Vector5dSignal
+
+ +
+
+ +

◆ Vector5Signal

+ +
+
+
+template<typename T>
+ + + + +
using Vector5Signal = VectorSignal<T, 5>
+
+ +
+
+ +

◆ Vector6dSignal

+ +
+
+ + + + +
typedef Vector6Signal<double> Vector6dSignal
+
+ +
+
+ +

◆ Vector6Signal

+ +
+
+
+template<typename T>
+ + + + +
using Vector6Signal = VectorSignal<T, 6>
+
+ +
+
+ +

◆ Vector7dSignal

+ +
+
+ + + + +
typedef Vector7Signal<double> Vector7dSignal
+
+ +
+
+ +

◆ Vector7Signal

+ +
+
+
+template<typename T>
+ + + + +
using Vector7Signal = VectorSignal<T, 7>
+
+ +
+
+ +

◆ Vector8dSignal

+ +
+
+ + + + +
typedef Vector8Signal<double> Vector8dSignal
+
+ +
+
+ +

◆ Vector8Signal

+ +
+
+
+template<typename T>
+ + + + +
using Vector8Signal = VectorSignal<T, 8>
+
+ +
+
+ +

◆ Vector9dSignal

+ +
+
+ + + + +
typedef Vector9Signal<double> Vector9dSignal
+
+ +
+
+ +

◆ Vector9Signal

+ +
+
+
+template<typename T>
+ + + + +
using Vector9Signal = VectorSignal<T, 9>
+
+ +
+
+ +

◆ VectorSignal

+ +
+
+
+template<typename T, size_t d>
+ + + + +
using VectorSignal = Signal<T, VectorSignalSpec<T, d>, VectorSignalSpec<T, d>>
+
+ +
+
+

Enumeration Type Documentation

+ +

◆ DerivativeMethod

+ +
+
+ + + + +
enum DerivativeMethod
+
+ +

Methods for computing numerical derivatives of signals.

+ + + +
Enumerator
DIRTY 

Use a discrete-time dirty derivative filter for smoothing.

+
FINITE_DIFF 

Use simple finite difference approximation.

+
+ +
+
+ +

◆ ExtrapolationMethod

+ +
+
+ + + + +
enum ExtrapolationMethod
+
+ +

Methods for extrapolating signal values outside the defined time range.

+ + + + +
Enumerator
NANS 

Return NaN (Not a Number) values outside the defined range.

+
ZEROS 

Return zero values outside the defined range.

+
CLOSEST 

Return the closest boundary value (first or last data point).

+
+ +
+
+ +

◆ InterpolationMethod

+ +
+
+ + + + +
enum InterpolationMethod
+
+ +

Methods for interpolating signal values between discrete time points.

+ + + + +
Enumerator
ZERO_ORDER_HOLD 

Hold the previous value constant until the next data point.

+
LINEAR 

Linearly interpolate between adjacent data points.

+
CUBIC_SPLINE 

Use cubic spline interpolation for smooth transitions.

+
+ +
+
+

Function Documentation

+ +

◆ operator*() [1/2]

+ +
+
+
+template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + + + + + + + + +
Signal< T, BaseSignalSpec, TangentSignalSpec > operator* (const double & l,
const Signal< T, BaseSignalSpec, TangentSignalSpec > & r )
+
+ +

Multiply a signal by a scalar from the left.

+
Parameters
+ + + +
lThe scalar multiplier.
rThe signal to multiply.
+
+
+
Returns
A new signal with all values and derivatives scaled by l.
+ +
+
+ +

◆ operator*() [2/2]

+ +
+
+
+template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + + + + + + + + +
Signal< T, BaseSignalSpec, TangentSignalSpec > operator* (const Signal< T, BaseSignalSpec, TangentSignalSpec > & l,
const double & r )
+
+ +

Multiply a signal by a scalar from the right.

+
Parameters
+ + + +
lThe signal to multiply.
rThe scalar multiplier.
+
+
+
Returns
A new signal with all values and derivatives scaled by r.
+ +
+
+ +

◆ operator+()

+ +
+
+
+template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + + + + + + + + +
Signal< T, BaseSignalSpec, TangentSignalSpec > operator+ (const Signal< T, BaseSignalSpec, TangentSignalSpec > & l,
const Signal< T, TangentSignalSpec, TangentSignalSpec > & r )
+
+ +

Add a tangent signal to a base signal.

+
Parameters
+ + + +
lThe left-hand side signal (base type).
rThe right-hand side signal (tangent type) to add.
+
+
+
Returns
A new signal with r added to l's values and derivatives.
+ +
+
+ +

◆ operator-()

+ +
+
+
+template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + + + + + + + + +
Signal< T, TangentSignalSpec, TangentSignalSpec > operator- (const Signal< T, BaseSignalSpec, TangentSignalSpec > & l,
const Signal< T, BaseSignalSpec, TangentSignalSpec > & r )
+
+ +

Subtract one signal from another, producing a tangent signal.

+
Parameters
+ + + +
lThe left-hand side signal.
rThe right-hand side signal to subtract.
+
+
+
Returns
A new tangent signal representing the difference l - r.
+ +
+
+ +

◆ operator<<() [1/3]

+ +
+
+
+template<typename T, typename ManifoldType, size_t d>
+ + + + + +
+ + + + + + + + + + + +
std::ostream & operator<< (std::ostream & os,
const ManifoldSignal< T, ManifoldType, d > & x )
+
+inline
+
+ +
+
+ +

◆ operator<<() [2/3]

+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + + + + + +
std::ostream & operator<< (std::ostream & os,
const ScalarSignal< T > & x )
+
+inline
+
+ +
+
+ +

◆ operator<<() [3/3]

+ +
+
+
+template<typename T, size_t d>
+ + + + + +
+ + + + + + + + + + + +
std::ostream & operator<< (std::ostream & os,
const VectorSignal< T, d > & x )
+
+inline
+
+ +
+
+
+
+ + + + diff --git a/docs/Signal_8h.js b/docs/Signal_8h.js new file mode 100644 index 0000000..5ecc907 --- /dev/null +++ b/docs/Signal_8h.js @@ -0,0 +1,63 @@ +var Signal_8h = +[ + [ "Signal< T, BaseSignalSpec, TangentSignalSpec >", "classSignal.html", "classSignal" ], + [ "Signal< T, BaseSignalSpec, TangentSignalSpec >::SignalDP", "structSignal_1_1SignalDP.html", "structSignal_1_1SignalDP" ], + [ "ScalarSignalSpec< T >", "structScalarSignalSpec.html", "structScalarSignalSpec" ], + [ "VectorSignalSpec< T, d >", "structVectorSignalSpec.html", "structVectorSignalSpec" ], + [ "ManifoldSignalSpec< T, ManifoldType >", "structManifoldSignalSpec.html", "structManifoldSignalSpec" ], + [ "MAKE_MANIF_SIGNAL", "Signal_8h.html#adf89e7a1e286d52fa755d04f0c087ea3", null ], + [ "MAKE_VECTOR_SIGNAL", "Signal_8h.html#a45ef87a3bf4ac7938147e95995f76849", null ], + [ "ManifoldSignal", "Signal_8h.html#a5eaf1b0b203f44f01882c84ee274576d", null ], + [ "ScalardSignal", "Signal_8h.html#a5d3a7fde60e049b3fb16e62c397585a0", null ], + [ "ScalarSignal", "Signal_8h.html#abc87ae11c3a781dd43f4854fcd25fcc3", null ], + [ "SE2dSignal", "Signal_8h.html#a27317de3cebe688fdf9b1f89e8d749ea", null ], + [ "SE2Signal", "Signal_8h.html#a5c686d1c1e780f578c950182943ecf41", null ], + [ "SE3dSignal", "Signal_8h.html#a13875f09fcdcc6dd114766bacc38f01b", null ], + [ "SE3Signal", "Signal_8h.html#ab87588076a67398d28c7f77a2103470b", null ], + [ "SO2dSignal", "Signal_8h.html#a43a8b3bb4241f080c75114c98502e21b", null ], + [ "SO2Signal", "Signal_8h.html#acbd9dbde916447b024121b565ee6ea96", null ], + [ "SO3dSignal", "Signal_8h.html#a1fbce3445fc6d54d3dfc2aa95fdcc37f", null ], + [ "SO3Signal", "Signal_8h.html#a25f5e910566ad4b1b610a8eebb96274d", null ], + [ "Vector10dSignal", "Signal_8h.html#a75b25f1facc38a02d21c155ec05655cc", null ], + [ "Vector10Signal", "Signal_8h.html#acda8904322955c5f969f290bf1a42595", null ], + [ "Vector1dSignal", "Signal_8h.html#a22bc2b41e336fe6237cfa41ac7b57d0b", null ], + [ "Vector1Signal", "Signal_8h.html#a532b7bae92d23faa5962b50fab59ee1a", null ], + [ "Vector2dSignal", "Signal_8h.html#a718e737386d2321f3e31df01ffe2fd61", null ], + [ "Vector2Signal", "Signal_8h.html#af4c2088cbc0c8f8c95be6f22e990d0d1", null ], + [ "Vector3dSignal", "Signal_8h.html#addff0c3095fce02a8ae3d8669292ea8a", null ], + [ "Vector3Signal", "Signal_8h.html#a59c30838434bb9eabab59a54a0dceb9f", null ], + [ "Vector4dSignal", "Signal_8h.html#a785560e5ddb26fcf9edc2eb9f34e7ec8", null ], + [ "Vector4Signal", "Signal_8h.html#a04b5a6ff0c189cb66f0e3137b1362c30", null ], + [ "Vector5dSignal", "Signal_8h.html#ad0b807d45bcfe07cc9a2f54648dd4821", null ], + [ "Vector5Signal", "Signal_8h.html#a9f0b242918cfdc4b6eaecdeb6574b6cb", null ], + [ "Vector6dSignal", "Signal_8h.html#acb50cf2886559fdfc3aba4ee722f511a", null ], + [ "Vector6Signal", "Signal_8h.html#a4da3e39a6224769606055a56f1508e6b", null ], + [ "Vector7dSignal", "Signal_8h.html#afea76be78e2b329344fb610a62c421e9", null ], + [ "Vector7Signal", "Signal_8h.html#ac71cd26f6afca210f51cc394d520779b", null ], + [ "Vector8dSignal", "Signal_8h.html#ad2214d5fb3267b191128fcccb515448b", null ], + [ "Vector8Signal", "Signal_8h.html#a6fe111909e599c7d732507ef08213e06", null ], + [ "Vector9dSignal", "Signal_8h.html#acd349d949f45a7bce633414d05043cc3", null ], + [ "Vector9Signal", "Signal_8h.html#ae78698ceb51c16ea2ffea1ea2b5507e3", null ], + [ "VectorSignal", "Signal_8h.html#a1d966a75102d98f8bc945641836386b8", null ], + [ "DerivativeMethod", "Signal_8h.html#a35d05b0e727a39b86907d8669e9e1242", [ + [ "DIRTY", "Signal_8h.html#a35d05b0e727a39b86907d8669e9e1242a6a4e132eb192a22c351397837d4c082c", null ], + [ "FINITE_DIFF", "Signal_8h.html#a35d05b0e727a39b86907d8669e9e1242a31a5b438304c770230e3fbb9999c9c2e", null ] + ] ], + [ "ExtrapolationMethod", "Signal_8h.html#a9943b8bd1a1a1cdb774553d44c12cde4", [ + [ "NANS", "Signal_8h.html#a9943b8bd1a1a1cdb774553d44c12cde4af4517d0db561241ccfcf150e1629767f", null ], + [ "ZEROS", "Signal_8h.html#a9943b8bd1a1a1cdb774553d44c12cde4a5d7341ec5879a7f47c5cb82c0fdf6b5f", null ], + [ "CLOSEST", "Signal_8h.html#a9943b8bd1a1a1cdb774553d44c12cde4a901e715f86c693ccd2851e8c0b64cca3", null ] + ] ], + [ "InterpolationMethod", "Signal_8h.html#aa0081e804011c551ea0f4a596a64b284", [ + [ "ZERO_ORDER_HOLD", "Signal_8h.html#aa0081e804011c551ea0f4a596a64b284ad873f8ab97a3f6e892c8b834b23db574", null ], + [ "LINEAR", "Signal_8h.html#aa0081e804011c551ea0f4a596a64b284adc101ebf31c49c2d4b80b7c6f59f22cb", null ], + [ "CUBIC_SPLINE", "Signal_8h.html#aa0081e804011c551ea0f4a596a64b284a13480ea7779c90806a9fa4ef70322ebc", null ] + ] ], + [ "operator*", "Signal_8h.html#abc6ca4ae108bb396ee8f8e6e49c72726", null ], + [ "operator*", "Signal_8h.html#ae7c5ba17f9c292f3afb995d5ca9fca64", null ], + [ "operator+", "Signal_8h.html#a5a26056c1f1fd07a31f62ee2f6ef454b", null ], + [ "operator-", "Signal_8h.html#ab3fabcc65538dee9ff663a100e5f6f5b", null ], + [ "operator<<", "Signal_8h.html#a6a76598b459ea2e14353617de437c808", null ], + [ "operator<<", "Signal_8h.html#a47318c97bced9b7ee828c94c1a4eeb29", null ], + [ "operator<<", "Signal_8h.html#aeb7f6d79d7e692981221b685c0863d54", null ] +]; \ No newline at end of file diff --git a/docs/Signal_8h_source.html b/docs/Signal_8h_source.html new file mode 100644 index 0000000..807c7ed --- /dev/null +++ b/docs/Signal_8h_source.html @@ -0,0 +1,1040 @@ + + + + + + + +signals-cpp: include/signals/Signal.h Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Signal.h
+
+
+Go to the documentation of this file.
1#pragma once
+
2#include <algorithm>
+
3#include <limits>
+
4#include <Eigen/Core>
+
5#include <SO2.h>
+
6#include <SO3.h>
+
7#include <SE2.h>
+
8#include <SE3.h>
+
9#include "Utils.h"
+
10
+
11using namespace Eigen;
+
12
+ +
22
+
+ +
27{
+ + + +
31};
+
+
32
+
+ +
37{
+ + +
40};
+
+
41
+
61template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
+
+
62class Signal
+
63{
+
64public:
+
65 using BaseType = typename BaseSignalSpec::Type;
+
66 using TangentType = typename TangentSignalSpec::Type;
+
67
+
+
71 struct SignalDP
+
72 {
+
73 double t;
+ + +
76 };
+
+
77
+
81 struct
+
82 {
+
83 bool operator()(SignalDP a, SignalDP b) const
+
84 {
+
85 return a.t < b.t;
+
86 }
+ +
88
+ + + +
92
+ +
103
+
+
108 Signal(const Signal& other)
+
109 {
+
110 this->interpolationMethod = other.interpolationMethod;
+
111 this->extrapolationMethod = other.extrapolationMethod;
+
112 this->derivativeMethod = other.derivativeMethod;
+
113 this->t_ = other.t_;
+
114 this->x_ = other.x_;
+
115 this->xdot_ = other.xdot_;
+
116 this->signalHistory_ = other.signalHistory_;
+
117 this->needsSort_ = other.needsSort_;
+
118 }
+
+
119
+
+ +
125 {
+ +
127 for (auto signalDP : signalHistory_)
+
128 {
+
129 signalDot.update(signalDP.t, signalDP.xdot, true);
+
130 }
+
131 signalDot.update(t(), dot());
+
132 return signalDot;
+
133 }
+
+
134
+
135 template<typename S, typename BSS, typename TSS>
+ +
137
+
138 template<typename S, typename BSS, typename TSS>
+ +
140
+
141 template<typename S, typename BSS, typename TSS>
+
142 friend Signal<S, BSS, TSS> operator*(const double& l, const Signal<S, BSS, TSS>& r);
+
143
+
144 template<typename S, typename BSS, typename TSS>
+
145 friend Signal<S, BSS, TSS> operator*(const Signal<S, BSS, TSS>& l, const double& r);
+
146
+
+
151 double t() const
+
152 {
+
153 return t_;
+
154 }
+
+
155
+
+ +
161 {
+
162 return x_;
+
163 }
+
+
164
+
+ +
170 {
+
171 return xdot_;
+
172 }
+
+
173
+
+
179 BaseType operator()(const double& t) const
+
180 {
+
181 return xAt(t);
+
182 }
+
+
183
+
+
189 TangentType dot(const double& t) const
+
190 {
+
191 return xDotAt(t);
+
192 }
+
+
193
+
+
199 std::vector<BaseType> operator()(const std::vector<double>& t) const
+
200 {
+
201 std::vector<BaseType> xInterp;
+
202 for (size_t i = 0; i < t.size(); i++)
+
203 {
+
204 xInterp.push_back(xAt(t[i]));
+
205 }
+
206 return xInterp;
+
207 }
+
+
208
+
+
214 std::vector<TangentType> dot(const std::vector<double>& t) const
+
215 {
+
216 std::vector<TangentType> xDotInterp;
+
217 for (size_t i = 0; i < t.size(); i++)
+
218 {
+
219 xDotInterp.push_back(xDotAt(t[i]));
+
220 }
+
221 return xDotInterp;
+
222 }
+
+
223
+
+ +
229 {
+
230 interpolationMethod = method;
+
231 }
+
+
232
+
+ +
238 {
+
239 extrapolationMethod = method;
+
240 }
+
+
241
+
+ +
247 {
+
248 derivativeMethod = method;
+
249 }
+
+
250
+
+
254 void reset()
+
255 {
+
256 t_ = -1.0;
+
257 x_ = BaseSignalSpec::ZeroType();
+
258 xdot_ = TangentSignalSpec::ZeroType();
+
259 signalHistory_.clear();
+
260 needsSort_ = false;
+
261 }
+
+
262
+
+
270 bool update(const double& _t, const BaseType& _x, bool insertHistory = false)
+
271 {
+
272 TangentType _xdot;
+
273 if (!calculateDerivative(_t, _x, _xdot))
+
274 {
+
275 return false;
+
276 }
+
277 return update(_t, _x, _xdot, insertHistory);
+
278 }
+
+
279
+
+
288 bool update(const double& _t, const BaseType& _x, const TangentType& _xdot, bool insertHistory = false)
+
289 {
+
290 t_ = _t;
+
291 x_ = _x;
+
292 xdot_ = _xdot;
+
293 if (insertHistory)
+
294 {
+
295 if (insertIntoHistory(_t, _x, _xdot))
+
296 {
+
297 if (needsSort_)
+
298 {
+
299 std::sort(signalHistory_.begin(), signalHistory_.end(), SignalDPComparator);
+
300 needsSort_ = false;
+
301 }
+
302 return true;
+
303 }
+
304 else
+
305 {
+
306 return false;
+
307 }
+
308 }
+
309 return true;
+
310 }
+
+
311
+
+
318 bool update(const std::vector<double>& _tHistory, const std::vector<BaseType>& _xHistory)
+
319 {
+
320 size_t nTH = _tHistory.size();
+
321 size_t nXH = _xHistory.size();
+
322 if (nTH != nXH)
+
323 {
+
324 return false;
+
325 }
+
326 for (size_t i = 0; i < nXH; i++)
+
327 {
+
328 TangentType _xdot;
+
329 if (!calculateDerivative(_tHistory[i], _xHistory[i], _xdot))
+
330 {
+
331 return false;
+
332 }
+
333 if (!insertIntoHistory(_tHistory[i], _xHistory[i], _xdot))
+
334 {
+
335 return false;
+
336 }
+
337 }
+
338 if (needsSort_)
+
339 {
+
340 std::sort(signalHistory_.begin(), signalHistory_.end(), SignalDPComparator);
+
341 needsSort_ = false;
+
342 }
+
343 return true;
+
344 }
+
+
345
+
+
353 bool update(const std::vector<double>& _tHistory,
+
354 const std::vector<BaseType>& _xHistory,
+
355 const std::vector<TangentType>& _xdotHistory)
+
356 {
+
357 size_t nTH = _tHistory.size();
+
358 size_t nXH = _xHistory.size();
+
359 size_t nXDH = _xdotHistory.size();
+
360 if (nXH != nXDH || nXDH != nTH)
+
361 {
+
362 return false;
+
363 }
+
364 for (size_t i = 0; i < nXH; i++)
+
365 {
+
366 if (!insertIntoHistory(_tHistory[i], _xHistory[i], _xdotHistory[i]))
+
367 {
+
368 return false;
+
369 }
+
370 }
+
371 if (needsSort_)
+
372 {
+
373 std::sort(signalHistory_.begin(), signalHistory_.end(), SignalDPComparator);
+
374 needsSort_ = false;
+
375 }
+
376 return true;
+
377 }
+
+
378
+
+
383 static inline BaseType baseZero()
+
384 {
+
385 return BaseSignalSpec::ZeroType();
+
386 }
+
+
387
+
+
392 static inline TangentType tangentZero()
+
393 {
+
394 return TangentSignalSpec::ZeroType();
+
395 }
+
+
396
+
+
402 static inline T baseNorm(const BaseType& x)
+
403 {
+
404 return BaseSignalSpec::Norm(x);
+
405 }
+
+
406
+
+
412 static inline T tangentNorm(const TangentType& x)
+
413 {
+
414 return TangentSignalSpec::Norm(x);
+
415 }
+
+
416
+
417private:
+
418 double t_;
+
419 BaseType x_;
+
420 TangentType xdot_;
+
421 std::vector<SignalDP> signalHistory_;
+
422 bool needsSort_;
+
423
+
424 bool insertIntoHistory(const double& _t, const BaseType& _x, const TangentType& _xdot)
+
425 {
+
426 if (_t > t_)
+
427 {
+
428 t_ = _t;
+
429 x_ = _x;
+
430 xdot_ = _xdot;
+
431 }
+
432 if (signalHistory_.size() > 0)
+
433 {
+
434 double mostRecentTime = signalHistory_[signalHistory_.size() - 1].t;
+
435 if (_t == mostRecentTime)
+
436 {
+
437 return false;
+
438 }
+
439 else if (_t < mostRecentTime)
+
440 {
+
441 needsSort_ = true;
+
442 }
+
443 }
+
444 signalHistory_.push_back({_t, _x, _xdot});
+
445 return true;
+
446 }
+
447
+
448 BaseType xAt(const double& t) const
+
449 {
+
450 if (t == t_)
+
451 {
+
452 return x_;
+
453 }
+
454 else if (signalHistory_.size() > 0)
+
455 {
+
456 int idx = getInterpIndex(t);
+
457 if (idx < 0 || idx >= static_cast<int>(signalHistory_.size()))
+
458 {
+
459 switch (extrapolationMethod)
+
460 {
+ +
462 return BaseSignalSpec::NansType();
+
463 break;
+ +
465 if (idx < 0)
+
466 {
+
467 return signalHistory_[0].x;
+
468 }
+
469 else
+
470 {
+
471 return signalHistory_[signalHistory_.size() - 1].x;
+
472 }
+
473 break;
+ +
475 default:
+
476 return BaseSignalSpec::ZeroType();
+
477 break;
+
478 }
+
479 }
+
480 else
+
481 {
+
482 BaseType y = xAtIdx(idx);
+
483 TangentType dy;
+
484 switch (interpolationMethod)
+
485 {
+ +
487 dy = TangentSignalSpec::ZeroType();
+
488 break;
+
489 }
+ +
491 double t1 = tAtIdx(idx);
+
492 double t2 = tAtIdx(idx + 1);
+
493 BaseType y1 = xAtIdx(idx);
+
494 BaseType y2 = xAtIdx(idx + 1);
+
495 dy = (t - t1) / (t2 - t1) * (y2 - y1);
+
496 break;
+
497 }
+ +
499 double t0 = tAtIdx(idx - 1);
+
500 double t1 = tAtIdx(idx);
+
501 double t2 = tAtIdx(idx + 1);
+
502 double t3 = tAtIdx(idx + 2);
+
503 BaseType y0 = xAtIdx(idx - 1);
+
504 BaseType y1 = xAtIdx(idx);
+
505 BaseType y2 = xAtIdx(idx + 1);
+
506 BaseType y3 = xAtIdx(idx + 2);
+
507 dy =
+
508 (t - t1) / (t2 - t1) *
+
509 ((y2 - y1) + (t2 - t) / (2. * (t2 - t1) * (t2 - t1)) *
+
510 (((t2 - t) * (t2 * (y1 - y0) + t0 * (y2 - y1) - t1 * (y2 - y0))) / (t1 - t0) +
+
511 ((t - t1) * (t3 * (y2 - y1) + t2 * (y3 - y1) - t1 * (y3 - y2))) / (t3 - t2)));
+
512 break;
+
513 }
+
514 }
+
515 return y + dy;
+
516 }
+
517 }
+
518 else
+
519 {
+
520 return BaseSignalSpec::ZeroType();
+
521 }
+
522 }
+
523
+
524 TangentType xDotAt(const double& t) const
+
525 {
+
526 if (t == t_)
+
527 {
+
528 return xdot_;
+
529 }
+
530 else if (signalHistory_.size() > 0)
+
531 {
+
532 int idx = getInterpIndex(t);
+
533 if (idx < 0 || idx >= static_cast<int>(signalHistory_.size()))
+
534 {
+
535 switch (extrapolationMethod)
+
536 {
+ +
538 return TangentSignalSpec::NansType();
+
539 break;
+ +
541 if (idx < 0)
+
542 {
+
543 return signalHistory_[0].xdot;
+
544 }
+
545 else
+
546 {
+
547 return signalHistory_[signalHistory_.size() - 1].xdot;
+
548 }
+
549 break;
+ +
551 default:
+
552 return TangentSignalSpec::ZeroType();
+
553 break;
+
554 }
+
555 }
+
556 else
+
557 {
+
558 TangentType y = xDotAtIdx(idx);
+
559 TangentType dy;
+
560 switch (interpolationMethod)
+
561 {
+ +
563 dy = TangentSignalSpec::ZeroType();
+
564 break;
+
565 }
+ +
567 double t1 = tAtIdx(idx);
+
568 double t2 = tAtIdx(idx + 1);
+
569 TangentType y1 = xDotAtIdx(idx);
+
570 TangentType y2 = xDotAtIdx(idx + 1);
+
571 dy = (t - t1) / (t2 - t1) * (y2 - y1);
+
572 break;
+
573 }
+ +
575 double t0 = tAtIdx(idx - 1);
+
576 double t1 = tAtIdx(idx);
+
577 double t2 = tAtIdx(idx + 1);
+
578 double t3 = tAtIdx(idx + 2);
+
579 TangentType y0 = xDotAtIdx(idx - 1);
+
580 TangentType y1 = xDotAtIdx(idx);
+
581 TangentType y2 = xDotAtIdx(idx + 1);
+
582 TangentType y3 = xDotAtIdx(idx + 2);
+
583 dy =
+
584 (t - t1) / (t2 - t1) *
+
585 ((y2 - y1) + (t2 - t) / (2. * (t2 - t1) * (t2 - t1)) *
+
586 (((t2 - t) * (t2 * (y1 - y0) + t0 * (y2 - y1) - t1 * (y2 - y0))) / (t1 - t0) +
+
587 ((t - t1) * (t3 * (y2 - y1) + t2 * (y3 - y1) - t1 * (y3 - y2))) / (t3 - t2)));
+
588 break;
+
589 }
+
590 }
+
591 return y + dy;
+
592 }
+
593 }
+
594 else
+
595 {
+
596 return TangentSignalSpec::ZeroType();
+
597 }
+
598 }
+
599
+
600 // Implementation note: signal history size must > 0
+
601 int getInterpIndex(const double& t) const
+
602 {
+
603 if (t < signalHistory_[0].t)
+
604 {
+
605 return -1;
+
606 }
+
607 else if (t > signalHistory_[signalHistory_.size() - 1].t)
+
608 {
+
609 return static_cast<int>(signalHistory_.size());
+
610 }
+
611 else
+
612 {
+
613 for (size_t i = 0; i < signalHistory_.size(); i++)
+
614 {
+
615 double t_i = signalHistory_[i].t;
+
616 double t_ip1 = tAtIdx(i + 1);
+
617 if (t_i <= t && t_ip1 > t)
+
618 {
+
619 return static_cast<int>(i);
+
620 }
+
621 }
+
622 return -1;
+
623 }
+
624 }
+
625
+
626 double tAtIdx(const int& idx) const
+
627 {
+
628 if (idx < 0)
+
629 {
+
630 return signalHistory_[0].t + static_cast<double>(idx);
+
631 }
+
632 else if (idx >= signalHistory_.size())
+
633 {
+
634 return signalHistory_[signalHistory_.size() - 1].t +
+
635 static_cast<double>(idx - static_cast<int>(signalHistory_.size() - 1));
+
636 }
+
637 else
+
638 {
+
639 return signalHistory_[idx].t;
+
640 }
+
641 }
+
642
+
643 BaseType xAtIdx(const int& idx) const
+
644 {
+
645 if (idx < 0)
+
646 {
+
647 return signalHistory_[0].x;
+
648 }
+
649 else if (idx >= signalHistory_.size())
+
650 {
+
651 return signalHistory_[signalHistory_.size() - 1].x;
+
652 }
+
653 else
+
654 {
+
655 return signalHistory_[idx].x;
+
656 }
+
657 }
+
658
+
659 TangentType xDotAtIdx(const int& idx) const
+
660 {
+
661 if (idx < 0)
+
662 {
+
663 return signalHistory_[0].xdot;
+
664 }
+
665 else if (idx >= signalHistory_.size())
+
666 {
+
667 return signalHistory_[signalHistory_.size() - 1].xdot;
+
668 }
+
669 else
+
670 {
+
671 return signalHistory_[idx].xdot;
+
672 }
+
673 }
+
674
+
675 // Implementation note: should always be followed by a call to update()
+
676 bool calculateDerivative(const double& _t, const BaseType& _x, TangentType& _xdot)
+
677 {
+
678 const static double sigma = 0.05;
+
679 if (_t <= t_)
+
680 {
+
681 return false;
+
682 }
+
683 if (t_ >= 0)
+
684 {
+
685 const double dt = _t - t_;
+
686 const TangentType dx = _x - x_;
+
687 switch (derivativeMethod)
+
688 {
+ +
690 _xdot = (2. * sigma - dt) / (2. * sigma + dt) * xdot_ + 2. / (2. * sigma + dt) * dx;
+
691 break;
+ +
693 _xdot = dx / dt;
+
694 break;
+
695 }
+
696 }
+
697 else
+
698 {
+
699 _xdot = TangentSignalSpec::ZeroType();
+
700 }
+
701 return true;
+
702 }
+
703};
+
+
704
+
711template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
+
+ + +
714{
+ +
716 lpr.x_ += r(l.t());
+
717 lpr.xdot_ += r.dot(l.t());
+
718 for (auto& signalDP : lpr.signalHistory_)
+
719 {
+
720 signalDP.x += r(signalDP.t);
+
721 signalDP.xdot += r.dot(signalDP.t);
+
722 }
+
723 return lpr;
+
724}
+
+
725
+
732template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
+
+ + +
735{
+ + + + +
740 lmr.needsSort_ = l.needsSort_;
+
741 lmr.t_ = l.t();
+
742 lmr.x_ = l() - r(l.t());
+
743 lmr.xdot_ = l.dot() - r.dot(l.t());
+
744 std::vector<double> tHistory;
+
745 std::vector<typename TangentSignalSpec::Type> xHistory;
+
746 std::vector<typename TangentSignalSpec::Type> xdotHistory;
+
747 for (auto& signalDP : l.signalHistory_)
+
748 {
+
749 tHistory.push_back(signalDP.t);
+
750 xHistory.push_back(signalDP.x - r(signalDP.t));
+
751 xdotHistory.push_back(signalDP.xdot - r.dot(signalDP.t));
+
752 }
+
753 lmr.update(tHistory, xHistory, xdotHistory);
+
754 return lmr;
+
755}
+
+
756
+
763template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
+
+ + +
766{
+ +
768 lr.x_ *= l;
+
769 lr.xdot_ *= l;
+
770 for (auto& signalDP : lr.signalHistory_)
+
771 {
+
772 signalDP.x *= l;
+
773 signalDP.xdot *= l;
+
774 }
+
775 return lr;
+
776}
+
+
777
+
784template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
+
+ +
786 const double& r)
+
787{
+ +
789 lr.x_ *= r;
+
790 lr.xdot_ *= r;
+
791 for (auto& signalDP : lr.signalHistory_)
+
792 {
+
793 signalDP.x *= r;
+
794 signalDP.xdot *= r;
+
795 }
+
796 return lr;
+
797}
+
+
798
+
803template<typename T>
+
+ +
805{
+
806 using Type = T;
+
+
810 static Type ZeroType()
+
811 {
+
812 return (T)0.0;
+
813 }
+
+
814
+
+
817 static Type NansType()
+
818 {
+
819 return (T)1. / 0.;
+
820 }
+
+
821
+
+
826 static T Norm(const Type& a)
+
827 {
+
828 return a;
+
829 }
+
+
830};
+
+
831
+
837template<typename T, size_t d>
+
+ +
839{
+
840 using Type = Matrix<T, d, 1>;
+
+
844 static Type ZeroType()
+
845 {
+
846 return Type::Zero();
+
847 }
+
+
848
+
+
851 static Type NansType()
+
852 {
+
853 return Type::Constant(std::numeric_limits<T>::quiet_NaN());
+
854 }
+
+
855
+
+
860 static T Norm(const Type& a)
+
861 {
+
862 return a.norm();
+
863 }
+
+
864};
+
+
865
+
870template<typename T, typename ManifoldType>
+
+ +
872{
+
873 using Type = ManifoldType;
+
+
877 static Type ZeroType()
+
878 {
+
879 return Type::identity();
+
880 }
+
+
881
+
+
884 static Type NansType()
+
885 {
+
886 return Type::nans();
+
887 }
+
+
888
+
+
893 static T Norm(const Type& a)
+
894 {
+
895 return ManifoldType::Log(a).norm();
+
896 }
+
+
897};
+
+
898
+
899template<typename T>
+ +
901
+
902template<typename T>
+
+
903inline std::ostream& operator<<(std::ostream& os, const ScalarSignal<T>& x)
+
904{
+
905 os << "ScalarSignal at t=" << x.t() << ": " << x();
+
906 return os;
+
907}
+
+
908
+
909template<typename T, size_t d>
+ +
911
+
912template<typename T, size_t d>
+
+
913inline std::ostream& operator<<(std::ostream& os, const VectorSignal<T, d>& x)
+
914{
+
915 os << "VectorSignal at t=" << x.t() << ": " << x().transpose();
+
916 return os;
+
917}
+
+
918
+
919template<typename T, typename ManifoldType, size_t d>
+ +
921
+
922template<typename T, typename ManifoldType, size_t d>
+
+
923inline std::ostream& operator<<(std::ostream& os, const ManifoldSignal<T, ManifoldType, d>& x)
+
924{
+
925 os << "ManifoldSignal at t=" << x.t() << ": " << x();
+
926 return os;
+
927}
+
+
928
+
+
929#define MAKE_VECTOR_SIGNAL(Dimension) \
+
930 template<typename T> \
+
931 using Vector##Dimension##Signal = VectorSignal<T, Dimension>; \
+
932 typedef Vector##Dimension##Signal<double> Vector##Dimension##dSignal;
+
+
933
+
+
934#define MAKE_MANIF_SIGNAL(Manif, Dimension) \
+
935 template<typename T> \
+
936 using Manif##Signal = ManifoldSignal<T, Manif<T>, Dimension>; \
+
937 typedef Manif##Signal<double> Manif##dSignal;
+
+
938
+ + + + + + + + + + + + + + + +
Signal< T, VectorSignalSpec< T, d >, VectorSignalSpec< T, d > > VectorSignal
Definition Signal.h:910
+
DerivativeMethod
Methods for computing numerical derivatives of signals.
Definition Signal.h:37
+
@ FINITE_DIFF
Definition Signal.h:39
+
@ DIRTY
Definition Signal.h:38
+
#define MAKE_VECTOR_SIGNAL(Dimension)
Definition Signal.h:929
+
std::ostream & operator<<(std::ostream &os, const ScalarSignal< T > &x)
Definition Signal.h:903
+
Signal< T, BaseSignalSpec, TangentSignalSpec > operator+(const Signal< T, BaseSignalSpec, TangentSignalSpec > &l, const Signal< T, TangentSignalSpec, TangentSignalSpec > &r)
Add a tangent signal to a base signal.
Definition Signal.h:712
+
ScalarSignal< double > ScalardSignal
Definition Signal.h:939
+
Signal< T, ManifoldSignalSpec< T, ManifoldType >, VectorSignalSpec< T, d > > ManifoldSignal
Definition Signal.h:920
+
ExtrapolationMethod
Methods for extrapolating signal values outside the defined time range.
Definition Signal.h:27
+
@ ZEROS
Definition Signal.h:29
+
@ CLOSEST
Definition Signal.h:30
+
@ NANS
Definition Signal.h:28
+
InterpolationMethod
Methods for interpolating signal values between discrete time points.
Definition Signal.h:17
+
@ CUBIC_SPLINE
Definition Signal.h:20
+
@ ZERO_ORDER_HOLD
Definition Signal.h:18
+
@ LINEAR
Definition Signal.h:19
+
Signal< T, TangentSignalSpec, TangentSignalSpec > operator-(const Signal< T, BaseSignalSpec, TangentSignalSpec > &l, const Signal< T, BaseSignalSpec, TangentSignalSpec > &r)
Subtract one signal from another, producing a tangent signal.
Definition Signal.h:733
+
Signal< T, BaseSignalSpec, TangentSignalSpec > operator*(const double &l, const Signal< T, BaseSignalSpec, TangentSignalSpec > &r)
Multiply a signal by a scalar from the left.
Definition Signal.h:764
+
Signal< T, ScalarSignalSpec< T >, ScalarSignalSpec< T > > ScalarSignal
Definition Signal.h:900
+
#define MAKE_MANIF_SIGNAL(Manif, Dimension)
Definition Signal.h:934
+ +
Template class for time-series signals with interpolation, extrapolation, and derivative capabilities...
Definition Signal.h:63
+
static TangentType tangentZero()
Definition Signal.h:392
+
void setDerivativeMethod(DerivativeMethod method)
Definition Signal.h:246
+
static T baseNorm(const BaseType &x)
Definition Signal.h:402
+
double t() const
Get the current time of the signal.
Definition Signal.h:151
+
bool update(const double &_t, const BaseType &_x, const TangentType &_xdot, bool insertHistory=false)
Definition Signal.h:288
+
Signal(const Signal &other)
Definition Signal.h:108
+
void setExtrapolationMethod(ExtrapolationMethod method)
Definition Signal.h:237
+
friend Signal< S, BSS, TSS > operator*(const double &l, const Signal< S, BSS, TSS > &r)
+
std::vector< BaseType > operator()(const std::vector< double > &t) const
Definition Signal.h:199
+
friend Signal< S, BSS, TSS > operator*(const Signal< S, BSS, TSS > &l, const double &r)
+
friend Signal< S, TSS, TSS > operator-(const Signal< S, BSS, TSS > &l, const Signal< S, BSS, TSS > &r)
+
struct Signal::@053250032031010315204017007310244260026177164207 SignalDPComparator
Comparator for sorting signal data points by time.
+
void setInterpolationMethod(InterpolationMethod method)
Definition Signal.h:228
+
static BaseType baseZero()
Definition Signal.h:383
+
BaseType operator()(const double &t) const
Definition Signal.h:179
+
ExtrapolationMethod extrapolationMethod
Definition Signal.h:90
+
Signal()
Default constructor initializing with LINEAR interpolation, ZEROS extrapolation, and DIRTY derivative...
Definition Signal.h:96
+
static T tangentNorm(const TangentType &x)
Definition Signal.h:412
+
std::vector< TangentType > dot(const std::vector< double > &t) const
Definition Signal.h:214
+
typename BaseSignalSpec::Type BaseType
Definition Signal.h:65
+
bool update(const double &_t, const BaseType &_x, bool insertHistory=false)
Update the signal with a new value at a given time, computing derivative automatically.
Definition Signal.h:270
+
InterpolationMethod interpolationMethod
Definition Signal.h:89
+
bool update(const std::vector< double > &_tHistory, const std::vector< BaseType > &_xHistory, const std::vector< TangentType > &_xdotHistory)
Definition Signal.h:353
+
void reset()
Reset the signal to initial state, clearing all history.
Definition Signal.h:254
+
bool update(const std::vector< double > &_tHistory, const std::vector< BaseType > &_xHistory)
Definition Signal.h:318
+
BaseType operator()() const
Get the current signal value.
Definition Signal.h:160
+
typename TangentSignalSpec::Type TangentType
Definition Signal.h:66
+
TangentType dot() const
Get the current time derivative of the signal.
Definition Signal.h:169
+
Signal< T, ScalarSignalSpec< T >, ScalarSignalSpec< T > > dotSignal()
Definition Signal.h:124
+ +
TangentType dot(const double &t) const
Definition Signal.h:189
+
friend Signal< S, BSS, TSS > operator+(const Signal< S, BSS, TSS > &l, const Signal< S, TSS, TSS > &r)
+
Type specification for manifold-valued signals (e.g., SO2, SO3, SE2, SE3).
Definition Signal.h:872
+
static Type NansType()
Returns manifold element with NaN values.
Definition Signal.h:884
+
static T Norm(const Type &a)
Compute the norm of a manifold element via its logarithmic map.
Definition Signal.h:893
+
ManifoldType Type
Definition Signal.h:873
+
static Type ZeroType()
Returns identity element of the manifold.
Definition Signal.h:877
+
Type specification for scalar-valued signals.
Definition Signal.h:805
+
static Type NansType()
Returns NaN value for the scalar type.
Definition Signal.h:817
+
T Type
Definition Signal.h:806
+
static Type ZeroType()
Returns zero value for the scalar type.
Definition Signal.h:810
+
static T Norm(const Type &a)
Compute the norm (absolute value) of a scalar.
Definition Signal.h:826
+
Data point structure storing time, value, and derivative.
Definition Signal.h:72
+
TangentType xdot
Definition Signal.h:75
+
BaseType x
Definition Signal.h:74
+
double t
Definition Signal.h:73
+
Type specification for vector-valued signals.
Definition Signal.h:839
+
static Type NansType()
Returns vector filled with NaN values.
Definition Signal.h:851
+
static Type ZeroType()
Returns zero vector.
Definition Signal.h:844
+
static T Norm(const Type &a)
Compute the Euclidean norm of a vector.
Definition Signal.h:860
+
Matrix< T, d, 1 > Type
Definition Signal.h:840
+
+
+ + + + diff --git a/docs/Signals_8h.html b/docs/Signals_8h.html new file mode 100644 index 0000000..06b08bb --- /dev/null +++ b/docs/Signals_8h.html @@ -0,0 +1,125 @@ + + + + + + + +signals-cpp: include/signals/Signals.h File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Signals.h File Reference
+
+ +
+ + + + diff --git a/docs/Signals_8h_source.html b/docs/Signals_8h_source.html new file mode 100644 index 0000000..0cd2635 --- /dev/null +++ b/docs/Signals_8h_source.html @@ -0,0 +1,130 @@ + + + + + + + +signals-cpp: include/signals/Signals.h Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Signals.h
+
+
+Go to the documentation of this file.
1#pragma once
+
2
+
3#include "signals/Signal.h"
+ +
5#include "signals/State.h"
+
6#include "signals/Models.h"
+
7
+ + + + +
+
+ + + + diff --git a/docs/State_8h.html b/docs/State_8h.html new file mode 100644 index 0000000..14b85fe --- /dev/null +++ b/docs/State_8h.html @@ -0,0 +1,1742 @@ + + + + + + + +signals-cpp: include/signals/State.h File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
State.h File Reference
+
+
+
#include "signals/Signal.h"
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + +

+Classes

struct  State< T, PoseTypeSpec, PoseDim, TwistTypeSpec, TwistDim >
 Base type for all Model state representations. More...
 
struct  ScalarStateSignalSpec< T >
 Type specification for scalar state signals. More...
 
struct  VectorStateSignalSpec< T, d >
 Type specification for vector state signals. More...
 
struct  ManifoldStateSignalSpec< T, ManifoldType, PD, TD >
 Type specification for manifold state signals. More...
 
+ + + + + +

+Macros

#define MAKE_VECTOR_STATES(Dimension)
 
#define MAKE_MANIF_STATES(Manif, Dimension, TangentDimension)
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Typedefs

template<typename T>
using ScalarStateType = State<T, ScalarSignalSpec<T>, 1, ScalarSignalSpec<T>, 1>
 
template<typename T, size_t d>
using VectorStateType = State<T, VectorSignalSpec<T, d>, d, VectorSignalSpec<T, d>, d>
 
template<typename T, typename ManifoldType, size_t PD, size_t TD>
using ManifoldStateType = State<T, ManifoldSignalSpec<T, ManifoldType>, PD, VectorSignalSpec<T, TD>, TD>
 
template<typename T>
using ScalarStateSignal = Signal<T, ScalarStateSignalSpec<T>, ScalarStateSignalSpec<T>>
 
template<typename T, size_t d>
using VectorStateSignal = Signal<T, VectorStateSignalSpec<T, d>, VectorStateSignalSpec<T, d>>
 
template<typename T, typename ManifoldType, size_t PD, size_t TD>
using ManifoldStateSignal = Signal<T, ManifoldStateSignalSpec<T, ManifoldType, PD, TD>, VectorStateSignalSpec<T, TD>>
 
template<typename T>
using ScalarState = ScalarStateType<T>
 
typedef ScalarState< double > ScalardState
 
typedef ScalarStateSignal< double > ScalardStateSignal
 
template<typename T>
using Vector1State = VectorStateType<T, 1>
 
template<typename T>
using Vector1StateSignal = VectorStateSignal<T, 1>
 
typedef Vector1State< double > Vector1dState
 
typedef Vector1StateSignal< double > Vector1dStateSignal
 
template<typename T>
using Vector2State = VectorStateType<T, 2>
 
template<typename T>
using Vector2StateSignal = VectorStateSignal<T, 2>
 
typedef Vector2State< double > Vector2dState
 
typedef Vector2StateSignal< double > Vector2dStateSignal
 
template<typename T>
using Vector3State = VectorStateType<T, 3>
 
template<typename T>
using Vector3StateSignal = VectorStateSignal<T, 3>
 
typedef Vector3State< double > Vector3dState
 
typedef Vector3StateSignal< double > Vector3dStateSignal
 
template<typename T>
using Vector4State = VectorStateType<T, 4>
 
template<typename T>
using Vector4StateSignal = VectorStateSignal<T, 4>
 
typedef Vector4State< double > Vector4dState
 
typedef Vector4StateSignal< double > Vector4dStateSignal
 
template<typename T>
using Vector5State = VectorStateType<T, 5>
 
template<typename T>
using Vector5StateSignal = VectorStateSignal<T, 5>
 
typedef Vector5State< double > Vector5dState
 
typedef Vector5StateSignal< double > Vector5dStateSignal
 
template<typename T>
using Vector6State = VectorStateType<T, 6>
 
template<typename T>
using Vector6StateSignal = VectorStateSignal<T, 6>
 
typedef Vector6State< double > Vector6dState
 
typedef Vector6StateSignal< double > Vector6dStateSignal
 
template<typename T>
using Vector7State = VectorStateType<T, 7>
 
template<typename T>
using Vector7StateSignal = VectorStateSignal<T, 7>
 
typedef Vector7State< double > Vector7dState
 
typedef Vector7StateSignal< double > Vector7dStateSignal
 
template<typename T>
using Vector8State = VectorStateType<T, 8>
 
template<typename T>
using Vector8StateSignal = VectorStateSignal<T, 8>
 
typedef Vector8State< double > Vector8dState
 
typedef Vector8StateSignal< double > Vector8dStateSignal
 
template<typename T>
using Vector9State = VectorStateType<T, 9>
 
template<typename T>
using Vector9StateSignal = VectorStateSignal<T, 9>
 
typedef Vector9State< double > Vector9dState
 
typedef Vector9StateSignal< double > Vector9dStateSignal
 
template<typename T>
using Vector10State = VectorStateType<T, 10>
 
template<typename T>
using Vector10StateSignal = VectorStateSignal<T, 10>
 
typedef Vector10State< double > Vector10dState
 
typedef Vector10StateSignal< double > Vector10dStateSignal
 
template<typename T>
using SO2State = ManifoldStateType<T, SO2<T>, 2, 1>
 
template<typename T>
using SO2StateSignal = ManifoldStateSignal<T, SO2<T>, 2, 1>
 
typedef SO2State< double > SO2dState
 
typedef SO2StateSignal< double > SO2dStateSignal
 
template<typename T>
using SO3State = ManifoldStateType<T, SO3<T>, 4, 3>
 
template<typename T>
using SO3StateSignal = ManifoldStateSignal<T, SO3<T>, 4, 3>
 
typedef SO3State< double > SO3dState
 
typedef SO3StateSignal< double > SO3dStateSignal
 
template<typename T>
using SE2State = ManifoldStateType<T, SE2<T>, 4, 3>
 
template<typename T>
using SE2StateSignal = ManifoldStateSignal<T, SE2<T>, 4, 3>
 
typedef SE2State< double > SE2dState
 
typedef SE2StateSignal< double > SE2dStateSignal
 
template<typename T>
using SE3State = ManifoldStateType<T, SE3<T>, 7, 6>
 
template<typename T>
using SE3StateSignal = ManifoldStateSignal<T, SE3<T>, 7, 6>
 
typedef SE3State< double > SE3dState
 
typedef SE3StateSignal< double > SE3dStateSignal
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

template<typename T, typename PTS, size_t PD, typename TTS, size_t TD>
State< T, PTS, PD, TTS, TD > operator+ (const State< T, PTS, PD, TTS, TD > &l, const State< T, TTS, TD, TTS, TD > &r)
 Add a tangent space state (twist and derivative of twist) to the current state.
 
template<typename T, typename PTS, size_t PD, typename TTS, size_t TD>
State< T, TTS, TD, TTS, TD > operator- (const State< T, PTS, PD, TTS, TD > &l, const State< T, PTS, PD, TTS, TD > &r)
 Subtract a tangent space state (twist and derivative of twist) from the current state.
 
template<typename T, typename PTS, size_t PD, typename TTS, size_t TD>
State< T, PTS, PD, TTS, TD > operator* (const double &l, const State< T, PTS, PD, TTS, TD > &r)
 Scale the state (pose and twist) by a scalar.
 
template<typename T, typename PTS, size_t PD, typename TTS, size_t TD>
State< T, PTS, PD, TTS, TD > operator* (const State< T, PTS, PD, TTS, TD > &l, const double &r)
 Scale the state (pose and twist) by a scalar.
 
template<typename T>
std::ostream & operator<< (std::ostream &os, const ScalarStateType< T > &x)
 
template<typename T>
ScalarStateType< T > operator/ (const ScalarStateType< T > &l, const double &r)
 Scale the state (pose and twist) by a scalar.
 
template<typename T, size_t d>
std::ostream & operator<< (std::ostream &os, const VectorStateType< T, d > &x)
 
template<typename T, size_t d>
VectorStateType< T, d > operator/ (const VectorStateType< T, d > &l, const double &r)
 Scale the state (pose and twist) by a scalar.
 
template<typename T, typename ManifoldType, size_t PD, size_t TD>
std::ostream & operator<< (std::ostream &os, const ManifoldStateType< T, ManifoldType, PD, TD > &x)
 
template<typename T>
std::ostream & operator<< (std::ostream &os, const ScalarStateSignal< T > &x)
 
template<typename T, size_t d>
std::ostream & operator<< (std::ostream &os, const VectorStateSignal< T, d > &x)
 
template<typename T, typename ManifoldType, size_t PD, size_t TD>
std::ostream & operator<< (std::ostream &os, const ManifoldStateSignal< T, ManifoldType, PD, TD > &x)
 
+

Macro Definition Documentation

+ +

◆ MAKE_MANIF_STATES

+ +
+
+ + + + + + + + + + + + + + + + +
#define MAKE_MANIF_STATES( Manif,
Dimension,
TangentDimension )
+
+Value:
template<typename T> \
+
using Manif##State = ManifoldStateType<T, Manif<T>, Dimension, TangentDimension>; \
+
template<typename T> \
+
using Manif##StateSignal = ManifoldStateSignal<T, Manif<T>, Dimension, TangentDimension>; \
+
typedef Manif##State<double> Manif##dState; \
+
typedef Manif##StateSignal<double> Manif##dStateSignal;
+
Signal< T, ManifoldStateSignalSpec< T, ManifoldType, PD, TD >, VectorStateSignalSpec< T, TD > > ManifoldStateSignal
Definition State.h:347
+
State< T, ManifoldSignalSpec< T, ManifoldType >, PD, VectorSignalSpec< T, TD >, TD > ManifoldStateType
Definition State.h:213
+
Base type for all Model state representations.
Definition State.h:34
+
+
+
+ +

◆ MAKE_VECTOR_STATES

+ +
+
+ + + + + + + +
#define MAKE_VECTOR_STATES( Dimension)
+
+Value:
template<typename T> \
+
using Vector##Dimension##State = VectorStateType<T, Dimension>; \
+
template<typename T> \
+
using Vector##Dimension##StateSignal = VectorStateSignal<T, Dimension>; \
+
typedef Vector##Dimension##State<double> Vector##Dimension##dState; \
+
typedef Vector##Dimension##StateSignal<double> Vector##Dimension##dStateSignal;
+
State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d > VectorStateType
Definition State.h:191
+
Signal< T, VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > > VectorStateSignal
Definition State.h:336
+
+
+
+

Typedef Documentation

+ +

◆ ManifoldStateSignal

+ +
+
+
+template<typename T, typename ManifoldType, size_t PD, size_t TD>
+ + + + +
using ManifoldStateSignal = Signal<T, ManifoldStateSignalSpec<T, ManifoldType, PD, TD>, VectorStateSignalSpec<T, TD>>
+
+ +
+
+ +

◆ ManifoldStateType

+ +
+
+
+template<typename T, typename ManifoldType, size_t PD, size_t TD>
+ + + + +
using ManifoldStateType = State<T, ManifoldSignalSpec<T, ManifoldType>, PD, VectorSignalSpec<T, TD>, TD>
+
+ +
+
+ +

◆ ScalardState

+ +
+
+ + + + +
typedef ScalarState<double> ScalardState
+
+ +
+
+ +

◆ ScalardStateSignal

+ +
+
+ + + + +
typedef ScalarStateSignal<double> ScalardStateSignal
+
+ +
+
+ +

◆ ScalarState

+ +
+
+
+template<typename T>
+ + + + +
using ScalarState = ScalarStateType<T>
+
+ +
+
+ +

◆ ScalarStateSignal

+ +
+
+
+template<typename T>
+ + + + +
using ScalarStateSignal = Signal<T, ScalarStateSignalSpec<T>, ScalarStateSignalSpec<T>>
+
+ +
+
+ +

◆ ScalarStateType

+ +
+
+
+template<typename T>
+ + + + +
using ScalarStateType = State<T, ScalarSignalSpec<T>, 1, ScalarSignalSpec<T>, 1>
+
+ +
+
+ +

◆ SE2dState

+ +
+
+ + + + +
typedef SE2State<double> SE2dState
+
+ +
+
+ +

◆ SE2dStateSignal

+ +
+
+ + + + +
typedef SE2StateSignal<double> SE2dStateSignal
+
+ +
+
+ +

◆ SE2State

+ +
+
+
+template<typename T>
+ + + + +
using SE2State = ManifoldStateType<T, SE2<T>, 4, 3>
+
+ +
+
+ +

◆ SE2StateSignal

+ +
+
+
+template<typename T>
+ + + + +
using SE2StateSignal = ManifoldStateSignal<T, SE2<T>, 4, 3>
+
+ +
+
+ +

◆ SE3dState

+ +
+
+ + + + +
typedef SE3State<double> SE3dState
+
+ +
+
+ +

◆ SE3dStateSignal

+ +
+
+ + + + +
typedef SE3StateSignal<double> SE3dStateSignal
+
+ +
+
+ +

◆ SE3State

+ +
+
+
+template<typename T>
+ + + + +
using SE3State = ManifoldStateType<T, SE3<T>, 7, 6>
+
+ +
+
+ +

◆ SE3StateSignal

+ +
+
+
+template<typename T>
+ + + + +
using SE3StateSignal = ManifoldStateSignal<T, SE3<T>, 7, 6>
+
+ +
+
+ +

◆ SO2dState

+ +
+
+ + + + +
typedef SO2State<double> SO2dState
+
+ +
+
+ +

◆ SO2dStateSignal

+ +
+
+ + + + +
typedef SO2StateSignal<double> SO2dStateSignal
+
+ +
+
+ +

◆ SO2State

+ +
+
+
+template<typename T>
+ + + + +
using SO2State = ManifoldStateType<T, SO2<T>, 2, 1>
+
+ +
+
+ +

◆ SO2StateSignal

+ +
+
+
+template<typename T>
+ + + + +
using SO2StateSignal = ManifoldStateSignal<T, SO2<T>, 2, 1>
+
+ +
+
+ +

◆ SO3dState

+ +
+
+ + + + +
typedef SO3State<double> SO3dState
+
+ +
+
+ +

◆ SO3dStateSignal

+ +
+
+ + + + +
typedef SO3StateSignal<double> SO3dStateSignal
+
+ +
+
+ +

◆ SO3State

+ +
+
+
+template<typename T>
+ + + + +
using SO3State = ManifoldStateType<T, SO3<T>, 4, 3>
+
+ +
+
+ +

◆ SO3StateSignal

+ +
+
+
+template<typename T>
+ + + + +
using SO3StateSignal = ManifoldStateSignal<T, SO3<T>, 4, 3>
+
+ +
+
+ +

◆ Vector10dState

+ +
+
+ + + + +
typedef Vector10State<double> Vector10dState
+
+ +
+
+ +

◆ Vector10dStateSignal

+ +
+
+ + + + +
typedef Vector10StateSignal<double> Vector10dStateSignal
+
+ +
+
+ +

◆ Vector10State

+ +
+
+
+template<typename T>
+ + + + +
using Vector10State = VectorStateType<T, 10>
+
+ +
+
+ +

◆ Vector10StateSignal

+ +
+
+
+template<typename T>
+ + + + +
using Vector10StateSignal = VectorStateSignal<T, 10>
+
+ +
+
+ +

◆ Vector1dState

+ +
+
+ + + + +
typedef Vector1State<double> Vector1dState
+
+ +
+
+ +

◆ Vector1dStateSignal

+ +
+
+ + + + +
typedef Vector1StateSignal<double> Vector1dStateSignal
+
+ +
+
+ +

◆ Vector1State

+ +
+
+
+template<typename T>
+ + + + +
using Vector1State = VectorStateType<T, 1>
+
+ +
+
+ +

◆ Vector1StateSignal

+ +
+
+
+template<typename T>
+ + + + +
using Vector1StateSignal = VectorStateSignal<T, 1>
+
+ +
+
+ +

◆ Vector2dState

+ +
+
+ + + + +
typedef Vector2State<double> Vector2dState
+
+ +
+
+ +

◆ Vector2dStateSignal

+ +
+
+ + + + +
typedef Vector2StateSignal<double> Vector2dStateSignal
+
+ +
+
+ +

◆ Vector2State

+ +
+
+
+template<typename T>
+ + + + +
using Vector2State = VectorStateType<T, 2>
+
+ +
+
+ +

◆ Vector2StateSignal

+ +
+
+
+template<typename T>
+ + + + +
using Vector2StateSignal = VectorStateSignal<T, 2>
+
+ +
+
+ +

◆ Vector3dState

+ +
+
+ + + + +
typedef Vector3State<double> Vector3dState
+
+ +
+
+ +

◆ Vector3dStateSignal

+ +
+
+ + + + +
typedef Vector3StateSignal<double> Vector3dStateSignal
+
+ +
+
+ +

◆ Vector3State

+ +
+
+
+template<typename T>
+ + + + +
using Vector3State = VectorStateType<T, 3>
+
+ +
+
+ +

◆ Vector3StateSignal

+ +
+
+
+template<typename T>
+ + + + +
using Vector3StateSignal = VectorStateSignal<T, 3>
+
+ +
+
+ +

◆ Vector4dState

+ +
+
+ + + + +
typedef Vector4State<double> Vector4dState
+
+ +
+
+ +

◆ Vector4dStateSignal

+ +
+
+ + + + +
typedef Vector4StateSignal<double> Vector4dStateSignal
+
+ +
+
+ +

◆ Vector4State

+ +
+
+
+template<typename T>
+ + + + +
using Vector4State = VectorStateType<T, 4>
+
+ +
+
+ +

◆ Vector4StateSignal

+ +
+
+
+template<typename T>
+ + + + +
using Vector4StateSignal = VectorStateSignal<T, 4>
+
+ +
+
+ +

◆ Vector5dState

+ +
+
+ + + + +
typedef Vector5State<double> Vector5dState
+
+ +
+
+ +

◆ Vector5dStateSignal

+ +
+
+ + + + +
typedef Vector5StateSignal<double> Vector5dStateSignal
+
+ +
+
+ +

◆ Vector5State

+ +
+
+
+template<typename T>
+ + + + +
using Vector5State = VectorStateType<T, 5>
+
+ +
+
+ +

◆ Vector5StateSignal

+ +
+
+
+template<typename T>
+ + + + +
using Vector5StateSignal = VectorStateSignal<T, 5>
+
+ +
+
+ +

◆ Vector6dState

+ +
+
+ + + + +
typedef Vector6State<double> Vector6dState
+
+ +
+
+ +

◆ Vector6dStateSignal

+ +
+
+ + + + +
typedef Vector6StateSignal<double> Vector6dStateSignal
+
+ +
+
+ +

◆ Vector6State

+ +
+
+
+template<typename T>
+ + + + +
using Vector6State = VectorStateType<T, 6>
+
+ +
+
+ +

◆ Vector6StateSignal

+ +
+
+
+template<typename T>
+ + + + +
using Vector6StateSignal = VectorStateSignal<T, 6>
+
+ +
+
+ +

◆ Vector7dState

+ +
+
+ + + + +
typedef Vector7State<double> Vector7dState
+
+ +
+
+ +

◆ Vector7dStateSignal

+ +
+
+ + + + +
typedef Vector7StateSignal<double> Vector7dStateSignal
+
+ +
+
+ +

◆ Vector7State

+ +
+
+
+template<typename T>
+ + + + +
using Vector7State = VectorStateType<T, 7>
+
+ +
+
+ +

◆ Vector7StateSignal

+ +
+
+
+template<typename T>
+ + + + +
using Vector7StateSignal = VectorStateSignal<T, 7>
+
+ +
+
+ +

◆ Vector8dState

+ +
+
+ + + + +
typedef Vector8State<double> Vector8dState
+
+ +
+
+ +

◆ Vector8dStateSignal

+ +
+
+ + + + +
typedef Vector8StateSignal<double> Vector8dStateSignal
+
+ +
+
+ +

◆ Vector8State

+ +
+
+
+template<typename T>
+ + + + +
using Vector8State = VectorStateType<T, 8>
+
+ +
+
+ +

◆ Vector8StateSignal

+ +
+
+
+template<typename T>
+ + + + +
using Vector8StateSignal = VectorStateSignal<T, 8>
+
+ +
+
+ +

◆ Vector9dState

+ +
+
+ + + + +
typedef Vector9State<double> Vector9dState
+
+ +
+
+ +

◆ Vector9dStateSignal

+ +
+
+ + + + +
typedef Vector9StateSignal<double> Vector9dStateSignal
+
+ +
+
+ +

◆ Vector9State

+ +
+
+
+template<typename T>
+ + + + +
using Vector9State = VectorStateType<T, 9>
+
+ +
+
+ +

◆ Vector9StateSignal

+ +
+
+
+template<typename T>
+ + + + +
using Vector9StateSignal = VectorStateSignal<T, 9>
+
+ +
+
+ +

◆ VectorStateSignal

+ +
+
+
+template<typename T, size_t d>
+ + + + +
using VectorStateSignal = Signal<T, VectorStateSignalSpec<T, d>, VectorStateSignalSpec<T, d>>
+
+ +
+
+ +

◆ VectorStateType

+ +
+
+
+template<typename T, size_t d>
+ + + + +
using VectorStateType = State<T, VectorSignalSpec<T, d>, d, VectorSignalSpec<T, d>, d>
+
+ +
+
+

Function Documentation

+ +

◆ operator*() [1/2]

+ +
+
+
+template<typename T, typename PTS, size_t PD, typename TTS, size_t TD>
+ + + + + + + + + + + +
State< T, PTS, PD, TTS, TD > operator* (const double & l,
const State< T, PTS, PD, TTS, TD > & r )
+
+ +

Scale the state (pose and twist) by a scalar.

+ +
+
+ +

◆ operator*() [2/2]

+ +
+
+
+template<typename T, typename PTS, size_t PD, typename TTS, size_t TD>
+ + + + + + + + + + + +
State< T, PTS, PD, TTS, TD > operator* (const State< T, PTS, PD, TTS, TD > & l,
const double & r )
+
+ +

Scale the state (pose and twist) by a scalar.

+ +
+
+ +

◆ operator+()

+ +
+
+
+template<typename T, typename PTS, size_t PD, typename TTS, size_t TD>
+ + + + + + + + + + + +
State< T, PTS, PD, TTS, TD > operator+ (const State< T, PTS, PD, TTS, TD > & l,
const State< T, TTS, TD, TTS, TD > & r )
+
+ +

Add a tangent space state (twist and derivative of twist) to the current state.

+ +
+
+ +

◆ operator-()

+ +
+
+
+template<typename T, typename PTS, size_t PD, typename TTS, size_t TD>
+ + + + + + + + + + + +
State< T, TTS, TD, TTS, TD > operator- (const State< T, PTS, PD, TTS, TD > & l,
const State< T, PTS, PD, TTS, TD > & r )
+
+ +

Subtract a tangent space state (twist and derivative of twist) from the current state.

+ +
+
+ +

◆ operator/() [1/2]

+ +
+
+
+template<typename T>
+ + + + + + + + + + + +
ScalarStateType< T > operator/ (const ScalarStateType< T > & l,
const double & r )
+
+ +

Scale the state (pose and twist) by a scalar.

+ +
+
+ +

◆ operator/() [2/2]

+ +
+
+
+template<typename T, size_t d>
+ + + + + + + + + + + +
VectorStateType< T, d > operator/ (const VectorStateType< T, d > & l,
const double & r )
+
+ +

Scale the state (pose and twist) by a scalar.

+ +
+
+ +

◆ operator<<() [1/6]

+ +
+
+
+template<typename T, typename ManifoldType, size_t PD, size_t TD>
+ + + + + +
+ + + + + + + + + + + +
std::ostream & operator<< (std::ostream & os,
const ManifoldStateSignal< T, ManifoldType, PD, TD > & x )
+
+inline
+
+ +
+
+ +

◆ operator<<() [2/6]

+ +
+
+
+template<typename T, typename ManifoldType, size_t PD, size_t TD>
+ + + + + +
+ + + + + + + + + + + +
std::ostream & operator<< (std::ostream & os,
const ManifoldStateType< T, ManifoldType, PD, TD > & x )
+
+inline
+
+ +
+
+ +

◆ operator<<() [3/6]

+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + + + + + +
std::ostream & operator<< (std::ostream & os,
const ScalarStateSignal< T > & x )
+
+inline
+
+ +
+
+ +

◆ operator<<() [4/6]

+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + + + + + +
std::ostream & operator<< (std::ostream & os,
const ScalarStateType< T > & x )
+
+inline
+
+ +
+
+ +

◆ operator<<() [5/6]

+ +
+
+
+template<typename T, size_t d>
+ + + + + +
+ + + + + + + + + + + +
std::ostream & operator<< (std::ostream & os,
const VectorStateSignal< T, d > & x )
+
+inline
+
+ +
+
+ +

◆ operator<<() [6/6]

+ +
+
+
+template<typename T, size_t d>
+ + + + + +
+ + + + + + + + + + + +
std::ostream & operator<< (std::ostream & os,
const VectorStateType< T, d > & x )
+
+inline
+
+ +
+
+
+
+ + + + diff --git a/docs/State_8h.js b/docs/State_8h.js new file mode 100644 index 0000000..d2e61c8 --- /dev/null +++ b/docs/State_8h.js @@ -0,0 +1,86 @@ +var State_8h = +[ + [ "State< T, PoseTypeSpec, PoseDim, TwistTypeSpec, TwistDim >", "structState.html", "structState" ], + [ "ScalarStateSignalSpec< T >", "structScalarStateSignalSpec.html", "structScalarStateSignalSpec" ], + [ "VectorStateSignalSpec< T, d >", "structVectorStateSignalSpec.html", "structVectorStateSignalSpec" ], + [ "ManifoldStateSignalSpec< T, ManifoldType, PD, TD >", "structManifoldStateSignalSpec.html", "structManifoldStateSignalSpec" ], + [ "MAKE_MANIF_STATES", "State_8h.html#a72800aeb486c7eebe1ab0fe8cfae6294", null ], + [ "MAKE_VECTOR_STATES", "State_8h.html#aed0e3d5bd576a92c33ab3950c98a4e3b", null ], + [ "ManifoldStateSignal", "State_8h.html#ac38fd6027be553185718aaa160bd7357", null ], + [ "ManifoldStateType", "State_8h.html#ae84c77b92399f1b8cc2cf14bb5b2d4ee", null ], + [ "ScalardState", "State_8h.html#aab879370bd488ae3cb270da1dfc5f695", null ], + [ "ScalardStateSignal", "State_8h.html#a95f500a02b3d50ef0a73883e96ae8768", null ], + [ "ScalarState", "State_8h.html#ae2fe8fddd28ed110fbc33b4ca506bd0f", null ], + [ "ScalarStateSignal", "State_8h.html#a622e24e8fd8ba48d60637420cbe6d3e9", null ], + [ "ScalarStateType", "State_8h.html#aad51d946606df50291c6c2f546030f11", null ], + [ "SE2dState", "State_8h.html#abf8de0fae02a60506ddd6e134b75ae00", null ], + [ "SE2dStateSignal", "State_8h.html#a709efdac7ba2c93eedbf1533c74e42f5", null ], + [ "SE2State", "State_8h.html#acc2213abe7e1f1169bce3603e87f44d2", null ], + [ "SE2StateSignal", "State_8h.html#ae34074b7d367592e7022441b0ee836d9", null ], + [ "SE3dState", "State_8h.html#a98daf00f053bcc148a93319eac4901e4", null ], + [ "SE3dStateSignal", "State_8h.html#a9b00d890fcdbf16abfbb263061e9bc98", null ], + [ "SE3State", "State_8h.html#a41c34d11317aa1e268232a6ddf9c0ba7", null ], + [ "SE3StateSignal", "State_8h.html#a337f5beba24e405d11550802e4375c73", null ], + [ "SO2dState", "State_8h.html#af87fca61f7adfb8b62056d2f6c815e51", null ], + [ "SO2dStateSignal", "State_8h.html#a4f4b421bf1a450cd6514a24b8c16e8cb", null ], + [ "SO2State", "State_8h.html#ab2d123ee7121bd4e6c7e55ce62c770ee", null ], + [ "SO2StateSignal", "State_8h.html#a455c23e3eed1fa310813120299d8cc95", null ], + [ "SO3dState", "State_8h.html#a7ab722ee104a5c16222f5cbd0d682657", null ], + [ "SO3dStateSignal", "State_8h.html#a7069682eef4672ac723761c44e44bc5a", null ], + [ "SO3State", "State_8h.html#ae37ec421e65f8ce1346e62704e6ea859", null ], + [ "SO3StateSignal", "State_8h.html#a07ec000c82b285e661a861ae5f90736a", null ], + [ "Vector10dState", "State_8h.html#ac15f89e56010b705e5a2e0d9c3c50a6d", null ], + [ "Vector10dStateSignal", "State_8h.html#af22d4a3a8e0b033da1e86fbb86d62025", null ], + [ "Vector10State", "State_8h.html#ae80b1d8972029135f755109d7c9cefcc", null ], + [ "Vector10StateSignal", "State_8h.html#a1317973b896b1e34cafa85ed9476facc", null ], + [ "Vector1dState", "State_8h.html#a1fccb71007e0830388d5c21c85e3344e", null ], + [ "Vector1dStateSignal", "State_8h.html#a62568e2f3d59e51a60168009aa1a54bf", null ], + [ "Vector1State", "State_8h.html#abc0badbf8fbf6b0c2669496da71cda67", null ], + [ "Vector1StateSignal", "State_8h.html#ab5090b8cb9c45dbe82c31d42d73d785e", null ], + [ "Vector2dState", "State_8h.html#ae54c0630e02ee333a48fe6531d00e071", null ], + [ "Vector2dStateSignal", "State_8h.html#a100a0048450baf6c0d0c2f444eccaf8a", null ], + [ "Vector2State", "State_8h.html#a7f9f341c30868667e4855dbb3092e78d", null ], + [ "Vector2StateSignal", "State_8h.html#a8733dc322548a85201a19ddea01ea50e", null ], + [ "Vector3dState", "State_8h.html#a0e9c381070552b28ffb2683b44e7b5a3", null ], + [ "Vector3dStateSignal", "State_8h.html#a1e20c96461ce98997ef1a3c0ab7b6668", null ], + [ "Vector3State", "State_8h.html#a76ad6fc3428b4c484c36cb9b24db72f0", null ], + [ "Vector3StateSignal", "State_8h.html#ae29a8cc7a8cfe9179c9befa2d9cf217d", null ], + [ "Vector4dState", "State_8h.html#a8add6ebebc487c439430cb69d2892bbf", null ], + [ "Vector4dStateSignal", "State_8h.html#a9013e9f17201a38fdb10648f14ea5c95", null ], + [ "Vector4State", "State_8h.html#a7123f01cd05975f377e8ff9e6ee1a06a", null ], + [ "Vector4StateSignal", "State_8h.html#a5c328c48320c78070fff7e7982b311e9", null ], + [ "Vector5dState", "State_8h.html#a45d6b402de0ba422a815e117b084dde3", null ], + [ "Vector5dStateSignal", "State_8h.html#a7a8f2f6fd14951fd2fe337c952b0cb74", null ], + [ "Vector5State", "State_8h.html#ab5ce046688e9436f8b33892d42309eee", null ], + [ "Vector5StateSignal", "State_8h.html#a4af99c5e283d22f79b5556ff27474965", null ], + [ "Vector6dState", "State_8h.html#af07e3586e98f931acac5d0ffd9b17cee", null ], + [ "Vector6dStateSignal", "State_8h.html#a9df3c94eca5a8200ce96b3221995c46b", null ], + [ "Vector6State", "State_8h.html#a5b9da17f6286f92692b0004ee4966bc9", null ], + [ "Vector6StateSignal", "State_8h.html#a10d976072ce9070523cb22605d2ab584", null ], + [ "Vector7dState", "State_8h.html#ad58fbc5cd721c46fe64d385cc3317380", null ], + [ "Vector7dStateSignal", "State_8h.html#a901bd18eae58b6365b68227b38b8a6e1", null ], + [ "Vector7State", "State_8h.html#a78b7e325313bda6591c62d59c25b2009", null ], + [ "Vector7StateSignal", "State_8h.html#a0e0d0803fd68f9e69ed39bed579c0a8c", null ], + [ "Vector8dState", "State_8h.html#acfdf1934f5783c1dcab2987c242ef8af", null ], + [ "Vector8dStateSignal", "State_8h.html#a25968e689d254876cbae1ff352b3f184", null ], + [ "Vector8State", "State_8h.html#ae8dd0ef45fa5734f0e752551ba62e863", null ], + [ "Vector8StateSignal", "State_8h.html#a9b199ed43adea9fec91e40f9bab9457f", null ], + [ "Vector9dState", "State_8h.html#a865c1f4de96010d38ee17edc48d6c611", null ], + [ "Vector9dStateSignal", "State_8h.html#a0237ae6ced288b7b3853654cd4ce796c", null ], + [ "Vector9State", "State_8h.html#af1297813c5b5754edb4cf75ca0875849", null ], + [ "Vector9StateSignal", "State_8h.html#a9ab7680e24d1538be50e761b8a8ecb21", null ], + [ "VectorStateSignal", "State_8h.html#aedd5365cce1e7570480adcb6fc9bc9a3", null ], + [ "VectorStateType", "State_8h.html#a60d0230d5788084bb8f559f4561d4d96", null ], + [ "operator*", "State_8h.html#a795d2ff5c53f24de712134f27e197001", null ], + [ "operator*", "State_8h.html#a7fa016cf853be0dbc882359bf5b637f9", null ], + [ "operator+", "State_8h.html#ac3e1ccc35f63b762bdd2c87478f8aad6", null ], + [ "operator-", "State_8h.html#ad7ac1ecc8c925fbc991d2fa8ca50d4eb", null ], + [ "operator/", "State_8h.html#af3ec1e7d28a9aac4e1cde4c7f3438128", null ], + [ "operator/", "State_8h.html#a0f388e10603fb47846a1147ff5b6839d", null ], + [ "operator<<", "State_8h.html#a6c0f637d1f1980a2de56f125e9cf4ec1", null ], + [ "operator<<", "State_8h.html#a494fe74e8c2fc3cd3f7e14886eeb7d6c", null ], + [ "operator<<", "State_8h.html#ab6fe6347b40120d5f45445b1fc6596f4", null ], + [ "operator<<", "State_8h.html#ae29ac55bb38cdbd3acce109857e8e7a4", null ], + [ "operator<<", "State_8h.html#a1675ff98779b45e08f5d169056e26a4d", null ], + [ "operator<<", "State_8h.html#af1eca508289d2fcbdecd0cc136eed43d", null ] +]; \ No newline at end of file diff --git a/docs/State_8h_source.html b/docs/State_8h_source.html new file mode 100644 index 0000000..362c3ed --- /dev/null +++ b/docs/State_8h_source.html @@ -0,0 +1,506 @@ + + + + + + + +signals-cpp: include/signals/State.h Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
State.h
+
+
+Go to the documentation of this file.
1#pragma once
+
2#include "signals/Signal.h"
+
3
+
4using namespace Eigen;
+
5
+
32template<typename T, typename PoseTypeSpec, size_t PoseDim, typename TwistTypeSpec, size_t TwistDim>
+
+
33struct State
+
34{
+
35 using PoseType = typename PoseTypeSpec::Type;
+
36 using TwistType = typename TwistTypeSpec::Type;
+
37
+ + +
46
+
50 State() {}
+
51
+
55 State(T* arr) : pose(arr), twist(arr + PoseDim) {}
+
56
+
+
60 State(const State& other)
+
61 {
+
62 this->pose = other.pose;
+
63 this->twist = other.twist;
+
64 }
+
+
65
+
+
69 static State identity()
+
70 {
+
71 State x;
+
72 x.pose = PoseTypeSpec::ZeroType();
+
73 x.twist = TwistTypeSpec::ZeroType();
+
74 return x;
+
75 }
+
+
76
+
+
80 static State nans()
+
81 {
+
82 State x;
+
83 x.pose = PoseTypeSpec::NansType();
+
84 x.twist = TwistTypeSpec::NansType();
+
85 return x;
+
86 }
+
+
87
+
+
91 T norm() const
+
92 {
+
93 const T poseNorm = PoseTypeSpec::Norm(pose);
+
94 const T twistNorm = TwistTypeSpec::Norm(twist);
+
95 return std::sqrt(poseNorm * poseNorm + twistNorm * twistNorm);
+
96 }
+
+
97
+
+
101 State& operator*=(const double& s)
+
102 {
+
103 pose *= s;
+
104 twist *= s;
+
105 return *this;
+
106 }
+
+
107
+
111 template<typename T2>
+
+ +
113 {
+
114 pose += r.pose;
+
115 twist += r.twist;
+
116 return *this;
+
117 }
+
+
118};
+
+
119
+
123template<typename T, typename PTS, size_t PD, typename TTS, size_t TD>
+
+ +
125{
+ +
127 lpr.pose += r.pose;
+
128 lpr.twist += r.twist;
+
129 return lpr;
+
130}
+
+
131
+
135template<typename T, typename PTS, size_t PD, typename TTS, size_t TD>
+
+ +
137{
+ +
139 lmr.pose = l.pose - r.pose;
+
140 lmr.twist = l.twist - r.twist;
+
141 return lmr;
+
142}
+
+
143
+
147template<typename T, typename PTS, size_t PD, typename TTS, size_t TD>
+
+ +
149{
+ +
151 lr.pose *= l;
+
152 lr.twist *= l;
+
153 return lr;
+
154}
+
+
155
+
159template<typename T, typename PTS, size_t PD, typename TTS, size_t TD>
+
+ +
161{
+ +
163 lr.pose *= r;
+
164 lr.twist *= r;
+
165 return lr;
+
166}
+
+
167
+
168template<typename T>
+ +
170
+
171template<typename T>
+
+
172inline std::ostream& operator<<(std::ostream& os, const ScalarStateType<T>& x)
+
173{
+
174 os << "ScalarStateType: pose=" << x.pose << "; twist=" << x.twist;
+
175 return os;
+
176}
+
+
177
+
181template<typename T>
+
+ +
183{
+
184 ScalarStateType<T> lr = l;
+
185 lr.pose /= r;
+
186 lr.twist /= r;
+
187 return lr;
+
188}
+
+
189
+
190template<typename T, size_t d>
+ +
192
+
193template<typename T, size_t d>
+
+
194inline std::ostream& operator<<(std::ostream& os, const VectorStateType<T, d>& x)
+
195{
+
196 os << "VectorStateType: pose=" << x.pose.transpose() << "; twist=" << x.twist.transpose();
+
197 return os;
+
198}
+
+
199
+
203template<typename T, size_t d>
+
+ +
205{
+ +
207 lr.pose /= r;
+
208 lr.twist /= r;
+
209 return lr;
+
210}
+
+
211
+
212template<typename T, typename ManifoldType, size_t PD, size_t TD>
+ +
214
+
215template<typename T, typename ManifoldType, size_t PD, size_t TD>
+
+
216inline std::ostream& operator<<(std::ostream& os, const ManifoldStateType<T, ManifoldType, PD, TD>& x)
+
217{
+
218 os << "VectorStateType: pose=" << x.pose << "; twist=" << x.twist;
+
219 return os;
+
220}
+
+
221
+
226template<typename T>
+
+ +
228{
+ +
+
233 static Type ZeroType()
+
234 {
+
235 return Type::identity();
+
236 }
+
+
237
+
+
240 static Type NansType()
+
241 {
+
242 return Type::nans();
+
243 }
+
+
244
+
+
249 static T Norm(const Type& a)
+
250 {
+
251 return a.norm();
+
252 }
+
+
253};
+
+
254
+
260template<typename T, size_t d>
+
+ +
262{
+ +
+
267 static Type ZeroType()
+
268 {
+
269 return Type::identity();
+
270 }
+
+
271
+
+
274 static Type NansType()
+
275 {
+
276 return Type::nans();
+
277 }
+
+
278
+
+
283 static T Norm(const Type& a)
+
284 {
+
285 return a.norm();
+
286 }
+
+
287};
+
+
288
+
296template<typename T, typename ManifoldType, size_t PD, size_t TD>
+
+ +
298{
+ +
+
303 static Type ZeroType()
+
304 {
+
305 return Type::identity();
+
306 }
+
+
307
+
+
310 static Type NansType()
+
311 {
+
312 return Type::nans();
+
313 }
+
+
314
+
+
319 static T Norm(const Type& a)
+
320 {
+
321 return a.norm();
+
322 }
+
+
323};
+
+
324
+
325template<typename T>
+ +
327
+
328template<typename T>
+
+
329inline std::ostream& operator<<(std::ostream& os, const ScalarStateSignal<T>& x)
+
330{
+
331 os << "ScalarStateSignal at t=" << x.t() << ": pose=" << x().pose << "; twist=" << x().twist;
+
332 return os;
+
333}
+
+
334
+
335template<typename T, size_t d>
+ +
337
+
338template<typename T, size_t d>
+
+
339inline std::ostream& operator<<(std::ostream& os, const VectorStateSignal<T, d>& x)
+
340{
+
341 os << "VectorStateSignal at t=" << x.t() << ": pose=" << x().pose.transpose()
+
342 << "; twist=" << x().twist.transpose();
+
343 return os;
+
344}
+
+
345
+
346template<typename T, typename ManifoldType, size_t PD, size_t TD>
+ +
348
+
349template<typename T, typename ManifoldType, size_t PD, size_t TD>
+
+
350inline std::ostream& operator<<(std::ostream& os, const ManifoldStateSignal<T, ManifoldType, PD, TD>& x)
+
351{
+
352 os << "ManifoldStateSignal at t=" << x.t() << ": pose=" << x().pose << "; twist=" << x().twist;
+
353 return os;
+
354}
+
+
355
+
+
356#define MAKE_VECTOR_STATES(Dimension) \
+
357 template<typename T> \
+
358 using Vector##Dimension##State = VectorStateType<T, Dimension>; \
+
359 template<typename T> \
+
360 using Vector##Dimension##StateSignal = VectorStateSignal<T, Dimension>; \
+
361 typedef Vector##Dimension##State<double> Vector##Dimension##dState; \
+
362 typedef Vector##Dimension##StateSignal<double> Vector##Dimension##dStateSignal;
+
+
363
+
+
364#define MAKE_MANIF_STATES(Manif, Dimension, TangentDimension) \
+
365 template<typename T> \
+
366 using Manif##State = ManifoldStateType<T, Manif<T>, Dimension, TangentDimension>; \
+
367 template<typename T> \
+
368 using Manif##StateSignal = ManifoldStateSignal<T, Manif<T>, Dimension, TangentDimension>; \
+
369 typedef Manif##State<double> Manif##dState; \
+
370 typedef Manif##StateSignal<double> Manif##dStateSignal;
+
+
371
+
372template<typename T>
+ + + + + + + + + + + + + + + + + + +
State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d > VectorStateType
Definition State.h:191
+
Signal< T, ScalarStateSignalSpec< T >, ScalarStateSignalSpec< T > > ScalarStateSignal
Definition State.h:326
+
#define MAKE_MANIF_STATES(Manif, Dimension, TangentDimension)
Definition State.h:364
+
State< T, PTS, PD, TTS, TD > operator*(const double &l, const State< T, PTS, PD, TTS, TD > &r)
Scale the state (pose and twist) by a scalar.
Definition State.h:148
+
ScalarStateSignal< double > ScalardStateSignal
Definition State.h:375
+
ScalarState< double > ScalardState
Definition State.h:374
+
State< T, ScalarSignalSpec< T >, 1, ScalarSignalSpec< T >, 1 > ScalarStateType
Definition State.h:169
+
Signal< T, ManifoldStateSignalSpec< T, ManifoldType, PD, TD >, VectorStateSignalSpec< T, TD > > ManifoldStateSignal
Definition State.h:347
+
State< T, PTS, PD, TTS, TD > operator+(const State< T, PTS, PD, TTS, TD > &l, const State< T, TTS, TD, TTS, TD > &r)
Add a tangent space state (twist and derivative of twist) to the current state.
Definition State.h:124
+
State< T, TTS, TD, TTS, TD > operator-(const State< T, PTS, PD, TTS, TD > &l, const State< T, PTS, PD, TTS, TD > &r)
Subtract a tangent space state (twist and derivative of twist) from the current state.
Definition State.h:136
+
std::ostream & operator<<(std::ostream &os, const ScalarStateType< T > &x)
Definition State.h:172
+
ScalarStateType< T > ScalarState
Definition State.h:373
+
State< T, ManifoldSignalSpec< T, ManifoldType >, PD, VectorSignalSpec< T, TD >, TD > ManifoldStateType
Definition State.h:213
+
#define MAKE_VECTOR_STATES(Dimension)
Definition State.h:356
+
Signal< T, VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > > VectorStateSignal
Definition State.h:336
+
ScalarStateType< T > operator/(const ScalarStateType< T > &l, const double &r)
Scale the state (pose and twist) by a scalar.
Definition State.h:182
+
Template class for time-series signals with interpolation, extrapolation, and derivative capabilities...
Definition Signal.h:63
+
double t() const
Get the current time of the signal.
Definition Signal.h:151
+
Type specification for manifold state signals.
Definition State.h:298
+
static T Norm(const Type &a)
Compute the combined norm of a manifold state.
Definition State.h:319
+
static Type NansType()
Returns state with NaN values.
Definition State.h:310
+
static Type ZeroType()
Returns identity (zero) state.
Definition State.h:303
+
ManifoldStateType< T, ManifoldType, PD, TD > Type
Definition State.h:299
+
Type specification for scalar-valued signals.
Definition Signal.h:805
+
Type specification for scalar state signals.
Definition State.h:228
+
static Type ZeroType()
Returns identity (zero) state.
Definition State.h:233
+
static T Norm(const Type &a)
Compute the combined norm of a scalar state.
Definition State.h:249
+
ScalarStateType< T > Type
Definition State.h:229
+
static Type NansType()
Returns state with NaN values.
Definition State.h:240
+
Base type for all Model state representations.
Definition State.h:34
+ + + +
typename PoseTypeSpec::Type PoseType
Definition State.h:35
+ + +
State & operator+=(const State< T2, ScalarSignalSpec< T >, TwistDim, ScalarSignalSpec< T >, TwistDim > &r)
Definition State.h:112
+ +
State(const State &other)
Definition State.h:60
+
typename TwistTypeSpec::Type TwistType
Definition State.h:36
+
State()
Initialize an empty state.
Definition State.h:50
+
State & operator*=(const double &s)
Definition State.h:101
+
Type specification for vector-valued signals.
Definition Signal.h:839
+
Type specification for vector state signals.
Definition State.h:262
+
VectorStateType< T, d > Type
Definition State.h:263
+
static Type NansType()
Returns state with NaN values.
Definition State.h:274
+
static T Norm(const Type &a)
Compute the combined norm of a vector state.
Definition State.h:283
+
static Type ZeroType()
Returns identity (zero) state.
Definition State.h:267
+
+
+ + + + diff --git a/docs/Utils_8h.html b/docs/Utils_8h.html new file mode 100644 index 0000000..a1c63bb --- /dev/null +++ b/docs/Utils_8h.html @@ -0,0 +1,136 @@ + + + + + + + +signals-cpp: include/signals/Utils.h File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Utils.h File Reference
+
+
+
#include <algorithm>
+
+

Go to the source code of this file.

+ + + + +

+Namespaces

namespace  signal_utils
 
+ + + +

+Functions

bool signal_utils::getTimeDelta (double &dt, const double &t0, const double &tf, const double &dt_max=std::numeric_limits< double >::max())
 
+
+
+ + + + diff --git a/docs/Utils_8h.js b/docs/Utils_8h.js new file mode 100644 index 0000000..15acde7 --- /dev/null +++ b/docs/Utils_8h.js @@ -0,0 +1,4 @@ +var Utils_8h = +[ + [ "signal_utils::getTimeDelta", "namespacesignal__utils.html#ad7667542f893604d059a5d0022d2890c", null ] +]; \ No newline at end of file diff --git a/docs/Utils_8h_source.html b/docs/Utils_8h_source.html new file mode 100644 index 0000000..2bf94d5 --- /dev/null +++ b/docs/Utils_8h_source.html @@ -0,0 +1,142 @@ + + + + + + + +signals-cpp: include/signals/Utils.h Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Utils.h
+
+
+Go to the documentation of this file.
1#pragma once
+
2#include <algorithm>
+
3
+
+
4namespace signal_utils
+
5{
+
10inline bool
+
+
11getTimeDelta(double& dt, const double& t0, const double& tf, const double& dt_max = std::numeric_limits<double>::max())
+
12{
+
13 if (t0 >= tf || t0 < 0)
+
14 {
+
15 return false;
+
16 }
+
17 dt = std::min(tf - t0, dt_max);
+
18 return true;
+
19}
+
+
20
+
21} // end namespace signal_utils
+
+
Definition Utils.h:5
+
bool getTimeDelta(double &dt, const double &t0, const double &tf, const double &dt_max=std::numeric_limits< double >::max())
Definition Utils.h:11
+
+
+ + + + diff --git a/docs/annotated.html b/docs/annotated.html new file mode 100644 index 0000000..3bcaa72 --- /dev/null +++ b/docs/annotated.html @@ -0,0 +1,144 @@ + + + + + + + +signals-cpp: Class List + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+
[detail level 12]
+ + + + + + + + + + + + + + + + + + + + + + +
 CEulerIntegratorSpecSpecification for numerically integrating a black box function using Euler's method
 CIntegratorBase type for all integrators
 CManifoldSignalSpecType specification for manifold-valued signals (e.g., SO2, SO3, SE2, SE3)
 CManifoldStateSignalSpecType specification for manifold state signals
 CModelBase type for all model simulators
 CRigidBodyDynamics3DOFDefinition of the dynamics for planar motion of a mass that's allowed to rotate
 CRigidBodyDynamics6DOFDefinition of the dynamics for a 3D rigid body that can rotate about any axis
 CRigidBodyParams1DParameters for a 1D rigid body model
 CRigidBodyParams2DParameters for a 2D rigid body model
 CRigidBodyParams3DParameters for a 3D rigid body model
 CRotationalDynamics1DOFDefinition of the dynamics for planar rotation-only motion of a mass
 CRotationalDynamics3DOFDefinition of the dynamics for 3D rotation-only motion of a mass
 CScalarSignalSpecType specification for scalar-valued signals
 CScalarStateSignalSpecType specification for scalar state signals
 CSignalTemplate class for time-series signals with interpolation, extrapolation, and derivative capabilities
 CSignalDPData point structure storing time, value, and derivative
 CSimpsonIntegratorSpecSpecification for numerically integrating a black box function using Simpson's method
 CStateBase type for all Model state representations
 CTranslationalDynamicsBaseBase class for defining the dynamics for 1D, 2D, and 3D point masses
 CTrapezoidalIntegratorSpecSpecification for numerically integrating a black box function using the Trapezoidal method
 CVectorSignalSpecType specification for vector-valued signals
 CVectorStateSignalSpecType specification for vector state signals
+
+
+
+ + + + diff --git a/docs/annotated_dup.js b/docs/annotated_dup.js new file mode 100644 index 0000000..ddb7013 --- /dev/null +++ b/docs/annotated_dup.js @@ -0,0 +1,24 @@ +var annotated_dup = +[ + [ "EulerIntegratorSpec", "structEulerIntegratorSpec.html", null ], + [ "Integrator", "structIntegrator.html", null ], + [ "ManifoldSignalSpec", "structManifoldSignalSpec.html", "structManifoldSignalSpec" ], + [ "ManifoldStateSignalSpec", "structManifoldStateSignalSpec.html", "structManifoldStateSignalSpec" ], + [ "Model", "classModel.html", "classModel" ], + [ "RigidBodyDynamics3DOF", "structRigidBodyDynamics3DOF.html", "structRigidBodyDynamics3DOF" ], + [ "RigidBodyDynamics6DOF", "structRigidBodyDynamics6DOF.html", "structRigidBodyDynamics6DOF" ], + [ "RigidBodyParams1D", "structRigidBodyParams1D.html", "structRigidBodyParams1D" ], + [ "RigidBodyParams2D", "structRigidBodyParams2D.html", "structRigidBodyParams2D" ], + [ "RigidBodyParams3D", "structRigidBodyParams3D.html", "structRigidBodyParams3D" ], + [ "RotationalDynamics1DOF", "structRotationalDynamics1DOF.html", "structRotationalDynamics1DOF" ], + [ "RotationalDynamics3DOF", "structRotationalDynamics3DOF.html", "structRotationalDynamics3DOF" ], + [ "ScalarSignalSpec", "structScalarSignalSpec.html", "structScalarSignalSpec" ], + [ "ScalarStateSignalSpec", "structScalarStateSignalSpec.html", "structScalarStateSignalSpec" ], + [ "Signal", "classSignal.html", "classSignal" ], + [ "SimpsonIntegratorSpec", "structSimpsonIntegratorSpec.html", null ], + [ "State", "structState.html", "structState" ], + [ "TranslationalDynamicsBase", "structTranslationalDynamicsBase.html", "structTranslationalDynamicsBase" ], + [ "TrapezoidalIntegratorSpec", "structTrapezoidalIntegratorSpec.html", null ], + [ "VectorSignalSpec", "structVectorSignalSpec.html", "structVectorSignalSpec" ], + [ "VectorStateSignalSpec", "structVectorStateSignalSpec.html", "structVectorStateSignalSpec" ] +]; \ No newline at end of file diff --git a/docs/bc_s.png b/docs/bc_s.png new file mode 100644 index 0000000..224b29a Binary files /dev/null and b/docs/bc_s.png differ diff --git a/docs/bc_sd.png b/docs/bc_sd.png new file mode 100644 index 0000000..31ca888 Binary files /dev/null and b/docs/bc_sd.png differ diff --git a/docs/classModel-members.html b/docs/classModel-members.html new file mode 100644 index 0000000..73e31a2 --- /dev/null +++ b/docs/classModel-members.html @@ -0,0 +1,134 @@ + + + + + + + +signals-cpp: Member List + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Model< DynamicsType > Member List
+
+
+ +

This is the complete list of members for Model< DynamicsType >, including all inherited members.

+ + + + + + + + + + + + + + +
hasParams()Model< DynamicsType >inline
InputSignalType typedefModel< DynamicsType >
Model()Model< DynamicsType >inline
ParamsType typedefModel< DynamicsType >
reset()Model< DynamicsType >inline
setParams(const ParamsType &params)Model< DynamicsType >inline
simulate(const InputSignalType &u, const double &tf, const bool &insertIntoHistory=false, const bool &calculateXddot=false)Model< DynamicsType >inline
simulate(const InputSignalType &u, const double &tf, const double &dt, const bool &insertIntoHistory=false, const bool &calculateXddot=false)Model< DynamicsType >inline
StateDotSignalType typedefModel< DynamicsType >
StateSignalType typedefModel< DynamicsType >
t() constModel< DynamicsType >inline
xModel< DynamicsType >
xdotModel< DynamicsType >
+
+ + + + diff --git a/docs/classModel.html b/docs/classModel.html new file mode 100644 index 0000000..508caf2 --- /dev/null +++ b/docs/classModel.html @@ -0,0 +1,559 @@ + + + + + + + +signals-cpp: Model< DynamicsType > Class Template Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Model< DynamicsType > Class Template Reference
+
+
+ +

Base type for all model simulators. + More...

+ +

#include <Models.h>

+ + + + + + + + + + +

+Public Types

using InputSignalType = typename DynamicsType::InputSignalType
 
using StateDotSignalType = typename DynamicsType::StateDotSignalType
 
using StateSignalType = typename DynamicsType::StateSignalType
 
using ParamsType = typename DynamicsType::ParamsType
 
+ + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Model ()
 Initialize a model with no parameters.
 
void setParams (const ParamsType &params)
 Initialize the model with any required parameters.
 
bool hasParams ()
 Verify that the model has parameters explicity set by setParams().
 
void reset ()
 Zero out the model state and derivative variables and reset simulation time to zero.
 
double t () const
 Get the current simulation time.
 
template<typename IntegratorType>
bool simulate (const InputSignalType &u, const double &tf, const bool &insertIntoHistory=false, const bool &calculateXddot=false)
 Simulate the system response to an input over a specified time interval.
 
template<typename IntegratorType>
bool simulate (const InputSignalType &u, const double &tf, const double &dt, const bool &insertIntoHistory=false, const bool &calculateXddot=false)
 Simulate the system response to an input over a specified time interval, chunked up into smaller integration increments.
 
+ + + + + + + +

+Public Attributes

StateSignalType x
 Model state signal.
 
StateDotSignalType xdot
 Time derivative of the model state signal.
 
+

Detailed Description

+
template<typename DynamicsType>
+class Model< DynamicsType >

Base type for all model simulators.

+

Provides methods for initialization, reset, and simulation of dynamic models.

+

Derived types:

+ +

Member Typedef Documentation

+ +

◆ InputSignalType

+ +
+
+
+template<typename DynamicsType>
+ + + + +
using Model< DynamicsType >::InputSignalType = typename DynamicsType::InputSignalType
+
+ +
+
+ +

◆ ParamsType

+ +
+
+
+template<typename DynamicsType>
+ + + + +
using Model< DynamicsType >::ParamsType = typename DynamicsType::ParamsType
+
+ +
+
+ +

◆ StateDotSignalType

+ +
+
+
+template<typename DynamicsType>
+ + + + +
using Model< DynamicsType >::StateDotSignalType = typename DynamicsType::StateDotSignalType
+
+ +
+
+ +

◆ StateSignalType

+ +
+
+
+template<typename DynamicsType>
+ + + + +
using Model< DynamicsType >::StateSignalType = typename DynamicsType::StateSignalType
+
+ +
+
+

Constructor & Destructor Documentation

+ +

◆ Model()

+ +
+
+
+template<typename DynamicsType>
+ + + + + +
+ + + + + + + +
Model< DynamicsType >::Model ()
+
+inline
+
+ +

Initialize a model with no parameters.

+ +
+
+

Member Function Documentation

+ +

◆ hasParams()

+ +
+
+
+template<typename DynamicsType>
+ + + + + +
+ + + + + + + +
bool Model< DynamicsType >::hasParams ()
+
+inline
+
+ +

Verify that the model has parameters explicity set by setParams().

+ +
+
+ +

◆ reset()

+ +
+
+
+template<typename DynamicsType>
+ + + + + +
+ + + + + + + +
void Model< DynamicsType >::reset ()
+
+inline
+
+ +

Zero out the model state and derivative variables and reset simulation time to zero.

+ +
+
+ +

◆ setParams()

+ +
+
+
+template<typename DynamicsType>
+ + + + + +
+ + + + + + + +
void Model< DynamicsType >::setParams (const ParamsType & params)
+
+inline
+
+ +

Initialize the model with any required parameters.

+

The required parameters are determined by the model / dynamics specialization.

+ +
+
+ +

◆ simulate() [1/2]

+ +
+
+
+template<typename DynamicsType>
+
+template<typename IntegratorType>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
bool Model< DynamicsType >::simulate (const InputSignalType & u,
const double & tf,
const bool & insertIntoHistory = false,
const bool & calculateXddot = false )
+
+inline
+
+ +

Simulate the system response to an input over a specified time interval.

+
Parameters
+ + + + + +
uThe input signal, which should be defined up to tf.
tfThe time to simulate to. Ideally the delta from the current time is small.
insertIntoHistoryWhether to store the result in state memory.
calculateXddotWhether to use finite differencing to calculate the second time derivative of the state.
+
+
+
Returns
Whether the simulation was successful.
+ +
+
+ +

◆ simulate() [2/2]

+ +
+
+
+template<typename DynamicsType>
+
+template<typename IntegratorType>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
bool Model< DynamicsType >::simulate (const InputSignalType & u,
const double & tf,
const double & dt,
const bool & insertIntoHistory = false,
const bool & calculateXddot = false )
+
+inline
+
+ +

Simulate the system response to an input over a specified time interval, chunked up into smaller integration increments.

+
Parameters
+ + + + + + +
uThe input signal, which should be defined up to tf.
tfThe time to simulate to.
dtTime delta length by which to chunk up the integrations. Ideally this is small.
insertIntoHistoryWhether to store the result in state memory.
calculateXddotWhether to use finite differencing to calculate the second time derivative of the state.
+
+
+
Returns
Whether the simulation was successful.
+ +
+
+ +

◆ t()

+ +
+
+
+template<typename DynamicsType>
+ + + + + +
+ + + + + + + +
double Model< DynamicsType >::t () const
+
+inline
+
+ +

Get the current simulation time.

+ +
+
+

Member Data Documentation

+ +

◆ x

+ +
+
+
+template<typename DynamicsType>
+ + + + +
StateSignalType Model< DynamicsType >::x
+
+ +

Model state signal.

+ +
+
+ +

◆ xdot

+ +
+
+
+template<typename DynamicsType>
+ + + + +
StateDotSignalType Model< DynamicsType >::xdot
+
+ +

Time derivative of the model state signal.

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/docs/classModel.js b/docs/classModel.js new file mode 100644 index 0000000..e40c2f4 --- /dev/null +++ b/docs/classModel.js @@ -0,0 +1,16 @@ +var classModel = +[ + [ "InputSignalType", "classModel.html#ac990dd4740b30e4477bca86fc6172970", null ], + [ "ParamsType", "classModel.html#aec20251d98505785fa51c52eb81dd3a2", null ], + [ "StateDotSignalType", "classModel.html#a8abdf37c6158386a9f1d2c6c506f6839", null ], + [ "StateSignalType", "classModel.html#a643e1a47ddbb10c5c10844f9aea5be98", null ], + [ "Model", "classModel.html#a3cbccc00606661a35110dbe111af54ad", null ], + [ "hasParams", "classModel.html#a4f059d658bfda1665bf44a36b7aaf8e5", null ], + [ "reset", "classModel.html#a823536a9764d6a35cce173573ee62e90", null ], + [ "setParams", "classModel.html#a96533143a30ab87c379e411fcae59643", null ], + [ "simulate", "classModel.html#ac7446138b27c8feba779ebfe8e82b99d", null ], + [ "simulate", "classModel.html#ac2550ae8ed888d167450160ce55286df", null ], + [ "t", "classModel.html#a7661852411b9ffd59240d5d5ca0e4dd3", null ], + [ "x", "classModel.html#abfe8871b9f0eac35c76af3f5cfcdea35", null ], + [ "xdot", "classModel.html#ab8bb4819a03ed642326295c28bea6fa7", null ] +]; \ No newline at end of file diff --git a/docs/classSignal-members.html b/docs/classSignal-members.html new file mode 100644 index 0000000..25daf08 --- /dev/null +++ b/docs/classSignal-members.html @@ -0,0 +1,153 @@ + + + + + + + +signals-cpp: Member List + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Signal< T, BaseSignalSpec, TangentSignalSpec > Member List
+
+
+ +

This is the complete list of members for Signal< T, BaseSignalSpec, TangentSignalSpec >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
baseNorm(const BaseType &x)Signal< T, BaseSignalSpec, TangentSignalSpec >inlinestatic
BaseType typedefSignal< T, BaseSignalSpec, TangentSignalSpec >
baseZero()Signal< T, BaseSignalSpec, TangentSignalSpec >inlinestatic
derivativeMethodSignal< T, BaseSignalSpec, TangentSignalSpec >
dot() constSignal< T, BaseSignalSpec, TangentSignalSpec >inline
dot(const double &t) constSignal< T, BaseSignalSpec, TangentSignalSpec >inline
dot(const std::vector< double > &t) constSignal< T, BaseSignalSpec, TangentSignalSpec >inline
dotSignal()Signal< T, BaseSignalSpec, TangentSignalSpec >inline
extrapolationMethodSignal< T, BaseSignalSpec, TangentSignalSpec >
interpolationMethodSignal< T, BaseSignalSpec, TangentSignalSpec >
operator()() constSignal< T, BaseSignalSpec, TangentSignalSpec >inline
operator()(const double &t) constSignal< T, BaseSignalSpec, TangentSignalSpec >inline
operator()(const std::vector< double > &t) constSignal< T, BaseSignalSpec, TangentSignalSpec >inline
operator*(const double &l, const Signal< S, BSS, TSS > &r)Signal< T, BaseSignalSpec, TangentSignalSpec >friend
operator*(const Signal< S, BSS, TSS > &l, const double &r)Signal< T, BaseSignalSpec, TangentSignalSpec >friend
operator+(const Signal< S, BSS, TSS > &l, const Signal< S, TSS, TSS > &r)Signal< T, BaseSignalSpec, TangentSignalSpec >friend
operator-(const Signal< S, BSS, TSS > &l, const Signal< S, BSS, TSS > &r)Signal< T, BaseSignalSpec, TangentSignalSpec >friend
reset()Signal< T, BaseSignalSpec, TangentSignalSpec >inline
setDerivativeMethod(DerivativeMethod method)Signal< T, BaseSignalSpec, TangentSignalSpec >inline
setExtrapolationMethod(ExtrapolationMethod method)Signal< T, BaseSignalSpec, TangentSignalSpec >inline
setInterpolationMethod(InterpolationMethod method)Signal< T, BaseSignalSpec, TangentSignalSpec >inline
Signal()Signal< T, BaseSignalSpec, TangentSignalSpec >inline
Signal(const Signal &other)Signal< T, BaseSignalSpec, TangentSignalSpec >inline
SignalDPComparatorSignal< T, BaseSignalSpec, TangentSignalSpec >
t() constSignal< T, BaseSignalSpec, TangentSignalSpec >inline
tangentNorm(const TangentType &x)Signal< T, BaseSignalSpec, TangentSignalSpec >inlinestatic
TangentType typedefSignal< T, BaseSignalSpec, TangentSignalSpec >
tangentZero()Signal< T, BaseSignalSpec, TangentSignalSpec >inlinestatic
update(const double &_t, const BaseType &_x, bool insertHistory=false)Signal< T, BaseSignalSpec, TangentSignalSpec >inline
update(const double &_t, const BaseType &_x, const TangentType &_xdot, bool insertHistory=false)Signal< T, BaseSignalSpec, TangentSignalSpec >inline
update(const std::vector< double > &_tHistory, const std::vector< BaseType > &_xHistory)Signal< T, BaseSignalSpec, TangentSignalSpec >inline
update(const std::vector< double > &_tHistory, const std::vector< BaseType > &_xHistory, const std::vector< TangentType > &_xdotHistory)Signal< T, BaseSignalSpec, TangentSignalSpec >inline
+
+ + + + diff --git a/docs/classSignal.html b/docs/classSignal.html new file mode 100644 index 0000000..8226b38 --- /dev/null +++ b/docs/classSignal.html @@ -0,0 +1,1288 @@ + + + + + + + +signals-cpp: Signal< T, BaseSignalSpec, TangentSignalSpec > Class Template Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Signal< T, BaseSignalSpec, TangentSignalSpec > Class Template Reference
+
+
+ +

Template class for time-series signals with interpolation, extrapolation, and derivative capabilities. + More...

+ +

#include <Signal.h>

+ + + + + +

+Classes

struct  SignalDP
 Data point structure storing time, value, and derivative. More...
 
+ + + + + +

+Public Types

using BaseType = typename BaseSignalSpec::Type
 
using TangentType = typename TangentSignalSpec::Type
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Signal ()
 Default constructor initializing with LINEAR interpolation, ZEROS extrapolation, and DIRTY derivative.
 
 Signal (const Signal &other)
 Copy constructor.
 
Signal< T, TangentSignalSpec, TangentSignalSpec > dotSignal ()
 Create a new signal representing the time derivative of this signal.
 
double t () const
 Get the current time of the signal.
 
BaseType operator() () const
 Get the current signal value.
 
TangentType dot () const
 Get the current time derivative of the signal.
 
BaseType operator() (const double &t) const
 Get the signal value at a specific time using interpolation/extrapolation.
 
TangentType dot (const double &t) const
 Get the signal derivative at a specific time using interpolation/extrapolation.
 
std::vector< BaseTypeoperator() (const std::vector< double > &t) const
 Get signal values at multiple time points.
 
std::vector< TangentTypedot (const std::vector< double > &t) const
 Get signal derivatives at multiple time points.
 
void setInterpolationMethod (InterpolationMethod method)
 Set the interpolation method for this signal.
 
void setExtrapolationMethod (ExtrapolationMethod method)
 Set the extrapolation method for this signal.
 
void setDerivativeMethod (DerivativeMethod method)
 Set the derivative computation method for this signal.
 
void reset ()
 Reset the signal to initial state, clearing all history.
 
bool update (const double &_t, const BaseType &_x, bool insertHistory=false)
 Update the signal with a new value at a given time, computing derivative automatically.
 
bool update (const double &_t, const BaseType &_x, const TangentType &_xdot, bool insertHistory=false)
 Update the signal with a new value and derivative at a given time.
 
bool update (const std::vector< double > &_tHistory, const std::vector< BaseType > &_xHistory)
 Update the signal with a history of values, computing derivatives automatically.
 
bool update (const std::vector< double > &_tHistory, const std::vector< BaseType > &_xHistory, const std::vector< TangentType > &_xdotHistory)
 Update the signal with a history of values and derivatives.
 
+ + + + + + + + + + + + + +

+Static Public Member Functions

static BaseType baseZero ()
 Get the zero (identity) value for the base signal type.
 
static TangentType tangentZero ()
 Get the zero (identity) value for the tangent signal type.
 
static T baseNorm (const BaseType &x)
 Compute the norm of a base signal value.
 
static T tangentNorm (const TangentType &x)
 Compute the norm of a tangent signal value.
 
+ + + + + + + + + + + + +

+Public Attributes

struct { 
 
SignalDPComparator 
 Comparator for sorting signal data points by time.
 
InterpolationMethod interpolationMethod
 
ExtrapolationMethod extrapolationMethod
 
DerivativeMethod derivativeMethod
 
+ + + + + + + + + + + + + +

+Friends

template<typename S, typename BSS, typename TSS>
Signal< S, BSS, TSS > operator+ (const Signal< S, BSS, TSS > &l, const Signal< S, TSS, TSS > &r)
 
template<typename S, typename BSS, typename TSS>
Signal< S, TSS, TSS > operator- (const Signal< S, BSS, TSS > &l, const Signal< S, BSS, TSS > &r)
 
template<typename S, typename BSS, typename TSS>
Signal< S, BSS, TSS > operator* (const double &l, const Signal< S, BSS, TSS > &r)
 
template<typename S, typename BSS, typename TSS>
Signal< S, BSS, TSS > operator* (const Signal< S, BSS, TSS > &l, const double &r)
 
+

Detailed Description

+
template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
+class Signal< T, BaseSignalSpec, TangentSignalSpec >

Template class for time-series signals with interpolation, extrapolation, and derivative capabilities.

+

The Signal class represents a time-varying signal that stores both the value and its time derivative. It supports various interpolation methods for querying values at arbitrary time points, configurable extrapolation behavior outside the defined time range, and automatic derivative computation.

+
Template Parameters
+ + + +
BaseSignalSpecType specification for the signal values (can be scalar, vector, or manifold types).
TangentSignalSpecType specification for the signal derivatives (typically vector types).
+
+
+

Example usage:

ScalardSignal mySignal;
+ +
mySignal.update(1.0, 5.0, true); // time=1.0, value=5.0, store in history
+
mySignal.update(2.0, 7.0, true); // time=2.0, value=7.0, store in history
+
double interpValue = mySignal(1.5); // Query interpolated value at t=1.5
+
ScalarSignal< double > ScalardSignal
Definition Signal.h:939
+
@ LINEAR
Definition Signal.h:19
+
void setInterpolationMethod(InterpolationMethod method)
Set the interpolation method for this signal.
Definition Signal.h:228
+
bool update(const double &_t, const BaseType &_x, bool insertHistory=false)
Update the signal with a new value at a given time, computing derivative automatically.
Definition Signal.h:270
+

Member Typedef Documentation

+ +

◆ BaseType

+ +
+
+
+template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + +
using Signal< T, BaseSignalSpec, TangentSignalSpec >::BaseType = typename BaseSignalSpec::Type
+
+ +
+
+ +

◆ TangentType

+ +
+
+
+template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + +
using Signal< T, BaseSignalSpec, TangentSignalSpec >::TangentType = typename TangentSignalSpec::Type
+
+ +
+
+

Constructor & Destructor Documentation

+ +

◆ Signal() [1/2]

+ +
+
+
+template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + + +
+ + + + + + + +
Signal< T, BaseSignalSpec, TangentSignalSpec >::Signal ()
+
+inline
+
+ +

Default constructor initializing with LINEAR interpolation, ZEROS extrapolation, and DIRTY derivative.

+ +
+
+ +

◆ Signal() [2/2]

+ +
+
+
+template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + + +
+ + + + + + + +
Signal< T, BaseSignalSpec, TangentSignalSpec >::Signal (const Signal< T, BaseSignalSpec, TangentSignalSpec > & other)
+
+inline
+
+ +

Copy constructor.

+
Parameters
+ + +
otherThe signal to copy from.
+
+
+ +
+
+

Member Function Documentation

+ +

◆ baseNorm()

+ +
+
+
+template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + + +
+ + + + + + + +
static T Signal< T, BaseSignalSpec, TangentSignalSpec >::baseNorm (const BaseType & x)
+
+inlinestatic
+
+ +

Compute the norm of a base signal value.

+
Parameters
+ + +
xThe base signal value.
+
+
+
Returns
The norm (magnitude) of the value.
+ +
+
+ +

◆ baseZero()

+ +
+
+
+template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + + +
+ + + + + + + +
static BaseType Signal< T, BaseSignalSpec, TangentSignalSpec >::baseZero ()
+
+inlinestatic
+
+ +

Get the zero (identity) value for the base signal type.

+
Returns
Zero/identity element for the base type.
+ +
+
+ +

◆ dot() [1/3]

+ +
+
+
+template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + + +
+ + + + + + + +
TangentType Signal< T, BaseSignalSpec, TangentSignalSpec >::dot () const
+
+inline
+
+ +

Get the current time derivative of the signal.

+
Returns
The current derivative value.
+ +
+
+ +

◆ dot() [2/3]

+ +
+
+
+template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + + +
+ + + + + + + +
TangentType Signal< T, BaseSignalSpec, TangentSignalSpec >::dot (const double & t) const
+
+inline
+
+ +

Get the signal derivative at a specific time using interpolation/extrapolation.

+
Parameters
+ + +
tThe time to query.
+
+
+
Returns
The interpolated/extrapolated derivative value at time t.
+ +
+
+ +

◆ dot() [3/3]

+ +
+
+
+template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + + +
+ + + + + + + +
std::vector< TangentType > Signal< T, BaseSignalSpec, TangentSignalSpec >::dot (const std::vector< double > & t) const
+
+inline
+
+ +

Get signal derivatives at multiple time points.

+
Parameters
+ + +
tVector of time points to query.
+
+
+
Returns
Vector of interpolated/extrapolated derivative values.
+ +
+
+ +

◆ dotSignal()

+ +
+
+
+template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + + +
+ + + + + + + +
Signal< T, TangentSignalSpec, TangentSignalSpec > Signal< T, BaseSignalSpec, TangentSignalSpec >::dotSignal ()
+
+inline
+
+ +

Create a new signal representing the time derivative of this signal.

+
Returns
A signal containing the derivative values from this signal's history.
+ +
+
+ +

◆ operator()() [1/3]

+ +
+
+
+template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + + +
+ + + + + + + +
BaseType Signal< T, BaseSignalSpec, TangentSignalSpec >::operator() () const
+
+inline
+
+ +

Get the current signal value.

+
Returns
The current value.
+ +
+
+ +

◆ operator()() [2/3]

+ +
+
+
+template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + + +
+ + + + + + + +
BaseType Signal< T, BaseSignalSpec, TangentSignalSpec >::operator() (const double & t) const
+
+inline
+
+ +

Get the signal value at a specific time using interpolation/extrapolation.

+
Parameters
+ + +
tThe time to query.
+
+
+
Returns
The interpolated/extrapolated signal value at time t.
+ +
+
+ +

◆ operator()() [3/3]

+ +
+
+
+template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + + +
+ + + + + + + +
std::vector< BaseType > Signal< T, BaseSignalSpec, TangentSignalSpec >::operator() (const std::vector< double > & t) const
+
+inline
+
+ +

Get signal values at multiple time points.

+
Parameters
+ + +
tVector of time points to query.
+
+
+
Returns
Vector of interpolated/extrapolated signal values.
+ +
+
+ +

◆ reset()

+ +
+
+
+template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + + +
+ + + + + + + +
void Signal< T, BaseSignalSpec, TangentSignalSpec >::reset ()
+
+inline
+
+ +

Reset the signal to initial state, clearing all history.

+ +
+
+ +

◆ setDerivativeMethod()

+ +
+
+
+template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + + +
+ + + + + + + +
void Signal< T, BaseSignalSpec, TangentSignalSpec >::setDerivativeMethod (DerivativeMethod method)
+
+inline
+
+ +

Set the derivative computation method for this signal.

+
Parameters
+ + +
methodThe derivative method to use.
+
+
+ +
+
+ +

◆ setExtrapolationMethod()

+ +
+
+
+template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + + +
+ + + + + + + +
void Signal< T, BaseSignalSpec, TangentSignalSpec >::setExtrapolationMethod (ExtrapolationMethod method)
+
+inline
+
+ +

Set the extrapolation method for this signal.

+
Parameters
+ + +
methodThe extrapolation method to use.
+
+
+ +
+
+ +

◆ setInterpolationMethod()

+ +
+
+
+template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + + +
+ + + + + + + +
void Signal< T, BaseSignalSpec, TangentSignalSpec >::setInterpolationMethod (InterpolationMethod method)
+
+inline
+
+ +

Set the interpolation method for this signal.

+
Parameters
+ + +
methodThe interpolation method to use.
+
+
+ +
+
+ +

◆ t()

+ +
+
+
+template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + + +
+ + + + + + + +
double Signal< T, BaseSignalSpec, TangentSignalSpec >::t () const
+
+inline
+
+ +

Get the current time of the signal.

+
Returns
The current time value.
+ +
+
+ +

◆ tangentNorm()

+ +
+
+
+template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + + +
+ + + + + + + +
static T Signal< T, BaseSignalSpec, TangentSignalSpec >::tangentNorm (const TangentType & x)
+
+inlinestatic
+
+ +

Compute the norm of a tangent signal value.

+
Parameters
+ + +
xThe tangent signal value.
+
+
+
Returns
The norm (magnitude) of the value.
+ +
+
+ +

◆ tangentZero()

+ +
+
+
+template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + + +
+ + + + + + + +
static TangentType Signal< T, BaseSignalSpec, TangentSignalSpec >::tangentZero ()
+
+inlinestatic
+
+ +

Get the zero (identity) value for the tangent signal type.

+
Returns
Zero/identity element for the tangent type.
+ +
+
+ +

◆ update() [1/4]

+ +
+
+
+template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + + +
+ + + + + + + + + + + + + + + + +
bool Signal< T, BaseSignalSpec, TangentSignalSpec >::update (const double & _t,
const BaseType & _x,
bool insertHistory = false )
+
+inline
+
+ +

Update the signal with a new value at a given time, computing derivative automatically.

+
Parameters
+ + + + +
_tThe time of the new data point.
_xThe value at time _t.
insertHistoryWhether to store this data point in history for interpolation.
+
+
+
Returns
true if update was successful, false otherwise.
+ +
+
+ +

◆ update() [2/4]

+ +
+
+
+template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
bool Signal< T, BaseSignalSpec, TangentSignalSpec >::update (const double & _t,
const BaseType & _x,
const TangentType & _xdot,
bool insertHistory = false )
+
+inline
+
+ +

Update the signal with a new value and derivative at a given time.

+
Parameters
+ + + + + +
_tThe time of the new data point.
_xThe value at time _t.
_xdotThe derivative at time _t.
insertHistoryWhether to store this data point in history for interpolation.
+
+
+
Returns
true if update was successful, false otherwise.
+ +
+
+ +

◆ update() [3/4]

+ +
+
+
+template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + + +
+ + + + + + + + + + + +
bool Signal< T, BaseSignalSpec, TangentSignalSpec >::update (const std::vector< double > & _tHistory,
const std::vector< BaseType > & _xHistory )
+
+inline
+
+ +

Update the signal with a history of values, computing derivatives automatically.

+
Parameters
+ + + +
_tHistoryVector of time points.
_xHistoryVector of values corresponding to each time point.
+
+
+
Returns
true if update was successful, false otherwise.
+ +
+
+ +

◆ update() [4/4]

+ +
+
+
+template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + + +
+ + + + + + + + + + + + + + + + +
bool Signal< T, BaseSignalSpec, TangentSignalSpec >::update (const std::vector< double > & _tHistory,
const std::vector< BaseType > & _xHistory,
const std::vector< TangentType > & _xdotHistory )
+
+inline
+
+ +

Update the signal with a history of values and derivatives.

+
Parameters
+ + + + +
_tHistoryVector of time points.
_xHistoryVector of values corresponding to each time point.
_xdotHistoryVector of derivatives corresponding to each time point.
+
+
+
Returns
true if update was successful, false if vector sizes don't match.
+ +
+
+

Friends And Related Symbol Documentation

+ +

◆ operator* [1/2]

+ +
+
+
+template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
+
+template<typename S, typename BSS, typename TSS>
+ + + + + +
+ + + + + + + + + + + +
Signal< S, BSS, TSS > operator* (const double & l,
const Signal< S, BSS, TSS > & r )
+
+friend
+
+ +
+
+ +

◆ operator* [2/2]

+ +
+
+
+template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
+
+template<typename S, typename BSS, typename TSS>
+ + + + + +
+ + + + + + + + + + + +
Signal< S, BSS, TSS > operator* (const Signal< S, BSS, TSS > & l,
const double & r )
+
+friend
+
+ +
+
+ +

◆ operator+

+ +
+
+
+template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
+
+template<typename S, typename BSS, typename TSS>
+ + + + + +
+ + + + + + + + + + + +
Signal< S, BSS, TSS > operator+ (const Signal< S, BSS, TSS > & l,
const Signal< S, TSS, TSS > & r )
+
+friend
+
+ +
+
+ +

◆ operator-

+ +
+
+
+template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
+
+template<typename S, typename BSS, typename TSS>
+ + + + + +
+ + + + + + + + + + + +
Signal< S, TSS, TSS > operator- (const Signal< S, BSS, TSS > & l,
const Signal< S, BSS, TSS > & r )
+
+friend
+
+ +
+
+

Member Data Documentation

+ +

◆ derivativeMethod

+ +
+
+
+template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + +
DerivativeMethod Signal< T, BaseSignalSpec, TangentSignalSpec >::derivativeMethod
+
+

Current derivative computation method.

+ +
+
+ +

◆ extrapolationMethod

+ +
+
+
+template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + +
ExtrapolationMethod Signal< T, BaseSignalSpec, TangentSignalSpec >::extrapolationMethod
+
+

Current extrapolation method.

+ +
+
+ +

◆ interpolationMethod

+ +
+
+
+template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + +
InterpolationMethod Signal< T, BaseSignalSpec, TangentSignalSpec >::interpolationMethod
+
+

Current interpolation method.

+ +
+
+ +

◆ [struct]

+ +
+
+ + + + +
struct { ... } Signal< T, BaseSignalSpec, TangentSignalSpec >::SignalDPComparator
+
+ +

Comparator for sorting signal data points by time.

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/docs/classSignal.js b/docs/classSignal.js new file mode 100644 index 0000000..8f1b9b8 --- /dev/null +++ b/docs/classSignal.js @@ -0,0 +1,32 @@ +var classSignal = +[ + [ "SignalDP", "structSignal_1_1SignalDP.html", "structSignal_1_1SignalDP" ], + [ "BaseType", "classSignal.html#aa934b4d02897e0f6ec49b81496b296de", null ], + [ "TangentType", "classSignal.html#ac80237cfc740ac76ca54c5a980767f23", null ], + [ "Signal", "classSignal.html#a88dbcbb228e7392c52823bb4eff04813", null ], + [ "Signal", "classSignal.html#a20cf7505fc82893b44be888c6ea26000", null ], + [ "dot", "classSignal.html#ad2f62804e18f2cb579a4f854f7381fb8", null ], + [ "dot", "classSignal.html#af622cbe01dc2d991914b66d748d67d82", null ], + [ "dot", "classSignal.html#aa6d9afdff4e331b471d563b3af955907", null ], + [ "dotSignal", "classSignal.html#ae4e987f1a142b689966bb81ac2f89180", null ], + [ "operator()", "classSignal.html#ac4530cf5ec12ce1c72067137a24faf85", null ], + [ "operator()", "classSignal.html#a77caf4746f6f644771952aa4fb6929a2", null ], + [ "operator()", "classSignal.html#a4d1a040a13d70375a0d8341383538bb2", null ], + [ "reset", "classSignal.html#ab50a583ce4790025215aa8e6af56e186", null ], + [ "setDerivativeMethod", "classSignal.html#a1013bb3f4f81fac83f1ca204efe61156", null ], + [ "setExtrapolationMethod", "classSignal.html#a2c32f16f327c871f83b8b7a70276a926", null ], + [ "setInterpolationMethod", "classSignal.html#a5722b03ddbfc6936fdadd19aa41098f5", null ], + [ "t", "classSignal.html#a181510d087510590fe765d424c40c2e5", null ], + [ "update", "classSignal.html#aaa355cde30a3aed048de084301395daf", null ], + [ "update", "classSignal.html#a1bcc4ff1ca1532a52fbe954e449324bc", null ], + [ "update", "classSignal.html#ac1985c5c74318ac8d991c847090bb530", null ], + [ "update", "classSignal.html#ab28abd49a8bba19967a565ae1b988e5a", null ], + [ "operator*", "classSignal.html#a46553341b8f83ac7b49e168286018ba6", null ], + [ "operator*", "classSignal.html#a518ac0f150b0f53c1b573b36cf03624f", null ], + [ "operator+", "classSignal.html#afd50d7b54e0b26c913d6a7ee6decf858", null ], + [ "operator-", "classSignal.html#a52d14b1840b8c49bf2143a5979a73635", null ], + [ "derivativeMethod", "classSignal.html#af36a4cba809042e148ab6fe5e988acc7", null ], + [ "extrapolationMethod", "classSignal.html#a7fa918540db0facc1487238107c10432", null ], + [ "interpolationMethod", "classSignal.html#ab0220db07b523eb34fe925f3c9b4152c", null ], + [ "SignalDPComparator", "classSignal.html#a572142d3a6218d220eeead90b8b008bd", null ] +]; \ No newline at end of file diff --git a/docs/classes.html b/docs/classes.html new file mode 100644 index 0000000..1f0da96 --- /dev/null +++ b/docs/classes.html @@ -0,0 +1,142 @@ + + + + + + + +signals-cpp: Class Index + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ + + + + + diff --git a/docs/clipboard.js b/docs/clipboard.js new file mode 100644 index 0000000..9da9f3c --- /dev/null +++ b/docs/clipboard.js @@ -0,0 +1,61 @@ +/** + +The code below is based on the Doxygen Awesome project, see +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 - 2022 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ + +let clipboard_title = "Copy to clipboard" +let clipboard_icon = `` +let clipboard_successIcon = `` +let clipboard_successDuration = 1000 + +$(function() { + if(navigator.clipboard) { + const fragments = document.getElementsByClassName("fragment") + for(const fragment of fragments) { + const clipboard_div = document.createElement("div") + clipboard_div.classList.add("clipboard") + clipboard_div.innerHTML = clipboard_icon + clipboard_div.title = clipboard_title + $(clipboard_div).click(function() { + const content = this.parentNode.cloneNode(true) + // filter out line number and folded fragments from file listings + content.querySelectorAll(".lineno, .ttc, .foldclosed").forEach((node) => { node.remove() }) + let text = content.textContent + // remove trailing newlines and trailing spaces from empty lines + text = text.replace(/^\s*\n/gm,'\n').replace(/\n*$/,'') + navigator.clipboard.writeText(text); + this.classList.add("success") + this.innerHTML = clipboard_successIcon + window.setTimeout(() => { // switch back to normal icon after timeout + this.classList.remove("success") + this.innerHTML = clipboard_icon + }, clipboard_successDuration); + }) + fragment.insertBefore(clipboard_div, fragment.firstChild) + } + } +}) diff --git a/docs/closed.png b/docs/closed.png new file mode 100644 index 0000000..98cc2c9 Binary files /dev/null and b/docs/closed.png differ diff --git a/docs/cookie.js b/docs/cookie.js new file mode 100644 index 0000000..53ad21d --- /dev/null +++ b/docs/cookie.js @@ -0,0 +1,58 @@ +/*! + Cookie helper functions + Copyright (c) 2023 Dimitri van Heesch + Released under MIT license. +*/ +let Cookie = { + cookie_namespace: 'doxygen_', + + readSetting(cookie,defVal) { + if (window.chrome) { + const val = localStorage.getItem(this.cookie_namespace+cookie) || + sessionStorage.getItem(this.cookie_namespace+cookie); + if (val) return val; + } else { + let myCookie = this.cookie_namespace+cookie+"="; + if (document.cookie) { + const index = document.cookie.indexOf(myCookie); + if (index != -1) { + const valStart = index + myCookie.length; + let valEnd = document.cookie.indexOf(";", valStart); + if (valEnd == -1) { + valEnd = document.cookie.length; + } + return document.cookie.substring(valStart, valEnd); + } + } + } + return defVal; + }, + + writeSetting(cookie,val,days=10*365) { // default days='forever', 0=session cookie, -1=delete + if (window.chrome) { + if (days==0) { + sessionStorage.setItem(this.cookie_namespace+cookie,val); + } else { + localStorage.setItem(this.cookie_namespace+cookie,val); + } + } else { + let date = new Date(); + date.setTime(date.getTime()+(days*24*60*60*1000)); + const expiration = days!=0 ? "expires="+date.toGMTString()+";" : ""; + document.cookie = this.cookie_namespace + cookie + "=" + + val + "; SameSite=Lax;" + expiration + "path=/"; + } + }, + + eraseSetting(cookie) { + if (window.chrome) { + if (localStorage.getItem(this.cookie_namespace+cookie)) { + localStorage.removeItem(this.cookie_namespace+cookie); + } else if (sessionStorage.getItem(this.cookie_namespace+cookie)) { + sessionStorage.removeItem(this.cookie_namespace+cookie); + } + } else { + this.writeSetting(cookie,'',-1); + } + }, +} diff --git a/docs/dir_661483514bb8dea267426763b771558e.html b/docs/dir_661483514bb8dea267426763b771558e.html new file mode 100644 index 0000000..45c62b6 --- /dev/null +++ b/docs/dir_661483514bb8dea267426763b771558e.html @@ -0,0 +1,135 @@ + + + + + + + +signals-cpp: include/signals Directory Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
signals Directory Reference
+
+
+ + + + + + + + + + + + + + +

+Files

 Integration.h
 
 Models.h
 
 Signal.h
 
 Signals.h
 
 State.h
 
 Utils.h
 
+
+
+ + + + diff --git a/docs/dir_661483514bb8dea267426763b771558e.js b/docs/dir_661483514bb8dea267426763b771558e.js new file mode 100644 index 0000000..e39bb7e --- /dev/null +++ b/docs/dir_661483514bb8dea267426763b771558e.js @@ -0,0 +1,9 @@ +var dir_661483514bb8dea267426763b771558e = +[ + [ "Integration.h", "Integration_8h.html", "Integration_8h" ], + [ "Models.h", "Models_8h.html", "Models_8h" ], + [ "Signal.h", "Signal_8h.html", "Signal_8h" ], + [ "Signals.h", "Signals_8h.html", null ], + [ "State.h", "State_8h.html", "State_8h" ], + [ "Utils.h", "Utils_8h.html", "Utils_8h" ] +]; \ No newline at end of file diff --git a/docs/dir_d44c64559bbebec7f509842c48db8b23.html b/docs/dir_d44c64559bbebec7f509842c48db8b23.html new file mode 100644 index 0000000..1d4927a --- /dev/null +++ b/docs/dir_d44c64559bbebec7f509842c48db8b23.html @@ -0,0 +1,125 @@ + + + + + + + +signals-cpp: include Directory Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
include Directory Reference
+
+
+ + + + +

+Directories

 signals
 
+
+
+ + + + diff --git a/docs/dir_d44c64559bbebec7f509842c48db8b23.js b/docs/dir_d44c64559bbebec7f509842c48db8b23.js new file mode 100644 index 0000000..b89aeb4 --- /dev/null +++ b/docs/dir_d44c64559bbebec7f509842c48db8b23.js @@ -0,0 +1,4 @@ +var dir_d44c64559bbebec7f509842c48db8b23 = +[ + [ "signals", "dir_661483514bb8dea267426763b771558e.html", "dir_661483514bb8dea267426763b771558e" ] +]; \ No newline at end of file diff --git a/docs/doc.svg b/docs/doc.svg new file mode 100644 index 0000000..0b928a5 --- /dev/null +++ b/docs/doc.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/docs/docd.svg b/docs/docd.svg new file mode 100644 index 0000000..ac18b27 --- /dev/null +++ b/docs/docd.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/docs/doxygen.css b/docs/doxygen.css new file mode 100644 index 0000000..90fba19 --- /dev/null +++ b/docs/doxygen.css @@ -0,0 +1,1849 @@ +/* The standard CSS for doxygen 1.13.2*/ + +body { + background-color: white; + color: black; +} + +body, table, div, p, dl { + font-weight: 400; + font-size: 14px; + font-family: Roboto,sans-serif; + line-height: 22px; +} + +/* @group Heading Levels */ + +.title { + font-family: Roboto,sans-serif; + line-height: 28px; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h1.groupheader { + font-size: 150%; +} + +h2.groupheader { + border-bottom: 1px solid #879ECB; + color: #354C7B; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +th p.starttd, th p.intertd, th p.endtd { + font-size: 100%; + font-weight: 700; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +p.interli { +} + +p.interdd { +} + +p.intertd { +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.navtab { + padding-right: 15px; + text-align: right; + line-height: 110%; +} + +div.navtab table { + border-spacing: 0; +} + +td.navtab { + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL a, td.navtabHL a:visited { + color: white; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +a.navtab { + font-weight: bold; +} + +div.qindex{ + text-align: center; + width: 100%; + line-height: 140%; + font-size: 130%; + color: #A0A0A0; +} + +#main-menu a:focus { + outline: auto; + z-index: 10; + position: relative; +} + +dt.alphachar{ + font-size: 180%; + font-weight: bold; +} + +.alphachar a{ + color: black; +} + +.alphachar a:hover, .alphachar a:visited{ + text-decoration: none; +} + +.classindex dl { + padding: 25px; + column-count:1 +} + +.classindex dd { + display:inline-block; + margin-left: 50px; + width: 90%; + line-height: 1.15em; +} + +.classindex dl.even { + background-color: white; +} + +.classindex dl.odd { + background-color: #F8F9FC; +} + +@media(min-width: 1120px) { + .classindex dl { + column-count:2 + } +} + +@media(min-width: 1320px) { + .classindex dl { + column-count:3 + } +} + + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: none; + background: linear-gradient(to bottom, transparent 0,transparent calc(100% - 1px), currentColor 100%); +} + +a:hover > span.arrow { + text-decoration: none; + background : #F9FAFC; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: #4665A2; +} + +a.code.hl_class { /* style for links to class names in code snippets */ } +a.code.hl_struct { /* style for links to struct names in code snippets */ } +a.code.hl_union { /* style for links to union names in code snippets */ } +a.code.hl_interface { /* style for links to interface names in code snippets */ } +a.code.hl_protocol { /* style for links to protocol names in code snippets */ } +a.code.hl_category { /* style for links to category names in code snippets */ } +a.code.hl_exception { /* style for links to exception names in code snippets */ } +a.code.hl_service { /* style for links to service names in code snippets */ } +a.code.hl_singleton { /* style for links to singleton names in code snippets */ } +a.code.hl_concept { /* style for links to concept names in code snippets */ } +a.code.hl_namespace { /* style for links to namespace names in code snippets */ } +a.code.hl_package { /* style for links to package names in code snippets */ } +a.code.hl_define { /* style for links to macro names in code snippets */ } +a.code.hl_function { /* style for links to function names in code snippets */ } +a.code.hl_variable { /* style for links to variable names in code snippets */ } +a.code.hl_typedef { /* style for links to typedef names in code snippets */ } +a.code.hl_enumvalue { /* style for links to enum value names in code snippets */ } +a.code.hl_enumeration { /* style for links to enumeration names in code snippets */ } +a.code.hl_signal { /* style for links to Qt signal names in code snippets */ } +a.code.hl_slot { /* style for links to Qt slot names in code snippets */ } +a.code.hl_friend { /* style for links to friend names in code snippets */ } +a.code.hl_dcop { /* style for links to KDE3 DCOP names in code snippets */ } +a.code.hl_property { /* style for links to property names in code snippets */ } +a.code.hl_event { /* style for links to event names in code snippets */ } +a.code.hl_sequence { /* style for links to sequence names in code snippets */ } +a.code.hl_dictionary { /* style for links to dictionary names in code snippets */ } + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +ul.check { + list-style:none; + text-indent: -16px; + padding-left: 38px; +} +li.unchecked:before { + content: "\2610\A0"; +} +li.checked:before { + content: "\2611\A0"; +} + +ol { + text-indent: 0px; +} + +ul { + text-indent: 0px; + overflow: visible; +} + +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; + list-style-type: none; +} + +#side-nav ul { + overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ +} + +#main-nav ul { + overflow: visible; /* reset ul rule for the navigation bar drop down lists */ +} + +.fragment { + text-align: left; + direction: ltr; + overflow-x: auto; + overflow-y: hidden; + position: relative; + min-height: 12px; + margin: 10px 0px; + padding: 10px 10px; + border: 1px solid #C4CFE5; + border-radius: 4px; + background-color: #FBFCFD; + color: black; +} + +pre.fragment { + word-wrap: break-word; + font-size: 10pt; + line-height: 125%; + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +} + +.clipboard { + width: 24px; + height: 24px; + right: 5px; + top: 5px; + opacity: 0; + position: absolute; + display: inline; + overflow: hidden; + justify-content: center; + align-items: center; + cursor: pointer; +} + +.clipboard.success { + border: 1px solid black; + border-radius: 4px; +} + +.fragment:hover .clipboard, .clipboard.success { + opacity: .4; +} + +.clipboard:hover, .clipboard.success { + opacity: 1 !important; +} + +.clipboard:active:not([class~=success]) svg { + transform: scale(.91); +} + +.clipboard.success svg { + fill: #2EC82E; +} + +.clipboard.success { + border-color: #2EC82E; +} + +div.line { + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.2; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + +span.fold { + margin-left: 5px; + margin-right: 1px; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; + display: inline-block; + width: 12px; + height: 12px; + background-repeat:no-repeat; + background-position:center; +} + +span.lineno { + padding-right: 4px; + margin-right: 9px; + text-align: right; + border-right: 2px solid #00FF00; + color: black; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a, span.lineno a:visited { + color: #4665A2; + background-color: #D8D8D8; +} + +span.lineno a:hover { + color: #4665A2; + background-color: #C8C8C8; +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +p.formulaDsp { + text-align: center; +} + +img.dark-mode-visible { + display: none; +} +img.light-mode-visible { + display: none; +} + +img.formulaInl, img.inline { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; + width: 104px; +} + +.compoundTemplParams { + color: #4665A2; + font-size: 80%; + line-height: 120%; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000; +} + +span.keywordtype { + color: #604020; +} + +span.keywordflow { + color: #E08000; +} + +span.comment { + color: #800000; +} + +span.preprocessor { + color: #806020; +} + +span.stringliteral { + color: #002080; +} + +span.charliteral { + color: #008080; +} + +span.xmlcdata { + color: black; +} + +span.vhdldigit { + color: #FF00FF; +} + +span.vhdlchar { + color: #000000; +} + +span.vhdlkeyword { + color: #700070; +} + +span.vhdllogic { + color: #FF0000; +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #2D4068; +} + +th.dirtab { + background-color: #374F7F; + color: #FFFFFF; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memSeparator { + border-bottom: 1px solid #DEE4F0; + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight, .memTemplItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: url('nav_f.png'); + background-repeat: repeat-x; + background-color: #E2E8F2; + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-color: #DFE5F1; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; +} + +.overload { + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 10px 2px 10px; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: white; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; + padding: 0px; + padding-bottom: 1px; +} + +.paramname { + white-space: nowrap; + padding: 0px; + padding-bottom: 1px; + margin-left: 2px; +} + +.paramname em { + color: #602020; + font-style: normal; + margin-right: 1px; +} + +.paramname .paramdefval { + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype, .tparams .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir, .tparams .paramdir { + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #728DC1; + border-top:1px solid #5373B4; + border-left:1px solid #5373B4; + border-right:1px solid #C4CFE5; + border-bottom:1px solid #C4CFE5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #9CAFD4; + border-bottom: 1px solid #9CAFD4; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.odd { + padding-left: 6px; + background-color: #F8F9FC; +} + +.directory tr.even { + padding-left: 6px; + background-color: white; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; +} + +.arrow { + color: #9CAFD4; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: Arial,Helvetica; + line-height: normal; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: #728DC1; + color: white; + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderopen.svg'); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderclosed.svg'); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('doc.svg'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + border-radius: 4px; + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname, .fieldtable td.fieldinit { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fieldinit { + padding-top: 3px; + text-align: right; +} + + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image: url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image: url('tab_b.png'); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:#283A5D; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color: #364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + outline: none; + color: #283A5D; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color: white; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color: #2A3D61; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image: url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +.PageDocRTL-title div.headertitle { + text-align: right; + direction: rtl; +} + +dl { + padding: 0 0 0 0; +} + +/* + +dl.section { + margin-left: 0px; + padding-left: 0px; +} + +dl.note { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention, dl.important { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00D000; +} + +dl.deprecated { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #505050; +} + +dl.todo { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00C0E0; +} + +dl.test { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #3030E0; +} + +dl.bug { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #C08050; +} + +*/ + +dl.bug dt a, dl.deprecated dt a, dl.todo dt a, dl.test a { + font-weight: bold !important; +} + +dl.warning, dl.attention, dl.important, dl.note, dl.deprecated, dl.bug, +dl.invariant, dl.pre, dl.post, dl.todo, dl.test, dl.remark { + padding: 10px; + margin: 10px 0px; + overflow: hidden; + margin-left: 0; + border-radius: 4px; +} + +dl.section dd { + margin-bottom: 2px; +} + +dl.warning, dl.attention, dl.important { + background: #f8d1cc; + border-left: 8px solid #b61825; + color: #75070f; +} + +dl.warning dt, dl.attention dt, dl.important dt { + color: #b61825; +} + +dl.note, dl.remark { + background: #faf3d8; + border-left: 8px solid #f3a600; + color: #5f4204; +} + +dl.note dt, dl.remark dt { + color: #f3a600; +} + +dl.todo { + background: #e4f3ff; + border-left: 8px solid #1879C4; + color: #274a5c; +} + +dl.todo dt { + color: #1879C4; +} + +dl.test { + background: #e8e8ff; + border-left: 8px solid #3939C4; + color: #1a1a5c; +} + +dl.test dt { + color: #3939C4; +} + +dl.bug dt a { + color: #5b2bdd !important; +} + +dl.bug { + background: #e4dafd; + border-left: 8px solid #5b2bdd; + color: #2a0d72; +} + +dl.bug dt a { + color: #5b2bdd !important; +} + +dl.deprecated { + background: #ecf0f3; + border-left: 8px solid #5b6269; + color: #43454a; +} + +dl.deprecated dt a { + color: #5b6269 !important; +} + +dl.note dd, dl.warning dd, dl.pre dd, dl.post dd, +dl.remark dd, dl.attention dd, dl.important dd, dl.invariant dd, +dl.bug dd, dl.deprecated dd, dl.todo dd, dl.test dd { + margin-inline-start: 0px; +} + +dl.invariant, dl.pre, dl.post { + background: #d8f1e3; + border-left: 8px solid #44b86f; + color: #265532; +} + +dl.invariant dt, dl.pre dt, dl.post dt { + color: #44b86f; +} + + +#projectrow +{ + height: 56px; +} + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; + padding-left: 0.5em; +} + +#projectname +{ + font-size: 200%; + font-family: Tahoma,Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#side-nav #projectname +{ + font-size: 130%; +} + +#projectbrief +{ + font-size: 90%; + font-family: Tahoma,Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font-size: 50%; + font-family: 50% Tahoma,Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; + background-color: white; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; + text-align:right; + width:52px; +} + +dl.citelist dd { + margin:2px 0 2px 72px; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +div.toc li { + background: url("data:image/svg+xml;utf8,&%238595;") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,'DejaVu Sans',Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 Verdana,'DejaVu Sans',Geneva,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li[class^='level'] { + margin-left: 15px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.empty { + background-image: none; + margin-top: 0px; +} + +span.emoji { + /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html + * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; + */ +} + +span.obfuscator { + display: none; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + /*white-space: nowrap;*/ + color: black; + background-color: white; + border: 1px solid gray; + border-radius: 4px 4px 4px 4px; + box-shadow: 1px 1px 7px gray; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: grey; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip a { + color: #4665A2; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font-size: 12px; + font-family: Roboto,sans-serif; + line-height: 16px; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: white; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before, #powerTip.ne:before, #powerTip.nw:before { + border-top-color: gray; + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: white; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: gray; + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: gray; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: gray; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: gray; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: gray; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + +tt, code, kbd +{ + display: inline-block; +} +tt, code, kbd +{ + vertical-align: top; +} +/* @end */ + +u { + text-decoration: underline; +} + +details>summary { + list-style-type: none; +} + +details > summary::-webkit-details-marker { + display: none; +} + +details>summary::before { + content: "\25ba"; + padding-right:4px; + font-size: 80%; +} + +details[open]>summary::before { + content: "\25bc"; + padding-right:4px; + font-size: 80%; +} + diff --git a/docs/doxygen.svg b/docs/doxygen.svg new file mode 100644 index 0000000..79a7635 --- /dev/null +++ b/docs/doxygen.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/doxygen_crawl.html b/docs/doxygen_crawl.html new file mode 100644 index 0000000..ae2095e --- /dev/null +++ b/docs/doxygen_crawl.html @@ -0,0 +1,391 @@ + + + +Validator / crawler helper + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/dynsections.js b/docs/dynsections.js new file mode 100644 index 0000000..3cc426a --- /dev/null +++ b/docs/dynsections.js @@ -0,0 +1,198 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ + +function toggleVisibility(linkObj) { + return dynsection.toggleVisibility(linkObj); +} + +let dynsection = { + + // helper function + updateStripes : function() { + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); + $('table.directory tr'). + removeClass('odd').filter(':visible:odd').addClass('odd'); + }, + + toggleVisibility : function(linkObj) { + const base = $(linkObj).attr('id'); + const summary = $('#'+base+'-summary'); + const content = $('#'+base+'-content'); + const trigger = $('#'+base+'-trigger'); + const src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; + }, + + toggleLevel : function(level) { + $('table.directory tr').each(function() { + const l = this.id.split('_').length-1; + const i = $('#img'+this.id.substring(3)); + const a = $('#arr'+this.id.substring(3)); + if (l'); + // add vertical lines to other rows + $('span[class=lineno]').not(':eq(0)').append(''); + // add toggle controls to lines with fold divs + $('div[class=foldopen]').each(function() { + // extract specific id to use + const id = $(this).attr('id').replace('foldopen',''); + // extract start and end foldable fragment attributes + const start = $(this).attr('data-start'); + const end = $(this).attr('data-end'); + // replace normal fold span with controls for the first line of a foldable fragment + $(this).find('span[class=fold]:first').replaceWith(''); + // append div for folded (closed) representation + $(this).after(''); + // extract the first line from the "open" section to represent closed content + const line = $(this).children().first().clone(); + // remove any glow that might still be active on the original line + $(line).removeClass('glow'); + if (start) { + // if line already ends with a start marker (e.g. trailing {), remove it + $(line).html($(line).html().replace(new RegExp('\\s*'+start+'\\s*$','g'),'')); + } + // replace minus with plus symbol + $(line).find('span[class=fold]').css('background-image',codefold.plusImg[relPath]); + // append ellipsis + $(line).append(' '+start+''+end); + // insert constructed line into closed div + $('#foldclosed'+id).html(line); + }); + }, +}; +/* @license-end */ diff --git a/docs/files.html b/docs/files.html new file mode 100644 index 0000000..530668a --- /dev/null +++ b/docs/files.html @@ -0,0 +1,130 @@ + + + + + + + +signals-cpp: File List + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
File List
+
+
+
Here is a list of all files with brief descriptions:
+
[detail level 123]
+ + + + + + + + +
  include
  signals
 Integration.h
 Models.h
 Signal.h
 Signals.h
 State.h
 Utils.h
+
+
+
+ + + + diff --git a/docs/files_dup.js b/docs/files_dup.js new file mode 100644 index 0000000..f1749d9 --- /dev/null +++ b/docs/files_dup.js @@ -0,0 +1,4 @@ +var files_dup = +[ + [ "include", "dir_d44c64559bbebec7f509842c48db8b23.html", "dir_d44c64559bbebec7f509842c48db8b23" ] +]; \ No newline at end of file diff --git a/docs/folderclosed.svg b/docs/folderclosed.svg new file mode 100644 index 0000000..b04bed2 --- /dev/null +++ b/docs/folderclosed.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/docs/folderclosedd.svg b/docs/folderclosedd.svg new file mode 100644 index 0000000..52f0166 --- /dev/null +++ b/docs/folderclosedd.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/docs/folderopen.svg b/docs/folderopen.svg new file mode 100644 index 0000000..f6896dd --- /dev/null +++ b/docs/folderopen.svg @@ -0,0 +1,17 @@ + + + + + + + + + + diff --git a/docs/folderopend.svg b/docs/folderopend.svg new file mode 100644 index 0000000..2d1f06e --- /dev/null +++ b/docs/folderopend.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/docs/functions.html b/docs/functions.html new file mode 100644 index 0000000..95c1cb9 --- /dev/null +++ b/docs/functions.html @@ -0,0 +1,241 @@ + + + + + + + +signals-cpp: Class Members + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- b -

+ + +

- d -

+ + +

- e -

+ + +

- g -

+ + +

- h -

+ + +

- i -

+ + +

- j -

+ + +

- m -

+ + +

- n -

+ + +

- o -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- u -

+ + +

- x -

+ + +

- z -

+
+
+ + + + diff --git a/docs/functions_func.html b/docs/functions_func.html new file mode 100644 index 0000000..3dd570f --- /dev/null +++ b/docs/functions_func.html @@ -0,0 +1,194 @@ + + + + + + + +signals-cpp: Class Members - Functions + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all functions with links to the classes they belong to:
+ +

- b -

+ + +

- d -

+ + +

- h -

+ + +

- i -

+ + +

- m -

+ + +

- n -

+ + +

- o -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- u -

+ + +

- z -

+
+
+ + + + diff --git a/docs/functions_rela.html b/docs/functions_rela.html new file mode 100644 index 0000000..da61700 --- /dev/null +++ b/docs/functions_rela.html @@ -0,0 +1,120 @@ + + + + + + + +signals-cpp: Class Members - Related Symbols + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all related symbols with links to the classes they belong to:
+
+
+ + + + diff --git a/docs/functions_type.html b/docs/functions_type.html new file mode 100644 index 0000000..c232ef4 --- /dev/null +++ b/docs/functions_type.html @@ -0,0 +1,148 @@ + + + + + + + +signals-cpp: Class Members - Typedefs + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all typedefs with links to the classes they belong to:
+ +

- b -

+ + +

- i -

+ + +

- p -

+ + +

- s -

+ + +

- t -

+
+
+ + + + diff --git a/docs/functions_vars.html b/docs/functions_vars.html new file mode 100644 index 0000000..459d570 --- /dev/null +++ b/docs/functions_vars.html @@ -0,0 +1,129 @@ + + + + + + + +signals-cpp: Class Members - Variables + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ + + + + + diff --git a/docs/globals.html b/docs/globals.html new file mode 100644 index 0000000..8adc0c8 --- /dev/null +++ b/docs/globals.html @@ -0,0 +1,310 @@ + + + + + + + +signals-cpp: File Members + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all file members with links to the files they belong to:
+ +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- i -

+ + +

- l -

+ + +

- m -

+ + +

- n -

+ + +

- o -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- v -

+ + +

- z -

+
+
+ + + + diff --git a/docs/globals_defs.html b/docs/globals_defs.html new file mode 100644 index 0000000..97997fa --- /dev/null +++ b/docs/globals_defs.html @@ -0,0 +1,123 @@ + + + + + + + +signals-cpp: File Members + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all macros with links to the files they belong to:
+
+
+ + + + diff --git a/docs/globals_enum.html b/docs/globals_enum.html new file mode 100644 index 0000000..c1b5f7e --- /dev/null +++ b/docs/globals_enum.html @@ -0,0 +1,120 @@ + + + + + + + +signals-cpp: File Members + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all enums with links to the files they belong to:
+
+
+ + + + diff --git a/docs/globals_eval.html b/docs/globals_eval.html new file mode 100644 index 0000000..5fd5945 --- /dev/null +++ b/docs/globals_eval.html @@ -0,0 +1,125 @@ + + + + + + + +signals-cpp: File Members + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all enum values with links to the files they belong to:
+
+
+ + + + diff --git a/docs/globals_func.html b/docs/globals_func.html new file mode 100644 index 0000000..7208ecb --- /dev/null +++ b/docs/globals_func.html @@ -0,0 +1,122 @@ + + + + + + + +signals-cpp: File Members + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all functions with links to the files they belong to:
+
+
+ + + + diff --git a/docs/globals_type.html b/docs/globals_type.html new file mode 100644 index 0000000..f62bab5 --- /dev/null +++ b/docs/globals_type.html @@ -0,0 +1,256 @@ + + + + + + + +signals-cpp: File Members + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all typedefs with links to the files they belong to:
+ +

- e -

+ + +

- m -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- v -

+
+
+ + + + diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..ac46342 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,139 @@ + + + + + + + +signals-cpp: signals-cpp Library Documentation + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
signals-cpp Library Documentation
+
+
+

+Introduction

+

Header-only templated C++ library implementing rigid-body dynamics, derivatives, integrals, and interpolation.

+

The key class definitions in this library from which all specialized types are derived are:

+ +

+Installation

+

This code is meant to be built as a static library with CMake. It should be compatible with the latest versions of Eigen and Boost (unit test framework only). The library manif-geom-cpp must also be installed.

+

Install with

+
mkdir build
+
cd build
+
cmake ..
+
make # or make install
+

By default, building will also build and run the unit tests, but this can be turned off with the CMake option BUILD_TESTS.

+
+ +
+
+ + + + diff --git a/docs/index.js b/docs/index.js new file mode 100644 index 0000000..4f936bd --- /dev/null +++ b/docs/index.js @@ -0,0 +1,5 @@ +var index = +[ + [ "Introduction", "index.html#intro_sec", null ], + [ "Installation", "index.html#install", null ] +]; \ No newline at end of file diff --git a/docs/jquery.js b/docs/jquery.js new file mode 100644 index 0000000..875ada7 --- /dev/null +++ b/docs/jquery.js @@ -0,0 +1,204 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e} +var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp( +"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType +}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c +)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){ +return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll( +":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id") +)&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push( +"\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test( +a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null, +null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne +).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for( +var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n; +return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0, +r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r] +,C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each( +function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r, +"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})} +),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each( +"blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=y(e||this.defaultElement||this)[0],this.element=y(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=y(),this.hoverable=y(),this.focusable=y(),this.classesElementLookup={},e!==this&&(y.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t +){t.target===e&&this.destroy()}}),this.document=y(e.style?e.ownerDocument:e.document||e),this.window=y(this.document[0].defaultView||this.document[0].parentWindow)),this.options=y.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:y.noop,_create:y.noop,_init:y.noop,destroy:function(){var i=this;this._destroy(),y.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:y.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return y.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t +]=y.widget.extend({},this.options[t]),n=0;n
"),i=e.children()[0];return y("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i}, +getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthx(D(s),D(n))?o.important="horizontal":o.important="vertical",p.using.call(this,t,o)}),h.offset(y.extend(l,{using:t}))})},y.ui.position={fit:{left:function(t,e){var i=e.within, +s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,h=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),y.ui.plugin={add:function(t,e,i){var s,n=y.ui[t].prototype;for(s in i)n.plugins[s]=n.plugins[s]||[],n.plugins[s].push([e,i[s]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;n").css({overflow:"hidden",position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})), +this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,t={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(t),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(t),this._proportionallyResize()),this._setupHandles(),e.autoHide&&y(this.element).on("mouseenter",function(){e.disabled||(i._removeClass("ui-resizable-autohide"),i._handles.show())}).on("mouseleave",function(){e.disabled||i.resizing||(i._addClass("ui-resizable-autohide"),i._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy(),this._addedHandles.remove();function t(t){y(t +).removeData("resizable").removeData("ui-resizable").off(".resizable")}var e;return this.elementIsWrapper&&(t(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),t(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;case"aspectRatio":this._aspectRatio=!!e}},_setupHandles:function(){var t,e,i,s,n,o=this.options,h=this;if(this.handles=o.handles||(y(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=y(),this._addedHandles=y(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),i=this.handles.split( +","),this.handles={},e=0;e"),this._addClass(n,"ui-resizable-handle "+s),n.css({zIndex:o.zIndex}),this.handles[t]=".ui-resizable-"+t,this.element.children(this.handles[t]).length||(this.element.append(n),this._addedHandles=this._addedHandles.add(n));this._renderAxis=function(t){var e,i,s;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&&(this.handles[e]=y(this.handles[e]),this._on(this.handles[e],{mousedown:h._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(i=y(this.handles[e],this.element),s=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),i=["padding",/ne|nw|n/.test(e)?"Top":/se|sw|s/.test(e)?"Bottom":/^e$/.test(e)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize()),this._handles=this._handles.add( +this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){h.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),h.axis=n&&n[1]?n[1]:"se")}),o.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._addedHandles.remove()},_mouseCapture:function(t){var e,i,s=!1;for(e in this.handles)(i=y(this.handles[e])[0])!==t.target&&!y.contains(i,t.target)||(s=!0);return!this.options.disabled&&s},_mouseStart:function(t){var e,i,s=this.options,n=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css("left")),i=this._num(this.helper.css("top")),s.containment&&(e+=y(s.containment).scrollLeft()||0,i+=y(s.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{ +width:n.width(),height:n.height()},this.originalSize=this._helper?{width:n.outerWidth(),height:n.outerHeight()}:{width:n.width(),height:n.height()},this.sizeDiff={width:n.outerWidth()-n.width(),height:n.outerHeight()-n.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof s.aspectRatio?s.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=y(".ui-resizable-"+this.axis).css("cursor"),y("body").css("cursor","auto"===s?this.axis+"-resize":s),this._addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var e=this.originalMousePosition,i=this.axis,s=t.pageX-e.left||0,e=t.pageY-e.top||0,i=this._change[i];return this._updatePrevProperties(),i&&(e=i.apply(this,[t,s,e]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate("resize",t),e=this._applyChanges(), +!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),y.isEmptyObject(e)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,s,n=this.options,o=this;return this._helper&&(s=(e=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&this._hasScroll(i[0],"left")?0:o.sizeDiff.height,i=e?0:o.sizeDiff.width,e={width:o.helper.width()-i,height:o.helper.height()-s},i=parseFloat(o.element.css("left"))+(o.position.left-o.originalPosition.left)||null,s=parseFloat(o.element.css("top"))+(o.position.top-o.originalPosition.top)||null,n.animate||this.element.css(y.extend(e,{top:s,left:i})),o.helper.height(o.size.height),o.helper.width(o.size.width),this._helper&&!n.animate&&this._proportionallyResize()),y("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){ +this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s=this.options,n={minWidth:this._isNumber(s.minWidth)?s.minWidth:0,maxWidth:this._isNumber(s.maxWidth)?s.maxWidth:1/0,minHeight:this._isNumber(s.minHeight)?s.minHeight:0,maxHeight:this._isNumber(s.maxHeight)?s.maxHeight:1/0};(this._aspectRatio||t)&&(e=n.minHeight*this.aspectRatio,i=n.minWidth/this.aspectRatio,s=n.maxHeight*this.aspectRatio,t=n.maxWidth/this.aspectRatio,e>n.minWidth&&(n.minWidth=e),i>n.minHeight&&(n.minHeight=i),st.width,h=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,a=this.originalPosition.left+this.originalSize.width,r=this.originalPosition.top+this.originalSize.height +,l=/sw|nw|w/.test(i),i=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),h&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=a-e.minWidth),s&&l&&(t.left=a-e.maxWidth),h&&i&&(t.top=r-e.minHeight),n&&i&&(t.top=r-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e").css({overflow:"hidden"}),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++e.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e, +i){return y.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){y.ui.plugin.call(this,t,[e,this.ui()]),"resize"!==t&&this._trigger(t,e,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),y.ui.plugin.add("resizable","animate",{stop:function(e){var i=y(this).resizable("instance"),t=i.options,s=i._proportionallyResizeElements,n=s.length&&/textarea/i.test(s[0].nodeName),o=n&&i._hasScroll(s[0],"left")?0:i.sizeDiff.height,h=n?0:i.sizeDiff.width,n={width:i.size.width-h,height:i.size.height-o},h=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left +)||null,o=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(y.extend(n,o&&h?{top:o,left:h}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};s&&s.length&&y(s[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate("resize",e)}})}}),y.ui.plugin.add("resizable","containment",{start:function(){var i,s,n=y(this).resizable("instance"),t=n.options,e=n.element,o=t.containment,h=o instanceof y?o.get(0):/parent/.test(o)?e.parent().get(0):o;h&&(n.containerElement=y(h),/document/.test(o)||o===document?(n.containerOffset={left:0,top:0},n.containerPosition={left:0,top:0},n.parentData={element:y(document),left:0,top:0,width:y(document).width(),height:y(document).height()||document.body.parentNode.scrollHeight}):(i=y(h),s=[],y(["Top","Right","Left","Bottom"]).each(function(t,e +){s[t]=n._num(i.css("padding"+e))}),n.containerOffset=i.offset(),n.containerPosition=i.position(),n.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},t=n.containerOffset,e=n.containerSize.height,o=n.containerSize.width,o=n._hasScroll(h,"left")?h.scrollWidth:o,e=n._hasScroll(h)?h.scrollHeight:e,n.parentData={element:h,left:t.left,top:t.top,width:o,height:e}))},resize:function(t){var e=y(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.position,o=e._aspectRatio||t.shiftKey,h={top:0,left:0},a=e.containerElement,t=!0;a[0]!==document&&/static/.test(a.css("position"))&&(h=s),n.left<(e._helper?s.left:0)&&(e.size.width=e.size.width+(e._helper?e.position.left-s.left:e.position.left-h.left),o&&(e.size.height=e.size.width/e.aspectRatio,t=!1),e.position.left=i.helper?s.left:0),n.top<(e._helper?s.top:0)&&(e.size.height=e.size.height+(e._helper?e.position.top-s.top:e.position.top),o&&(e.size.width=e.size.height*e.aspectRatio,t=!1),e.position.top=e._helper?s.top:0), +i=e.containerElement.get(0)===e.element.parent().get(0),n=/relative|absolute/.test(e.containerElement.css("position")),i&&n?(e.offset.left=e.parentData.left+e.position.left,e.offset.top=e.parentData.top+e.position.top):(e.offset.left=e.element.offset().left,e.offset.top=e.element.offset().top),n=Math.abs(e.sizeDiff.width+(e._helper?e.offset.left-h.left:e.offset.left-s.left)),s=Math.abs(e.sizeDiff.height+(e._helper?e.offset.top-h.top:e.offset.top-s.top)),n+e.size.width>=e.parentData.width&&(e.size.width=e.parentData.width-n,o&&(e.size.height=e.size.width/e.aspectRatio,t=!1)),s+e.size.height>=e.parentData.height&&(e.size.height=e.parentData.height-s,o&&(e.size.width=e.size.height*e.aspectRatio,t=!1)),t||(e.position.left=e.prevPosition.left,e.position.top=e.prevPosition.top,e.size.width=e.prevSize.width,e.size.height=e.prevSize.height)},stop:function(){var t=y(this).resizable("instance"),e=t.options,i=t.containerOffset,s=t.containerPosition,n=t.containerElement,o=y(t.helper),h=o.offset(),a=o.outerWidth( +)-t.sizeDiff.width,o=o.outerHeight()-t.sizeDiff.height;t._helper&&!e.animate&&/relative/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o}),t._helper&&!e.animate&&/static/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o})}}),y.ui.plugin.add("resizable","alsoResize",{start:function(){var t=y(this).resizable("instance").options;y(t.alsoResize).each(function(){var t=y(this);t.data("ui-resizable-alsoresize",{width:parseFloat(t.width()),height:parseFloat(t.height()),left:parseFloat(t.css("left")),top:parseFloat(t.css("top"))})})},resize:function(t,i){var e=y(this).resizable("instance"),s=e.options,n=e.originalSize,o=e.originalPosition,h={height:e.size.height-n.height||0,width:e.size.width-n.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};y(s.alsoResize).each(function(){var t=y(this),s=y(this).data("ui-resizable-alsoresize"),n={},e=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];y.each(e, +function(t,e){var i=(s[e]||0)+(h[e]||0);i&&0<=i&&(n[e]=i||null)}),t.css(n)})},stop:function(){y(this).removeData("ui-resizable-alsoresize")}}),y.ui.plugin.add("resizable","ghost",{start:function(){var t=y(this).resizable("instance"),e=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}),t._addClass(t.ghost,"ui-resizable-ghost"),!1!==y.uiBackCompat&&"string"==typeof t.options.ghost&&t.ghost.addClass(this.options.ghost),t.ghost.appendTo(t.helper)},resize:function(){var t=y(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=y(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),y.ui.plugin.add("resizable","grid",{resize:function(){var t,e=y(this).resizable("instance"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,h=e.axis,a="number"==typeof i.grid?[i.grid,i.grid]:i.grid,r=a[0 +]||1,l=a[1]||1,u=Math.round((s.width-n.width)/r)*r,p=Math.round((s.height-n.height)/l)*l,d=n.width+u,c=n.height+p,f=i.maxWidth&&i.maxWidthd,s=i.minHeight&&i.minHeight>c;i.grid=a,m&&(d+=r),s&&(c+=l),f&&(d-=r),g&&(c-=l),/^(se|s|e)$/.test(h)?(e.size.width=d,e.size.height=c):/^(ne)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.top=o.top-p):/^(sw)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.left=o.left-u):((c-l<=0||d-r<=0)&&(t=e._getPaddingPlusBorderDimensions(this)),0=f[g]?0:Math.min(f[g],n));!a&&1-1){ +targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se", +"n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if( +session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)} +closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if( +session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE, +function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset); +tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList, +finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight())); +return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")} +function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(), +elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight, +viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b, +"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery); +/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 + * http://www.smartmenus.org/ + * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)), +mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend( +$.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy( +this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData( +"smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id" +).indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?( +this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for( +var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){ +return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if(( +!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&( +this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0 +]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass( +"highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){ +t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]" +)||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){ +t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"), +a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i, +downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2) +)&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t +)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0), +canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}}, +rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})} +return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1, +bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); diff --git a/docs/menu.js b/docs/menu.js new file mode 100644 index 0000000..0fd1e99 --- /dev/null +++ b/docs/menu.js @@ -0,0 +1,134 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search,treeview) { + function makeTree(data,relPath) { + let result=''; + if ('children' in data) { + result+='
    '; + for (let i in data.children) { + let url; + const link = data.children[i].url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + } else { + url = relPath+link; + } + result+='
  • '+ + data.children[i].text+''+ + makeTree(data.children[i],relPath)+'
  • '; + } + result+='
'; + } + return result; + } + let searchBoxHtml; + if (searchEnabled) { + if (serverSide) { + searchBoxHtml='
'+ + '
'+ + '
 '+ + ''+ + '
'+ + '
'+ + '
'+ + '
'; + } else { + searchBoxHtml='
'+ + ''+ + ' '+ + ''+ + ''+ + ''+ + ''+ + ''+ + '
'; + } + } + + $('#main-nav').before('
'+ + ''+ + ''+ + '
'); + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchBoxHtml) { + $('#main-menu').append('
  • '); + } + const $mainMenuState = $('#main-menu-state'); + let prevWidth = 0; + if ($mainMenuState.length) { + const initResizableIfExists = function() { + if (typeof initResizable==='function') initResizable(treeview); + } + // animate mobile menu + $mainMenuState.change(function() { + const $menu = $('#main-menu'); + let options = { duration: 250, step: initResizableIfExists }; + if (this.checked) { + options['complete'] = () => $menu.css('display', 'block'); + $menu.hide().slideDown(options); + } else { + options['complete'] = () => $menu.css('display', 'none'); + $menu.show().slideUp(options); + } + }); + // set default menu visibility + const resetState = function() { + const $menu = $('#main-menu'); + const newWidth = $(window).outerWidth(); + if (newWidth!=prevWidth) { + if ($(window).outerWidth()<768) { + $mainMenuState.prop('checked',false); $menu.hide(); + $('#searchBoxPos1').html(searchBoxHtml); + $('#searchBoxPos2').hide(); + } else { + $menu.show(); + $('#searchBoxPos1').empty(); + $('#searchBoxPos2').html(searchBoxHtml); + $('#searchBoxPos2').show(); + } + if (typeof searchBox!=='undefined') { + searchBox.CloseResultsWindow(); + } + prevWidth = newWidth; + } + } + $(window).ready(function() { resetState(); initResizableIfExists(); }); + $(window).resize(resetState); + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/docs/menudata.js b/docs/menudata.js new file mode 100644 index 0000000..b87cf60 --- /dev/null +++ b/docs/menudata.js @@ -0,0 +1,103 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file +*/ +var menudata={children:[ +{text:"Main Page",url:"index.html"}, +{text:"Namespaces",url:"namespaces.html",children:[ +{text:"Namespace List",url:"namespaces.html"}, +{text:"Namespace Members",url:"namespacemembers.html",children:[ +{text:"All",url:"namespacemembers.html"}, +{text:"Functions",url:"namespacemembers_func.html"}]}]}, +{text:"Classes",url:"annotated.html",children:[ +{text:"Class List",url:"annotated.html"}, +{text:"Class Index",url:"classes.html"}, +{text:"Class Members",url:"functions.html",children:[ +{text:"All",url:"functions.html",children:[ +{text:"b",url:"functions.html#index_b"}, +{text:"d",url:"functions.html#index_d"}, +{text:"e",url:"functions.html#index_e"}, +{text:"g",url:"functions.html#index_g"}, +{text:"h",url:"functions.html#index_h"}, +{text:"i",url:"functions.html#index_i"}, +{text:"j",url:"functions.html#index_j"}, +{text:"m",url:"functions.html#index_m"}, +{text:"n",url:"functions.html#index_n"}, +{text:"o",url:"functions.html#index_o"}, +{text:"p",url:"functions.html#index_p"}, +{text:"r",url:"functions.html#index_r"}, +{text:"s",url:"functions.html#index_s"}, +{text:"t",url:"functions.html#index_t"}, +{text:"u",url:"functions.html#index_u"}, +{text:"x",url:"functions.html#index_x"}, +{text:"z",url:"functions.html#index_z"}]}, +{text:"Functions",url:"functions_func.html",children:[ +{text:"b",url:"functions_func.html#index_b"}, +{text:"d",url:"functions_func.html#index_d"}, +{text:"h",url:"functions_func.html#index_h"}, +{text:"i",url:"functions_func.html#index_i"}, +{text:"m",url:"functions_func.html#index_m"}, +{text:"n",url:"functions_func.html#index_n"}, +{text:"o",url:"functions_func.html#index_o"}, +{text:"r",url:"functions_func.html#index_r"}, +{text:"s",url:"functions_func.html#index_s"}, +{text:"t",url:"functions_func.html#index_t"}, +{text:"u",url:"functions_func.html#index_u"}, +{text:"z",url:"functions_func.html#index_z"}]}, +{text:"Variables",url:"functions_vars.html"}, +{text:"Typedefs",url:"functions_type.html",children:[ +{text:"b",url:"functions_type.html#index_b"}, +{text:"i",url:"functions_type.html#index_i"}, +{text:"p",url:"functions_type.html#index_p"}, +{text:"s",url:"functions_type.html#index_s"}, +{text:"t",url:"functions_type.html#index_t"}]}, +{text:"Related Symbols",url:"functions_rela.html"}]}]}, +{text:"Files",url:"files.html",children:[ +{text:"File List",url:"files.html"}, +{text:"File Members",url:"globals.html",children:[ +{text:"All",url:"globals.html",children:[ +{text:"c",url:"globals.html#index_c"}, +{text:"d",url:"globals.html#index_d"}, +{text:"e",url:"globals.html#index_e"}, +{text:"f",url:"globals.html#index_f"}, +{text:"i",url:"globals.html#index_i"}, +{text:"l",url:"globals.html#index_l"}, +{text:"m",url:"globals.html#index_m"}, +{text:"n",url:"globals.html#index_n"}, +{text:"o",url:"globals.html#index_o"}, +{text:"r",url:"globals.html#index_r"}, +{text:"s",url:"globals.html#index_s"}, +{text:"t",url:"globals.html#index_t"}, +{text:"v",url:"globals.html#index_v"}, +{text:"z",url:"globals.html#index_z"}]}, +{text:"Functions",url:"globals_func.html"}, +{text:"Typedefs",url:"globals_type.html",children:[ +{text:"e",url:"globals_type.html#index_e"}, +{text:"m",url:"globals_type.html#index_m"}, +{text:"r",url:"globals_type.html#index_r"}, +{text:"s",url:"globals_type.html#index_s"}, +{text:"t",url:"globals_type.html#index_t"}, +{text:"v",url:"globals_type.html#index_v"}]}, +{text:"Enumerations",url:"globals_enum.html"}, +{text:"Enumerator",url:"globals_eval.html"}, +{text:"Macros",url:"globals_defs.html"}]}]}]} diff --git a/docs/minus.svg b/docs/minus.svg new file mode 100644 index 0000000..f70d0c1 --- /dev/null +++ b/docs/minus.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/docs/minusd.svg b/docs/minusd.svg new file mode 100644 index 0000000..5f8e879 --- /dev/null +++ b/docs/minusd.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/docs/namespacemembers.html b/docs/namespacemembers.html new file mode 100644 index 0000000..f7c443c --- /dev/null +++ b/docs/namespacemembers.html @@ -0,0 +1,118 @@ + + + + + + + +signals-cpp: Namespace Members + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all namespace members with links to the namespace documentation for each member:
    +
    +
    + + + + diff --git a/docs/namespacemembers_func.html b/docs/namespacemembers_func.html new file mode 100644 index 0000000..36fd00b --- /dev/null +++ b/docs/namespacemembers_func.html @@ -0,0 +1,118 @@ + + + + + + + +signals-cpp: Namespace Members + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all namespace functions with links to the namespace documentation for each function:
    +
    +
    + + + + diff --git a/docs/namespaces.html b/docs/namespaces.html new file mode 100644 index 0000000..585860f --- /dev/null +++ b/docs/namespaces.html @@ -0,0 +1,123 @@ + + + + + + + +signals-cpp: Namespace List + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Namespace List
    +
    +
    +
    Here is a list of all namespaces with brief descriptions:
    + + +
     Nsignal_utils
    +
    +
    +
    + + + + diff --git a/docs/namespaces_dup.js b/docs/namespaces_dup.js new file mode 100644 index 0000000..78e9c45 --- /dev/null +++ b/docs/namespaces_dup.js @@ -0,0 +1,6 @@ +var namespaces_dup = +[ + [ "signal_utils", "namespacesignal__utils.html", [ + [ "getTimeDelta", "namespacesignal__utils.html#ad7667542f893604d059a5d0022d2890c", null ] + ] ] +]; \ No newline at end of file diff --git a/docs/namespacesignal__utils.html b/docs/namespacesignal__utils.html new file mode 100644 index 0000000..76ed616 --- /dev/null +++ b/docs/namespacesignal__utils.html @@ -0,0 +1,167 @@ + + + + + + + +signals-cpp: signal_utils Namespace Reference + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    signal_utils Namespace Reference
    +
    +
    + + + + +

    +Functions

    bool getTimeDelta (double &dt, const double &t0, const double &tf, const double &dt_max=std::numeric_limits< double >::max())
     
    +

    Function Documentation

    + +

    ◆ getTimeDelta()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    bool signal_utils::getTimeDelta (double & dt,
    const double & t0,
    const double & tf,
    const double & dt_max = std::numeric_limits<double>::max() )
    +
    +inline
    +
    + +
    +
    +
    +
    + + + + diff --git a/docs/nav_f.png b/docs/nav_f.png new file mode 100644 index 0000000..72a58a5 Binary files /dev/null and b/docs/nav_f.png differ diff --git a/docs/nav_fd.png b/docs/nav_fd.png new file mode 100644 index 0000000..032fbdd Binary files /dev/null and b/docs/nav_fd.png differ diff --git a/docs/nav_g.png b/docs/nav_g.png new file mode 100644 index 0000000..2093a23 Binary files /dev/null and b/docs/nav_g.png differ diff --git a/docs/nav_h.png b/docs/nav_h.png new file mode 100644 index 0000000..33389b1 Binary files /dev/null and b/docs/nav_h.png differ diff --git a/docs/nav_hd.png b/docs/nav_hd.png new file mode 100644 index 0000000..de80f18 Binary files /dev/null and b/docs/nav_hd.png differ diff --git a/docs/navtree.css b/docs/navtree.css new file mode 100644 index 0000000..6b1e5e4 --- /dev/null +++ b/docs/navtree.css @@ -0,0 +1,149 @@ +#nav-tree .children_ul { + margin:0; + padding:4px; +} + +#nav-tree ul { + list-style:none outside none; + margin:0px; + padding:0px; +} + +#nav-tree li { + white-space:nowrap; + margin:0px; + padding:0px; +} + +#nav-tree .plus { + margin:0px; +} + +#nav-tree .selected { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + color: white; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +#nav-tree .selected .arrow { + color: #9CAFD4; + text-shadow: none; +} + +#nav-tree img { + margin:0px; + padding:0px; + border:0px; + vertical-align: middle; +} + +#nav-tree a { + text-decoration:none; + padding:0px; + margin:0px; +} + +#nav-tree .label { + margin:0px; + padding:0px; + font: 12px 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +} + +#nav-tree .label a { + padding:2px; +} + +#nav-tree .selected a { + text-decoration:none; + color:white; +} + +#nav-tree .children_ul { + margin:0px; + padding:0px; +} + +#nav-tree .item { + margin:0px; + padding:0px; +} + +#nav-tree { + padding: 0px 0px; + font-size:14px; + overflow:auto; +} + +#doc-content { + overflow:auto; + display:block; + padding:0px; + margin:0px; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#side-nav { + padding:0 6px 0 0; + margin: 0px; + display:block; + position: absolute; + left: 0px; + width: $width; + overflow : hidden; +} + +.ui-resizable .ui-resizable-handle { + display:block; +} + +.ui-resizable-e { + background-image:url('splitbar.png'); + background-size:100%; + background-repeat:repeat-y; + background-attachment: scroll; + cursor:ew-resize; + height:100%; + right:0; + top:0; + width:6px; +} + +.ui-resizable-handle { + display:none; + font-size:0.1px; + position:absolute; + z-index:1; +} + +#nav-tree-contents { + margin: 6px 0px 0px 0px; +} + +#nav-tree { + background-repeat:repeat-x; + background-color: #F9FAFC; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#nav-sync { + position:absolute; + top:5px; + right:24px; + z-index:0; +} + +#nav-sync img { + opacity:0.3; +} + +#nav-sync img:hover { + opacity:0.9; +} + +@media print +{ + #nav-tree { display: none; } + div.ui-resizable-handle { display: none; position: relative; } +} + diff --git a/docs/navtree.js b/docs/navtree.js new file mode 100644 index 0000000..2d4fa84 --- /dev/null +++ b/docs/navtree.js @@ -0,0 +1,483 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ + +function initNavTree(toroot,relpath) { + let navTreeSubIndices = []; + const ARROW_DOWN = '▼'; + const ARROW_RIGHT = '►'; + const NAVPATH_COOKIE_NAME = ''+'navpath'; + + const getData = function(varName) { + const i = varName.lastIndexOf('/'); + const n = i>=0 ? varName.substring(i+1) : varName; + return eval(n.replace(/-/g,'_')); + } + + const stripPath = function(uri) { + return uri.substring(uri.lastIndexOf('/')+1); + } + + const stripPath2 = function(uri) { + const i = uri.lastIndexOf('/'); + const s = uri.substring(i+1); + const m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/); + return m ? uri.substring(i-6) : s; + } + + const hashValue = function() { + return $(location).attr('hash').substring(1).replace(/[^\w-]/g,''); + } + + const hashUrl = function() { + return '#'+hashValue(); + } + + const pathName = function() { + return $(location).attr('pathname').replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;()]/g, ''); + } + + const storeLink = function(link) { + if (!$("#nav-sync").hasClass('sync')) { + Cookie.writeSetting(NAVPATH_COOKIE_NAME,link,0); + } + } + + const deleteLink = function() { + Cookie.eraseSetting(NAVPATH_COOKIE_NAME); + } + + const cachedLink = function() { + return Cookie.readSetting(NAVPATH_COOKIE_NAME,''); + } + + const getScript = function(scriptName,func) { + const head = document.getElementsByTagName("head")[0]; + const script = document.createElement('script'); + script.id = scriptName; + script.type = 'text/javascript'; + script.onload = func; + script.src = scriptName+'.js'; + head.appendChild(script); + } + + const createIndent = function(o,domNode,node) { + let level=-1; + let n = node; + while (n.parentNode) { level++; n=n.parentNode; } + if (node.childrenData) { + const imgNode = document.createElement("span"); + imgNode.className = 'arrow'; + imgNode.style.paddingLeft=(16*level).toString()+'px'; + imgNode.innerHTML=ARROW_RIGHT; + node.plus_img = imgNode; + node.expandToggle = document.createElement("a"); + node.expandToggle.href = "javascript:void(0)"; + node.expandToggle.onclick = function() { + if (node.expanded) { + $(node.getChildrenUL()).slideUp("fast"); + node.plus_img.innerHTML=ARROW_RIGHT; + node.expanded = false; + } else { + expandNode(o, node, false, true); + } + } + node.expandToggle.appendChild(imgNode); + domNode.appendChild(node.expandToggle); + } else { + let span = document.createElement("span"); + span.className = 'arrow'; + span.style.width = 16*(level+1)+'px'; + span.innerHTML = ' '; + domNode.appendChild(span); + } + } + + let animationInProgress = false; + + const gotoAnchor = function(anchor,aname) { + let pos, docContent = $('#doc-content'); + let ancParent = $(anchor.parent()); + if (ancParent.hasClass('memItemLeft') || ancParent.hasClass('memtitle') || + ancParent.hasClass('fieldname') || ancParent.hasClass('fieldtype') || + ancParent.is(':header')) { + pos = ancParent.offset().top; + } else if (anchor.position()) { + pos = anchor.offset().top; + } + if (pos) { + const dcOffset = docContent.offset().top; + const dcHeight = docContent.height(); + const dcScrHeight = docContent[0].scrollHeight + const dcScrTop = docContent.scrollTop(); + let dist = Math.abs(Math.min(pos-dcOffset,dcScrHeight-dcHeight-dcScrTop)); + animationInProgress = true; + docContent.animate({ + scrollTop: pos + dcScrTop - dcOffset + },Math.max(50,Math.min(500,dist)),function() { + animationInProgress=false; + if (anchor.parent().attr('class')=='memItemLeft') { + let rows = $('.memberdecls tr[class$="'+hashValue()+'"]'); + glowEffect(rows.children(),300); // member without details + } else if (anchor.parent().attr('class')=='fieldname') { + glowEffect(anchor.parent().parent(),1000); // enum value + } else if (anchor.parent().attr('class')=='fieldtype') { + glowEffect(anchor.parent().parent(),1000); // struct field + } else if (anchor.parent().is(":header")) { + glowEffect(anchor.parent(),1000); // section header + } else { + glowEffect(anchor.next(),1000); // normal member + } + }); + } + } + + const newNode = function(o, po, text, link, childrenData, lastNode) { + const node = { + children : [], + childrenData : childrenData, + depth : po.depth + 1, + relpath : po.relpath, + isLast : lastNode, + li : document.createElement("li"), + parentNode : po, + itemDiv : document.createElement("div"), + labelSpan : document.createElement("span"), + label : document.createTextNode(text), + expanded : false, + childrenUL : null, + getChildrenUL : function() { + if (!this.childrenUL) { + this.childrenUL = document.createElement("ul"); + this.childrenUL.className = "children_ul"; + this.childrenUL.style.display = "none"; + this.li.appendChild(node.childrenUL); + } + return node.childrenUL; + }, + }; + + node.itemDiv.className = "item"; + node.labelSpan.className = "label"; + createIndent(o,node.itemDiv,node); + node.itemDiv.appendChild(node.labelSpan); + node.li.appendChild(node.itemDiv); + + const a = document.createElement("a"); + node.labelSpan.appendChild(a); + po.getChildrenUL().appendChild(node.li); + a.appendChild(node.label); + if (link) { + let url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + link = url; + } else { + url = node.relpath+link; + } + a.className = stripPath(link.replace('#',':')); + if (link.indexOf('#')!=-1) { + const aname = '#'+link.split('#')[1]; + const srcPage = stripPath(pathName()); + const targetPage = stripPath(link.split('#')[0]); + a.href = srcPage!=targetPage ? url : aname; + a.onclick = function() { + storeLink(link); + aPPar = $(a).parent().parent(); + if (!aPPar.hasClass('selected')) { + $('.item').removeClass('selected'); + $('.item').removeAttr('id'); + aPPar.addClass('selected'); + aPPar.attr('id','selected'); + } + const anchor = $(aname); + gotoAnchor(anchor,aname); + }; + } else { + a.href = url; + a.onclick = () => storeLink(link); + } + } else if (childrenData != null) { + a.className = "nolink"; + a.href = "javascript:void(0)"; + a.onclick = node.expandToggle.onclick; + } + return node; + } + + const showRoot = function() { + const headerHeight = $("#top").height(); + const footerHeight = $("#nav-path").height(); + const windowHeight = $(window).height() - headerHeight - footerHeight; + (function() { // retry until we can scroll to the selected item + try { + const navtree=$('#nav-tree'); + navtree.scrollTo('#selected',100,{offset:-windowHeight/2}); + } catch (err) { + setTimeout(arguments.callee, 0); + } + })(); + } + + const expandNode = function(o, node, imm, setFocus) { + if (node.childrenData && !node.expanded) { + if (typeof(node.childrenData)==='string') { + const varName = node.childrenData; + getScript(node.relpath+varName,function() { + node.childrenData = getData(varName); + expandNode(o, node, imm, setFocus); + }); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).slideDown("fast"); + node.plus_img.innerHTML = ARROW_DOWN; + node.expanded = true; + if (setFocus) { + $(node.expandToggle).focus(); + } + } + } + } + + const glowEffect = function(n,duration) { + n.addClass('glow').delay(duration).queue(function(next) { + $(this).removeClass('glow');next(); + }); + } + + const highlightAnchor = function() { + const aname = hashUrl(); + const anchor = $(aname); + gotoAnchor(anchor,aname); + } + + const selectAndHighlight = function(hash,n) { + let a; + if (hash) { + const link=stripPath(pathName())+':'+hash.substring(1); + a=$('.item a[class$="'+link+'"]'); + } + if (a && a.length) { + a.parent().parent().addClass('selected'); + a.parent().parent().attr('id','selected'); + highlightAnchor(); + } else if (n) { + $(n.itemDiv).addClass('selected'); + $(n.itemDiv).attr('id','selected'); + } + let topOffset=5; + if ($('#nav-tree-contents .item:first').hasClass('selected')) { + topOffset+=25; + } + $('#nav-sync').css('top',topOffset+'px'); + showRoot(); + } + + const showNode = function(o, node, index, hash) { + if (node && node.childrenData) { + if (typeof(node.childrenData)==='string') { + const varName = node.childrenData; + getScript(node.relpath+varName,function() { + node.childrenData = getData(varName); + showNode(o,node,index,hash); + }); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).css({'display':'block'}); + node.plus_img.innerHTML = ARROW_DOWN; + node.expanded = true; + const n = node.children[o.breadcrumbs[index]]; + if (index+11 ? '#'+parts[1].replace(/[^\w-]/g,'') : ''; + } + if (hash.match(/^#l\d+$/)) { + const anchor=$('a[name='+hash.substring(1)+']'); + glowEffect(anchor.parent(),1000); // line number + hash=''; // strip line number anchors + } + const url=root+hash; + let i=-1; + while (NAVTREEINDEX[i+1]<=url) i++; + if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath) + } else { + getScript(relpath+'navtreeindex'+i,function() { + navTreeSubIndices[i] = eval('NAVTREEINDEX'+i); + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath); + } + }); + } + } + + const showSyncOff = function(n,relpath) { + n.html(''); + } + + const showSyncOn = function(n,relpath) { + n.html(''); + } + + const o = { + toroot : toroot, + node : { + childrenData : NAVTREE, + children : [], + childrenUL : document.createElement("ul"), + getChildrenUL : function() { return this.childrenUL }, + li : document.getElementById("nav-tree-contents"), + depth : 0, + relpath : relpath, + expanded : false, + isLast : true, + plus_img : document.createElement("span"), + }, + }; + o.node.li.appendChild(o.node.childrenUL); + o.node.plus_img.className = 'arrow'; + o.node.plus_img.innerHTML = ARROW_RIGHT; + + const navSync = $('#nav-sync'); + if (cachedLink()) { + showSyncOff(navSync,relpath); + navSync.removeClass('sync'); + } else { + showSyncOn(navSync,relpath); + } + + navSync.click(() => { + const navSync = $('#nav-sync'); + if (navSync.hasClass('sync')) { + navSync.removeClass('sync'); + showSyncOff(navSync,relpath); + storeLink(stripPath2(pathName())+hashUrl()); + } else { + navSync.addClass('sync'); + showSyncOn(navSync,relpath); + deleteLink(); + } + }); + + navTo(o,toroot,hashUrl(),relpath); + showRoot(); + + $(window).bind('hashchange', () => { + if (!animationInProgress) { + if (window.location.hash && window.location.hash.length>1) { + let a; + if ($(location).attr('hash')) { + const clslink=stripPath(pathName())+':'+hashValue(); + a=$('.item a[class$="'+clslink.replace(/ + + + + + + + + diff --git a/docs/plusd.svg b/docs/plusd.svg new file mode 100644 index 0000000..0c65bfe --- /dev/null +++ b/docs/plusd.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/resize.js b/docs/resize.js new file mode 100644 index 0000000..178d03b --- /dev/null +++ b/docs/resize.js @@ -0,0 +1,147 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ + +function initResizable(treeview) { + let sidenav,navtree,content,header,footer,barWidth=6; + const RESIZE_COOKIE_NAME = ''+'width'; + + function resizeWidth() { + const sidenavWidth = $(sidenav).outerWidth(); + content.css({marginLeft:parseInt(sidenavWidth)+"px"}); + if (typeof page_layout!=='undefined' && page_layout==1) { + footer.css({marginLeft:parseInt(sidenavWidth)+"px"}); + } + Cookie.writeSetting(RESIZE_COOKIE_NAME,sidenavWidth-barWidth); + } + + function restoreWidth(navWidth) { + content.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); + if (typeof page_layout!=='undefined' && page_layout==1) { + footer.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); + } + sidenav.css({width:navWidth + "px"}); + } + + function resizeHeight(treeview) { + const headerHeight = header.outerHeight(); + const windowHeight = $(window).height(); + let contentHeight; + if (treeview) + { + const footerHeight = footer.outerHeight(); + let navtreeHeight,sideNavHeight; + if (typeof page_layout==='undefined' || page_layout==0) { /* DISABLE_INDEX=NO */ + contentHeight = windowHeight - headerHeight - footerHeight; + navtreeHeight = contentHeight; + sideNavHeight = contentHeight; + } else if (page_layout==1) { /* DISABLE_INDEX=YES */ + contentHeight = windowHeight - footerHeight; + navtreeHeight = windowHeight - headerHeight; + sideNavHeight = windowHeight; + } + navtree.css({height:navtreeHeight + "px"}); + sidenav.css({height:sideNavHeight + "px"}); + } + else + { + contentHeight = windowHeight - headerHeight; + } + content.css({height:contentHeight + "px"}); + if (location.hash.slice(1)) { + (document.getElementById(location.hash.slice(1))||document.body).scrollIntoView(); + } + } + + function collapseExpand() { + let newWidth; + if (sidenav.width()>0) { + newWidth=0; + } else { + const width = Cookie.readSetting(RESIZE_COOKIE_NAME,250); + newWidth = (width>250 && width<$(window).width()) ? width : 250; + } + restoreWidth(newWidth); + const sidenavWidth = $(sidenav).outerWidth(); + Cookie.writeSetting(RESIZE_COOKIE_NAME,sidenavWidth-barWidth); + } + + header = $("#top"); + content = $("#doc-content"); + footer = $("#nav-path"); + sidenav = $("#side-nav"); + if (!treeview) { +// title = $("#titlearea"); +// titleH = $(title).height(); +// let animating = false; +// content.on("scroll", function() { +// slideOpts = { duration: 200, +// step: function() { +// contentHeight = $(window).height() - header.outerHeight(); +// content.css({ height : contentHeight + "px" }); +// }, +// done: function() { animating=false; } +// }; +// if (content.scrollTop()>titleH && title.css('display')!='none' && !animating) { +// title.slideUp(slideOpts); +// animating=true; +// } else if (content.scrollTop()<=titleH && title.css('display')=='none' && !animating) { +// title.slideDown(slideOpts); +// animating=true; +// } +// }); + } else { + navtree = $("#nav-tree"); + $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } }); + $(sidenav).resizable({ minWidth: 0 }); + } + $(window).resize(function() { resizeHeight(treeview); }); + if (treeview) + { + const device = navigator.userAgent.toLowerCase(); + const touch_device = device.match(/(iphone|ipod|ipad|android)/); + if (touch_device) { /* wider split bar for touch only devices */ + $(sidenav).css({ paddingRight:'20px' }); + $('.ui-resizable-e').css({ width:'20px' }); + $('#nav-sync').css({ right:'34px' }); + barWidth=20; + } + const width = Cookie.readSetting(RESIZE_COOKIE_NAME,250); + if (width) { restoreWidth(width); } else { resizeWidth(); } + } + resizeHeight(treeview); + const url = location.href; + const i=url.indexOf("#"); + if (i>=0) window.location.hash=url.substr(i); + const _preventDefault = function(evt) { evt.preventDefault(); }; + if (treeview) + { + $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault); + $(".ui-resizable-handle").dblclick(collapseExpand); + // workaround for firefox + $("body").css({overflow: "hidden"}); + } + $(window).on('load',function() { resizeHeight(treeview); }); +} +/* @license-end */ diff --git a/docs/search/all_0.js b/docs/search/all_0.js new file mode 100644 index 0000000..75afbbc --- /dev/null +++ b/docs/search/all_0.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['basenorm_0',['baseNorm',['../classSignal.html#a1704e3bae899be60d372210d11982f90',1,'Signal']]], + ['basetype_1',['BaseType',['../classSignal.html#aa934b4d02897e0f6ec49b81496b296de',1,'Signal']]], + ['basezero_2',['baseZero',['../classSignal.html#a57e630e4058ed6ce26c8eb8f6ae25512',1,'Signal']]] +]; diff --git a/docs/search/all_1.js b/docs/search/all_1.js new file mode 100644 index 0000000..3c805ba --- /dev/null +++ b/docs/search/all_1.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['closest_0',['CLOSEST',['../Signal_8h.html#a9943b8bd1a1a1cdb774553d44c12cde4a901e715f86c693ccd2851e8c0b64cca3',1,'Signal.h']]], + ['cpp_20library_20documentation_1',['signals-cpp Library Documentation',['../index.html',1,'']]], + ['cubic_5fspline_2',['CUBIC_SPLINE',['../Signal_8h.html#aa0081e804011c551ea0f4a596a64b284a13480ea7779c90806a9fa4ef70322ebc',1,'Signal.h']]] +]; diff --git a/docs/search/all_10.js b/docs/search/all_10.js new file mode 100644 index 0000000..ee2aa3f --- /dev/null +++ b/docs/search/all_10.js @@ -0,0 +1,25 @@ +var searchData= +[ + ['t_0',['t',['../structSignal_1_1SignalDP.html#aa8996bb75e9ef7533e2ec8987221a926',1,'Signal::SignalDP::t'],['../classModel.html#a7661852411b9ffd59240d5d5ca0e4dd3',1,'Model::t()'],['../classSignal.html#a181510d087510590fe765d424c40c2e5',1,'Signal::t() const']]], + ['tangentnorm_1',['tangentNorm',['../classSignal.html#a9bd584cd80363b7aab134ddecf2ef9fa',1,'Signal']]], + ['tangenttype_2',['TangentType',['../classSignal.html#ac80237cfc740ac76ca54c5a980767f23',1,'Signal']]], + ['tangentzero_3',['tangentZero',['../classSignal.html#a00fa5d541388d26197c3d2426cfcd609',1,'Signal']]], + ['translational1dofmodel_4',['Translational1DOFModel',['../Models_8h.html#af9ad4901a092a7e81f8b092d1dbcf5f5',1,'Models.h']]], + ['translational1dofmodeld_5',['Translational1DOFModeld',['../Models_8h.html#ab405c6c48aa770f74c7e942302b956c5',1,'Models.h']]], + ['translational2dofmodel_6',['Translational2DOFModel',['../Models_8h.html#aee5681b9331f5514938a77680e9e1162',1,'Models.h']]], + ['translational2dofmodeld_7',['Translational2DOFModeld',['../Models_8h.html#a7768cd6b33a5d94a677357664052d096',1,'Models.h']]], + ['translational3dofmodel_8',['Translational3DOFModel',['../Models_8h.html#a3d0d9bd06d48c1d0022090b040895a62',1,'Models.h']]], + ['translational3dofmodeld_9',['Translational3DOFModeld',['../Models_8h.html#a3c501b1f5d946eb9aa36b92d2ec611c5',1,'Models.h']]], + ['translationaldynamics1dof_10',['TranslationalDynamics1DOF',['../Models_8h.html#aac436ed3df206f07f93110e3daffe773',1,'Models.h']]], + ['translationaldynamics2dof_11',['TranslationalDynamics2DOF',['../Models_8h.html#ae3889fdff8dd169aef62fcdf6340e0e1',1,'Models.h']]], + ['translationaldynamics3dof_12',['TranslationalDynamics3DOF',['../Models_8h.html#ad1ba77eac61f5da29df59b8b4b0d7a0d',1,'Models.h']]], + ['translationaldynamicsbase_13',['TranslationalDynamicsBase',['../structTranslationalDynamicsBase.html',1,'']]], + ['translationaldynamicsbase_3c_20scalarsignal_3c_20t_20_3e_2c_20scalarstatesignal_3c_20t_20_3e_2c_20scalarstatesignal_3c_20t_20_3e_2c_201_2c_20rigidbodyparams1d_20_3e_14',['TranslationalDynamicsBase< ScalarSignal< T >, ScalarStateSignal< T >, ScalarStateSignal< T >, 1, RigidBodyParams1D >',['../structTranslationalDynamicsBase.html',1,'']]], + ['translationaldynamicsbase_3c_20vector2signal_3c_20t_20_3e_2c_20vector2statesignal_3c_20t_20_3e_2c_20vector2statesignal_3c_20t_20_3e_2c_202_2c_20rigidbodyparams2d_20_3e_15',['TranslationalDynamicsBase< Vector2Signal< T >, Vector2StateSignal< T >, Vector2StateSignal< T >, 2, RigidBodyParams2D >',['../structTranslationalDynamicsBase.html',1,'']]], + ['translationaldynamicsbase_3c_20vector3signal_3c_20t_20_3e_2c_20vector3statesignal_3c_20t_20_3e_2c_20vector3statesignal_3c_20t_20_3e_2c_203_2c_20rigidbodyparams3d_20_3e_16',['TranslationalDynamicsBase< Vector3Signal< T >, Vector3StateSignal< T >, Vector3StateSignal< T >, 3, RigidBodyParams3D >',['../structTranslationalDynamicsBase.html',1,'']]], + ['trapezoidalintegrator_17',['TrapezoidalIntegrator',['../Integration_8h.html#a123a7b32e66b7e1acc68d61a997abc96',1,'Integration.h']]], + ['trapezoidalintegratorspec_18',['TrapezoidalIntegratorSpec',['../structTrapezoidalIntegratorSpec.html',1,'']]], + ['twist_19',['twist',['../structState.html#a3f5fb4275701e71a56d2fa1fb8d54080',1,'State']]], + ['twisttype_20',['TwistType',['../structState.html#ab58b6e2fe6ea3c2777c5a8a92f6665a1',1,'State']]], + ['type_21',['Type',['../structScalarSignalSpec.html#a4a319643aeb76b94214f8b41d64d5402',1,'ScalarSignalSpec::Type'],['../structVectorSignalSpec.html#ac21d15d01635665373eaf23b62f3d440',1,'VectorSignalSpec::Type'],['../structManifoldSignalSpec.html#a7e215846bd092774400152872700ea9c',1,'ManifoldSignalSpec::Type'],['../structScalarStateSignalSpec.html#a7ae52069e3aafdb7c45b14168b1ad11b',1,'ScalarStateSignalSpec::Type'],['../structVectorStateSignalSpec.html#a3994948f467b39ca2dcd77d220a8cf3a',1,'VectorStateSignalSpec::Type'],['../structManifoldStateSignalSpec.html#aef8d411c012125303e1faa1d66b35c1c',1,'ManifoldStateSignalSpec::Type']]] +]; diff --git a/docs/search/all_11.js b/docs/search/all_11.js new file mode 100644 index 0000000..52468de --- /dev/null +++ b/docs/search/all_11.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['update_0',['update',['../structTranslationalDynamicsBase.html#a3f1e02018ec014fe38ba851dc0d5b2ed',1,'TranslationalDynamicsBase::update()'],['../structRotationalDynamics1DOF.html#a433f042fafdcff07948eb952e47f13b6',1,'RotationalDynamics1DOF::update()'],['../structRotationalDynamics3DOF.html#aee5958f7949268650c00097b2a871252',1,'RotationalDynamics3DOF::update()'],['../structRigidBodyDynamics3DOF.html#acafe68f9e9ea78f54bc70d64a1b39d9c',1,'RigidBodyDynamics3DOF::update()'],['../structRigidBodyDynamics6DOF.html#ae0d9bb27da7f804a1f8dc4923546a95d',1,'RigidBodyDynamics6DOF::update()'],['../classSignal.html#aaa355cde30a3aed048de084301395daf',1,'Signal::update(const double &_t, const BaseType &_x, bool insertHistory=false)'],['../classSignal.html#a1bcc4ff1ca1532a52fbe954e449324bc',1,'Signal::update(const double &_t, const BaseType &_x, const TangentType &_xdot, bool insertHistory=false)'],['../classSignal.html#ac1985c5c74318ac8d991c847090bb530',1,'Signal::update(const std::vector< double > &_tHistory, const std::vector< BaseType > &_xHistory)'],['../classSignal.html#ab28abd49a8bba19967a565ae1b988e5a',1,'Signal::update(const std::vector< double > &_tHistory, const std::vector< BaseType > &_xHistory, const std::vector< TangentType > &_xdotHistory)']]], + ['utils_2eh_1',['Utils.h',['../Utils_8h.html',1,'']]] +]; diff --git a/docs/search/all_12.js b/docs/search/all_12.js new file mode 100644 index 0000000..5422add --- /dev/null +++ b/docs/search/all_12.js @@ -0,0 +1,68 @@ +var searchData= +[ + ['vector10dsignal_0',['Vector10dSignal',['../Signal_8h.html#a75b25f1facc38a02d21c155ec05655cc',1,'Signal.h']]], + ['vector10dstate_1',['Vector10dState',['../State_8h.html#ac15f89e56010b705e5a2e0d9c3c50a6d',1,'State.h']]], + ['vector10dstatesignal_2',['Vector10dStateSignal',['../State_8h.html#af22d4a3a8e0b033da1e86fbb86d62025',1,'State.h']]], + ['vector10signal_3',['Vector10Signal',['../Signal_8h.html#acda8904322955c5f969f290bf1a42595',1,'Signal.h']]], + ['vector10state_4',['Vector10State',['../State_8h.html#ae80b1d8972029135f755109d7c9cefcc',1,'State.h']]], + ['vector10statesignal_5',['Vector10StateSignal',['../State_8h.html#a1317973b896b1e34cafa85ed9476facc',1,'State.h']]], + ['vector1dsignal_6',['Vector1dSignal',['../Signal_8h.html#a22bc2b41e336fe6237cfa41ac7b57d0b',1,'Signal.h']]], + ['vector1dstate_7',['Vector1dState',['../State_8h.html#a1fccb71007e0830388d5c21c85e3344e',1,'State.h']]], + ['vector1dstatesignal_8',['Vector1dStateSignal',['../State_8h.html#a62568e2f3d59e51a60168009aa1a54bf',1,'State.h']]], + ['vector1signal_9',['Vector1Signal',['../Signal_8h.html#a532b7bae92d23faa5962b50fab59ee1a',1,'Signal.h']]], + ['vector1state_10',['Vector1State',['../State_8h.html#abc0badbf8fbf6b0c2669496da71cda67',1,'State.h']]], + ['vector1statesignal_11',['Vector1StateSignal',['../State_8h.html#ab5090b8cb9c45dbe82c31d42d73d785e',1,'State.h']]], + ['vector2dsignal_12',['Vector2dSignal',['../Signal_8h.html#a718e737386d2321f3e31df01ffe2fd61',1,'Signal.h']]], + ['vector2dstate_13',['Vector2dState',['../State_8h.html#ae54c0630e02ee333a48fe6531d00e071',1,'State.h']]], + ['vector2dstatesignal_14',['Vector2dStateSignal',['../State_8h.html#a100a0048450baf6c0d0c2f444eccaf8a',1,'State.h']]], + ['vector2signal_15',['Vector2Signal',['../Signal_8h.html#af4c2088cbc0c8f8c95be6f22e990d0d1',1,'Signal.h']]], + ['vector2state_16',['Vector2State',['../State_8h.html#a7f9f341c30868667e4855dbb3092e78d',1,'State.h']]], + ['vector2statesignal_17',['Vector2StateSignal',['../State_8h.html#a8733dc322548a85201a19ddea01ea50e',1,'State.h']]], + ['vector3dsignal_18',['Vector3dSignal',['../Signal_8h.html#addff0c3095fce02a8ae3d8669292ea8a',1,'Signal.h']]], + ['vector3dstate_19',['Vector3dState',['../State_8h.html#a0e9c381070552b28ffb2683b44e7b5a3',1,'State.h']]], + ['vector3dstatesignal_20',['Vector3dStateSignal',['../State_8h.html#a1e20c96461ce98997ef1a3c0ab7b6668',1,'State.h']]], + ['vector3signal_21',['Vector3Signal',['../Signal_8h.html#a59c30838434bb9eabab59a54a0dceb9f',1,'Signal.h']]], + ['vector3state_22',['Vector3State',['../State_8h.html#a76ad6fc3428b4c484c36cb9b24db72f0',1,'State.h']]], + ['vector3statesignal_23',['Vector3StateSignal',['../State_8h.html#ae29a8cc7a8cfe9179c9befa2d9cf217d',1,'State.h']]], + ['vector4dsignal_24',['Vector4dSignal',['../Signal_8h.html#a785560e5ddb26fcf9edc2eb9f34e7ec8',1,'Signal.h']]], + ['vector4dstate_25',['Vector4dState',['../State_8h.html#a8add6ebebc487c439430cb69d2892bbf',1,'State.h']]], + ['vector4dstatesignal_26',['Vector4dStateSignal',['../State_8h.html#a9013e9f17201a38fdb10648f14ea5c95',1,'State.h']]], + ['vector4signal_27',['Vector4Signal',['../Signal_8h.html#a04b5a6ff0c189cb66f0e3137b1362c30',1,'Signal.h']]], + ['vector4state_28',['Vector4State',['../State_8h.html#a7123f01cd05975f377e8ff9e6ee1a06a',1,'State.h']]], + ['vector4statesignal_29',['Vector4StateSignal',['../State_8h.html#a5c328c48320c78070fff7e7982b311e9',1,'State.h']]], + ['vector5dsignal_30',['Vector5dSignal',['../Signal_8h.html#ad0b807d45bcfe07cc9a2f54648dd4821',1,'Signal.h']]], + ['vector5dstate_31',['Vector5dState',['../State_8h.html#a45d6b402de0ba422a815e117b084dde3',1,'State.h']]], + ['vector5dstatesignal_32',['Vector5dStateSignal',['../State_8h.html#a7a8f2f6fd14951fd2fe337c952b0cb74',1,'State.h']]], + ['vector5signal_33',['Vector5Signal',['../Signal_8h.html#a9f0b242918cfdc4b6eaecdeb6574b6cb',1,'Signal.h']]], + ['vector5state_34',['Vector5State',['../State_8h.html#ab5ce046688e9436f8b33892d42309eee',1,'State.h']]], + ['vector5statesignal_35',['Vector5StateSignal',['../State_8h.html#a4af99c5e283d22f79b5556ff27474965',1,'State.h']]], + ['vector6dsignal_36',['Vector6dSignal',['../Signal_8h.html#acb50cf2886559fdfc3aba4ee722f511a',1,'Signal.h']]], + ['vector6dstate_37',['Vector6dState',['../State_8h.html#af07e3586e98f931acac5d0ffd9b17cee',1,'State.h']]], + ['vector6dstatesignal_38',['Vector6dStateSignal',['../State_8h.html#a9df3c94eca5a8200ce96b3221995c46b',1,'State.h']]], + ['vector6signal_39',['Vector6Signal',['../Signal_8h.html#a4da3e39a6224769606055a56f1508e6b',1,'Signal.h']]], + ['vector6state_40',['Vector6State',['../State_8h.html#a5b9da17f6286f92692b0004ee4966bc9',1,'State.h']]], + ['vector6statesignal_41',['Vector6StateSignal',['../State_8h.html#a10d976072ce9070523cb22605d2ab584',1,'State.h']]], + ['vector7dsignal_42',['Vector7dSignal',['../Signal_8h.html#afea76be78e2b329344fb610a62c421e9',1,'Signal.h']]], + ['vector7dstate_43',['Vector7dState',['../State_8h.html#ad58fbc5cd721c46fe64d385cc3317380',1,'State.h']]], + ['vector7dstatesignal_44',['Vector7dStateSignal',['../State_8h.html#a901bd18eae58b6365b68227b38b8a6e1',1,'State.h']]], + ['vector7signal_45',['Vector7Signal',['../Signal_8h.html#ac71cd26f6afca210f51cc394d520779b',1,'Signal.h']]], + ['vector7state_46',['Vector7State',['../State_8h.html#a78b7e325313bda6591c62d59c25b2009',1,'State.h']]], + ['vector7statesignal_47',['Vector7StateSignal',['../State_8h.html#a0e0d0803fd68f9e69ed39bed579c0a8c',1,'State.h']]], + ['vector8dsignal_48',['Vector8dSignal',['../Signal_8h.html#ad2214d5fb3267b191128fcccb515448b',1,'Signal.h']]], + ['vector8dstate_49',['Vector8dState',['../State_8h.html#acfdf1934f5783c1dcab2987c242ef8af',1,'State.h']]], + ['vector8dstatesignal_50',['Vector8dStateSignal',['../State_8h.html#a25968e689d254876cbae1ff352b3f184',1,'State.h']]], + ['vector8signal_51',['Vector8Signal',['../Signal_8h.html#a6fe111909e599c7d732507ef08213e06',1,'Signal.h']]], + ['vector8state_52',['Vector8State',['../State_8h.html#ae8dd0ef45fa5734f0e752551ba62e863',1,'State.h']]], + ['vector8statesignal_53',['Vector8StateSignal',['../State_8h.html#a9b199ed43adea9fec91e40f9bab9457f',1,'State.h']]], + ['vector9dsignal_54',['Vector9dSignal',['../Signal_8h.html#acd349d949f45a7bce633414d05043cc3',1,'Signal.h']]], + ['vector9dstate_55',['Vector9dState',['../State_8h.html#a865c1f4de96010d38ee17edc48d6c611',1,'State.h']]], + ['vector9dstatesignal_56',['Vector9dStateSignal',['../State_8h.html#a0237ae6ced288b7b3853654cd4ce796c',1,'State.h']]], + ['vector9signal_57',['Vector9Signal',['../Signal_8h.html#ae78698ceb51c16ea2ffea1ea2b5507e3',1,'Signal.h']]], + ['vector9state_58',['Vector9State',['../State_8h.html#af1297813c5b5754edb4cf75ca0875849',1,'State.h']]], + ['vector9statesignal_59',['Vector9StateSignal',['../State_8h.html#a9ab7680e24d1538be50e761b8a8ecb21',1,'State.h']]], + ['vectorsignal_60',['VectorSignal',['../Signal_8h.html#a1d966a75102d98f8bc945641836386b8',1,'Signal.h']]], + ['vectorsignalspec_61',['VectorSignalSpec',['../structVectorSignalSpec.html',1,'']]], + ['vectorstatesignal_62',['VectorStateSignal',['../State_8h.html#aedd5365cce1e7570480adcb6fc9bc9a3',1,'State.h']]], + ['vectorstatesignalspec_63',['VectorStateSignalSpec',['../structVectorStateSignalSpec.html',1,'']]], + ['vectorstatetype_64',['VectorStateType',['../State_8h.html#a60d0230d5788084bb8f559f4561d4d96',1,'State.h']]] +]; diff --git a/docs/search/all_13.js b/docs/search/all_13.js new file mode 100644 index 0000000..7da0625 --- /dev/null +++ b/docs/search/all_13.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['x_0',['x',['../classModel.html#abfe8871b9f0eac35c76af3f5cfcdea35',1,'Model::x'],['../structSignal_1_1SignalDP.html#a728647aa9ae18e89087f1bc22b4a405a',1,'Signal::SignalDP::x']]], + ['xdot_1',['xdot',['../classModel.html#ab8bb4819a03ed642326295c28bea6fa7',1,'Model::xdot'],['../structSignal_1_1SignalDP.html#a250999409c388f359351b77d38807e49',1,'Signal::SignalDP::xdot']]] +]; diff --git a/docs/search/all_14.js b/docs/search/all_14.js new file mode 100644 index 0000000..b6581c5 --- /dev/null +++ b/docs/search/all_14.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['zero_5forder_5fhold_0',['ZERO_ORDER_HOLD',['../Signal_8h.html#aa0081e804011c551ea0f4a596a64b284ad873f8ab97a3f6e892c8b834b23db574',1,'Signal.h']]], + ['zeros_1',['ZEROS',['../Signal_8h.html#a9943b8bd1a1a1cdb774553d44c12cde4a5d7341ec5879a7f47c5cb82c0fdf6b5f',1,'Signal.h']]], + ['zerotype_2',['ZeroType',['../structScalarSignalSpec.html#a941ad7ca4c5943d3b2244e1126d1febf',1,'ScalarSignalSpec::ZeroType()'],['../structVectorSignalSpec.html#a4c535f5d5b25faa7148f8719d74693fd',1,'VectorSignalSpec::ZeroType()'],['../structManifoldSignalSpec.html#a8927849586c7301e1158c03d5e16c868',1,'ManifoldSignalSpec::ZeroType()'],['../structScalarStateSignalSpec.html#a0dc57853395e3c57d6447a23ae513b91',1,'ScalarStateSignalSpec::ZeroType()'],['../structVectorStateSignalSpec.html#ae659b96e95497b25e711fab331037c21',1,'VectorStateSignalSpec::ZeroType()'],['../structManifoldStateSignalSpec.html#adca9f48f26d97f95b2083b9e55bb58cb',1,'ManifoldStateSignalSpec::ZeroType()']]] +]; diff --git a/docs/search/all_2.js b/docs/search/all_2.js new file mode 100644 index 0000000..50de28f --- /dev/null +++ b/docs/search/all_2.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['derivativemethod_0',['DerivativeMethod',['../Signal_8h.html#a35d05b0e727a39b86907d8669e9e1242',1,'Signal.h']]], + ['derivativemethod_1',['derivativeMethod',['../classSignal.html#af36a4cba809042e148ab6fe5e988acc7',1,'Signal']]], + ['dirty_2',['DIRTY',['../Signal_8h.html#a35d05b0e727a39b86907d8669e9e1242a6a4e132eb192a22c351397837d4c082c',1,'Signal.h']]], + ['documentation_3',['signals-cpp Library Documentation',['../index.html',1,'']]], + ['dot_4',['dot',['../classSignal.html#ad2f62804e18f2cb579a4f854f7381fb8',1,'Signal::dot() const'],['../classSignal.html#af622cbe01dc2d991914b66d748d67d82',1,'Signal::dot(const double &t) const'],['../classSignal.html#aa6d9afdff4e331b471d563b3af955907',1,'Signal::dot(const std::vector< double > &t) const']]], + ['dotsignal_5',['dotSignal',['../classSignal.html#ae4e987f1a142b689966bb81ac2f89180',1,'Signal']]] +]; diff --git a/docs/search/all_3.js b/docs/search/all_3.js new file mode 100644 index 0000000..b484a99 --- /dev/null +++ b/docs/search/all_3.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['eulerintegrator_0',['EulerIntegrator',['../Integration_8h.html#a0e36b47220a522ff9899d9624dd7c01b',1,'Integration.h']]], + ['eulerintegratorspec_1',['EulerIntegratorSpec',['../structEulerIntegratorSpec.html',1,'']]], + ['extrapolationmethod_2',['ExtrapolationMethod',['../Signal_8h.html#a9943b8bd1a1a1cdb774553d44c12cde4',1,'Signal.h']]], + ['extrapolationmethod_3',['extrapolationMethod',['../classSignal.html#a7fa918540db0facc1487238107c10432',1,'Signal']]] +]; diff --git a/docs/search/all_4.js b/docs/search/all_4.js new file mode 100644 index 0000000..f74ca2b --- /dev/null +++ b/docs/search/all_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['finite_5fdiff_0',['FINITE_DIFF',['../Signal_8h.html#a35d05b0e727a39b86907d8669e9e1242a31a5b438304c770230e3fbb9999c9c2e',1,'Signal.h']]] +]; diff --git a/docs/search/all_5.js b/docs/search/all_5.js new file mode 100644 index 0000000..443c6f6 --- /dev/null +++ b/docs/search/all_5.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['g_0',['g',['../structRigidBodyParams1D.html#a823d208bcbabadd83d3cc8f222973c95',1,'RigidBodyParams1D::g'],['../structRigidBodyParams2D.html#ab212f53241edb1bf232499a6ba963258',1,'RigidBodyParams2D::g'],['../structRigidBodyParams3D.html#a87b9c6a467ebcd6805a1d9419e6149d1',1,'RigidBodyParams3D::g']]], + ['gettimedelta_1',['getTimeDelta',['../namespacesignal__utils.html#ad7667542f893604d059a5d0022d2890c',1,'signal_utils']]] +]; diff --git a/docs/search/all_6.js b/docs/search/all_6.js new file mode 100644 index 0000000..44dcb2b --- /dev/null +++ b/docs/search/all_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['hasparams_0',['hasParams',['../classModel.html#a4f059d658bfda1665bf44a36b7aaf8e5',1,'Model']]] +]; diff --git a/docs/search/all_7.js b/docs/search/all_7.js new file mode 100644 index 0000000..ea900e3 --- /dev/null +++ b/docs/search/all_7.js @@ -0,0 +1,16 @@ +var searchData= +[ + ['identity_0',['identity',['../structState.html#a035f1f7193895463743b8ee58d75634f',1,'State']]], + ['inputsignaltype_1',['InputSignalType',['../classModel.html#ac990dd4740b30e4477bca86fc6172970',1,'Model::InputSignalType'],['../structTranslationalDynamicsBase.html#aac403e4db54adf389b8f1fa3700f6f6a',1,'TranslationalDynamicsBase::InputSignalType'],['../structRotationalDynamics1DOF.html#a80b5f730e292fda15bdcf1e8b96fe02e',1,'RotationalDynamics1DOF::InputSignalType'],['../structRotationalDynamics3DOF.html#aac317f9992071217ce644f6b9ccd8763',1,'RotationalDynamics3DOF::InputSignalType'],['../structRigidBodyDynamics3DOF.html#a4341d5e4a676e15edc8f8faafef5431a',1,'RigidBodyDynamics3DOF::InputSignalType'],['../structRigidBodyDynamics6DOF.html#a8927301269f2ce616317819c769b9364',1,'RigidBodyDynamics6DOF::InputSignalType']]], + ['inputtype_2',['InputType',['../structTranslationalDynamicsBase.html#ac57d5ab2e4cf3e6afe4a5ae550e858bb',1,'TranslationalDynamicsBase::InputType'],['../structRotationalDynamics1DOF.html#ad43b9ce6a37b65d677d01ceafe448259',1,'RotationalDynamics1DOF::InputType'],['../structRotationalDynamics3DOF.html#aafaa22bb44de6a10f6293f66da5c52e5',1,'RotationalDynamics3DOF::InputType'],['../structRigidBodyDynamics3DOF.html#aa90232643a368b1d4b9fd618ae8d57f7',1,'RigidBodyDynamics3DOF::InputType'],['../structRigidBodyDynamics6DOF.html#ac8780c98b59889f8329aa467a5b375fe',1,'RigidBodyDynamics6DOF::InputType']]], + ['installation_3',['Installation',['../index.html#install',1,'']]], + ['integrate_4',['integrate',['../structIntegrator.html#a263c92051eee31afcb6ddede4cc0f501',1,'Integrator::integrate(Signal< T, BaseSignalSpec, TangentSignalSpec > &xInt, const Signal< T, TangentSignalSpec, TangentSignalSpec > &x, const double &tf, const bool &insertIntoHistory=false)'],['../structIntegrator.html#a2e5ed56fea1f9dbe95b35d509432095b',1,'Integrator::integrate(Signal< T, BaseSignalSpec, TangentSignalSpec > &xInt, const Signal< T, TangentSignalSpec, TangentSignalSpec > &x, const double & > > > > > > > master tf, const double &dt, const bool &insertIntoHistory=false)'],['../structEulerIntegratorSpec.html#a29b0d734872c468790a910096e2146e7',1,'EulerIntegratorSpec::integrate()'],['../structTrapezoidalIntegratorSpec.html#a5527a1385da3194b2d2bbe2968a8526d',1,'TrapezoidalIntegratorSpec::integrate()'],['../structSimpsonIntegratorSpec.html#a6194da52902a391e4a9b251c05e6abf2',1,'SimpsonIntegratorSpec::integrate()']]], + ['integration_2eh_5',['Integration.h',['../Integration_8h.html',1,'']]], + ['integrator_6',['Integrator',['../structIntegrator.html',1,'']]], + ['integrator_3c_20eulerintegratorspec_20_3e_7',['Integrator< EulerIntegratorSpec >',['../structIntegrator.html',1,'']]], + ['integrator_3c_20simpsonintegratorspec_20_3e_8',['Integrator< SimpsonIntegratorSpec >',['../structIntegrator.html',1,'']]], + ['integrator_3c_20trapezoidalintegratorspec_20_3e_9',['Integrator< TrapezoidalIntegratorSpec >',['../structIntegrator.html',1,'']]], + ['interpolationmethod_10',['InterpolationMethod',['../Signal_8h.html#aa0081e804011c551ea0f4a596a64b284',1,'Signal.h']]], + ['interpolationmethod_11',['interpolationMethod',['../classSignal.html#ab0220db07b523eb34fe925f3c9b4152c',1,'Signal']]], + ['introduction_12',['Introduction',['../index.html#intro_sec',1,'']]] +]; diff --git a/docs/search/all_8.js b/docs/search/all_8.js new file mode 100644 index 0000000..b3681b6 --- /dev/null +++ b/docs/search/all_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['j_0',['J',['../structRigidBodyParams2D.html#aaefd836b5e013be87bc317aaba261a25',1,'RigidBodyParams2D::J'],['../structRigidBodyParams3D.html#a049fb70b2897579849053dfe2ea840e6',1,'RigidBodyParams3D::J']]] +]; diff --git a/docs/search/all_9.js b/docs/search/all_9.js new file mode 100644 index 0000000..ed0726f --- /dev/null +++ b/docs/search/all_9.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['library_20documentation_0',['signals-cpp Library Documentation',['../index.html',1,'']]], + ['linear_1',['LINEAR',['../Signal_8h.html#aa0081e804011c551ea0f4a596a64b284adc101ebf31c49c2d4b80b7c6f59f22cb',1,'Signal.h']]] +]; diff --git a/docs/search/all_a.js b/docs/search/all_a.js new file mode 100644 index 0000000..8310194 --- /dev/null +++ b/docs/search/all_a.js @@ -0,0 +1,31 @@ +var searchData= +[ + ['m_0',['m',['../structRigidBodyParams1D.html#a2f5a1c0e6320c14d72d0ff98ad979332',1,'RigidBodyParams1D::m'],['../structRigidBodyParams2D.html#a5e37a979a1a69333bcc5576d14397185',1,'RigidBodyParams2D::m'],['../structRigidBodyParams3D.html#acfa4c165c3278306dac4c0f51819e694',1,'RigidBodyParams3D::m']]], + ['make_5fintegrator_1',['MAKE_INTEGRATOR',['../Integration_8h.html#ac22028f5bd0a2ecee786d53a348e4073',1,'Integration.h']]], + ['make_5fmanif_5fsignal_2',['MAKE_MANIF_SIGNAL',['../Signal_8h.html#adf89e7a1e286d52fa755d04f0c087ea3',1,'Signal.h']]], + ['make_5fmanif_5fstates_3',['MAKE_MANIF_STATES',['../State_8h.html#a72800aeb486c7eebe1ab0fe8cfae6294',1,'State.h']]], + ['make_5fmodel_4',['MAKE_MODEL',['../Models_8h.html#a01637abb86bd3009fcff2cebc8a8735a',1,'Models.h']]], + ['make_5fvector_5fsignal_5',['MAKE_VECTOR_SIGNAL',['../Signal_8h.html#a45ef87a3bf4ac7938147e95995f76849',1,'Signal.h']]], + ['make_5fvector_5fstates_6',['MAKE_VECTOR_STATES',['../State_8h.html#aed0e3d5bd576a92c33ab3950c98a4e3b',1,'State.h']]], + ['manifoldsignal_7',['ManifoldSignal',['../Signal_8h.html#a5eaf1b0b203f44f01882c84ee274576d',1,'Signal.h']]], + ['manifoldsignalspec_8',['ManifoldSignalSpec',['../structManifoldSignalSpec.html',1,'']]], + ['manifoldstatesignal_9',['ManifoldStateSignal',['../State_8h.html#ac38fd6027be553185718aaa160bd7357',1,'State.h']]], + ['manifoldstatesignalspec_10',['ManifoldStateSignalSpec',['../structManifoldStateSignalSpec.html',1,'']]], + ['manifoldstatetype_11',['ManifoldStateType',['../State_8h.html#ae84c77b92399f1b8cc2cf14bb5b2d4ee',1,'State.h']]], + ['model_12',['Model',['../classModel.html',1,'Model< DynamicsType >'],['../classModel.html#a3cbccc00606661a35110dbe111af54ad',1,'Model::Model()']]], + ['model_3c_20rigidbodydynamics3dof_3c_20t_20_3e_20_3e_13',['Model< RigidBodyDynamics3DOF< T > >',['../classModel.html',1,'']]], + ['model_3c_20rigidbodydynamics3dof_3c_20t_20_3e_20_3e_3c_20double_20_3e_14',['Model< RigidBodyDynamics3DOF< T > >< double >',['../classModel.html',1,'']]], + ['model_3c_20rigidbodydynamics6dof_3c_20t_20_3e_20_3e_15',['Model< RigidBodyDynamics6DOF< T > >',['../classModel.html',1,'']]], + ['model_3c_20rigidbodydynamics6dof_3c_20t_20_3e_20_3e_3c_20double_20_3e_16',['Model< RigidBodyDynamics6DOF< T > >< double >',['../classModel.html',1,'']]], + ['model_3c_20rotationaldynamics1dof_3c_20t_20_3e_20_3e_17',['Model< RotationalDynamics1DOF< T > >',['../classModel.html',1,'']]], + ['model_3c_20rotationaldynamics1dof_3c_20t_20_3e_20_3e_3c_20double_20_3e_18',['Model< RotationalDynamics1DOF< T > >< double >',['../classModel.html',1,'']]], + ['model_3c_20rotationaldynamics3dof_3c_20t_20_3e_20_3e_19',['Model< RotationalDynamics3DOF< T > >',['../classModel.html',1,'']]], + ['model_3c_20rotationaldynamics3dof_3c_20t_20_3e_20_3e_3c_20double_20_3e_20',['Model< RotationalDynamics3DOF< T > >< double >',['../classModel.html',1,'']]], + ['model_3c_20translationaldynamics1dof_3c_20t_20_3e_20_3e_21',['Model< TranslationalDynamics1DOF< T > >',['../classModel.html',1,'']]], + ['model_3c_20translationaldynamics1dof_3c_20t_20_3e_20_3e_3c_20double_20_3e_22',['Model< TranslationalDynamics1DOF< T > >< double >',['../classModel.html',1,'']]], + ['model_3c_20translationaldynamics2dof_3c_20t_20_3e_20_3e_23',['Model< TranslationalDynamics2DOF< T > >',['../classModel.html',1,'']]], + ['model_3c_20translationaldynamics2dof_3c_20t_20_3e_20_3e_3c_20double_20_3e_24',['Model< TranslationalDynamics2DOF< T > >< double >',['../classModel.html',1,'']]], + ['model_3c_20translationaldynamics3dof_3c_20t_20_3e_20_3e_25',['Model< TranslationalDynamics3DOF< T > >',['../classModel.html',1,'']]], + ['model_3c_20translationaldynamics3dof_3c_20t_20_3e_20_3e_3c_20double_20_3e_26',['Model< TranslationalDynamics3DOF< T > >< double >',['../classModel.html',1,'']]], + ['models_2eh_27',['Models.h',['../Models_8h.html',1,'']]] +]; diff --git a/docs/search/all_b.js b/docs/search/all_b.js new file mode 100644 index 0000000..95ec220 --- /dev/null +++ b/docs/search/all_b.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['nans_0',['NANS',['../Signal_8h.html#a9943b8bd1a1a1cdb774553d44c12cde4af4517d0db561241ccfcf150e1629767f',1,'Signal.h']]], + ['nans_1',['nans',['../structState.html#a9e331e0ecbed1ab2a03d9b3e5a457426',1,'State']]], + ['nanstype_2',['NansType',['../structScalarSignalSpec.html#a040a016b3023c9df47a913599e9af1e2',1,'ScalarSignalSpec::NansType()'],['../structVectorSignalSpec.html#a3a25051bf64d2677fc511bd026b7f6a2',1,'VectorSignalSpec::NansType()'],['../structManifoldSignalSpec.html#a0da455b5ddb7a1636da0316970d159e3',1,'ManifoldSignalSpec::NansType()'],['../structScalarStateSignalSpec.html#ac3878dfd1b21706364c34d09e6da37ce',1,'ScalarStateSignalSpec::NansType()'],['../structVectorStateSignalSpec.html#a4729eec41bab8eb5ed7b45aa8272be4d',1,'VectorStateSignalSpec::NansType()'],['../structManifoldStateSignalSpec.html#a7542075f653a7e8fba76702499936b17',1,'ManifoldStateSignalSpec::NansType()']]], + ['norm_3',['Norm',['../structScalarSignalSpec.html#ae1b0ea2ca918c4e3f5d960077d819dc8',1,'ScalarSignalSpec::Norm()'],['../structVectorSignalSpec.html#aabd9be7dcb81956c93b1ccb3235a1596',1,'VectorSignalSpec::Norm()'],['../structManifoldSignalSpec.html#a7dd7e481e18e41fca7f4560ea11b38de',1,'ManifoldSignalSpec::Norm()'],['../structScalarStateSignalSpec.html#a20c150a5f8ea74ee791b70a0df4358c2',1,'ScalarStateSignalSpec::Norm()'],['../structVectorStateSignalSpec.html#aa700e9b352d009941c3a81261bbec332',1,'VectorStateSignalSpec::Norm()'],['../structManifoldStateSignalSpec.html#a1940016ea13e87980d659f5e7510cef1',1,'ManifoldStateSignalSpec::Norm()']]], + ['norm_4',['norm',['../structState.html#a718035815fa0c84ba5175b8f1e769bf5',1,'State']]] +]; diff --git a/docs/search/all_c.js b/docs/search/all_c.js new file mode 100644 index 0000000..417371b --- /dev/null +++ b/docs/search/all_c.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['operator_28_29_0',['operator()',['../classSignal.html#ac4530cf5ec12ce1c72067137a24faf85',1,'Signal::operator()() const'],['../classSignal.html#a77caf4746f6f644771952aa4fb6929a2',1,'Signal::operator()(const double &t) const'],['../classSignal.html#a4d1a040a13d70375a0d8341383538bb2',1,'Signal::operator()(const std::vector< double > &t) const']]], + ['operator_2a_1',['operator*',['../classSignal.html#a46553341b8f83ac7b49e168286018ba6',1,'Signal::operator*(const double &l, const Signal< S, BSS, TSS > &r)'],['../classSignal.html#a518ac0f150b0f53c1b573b36cf03624f',1,'Signal::operator*(const Signal< S, BSS, TSS > &l, const double &r)'],['../Signal_8h.html#abc6ca4ae108bb396ee8f8e6e49c72726',1,'operator*(const double &l, const Signal< T, BaseSignalSpec, TangentSignalSpec > &r): Signal.h'],['../Signal_8h.html#ae7c5ba17f9c292f3afb995d5ca9fca64',1,'operator*(const Signal< T, BaseSignalSpec, TangentSignalSpec > &l, const double &r): Signal.h'],['../State_8h.html#a795d2ff5c53f24de712134f27e197001',1,'operator*(const double &l, const State< T, PTS, PD, TTS, TD > &r): State.h'],['../State_8h.html#a7fa016cf853be0dbc882359bf5b637f9',1,'operator*(const State< T, PTS, PD, TTS, TD > &l, const double &r): State.h']]], + ['operator_2a_3d_2',['operator*=',['../structState.html#af76faa98cfc18fb81afb0c86f7a0aa75',1,'State']]], + ['operator_2b_3',['operator+',['../classSignal.html#afd50d7b54e0b26c913d6a7ee6decf858',1,'Signal::operator+()'],['../Signal_8h.html#a5a26056c1f1fd07a31f62ee2f6ef454b',1,'operator+(const Signal< T, BaseSignalSpec, TangentSignalSpec > &l, const Signal< T, TangentSignalSpec, TangentSignalSpec > &r): Signal.h'],['../State_8h.html#ac3e1ccc35f63b762bdd2c87478f8aad6',1,'operator+(const State< T, PTS, PD, TTS, TD > &l, const State< T, TTS, TD, TTS, TD > &r): State.h']]], + ['operator_2b_3d_4',['operator+=',['../structState.html#a7764970f0c29576eac07ab57c28261be',1,'State']]], + ['operator_2d_5',['operator-',['../classSignal.html#a52d14b1840b8c49bf2143a5979a73635',1,'Signal::operator-()'],['../Signal_8h.html#ab3fabcc65538dee9ff663a100e5f6f5b',1,'operator-(const Signal< T, BaseSignalSpec, TangentSignalSpec > &l, const Signal< T, BaseSignalSpec, TangentSignalSpec > &r): Signal.h'],['../State_8h.html#ad7ac1ecc8c925fbc991d2fa8ca50d4eb',1,'operator-(const State< T, PTS, PD, TTS, TD > &l, const State< T, PTS, PD, TTS, TD > &r): State.h']]], + ['operator_2f_6',['operator/',['../State_8h.html#af3ec1e7d28a9aac4e1cde4c7f3438128',1,'operator/(const ScalarStateType< T > &l, const double &r): State.h'],['../State_8h.html#a0f388e10603fb47846a1147ff5b6839d',1,'operator/(const VectorStateType< T, d > &l, const double &r): State.h']]], + ['operator_3c_3c_7',['operator<<',['../Signal_8h.html#a47318c97bced9b7ee828c94c1a4eeb29',1,'operator<<(std::ostream &os, const ScalarSignal< T > &x): Signal.h'],['../Signal_8h.html#aeb7f6d79d7e692981221b685c0863d54',1,'operator<<(std::ostream &os, const VectorSignal< T, d > &x): Signal.h'],['../Signal_8h.html#a6a76598b459ea2e14353617de437c808',1,'operator<<(std::ostream &os, const ManifoldSignal< T, ManifoldType, d > &x): Signal.h'],['../State_8h.html#ae29ac55bb38cdbd3acce109857e8e7a4',1,'operator<<(std::ostream &os, const ScalarStateType< T > &x): State.h'],['../State_8h.html#af1eca508289d2fcbdecd0cc136eed43d',1,'operator<<(std::ostream &os, const VectorStateType< T, d > &x): State.h'],['../State_8h.html#a494fe74e8c2fc3cd3f7e14886eeb7d6c',1,'operator<<(std::ostream &os, const ManifoldStateType< T, ManifoldType, PD, TD > &x): State.h'],['../State_8h.html#ab6fe6347b40120d5f45445b1fc6596f4',1,'operator<<(std::ostream &os, const ScalarStateSignal< T > &x): State.h'],['../State_8h.html#a1675ff98779b45e08f5d169056e26a4d',1,'operator<<(std::ostream &os, const VectorStateSignal< T, d > &x): State.h'],['../State_8h.html#a6c0f637d1f1980a2de56f125e9cf4ec1',1,'operator<<(std::ostream &os, const ManifoldStateSignal< T, ManifoldType, PD, TD > &x): State.h']]] +]; diff --git a/docs/search/all_d.js b/docs/search/all_d.js new file mode 100644 index 0000000..7631909 --- /dev/null +++ b/docs/search/all_d.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['paramstype_0',['ParamsType',['../classModel.html#aec20251d98505785fa51c52eb81dd3a2',1,'Model::ParamsType'],['../structTranslationalDynamicsBase.html#a4ba374f05dd1f5c4168adf3d6a15ef0c',1,'TranslationalDynamicsBase::ParamsType'],['../structRotationalDynamics1DOF.html#a38ff3a3028dc85817407d15587bf3451',1,'RotationalDynamics1DOF::ParamsType'],['../structRotationalDynamics3DOF.html#a2ac951c964726729410488c2bfcfa156',1,'RotationalDynamics3DOF::ParamsType'],['../structRigidBodyDynamics3DOF.html#afa1ade3cc027b78a2d2c65df867d52b0',1,'RigidBodyDynamics3DOF::ParamsType'],['../structRigidBodyDynamics6DOF.html#ad252337a912dcd1cfaa097d9c2d5814e',1,'RigidBodyDynamics6DOF::ParamsType']]], + ['pose_1',['pose',['../structState.html#a0a5874d4c3988770f5498c34ec508c34',1,'State']]], + ['posetype_2',['PoseType',['../structState.html#a31bd8aa44dff5f656b2b2057c8d63821',1,'State']]] +]; diff --git a/docs/search/all_e.js b/docs/search/all_e.js new file mode 100644 index 0000000..7919076 --- /dev/null +++ b/docs/search/all_e.js @@ -0,0 +1,19 @@ +var searchData= +[ + ['reset_0',['reset',['../classModel.html#a823536a9764d6a35cce173573ee62e90',1,'Model::reset()'],['../classSignal.html#ab50a583ce4790025215aa8e6af56e186',1,'Signal::reset()']]], + ['rigidbody3dofmodel_1',['RigidBody3DOFModel',['../Models_8h.html#ab084e172ef604e5975b5ff17e33d06ce',1,'Models.h']]], + ['rigidbody3dofmodeld_2',['RigidBody3DOFModeld',['../Models_8h.html#a46f2319cb159c02e4eb4801d850d54d9',1,'Models.h']]], + ['rigidbody6dofmodel_3',['RigidBody6DOFModel',['../Models_8h.html#a8f7d8c7063cb9c51d2bb794931db3a34',1,'Models.h']]], + ['rigidbody6dofmodeld_4',['RigidBody6DOFModeld',['../Models_8h.html#a40c2fc8d427c1bd6dfee02295ccb3cb6',1,'Models.h']]], + ['rigidbodydynamics3dof_5',['RigidBodyDynamics3DOF',['../structRigidBodyDynamics3DOF.html',1,'']]], + ['rigidbodydynamics6dof_6',['RigidBodyDynamics6DOF',['../structRigidBodyDynamics6DOF.html',1,'']]], + ['rigidbodyparams1d_7',['RigidBodyParams1D',['../structRigidBodyParams1D.html',1,'RigidBodyParams1D'],['../structRigidBodyParams1D.html#ab2b9c3eb89bcbf0ac06a33e95725e0eb',1,'RigidBodyParams1D::RigidBodyParams1D()']]], + ['rigidbodyparams2d_8',['RigidBodyParams2D',['../structRigidBodyParams2D.html',1,'RigidBodyParams2D'],['../structRigidBodyParams2D.html#a6febaa8c9f355105b908979da3dd1255',1,'RigidBodyParams2D::RigidBodyParams2D()']]], + ['rigidbodyparams3d_9',['RigidBodyParams3D',['../structRigidBodyParams3D.html',1,'RigidBodyParams3D'],['../structRigidBodyParams3D.html#a8aa76fea7a0790ead025bf79e767d0cf',1,'RigidBodyParams3D::RigidBodyParams3D()']]], + ['rotational1dofmodel_10',['Rotational1DOFModel',['../Models_8h.html#abc1d5223da3343a9537cc0a6f5abd239',1,'Models.h']]], + ['rotational1dofmodeld_11',['Rotational1DOFModeld',['../Models_8h.html#af9b104589a404874af160185cf8a725c',1,'Models.h']]], + ['rotational3dofmodel_12',['Rotational3DOFModel',['../Models_8h.html#a287ab38fdf9b2634bf844a17719b9115',1,'Models.h']]], + ['rotational3dofmodeld_13',['Rotational3DOFModeld',['../Models_8h.html#a51e40a2924a4b6ff134878368461bb1a',1,'Models.h']]], + ['rotationaldynamics1dof_14',['RotationalDynamics1DOF',['../structRotationalDynamics1DOF.html',1,'']]], + ['rotationaldynamics3dof_15',['RotationalDynamics3DOF',['../structRotationalDynamics3DOF.html',1,'']]] +]; diff --git a/docs/search/all_f.js b/docs/search/all_f.js new file mode 100644 index 0000000..e845fea --- /dev/null +++ b/docs/search/all_f.js @@ -0,0 +1,120 @@ +var searchData= +[ + ['scalardsignal_0',['ScalardSignal',['../Signal_8h.html#a5d3a7fde60e049b3fb16e62c397585a0',1,'Signal.h']]], + ['scalardstate_1',['ScalardState',['../State_8h.html#aab879370bd488ae3cb270da1dfc5f695',1,'State.h']]], + ['scalardstatesignal_2',['ScalardStateSignal',['../State_8h.html#a95f500a02b3d50ef0a73883e96ae8768',1,'State.h']]], + ['scalarsignal_3',['ScalarSignal',['../Signal_8h.html#abc87ae11c3a781dd43f4854fcd25fcc3',1,'Signal.h']]], + ['scalarsignalspec_4',['ScalarSignalSpec',['../structScalarSignalSpec.html',1,'']]], + ['scalarstate_5',['ScalarState',['../State_8h.html#ae2fe8fddd28ed110fbc33b4ca506bd0f',1,'State.h']]], + ['scalarstatesignal_6',['ScalarStateSignal',['../State_8h.html#a622e24e8fd8ba48d60637420cbe6d3e9',1,'State.h']]], + ['scalarstatesignalspec_7',['ScalarStateSignalSpec',['../structScalarStateSignalSpec.html',1,'']]], + ['scalarstatetype_8',['ScalarStateType',['../State_8h.html#aad51d946606df50291c6c2f546030f11',1,'State.h']]], + ['se2dsignal_9',['SE2dSignal',['../Signal_8h.html#a27317de3cebe688fdf9b1f89e8d749ea',1,'Signal.h']]], + ['se2dstate_10',['SE2dState',['../State_8h.html#abf8de0fae02a60506ddd6e134b75ae00',1,'State.h']]], + ['se2dstatesignal_11',['SE2dStateSignal',['../State_8h.html#a709efdac7ba2c93eedbf1533c74e42f5',1,'State.h']]], + ['se2signal_12',['SE2Signal',['../Signal_8h.html#a5c686d1c1e780f578c950182943ecf41',1,'Signal.h']]], + ['se2state_13',['SE2State',['../State_8h.html#acc2213abe7e1f1169bce3603e87f44d2',1,'State.h']]], + ['se2statesignal_14',['SE2StateSignal',['../State_8h.html#ae34074b7d367592e7022441b0ee836d9',1,'State.h']]], + ['se3dsignal_15',['SE3dSignal',['../Signal_8h.html#a13875f09fcdcc6dd114766bacc38f01b',1,'Signal.h']]], + ['se3dstate_16',['SE3dState',['../State_8h.html#a98daf00f053bcc148a93319eac4901e4',1,'State.h']]], + ['se3dstatesignal_17',['SE3dStateSignal',['../State_8h.html#a9b00d890fcdbf16abfbb263061e9bc98',1,'State.h']]], + ['se3signal_18',['SE3Signal',['../Signal_8h.html#ab87588076a67398d28c7f77a2103470b',1,'Signal.h']]], + ['se3state_19',['SE3State',['../State_8h.html#a41c34d11317aa1e268232a6ddf9c0ba7',1,'State.h']]], + ['se3statesignal_20',['SE3StateSignal',['../State_8h.html#a337f5beba24e405d11550802e4375c73',1,'State.h']]], + ['setderivativemethod_21',['setDerivativeMethod',['../classSignal.html#a1013bb3f4f81fac83f1ca204efe61156',1,'Signal']]], + ['setextrapolationmethod_22',['setExtrapolationMethod',['../classSignal.html#a2c32f16f327c871f83b8b7a70276a926',1,'Signal']]], + ['setinterpolationmethod_23',['setInterpolationMethod',['../classSignal.html#a5722b03ddbfc6936fdadd19aa41098f5',1,'Signal']]], + ['setparams_24',['setParams',['../classModel.html#a96533143a30ab87c379e411fcae59643',1,'Model']]], + ['signal_25',['Signal',['../classSignal.html',1,'Signal< T, BaseSignalSpec, TangentSignalSpec >'],['../classSignal.html#a88dbcbb228e7392c52823bb4eff04813',1,'Signal::Signal()'],['../classSignal.html#a20cf7505fc82893b44be888c6ea26000',1,'Signal::Signal(const Signal &other)']]], + ['signal_2eh_26',['Signal.h',['../Signal_8h.html',1,'']]], + ['signal_3c_20t_2c_20manifoldsignalspec_3c_20t_2c_20manifoldtype_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_27',['Signal< T, ManifoldSignalSpec< T, ManifoldType >, VectorSignalSpec< T, d > >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20manifoldsignalspec_3c_20t_2c_20manifoldtype_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20double_20_3e_28',['Signal< T, ManifoldSignalSpec< T, ManifoldType >, VectorSignalSpec< T, d > >< double >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20manifoldsignalspec_3c_20t_2c_20manifoldtype_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_20se2_3c_20t_20_3e_2c_203_20_3e_29',['Signal< T, ManifoldSignalSpec< T, ManifoldType >, VectorSignalSpec< T, d > >< T, SE2< T >, 3 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20manifoldsignalspec_3c_20t_2c_20manifoldtype_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_20se3_3c_20t_20_3e_2c_206_20_3e_30',['Signal< T, ManifoldSignalSpec< T, ManifoldType >, VectorSignalSpec< T, d > >< T, SE3< T >, 6 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20manifoldsignalspec_3c_20t_2c_20manifoldtype_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_20so2_3c_20t_20_3e_2c_201_20_3e_31',['Signal< T, ManifoldSignalSpec< T, ManifoldType >, VectorSignalSpec< T, d > >< T, SO2< T >, 1 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20manifoldsignalspec_3c_20t_2c_20manifoldtype_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_20so3_3c_20t_20_3e_2c_203_20_3e_32',['Signal< T, ManifoldSignalSpec< T, ManifoldType >, VectorSignalSpec< T, d > >< T, SO3< T >, 3 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20manifoldstatesignalspec_3c_20t_2c_20manifoldtype_2c_20pd_2c_20td_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20td_20_3e_20_3e_33',['Signal< T, ManifoldStateSignalSpec< T, ManifoldType, PD, TD >, VectorStateSignalSpec< T, TD > >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20manifoldstatesignalspec_3c_20t_2c_20manifoldtype_2c_20pd_2c_20td_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20td_20_3e_20_3e_3c_20double_20_3e_34',['Signal< T, ManifoldStateSignalSpec< T, ManifoldType, PD, TD >, VectorStateSignalSpec< T, TD > >< double >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20manifoldstatesignalspec_3c_20t_2c_20manifoldtype_2c_20pd_2c_20td_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20td_20_3e_20_3e_3c_20t_2c_20se2_3c_20t_20_3e_2c_204_2c_203_20_3e_35',['Signal< T, ManifoldStateSignalSpec< T, ManifoldType, PD, TD >, VectorStateSignalSpec< T, TD > >< T, SE2< T >, 4, 3 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20manifoldstatesignalspec_3c_20t_2c_20manifoldtype_2c_20pd_2c_20td_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20td_20_3e_20_3e_3c_20t_2c_20se3_3c_20t_20_3e_2c_207_2c_206_20_3e_36',['Signal< T, ManifoldStateSignalSpec< T, ManifoldType, PD, TD >, VectorStateSignalSpec< T, TD > >< T, SE3< T >, 7, 6 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20manifoldstatesignalspec_3c_20t_2c_20manifoldtype_2c_20pd_2c_20td_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20td_20_3e_20_3e_3c_20t_2c_20so2_3c_20t_20_3e_2c_202_2c_201_20_3e_37',['Signal< T, ManifoldStateSignalSpec< T, ManifoldType, PD, TD >, VectorStateSignalSpec< T, TD > >< T, SO2< T >, 2, 1 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20manifoldstatesignalspec_3c_20t_2c_20manifoldtype_2c_20pd_2c_20td_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20td_20_3e_20_3e_3c_20t_2c_20so3_3c_20t_20_3e_2c_204_2c_203_20_3e_38',['Signal< T, ManifoldStateSignalSpec< T, ManifoldType, PD, TD >, VectorStateSignalSpec< T, TD > >< T, SO3< T >, 4, 3 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20scalarsignalspec_3c_20t_20_3e_2c_20scalarsignalspec_3c_20t_20_3e_20_3e_39',['Signal< T, ScalarSignalSpec< T >, ScalarSignalSpec< T > >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20scalarsignalspec_3c_20t_20_3e_2c_20scalarsignalspec_3c_20t_20_3e_20_3e_3c_20double_20_3e_40',['Signal< T, ScalarSignalSpec< T >, ScalarSignalSpec< T > >< double >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20scalarstatesignalspec_3c_20t_20_3e_2c_20scalarstatesignalspec_3c_20t_20_3e_20_3e_41',['Signal< T, ScalarStateSignalSpec< T >, ScalarStateSignalSpec< T > >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20scalarstatesignalspec_3c_20t_20_3e_2c_20scalarstatesignalspec_3c_20t_20_3e_20_3e_3c_20double_20_3e_42',['Signal< T, ScalarStateSignalSpec< T >, ScalarStateSignalSpec< T > >< double >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_43',['Signal< T, VectorSignalSpec< T, d >, VectorSignalSpec< T, d > >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20double_20_3e_44',['Signal< T, VectorSignalSpec< T, d >, VectorSignalSpec< T, d > >< double >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_201_20_3e_45',['Signal< T, VectorSignalSpec< T, d >, VectorSignalSpec< T, d > >< T, 1 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_2010_20_3e_46',['Signal< T, VectorSignalSpec< T, d >, VectorSignalSpec< T, d > >< T, 10 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_202_20_3e_47',['Signal< T, VectorSignalSpec< T, d >, VectorSignalSpec< T, d > >< T, 2 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_203_20_3e_48',['Signal< T, VectorSignalSpec< T, d >, VectorSignalSpec< T, d > >< T, 3 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_204_20_3e_49',['Signal< T, VectorSignalSpec< T, d >, VectorSignalSpec< T, d > >< T, 4 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_205_20_3e_50',['Signal< T, VectorSignalSpec< T, d >, VectorSignalSpec< T, d > >< T, 5 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_206_20_3e_51',['Signal< T, VectorSignalSpec< T, d >, VectorSignalSpec< T, d > >< T, 6 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_207_20_3e_52',['Signal< T, VectorSignalSpec< T, d >, VectorSignalSpec< T, d > >< T, 7 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_208_20_3e_53',['Signal< T, VectorSignalSpec< T, d >, VectorSignalSpec< T, d > >< T, 8 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_209_20_3e_54',['Signal< T, VectorSignalSpec< T, d >, VectorSignalSpec< T, d > >< T, 9 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_20_3e_55',['Signal< T, VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20double_20_3e_56',['Signal< T, VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > >< double >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_201_20_3e_57',['Signal< T, VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > >< T, 1 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_2010_20_3e_58',['Signal< T, VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > >< T, 10 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_202_20_3e_59',['Signal< T, VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > >< T, 2 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_203_20_3e_60',['Signal< T, VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > >< T, 3 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_204_20_3e_61',['Signal< T, VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > >< T, 4 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_205_20_3e_62',['Signal< T, VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > >< T, 5 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_206_20_3e_63',['Signal< T, VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > >< T, 6 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_207_20_3e_64',['Signal< T, VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > >< T, 7 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_208_20_3e_65',['Signal< T, VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > >< T, 8 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_209_20_3e_66',['Signal< T, VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > >< T, 9 >',['../classSignal.html',1,'']]], + ['signal_5futils_67',['signal_utils',['../namespacesignal__utils.html',1,'']]], + ['signaldp_68',['SignalDP',['../structSignal_1_1SignalDP.html',1,'Signal']]], + ['signaldpcomparator_69',['SignalDPComparator',['../classSignal.html#a572142d3a6218d220eeead90b8b008bd',1,'Signal']]], + ['signals_20cpp_20library_20documentation_70',['signals-cpp Library Documentation',['../index.html',1,'']]], + ['signals_2eh_71',['Signals.h',['../Signals_8h.html',1,'']]], + ['simpsonintegrator_72',['SimpsonIntegrator',['../Integration_8h.html#a3ac408f7f30b4b1b5b218e5d48eca5ed',1,'Integration.h']]], + ['simpsonintegratorspec_73',['SimpsonIntegratorSpec',['../structSimpsonIntegratorSpec.html',1,'']]], + ['simulate_74',['simulate',['../classModel.html#ac7446138b27c8feba779ebfe8e82b99d',1,'Model::simulate(const InputSignalType &u, const double &tf, const bool &insertIntoHistory=false, const bool &calculateXddot=false)'],['../classModel.html#ac2550ae8ed888d167450160ce55286df',1,'Model::simulate(const InputSignalType &u, const double &tf, const double &dt, const bool &insertIntoHistory=false, const bool &calculateXddot=false)']]], + ['so2dsignal_75',['SO2dSignal',['../Signal_8h.html#a43a8b3bb4241f080c75114c98502e21b',1,'Signal.h']]], + ['so2dstate_76',['SO2dState',['../State_8h.html#af87fca61f7adfb8b62056d2f6c815e51',1,'State.h']]], + ['so2dstatesignal_77',['SO2dStateSignal',['../State_8h.html#a4f4b421bf1a450cd6514a24b8c16e8cb',1,'State.h']]], + ['so2signal_78',['SO2Signal',['../Signal_8h.html#acbd9dbde916447b024121b565ee6ea96',1,'Signal.h']]], + ['so2state_79',['SO2State',['../State_8h.html#ab2d123ee7121bd4e6c7e55ce62c770ee',1,'State.h']]], + ['so2statesignal_80',['SO2StateSignal',['../State_8h.html#a455c23e3eed1fa310813120299d8cc95',1,'State.h']]], + ['so3dsignal_81',['SO3dSignal',['../Signal_8h.html#a1fbce3445fc6d54d3dfc2aa95fdcc37f',1,'Signal.h']]], + ['so3dstate_82',['SO3dState',['../State_8h.html#a7ab722ee104a5c16222f5cbd0d682657',1,'State.h']]], + ['so3dstatesignal_83',['SO3dStateSignal',['../State_8h.html#a7069682eef4672ac723761c44e44bc5a',1,'State.h']]], + ['so3signal_84',['SO3Signal',['../Signal_8h.html#a25f5e910566ad4b1b610a8eebb96274d',1,'Signal.h']]], + ['so3state_85',['SO3State',['../State_8h.html#ae37ec421e65f8ce1346e62704e6ea859',1,'State.h']]], + ['so3statesignal_86',['SO3StateSignal',['../State_8h.html#a07ec000c82b285e661a861ae5f90736a',1,'State.h']]], + ['state_87',['State',['../structState.html',1,'State< T, PoseTypeSpec, PoseDim, TwistTypeSpec, TwistDim >'],['../structState.html#adcb914ebe25fe14622a945801267fa7a',1,'State::State()'],['../structState.html#a097d236bc46ca02a379e2fd188fe3e97',1,'State::State(T *arr)'],['../structState.html#aa10b450dbe8a806a0b203521b4738c0c',1,'State::State(const State &other)']]], + ['state_2eh_88',['State.h',['../State_8h.html',1,'']]], + ['state_3c_20t_2c_20manifoldsignalspec_3c_20t_2c_20manifoldtype_20_3e_2c_20pd_2c_20vectorsignalspec_3c_20t_2c_20td_20_3e_2c_20td_20_3e_89',['State< T, ManifoldSignalSpec< T, ManifoldType >, PD, VectorSignalSpec< T, TD >, TD >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20manifoldsignalspec_3c_20t_2c_20manifoldtype_20_3e_2c_20pd_2c_20vectorsignalspec_3c_20t_2c_20td_20_3e_2c_20td_20_3e_3c_20double_20_3e_90',['State< T, ManifoldSignalSpec< T, ManifoldType >, PD, VectorSignalSpec< T, TD >, TD >< double >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20manifoldsignalspec_3c_20t_2c_20manifoldtype_20_3e_2c_20pd_2c_20vectorsignalspec_3c_20t_2c_20td_20_3e_2c_20td_20_3e_3c_20t_2c_20manifoldtype_2c_20pd_2c_20td_20_3e_91',['State< T, ManifoldSignalSpec< T, ManifoldType >, PD, VectorSignalSpec< T, TD >, TD >< T, ManifoldType, PD, TD >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20manifoldsignalspec_3c_20t_2c_20manifoldtype_20_3e_2c_20pd_2c_20vectorsignalspec_3c_20t_2c_20td_20_3e_2c_20td_20_3e_3c_20t_2c_20se2_3c_20t_20_3e_2c_204_2c_203_20_3e_92',['State< T, ManifoldSignalSpec< T, ManifoldType >, PD, VectorSignalSpec< T, TD >, TD >< T, SE2< T >, 4, 3 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20manifoldsignalspec_3c_20t_2c_20manifoldtype_20_3e_2c_20pd_2c_20vectorsignalspec_3c_20t_2c_20td_20_3e_2c_20td_20_3e_3c_20t_2c_20se3_3c_20t_20_3e_2c_207_2c_206_20_3e_93',['State< T, ManifoldSignalSpec< T, ManifoldType >, PD, VectorSignalSpec< T, TD >, TD >< T, SE3< T >, 7, 6 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20manifoldsignalspec_3c_20t_2c_20manifoldtype_20_3e_2c_20pd_2c_20vectorsignalspec_3c_20t_2c_20td_20_3e_2c_20td_20_3e_3c_20t_2c_20so2_3c_20t_20_3e_2c_202_2c_201_20_3e_94',['State< T, ManifoldSignalSpec< T, ManifoldType >, PD, VectorSignalSpec< T, TD >, TD >< T, SO2< T >, 2, 1 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20manifoldsignalspec_3c_20t_2c_20manifoldtype_20_3e_2c_20pd_2c_20vectorsignalspec_3c_20t_2c_20td_20_3e_2c_20td_20_3e_3c_20t_2c_20so3_3c_20t_20_3e_2c_204_2c_203_20_3e_95',['State< T, ManifoldSignalSpec< T, ManifoldType >, PD, VectorSignalSpec< T, TD >, TD >< T, SO3< T >, 4, 3 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20scalarsignalspec_3c_20t_20_3e_2c_201_2c_20scalarsignalspec_3c_20t_20_3e_2c_201_20_3e_96',['State< T, ScalarSignalSpec< T >, 1, ScalarSignalSpec< T >, 1 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20scalarsignalspec_3c_20t_20_3e_2c_201_2c_20scalarsignalspec_3c_20t_20_3e_2c_201_20_3e_3c_20double_20_3e_97',['State< T, ScalarSignalSpec< T >, 1, ScalarSignalSpec< T >, 1 >< double >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20scalarsignalspec_3c_20t_20_3e_2c_201_2c_20scalarsignalspec_3c_20t_20_3e_2c_201_20_3e_3c_20t_20_3e_98',['State< T, ScalarSignalSpec< T >, 1, ScalarSignalSpec< T >, 1 >< T >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_99',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_3c_20double_20_3e_100',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >< double >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_3c_20t_2c_201_20_3e_101',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >< T, 1 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_3c_20t_2c_2010_20_3e_102',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >< T, 10 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_3c_20t_2c_202_20_3e_103',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >< T, 2 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_3c_20t_2c_203_20_3e_104',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >< T, 3 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_3c_20t_2c_204_20_3e_105',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >< T, 4 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_3c_20t_2c_205_20_3e_106',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >< T, 5 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_3c_20t_2c_206_20_3e_107',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >< T, 6 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_3c_20t_2c_207_20_3e_108',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >< T, 7 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_3c_20t_2c_208_20_3e_109',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >< T, 8 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_3c_20t_2c_209_20_3e_110',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >< T, 9 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_3c_20t_2c_20d_20_3e_111',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >< T, d >',['../structState.html',1,'']]], + ['statedotdottype_112',['StateDotDotType',['../structTranslationalDynamicsBase.html#a4ae3874e31bcc97d54f4cebea0606002',1,'TranslationalDynamicsBase::StateDotDotType'],['../structRotationalDynamics1DOF.html#a5e2f1cd471e7be99dc9e0f3f29f146f3',1,'RotationalDynamics1DOF::StateDotDotType'],['../structRotationalDynamics3DOF.html#a6e75764a6e9b0ec406d716dfb60943b1',1,'RotationalDynamics3DOF::StateDotDotType'],['../structRigidBodyDynamics3DOF.html#a562a8cc5e6e8dca19982509022a22ba4',1,'RigidBodyDynamics3DOF::StateDotDotType'],['../structRigidBodyDynamics6DOF.html#a32c92b85c94f66739358385a0a3a07fc',1,'RigidBodyDynamics6DOF::StateDotDotType']]], + ['statedotsignaltype_113',['StateDotSignalType',['../classModel.html#a8abdf37c6158386a9f1d2c6c506f6839',1,'Model::StateDotSignalType'],['../structTranslationalDynamicsBase.html#a3870f6b57fcb6cb578b3640401331a39',1,'TranslationalDynamicsBase::StateDotSignalType'],['../structRotationalDynamics1DOF.html#a32c4979bf8f6aa3f9c1b0f2818ba4abd',1,'RotationalDynamics1DOF::StateDotSignalType'],['../structRotationalDynamics3DOF.html#a6b1ce3427c65404128d15a66c3d11621',1,'RotationalDynamics3DOF::StateDotSignalType'],['../structRigidBodyDynamics3DOF.html#a28d138392ca0069c5e6274f78fd08e29',1,'RigidBodyDynamics3DOF::StateDotSignalType'],['../structRigidBodyDynamics6DOF.html#afcafc7961087b27b239ad998e436da9a',1,'RigidBodyDynamics6DOF::StateDotSignalType']]], + ['statedottype_114',['StateDotType',['../structTranslationalDynamicsBase.html#a25c6532290d222c25e727394a0afa0b7',1,'TranslationalDynamicsBase::StateDotType'],['../structRotationalDynamics1DOF.html#a7df05f9db990eecd331f506d1a17597e',1,'RotationalDynamics1DOF::StateDotType'],['../structRotationalDynamics3DOF.html#a40c9649794d2d6e82da6451d17c32bb5',1,'RotationalDynamics3DOF::StateDotType'],['../structRigidBodyDynamics3DOF.html#a7a9fa29ba97531d856e87560806a805c',1,'RigidBodyDynamics3DOF::StateDotType'],['../structRigidBodyDynamics6DOF.html#aa664579d3d691fcd4c5824b242dd2061',1,'RigidBodyDynamics6DOF::StateDotType']]], + ['statesignaltype_115',['StateSignalType',['../classModel.html#a643e1a47ddbb10c5c10844f9aea5be98',1,'Model::StateSignalType'],['../structTranslationalDynamicsBase.html#a1f0fdd4bbfb73f52878c7e5c7e459f16',1,'TranslationalDynamicsBase::StateSignalType'],['../structRotationalDynamics1DOF.html#ac321d27d0098cb3e8e64ea0d98500cb6',1,'RotationalDynamics1DOF::StateSignalType'],['../structRotationalDynamics3DOF.html#a2814e21ab959a4cb71fdc2682d1cad69',1,'RotationalDynamics3DOF::StateSignalType'],['../structRigidBodyDynamics3DOF.html#a0c346a983bc929f1f7a6e5d2be3a0841',1,'RigidBodyDynamics3DOF::StateSignalType'],['../structRigidBodyDynamics6DOF.html#ad4e0605bf2a0c90acbe9a1a333b9b952',1,'RigidBodyDynamics6DOF::StateSignalType']]], + ['statetype_116',['StateType',['../structTranslationalDynamicsBase.html#aabb958cc98babacfc8478a04fb7a37dd',1,'TranslationalDynamicsBase::StateType'],['../structRotationalDynamics1DOF.html#aada86d78db85576298e606afda8c928d',1,'RotationalDynamics1DOF::StateType'],['../structRotationalDynamics3DOF.html#aaee29651f3b1671b6ab4e10656ea6f9a',1,'RotationalDynamics3DOF::StateType'],['../structRigidBodyDynamics3DOF.html#a448c5efb998f492d1518eb0d2d7ded74',1,'RigidBodyDynamics3DOF::StateType'],['../structRigidBodyDynamics6DOF.html#adf5c3e5f6090032d18019c7aeab91f51',1,'RigidBodyDynamics6DOF::StateType']]] +]; diff --git a/docs/search/classes_0.js b/docs/search/classes_0.js new file mode 100644 index 0000000..5d161be --- /dev/null +++ b/docs/search/classes_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['eulerintegratorspec_0',['EulerIntegratorSpec',['../structEulerIntegratorSpec.html',1,'']]] +]; diff --git a/docs/search/classes_1.js b/docs/search/classes_1.js new file mode 100644 index 0000000..090355a --- /dev/null +++ b/docs/search/classes_1.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['integrator_0',['Integrator',['../structIntegrator.html',1,'']]], + ['integrator_3c_20eulerintegratorspec_20_3e_1',['Integrator< EulerIntegratorSpec >',['../structIntegrator.html',1,'']]], + ['integrator_3c_20simpsonintegratorspec_20_3e_2',['Integrator< SimpsonIntegratorSpec >',['../structIntegrator.html',1,'']]], + ['integrator_3c_20trapezoidalintegratorspec_20_3e_3',['Integrator< TrapezoidalIntegratorSpec >',['../structIntegrator.html',1,'']]] +]; diff --git a/docs/search/classes_2.js b/docs/search/classes_2.js new file mode 100644 index 0000000..f4490df --- /dev/null +++ b/docs/search/classes_2.js @@ -0,0 +1,20 @@ +var searchData= +[ + ['manifoldsignalspec_0',['ManifoldSignalSpec',['../structManifoldSignalSpec.html',1,'']]], + ['manifoldstatesignalspec_1',['ManifoldStateSignalSpec',['../structManifoldStateSignalSpec.html',1,'']]], + ['model_2',['Model',['../classModel.html',1,'']]], + ['model_3c_20rigidbodydynamics3dof_3c_20t_20_3e_20_3e_3',['Model< RigidBodyDynamics3DOF< T > >',['../classModel.html',1,'']]], + ['model_3c_20rigidbodydynamics3dof_3c_20t_20_3e_20_3e_3c_20double_20_3e_4',['Model< RigidBodyDynamics3DOF< T > >< double >',['../classModel.html',1,'']]], + ['model_3c_20rigidbodydynamics6dof_3c_20t_20_3e_20_3e_5',['Model< RigidBodyDynamics6DOF< T > >',['../classModel.html',1,'']]], + ['model_3c_20rigidbodydynamics6dof_3c_20t_20_3e_20_3e_3c_20double_20_3e_6',['Model< RigidBodyDynamics6DOF< T > >< double >',['../classModel.html',1,'']]], + ['model_3c_20rotationaldynamics1dof_3c_20t_20_3e_20_3e_7',['Model< RotationalDynamics1DOF< T > >',['../classModel.html',1,'']]], + ['model_3c_20rotationaldynamics1dof_3c_20t_20_3e_20_3e_3c_20double_20_3e_8',['Model< RotationalDynamics1DOF< T > >< double >',['../classModel.html',1,'']]], + ['model_3c_20rotationaldynamics3dof_3c_20t_20_3e_20_3e_9',['Model< RotationalDynamics3DOF< T > >',['../classModel.html',1,'']]], + ['model_3c_20rotationaldynamics3dof_3c_20t_20_3e_20_3e_3c_20double_20_3e_10',['Model< RotationalDynamics3DOF< T > >< double >',['../classModel.html',1,'']]], + ['model_3c_20translationaldynamics1dof_3c_20t_20_3e_20_3e_11',['Model< TranslationalDynamics1DOF< T > >',['../classModel.html',1,'']]], + ['model_3c_20translationaldynamics1dof_3c_20t_20_3e_20_3e_3c_20double_20_3e_12',['Model< TranslationalDynamics1DOF< T > >< double >',['../classModel.html',1,'']]], + ['model_3c_20translationaldynamics2dof_3c_20t_20_3e_20_3e_13',['Model< TranslationalDynamics2DOF< T > >',['../classModel.html',1,'']]], + ['model_3c_20translationaldynamics2dof_3c_20t_20_3e_20_3e_3c_20double_20_3e_14',['Model< TranslationalDynamics2DOF< T > >< double >',['../classModel.html',1,'']]], + ['model_3c_20translationaldynamics3dof_3c_20t_20_3e_20_3e_15',['Model< TranslationalDynamics3DOF< T > >',['../classModel.html',1,'']]], + ['model_3c_20translationaldynamics3dof_3c_20t_20_3e_20_3e_3c_20double_20_3e_16',['Model< TranslationalDynamics3DOF< T > >< double >',['../classModel.html',1,'']]] +]; diff --git a/docs/search/classes_3.js b/docs/search/classes_3.js new file mode 100644 index 0000000..5edfde1 --- /dev/null +++ b/docs/search/classes_3.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['rigidbodydynamics3dof_0',['RigidBodyDynamics3DOF',['../structRigidBodyDynamics3DOF.html',1,'']]], + ['rigidbodydynamics6dof_1',['RigidBodyDynamics6DOF',['../structRigidBodyDynamics6DOF.html',1,'']]], + ['rigidbodyparams1d_2',['RigidBodyParams1D',['../structRigidBodyParams1D.html',1,'']]], + ['rigidbodyparams2d_3',['RigidBodyParams2D',['../structRigidBodyParams2D.html',1,'']]], + ['rigidbodyparams3d_4',['RigidBodyParams3D',['../structRigidBodyParams3D.html',1,'']]], + ['rotationaldynamics1dof_5',['RotationalDynamics1DOF',['../structRotationalDynamics1DOF.html',1,'']]], + ['rotationaldynamics3dof_6',['RotationalDynamics3DOF',['../structRotationalDynamics3DOF.html',1,'']]] +]; diff --git a/docs/search/classes_4.js b/docs/search/classes_4.js new file mode 100644 index 0000000..25147d5 --- /dev/null +++ b/docs/search/classes_4.js @@ -0,0 +1,72 @@ +var searchData= +[ + ['scalarsignalspec_0',['ScalarSignalSpec',['../structScalarSignalSpec.html',1,'']]], + ['scalarstatesignalspec_1',['ScalarStateSignalSpec',['../structScalarStateSignalSpec.html',1,'']]], + ['signal_2',['Signal',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20manifoldsignalspec_3c_20t_2c_20manifoldtype_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3',['Signal< T, ManifoldSignalSpec< T, ManifoldType >, VectorSignalSpec< T, d > >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20manifoldsignalspec_3c_20t_2c_20manifoldtype_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20double_20_3e_4',['Signal< T, ManifoldSignalSpec< T, ManifoldType >, VectorSignalSpec< T, d > >< double >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20manifoldsignalspec_3c_20t_2c_20manifoldtype_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_20se2_3c_20t_20_3e_2c_203_20_3e_5',['Signal< T, ManifoldSignalSpec< T, ManifoldType >, VectorSignalSpec< T, d > >< T, SE2< T >, 3 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20manifoldsignalspec_3c_20t_2c_20manifoldtype_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_20se3_3c_20t_20_3e_2c_206_20_3e_6',['Signal< T, ManifoldSignalSpec< T, ManifoldType >, VectorSignalSpec< T, d > >< T, SE3< T >, 6 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20manifoldsignalspec_3c_20t_2c_20manifoldtype_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_20so2_3c_20t_20_3e_2c_201_20_3e_7',['Signal< T, ManifoldSignalSpec< T, ManifoldType >, VectorSignalSpec< T, d > >< T, SO2< T >, 1 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20manifoldsignalspec_3c_20t_2c_20manifoldtype_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_20so3_3c_20t_20_3e_2c_203_20_3e_8',['Signal< T, ManifoldSignalSpec< T, ManifoldType >, VectorSignalSpec< T, d > >< T, SO3< T >, 3 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20manifoldstatesignalspec_3c_20t_2c_20manifoldtype_2c_20pd_2c_20td_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20td_20_3e_20_3e_9',['Signal< T, ManifoldStateSignalSpec< T, ManifoldType, PD, TD >, VectorStateSignalSpec< T, TD > >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20manifoldstatesignalspec_3c_20t_2c_20manifoldtype_2c_20pd_2c_20td_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20td_20_3e_20_3e_3c_20double_20_3e_10',['Signal< T, ManifoldStateSignalSpec< T, ManifoldType, PD, TD >, VectorStateSignalSpec< T, TD > >< double >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20manifoldstatesignalspec_3c_20t_2c_20manifoldtype_2c_20pd_2c_20td_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20td_20_3e_20_3e_3c_20t_2c_20se2_3c_20t_20_3e_2c_204_2c_203_20_3e_11',['Signal< T, ManifoldStateSignalSpec< T, ManifoldType, PD, TD >, VectorStateSignalSpec< T, TD > >< T, SE2< T >, 4, 3 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20manifoldstatesignalspec_3c_20t_2c_20manifoldtype_2c_20pd_2c_20td_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20td_20_3e_20_3e_3c_20t_2c_20se3_3c_20t_20_3e_2c_207_2c_206_20_3e_12',['Signal< T, ManifoldStateSignalSpec< T, ManifoldType, PD, TD >, VectorStateSignalSpec< T, TD > >< T, SE3< T >, 7, 6 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20manifoldstatesignalspec_3c_20t_2c_20manifoldtype_2c_20pd_2c_20td_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20td_20_3e_20_3e_3c_20t_2c_20so2_3c_20t_20_3e_2c_202_2c_201_20_3e_13',['Signal< T, ManifoldStateSignalSpec< T, ManifoldType, PD, TD >, VectorStateSignalSpec< T, TD > >< T, SO2< T >, 2, 1 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20manifoldstatesignalspec_3c_20t_2c_20manifoldtype_2c_20pd_2c_20td_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20td_20_3e_20_3e_3c_20t_2c_20so3_3c_20t_20_3e_2c_204_2c_203_20_3e_14',['Signal< T, ManifoldStateSignalSpec< T, ManifoldType, PD, TD >, VectorStateSignalSpec< T, TD > >< T, SO3< T >, 4, 3 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20scalarsignalspec_3c_20t_20_3e_2c_20scalarsignalspec_3c_20t_20_3e_20_3e_15',['Signal< T, ScalarSignalSpec< T >, ScalarSignalSpec< T > >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20scalarsignalspec_3c_20t_20_3e_2c_20scalarsignalspec_3c_20t_20_3e_20_3e_3c_20double_20_3e_16',['Signal< T, ScalarSignalSpec< T >, ScalarSignalSpec< T > >< double >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20scalarstatesignalspec_3c_20t_20_3e_2c_20scalarstatesignalspec_3c_20t_20_3e_20_3e_17',['Signal< T, ScalarStateSignalSpec< T >, ScalarStateSignalSpec< T > >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20scalarstatesignalspec_3c_20t_20_3e_2c_20scalarstatesignalspec_3c_20t_20_3e_20_3e_3c_20double_20_3e_18',['Signal< T, ScalarStateSignalSpec< T >, ScalarStateSignalSpec< T > >< double >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_19',['Signal< T, VectorSignalSpec< T, d >, VectorSignalSpec< T, d > >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20double_20_3e_20',['Signal< T, VectorSignalSpec< T, d >, VectorSignalSpec< T, d > >< double >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_201_20_3e_21',['Signal< T, VectorSignalSpec< T, d >, VectorSignalSpec< T, d > >< T, 1 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_2010_20_3e_22',['Signal< T, VectorSignalSpec< T, d >, VectorSignalSpec< T, d > >< T, 10 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_202_20_3e_23',['Signal< T, VectorSignalSpec< T, d >, VectorSignalSpec< T, d > >< T, 2 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_203_20_3e_24',['Signal< T, VectorSignalSpec< T, d >, VectorSignalSpec< T, d > >< T, 3 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_204_20_3e_25',['Signal< T, VectorSignalSpec< T, d >, VectorSignalSpec< T, d > >< T, 4 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_205_20_3e_26',['Signal< T, VectorSignalSpec< T, d >, VectorSignalSpec< T, d > >< T, 5 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_206_20_3e_27',['Signal< T, VectorSignalSpec< T, d >, VectorSignalSpec< T, d > >< T, 6 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_207_20_3e_28',['Signal< T, VectorSignalSpec< T, d >, VectorSignalSpec< T, d > >< T, 7 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_208_20_3e_29',['Signal< T, VectorSignalSpec< T, d >, VectorSignalSpec< T, d > >< T, 8 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_209_20_3e_30',['Signal< T, VectorSignalSpec< T, d >, VectorSignalSpec< T, d > >< T, 9 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_20_3e_31',['Signal< T, VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20double_20_3e_32',['Signal< T, VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > >< double >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_201_20_3e_33',['Signal< T, VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > >< T, 1 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_2010_20_3e_34',['Signal< T, VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > >< T, 10 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_202_20_3e_35',['Signal< T, VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > >< T, 2 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_203_20_3e_36',['Signal< T, VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > >< T, 3 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_204_20_3e_37',['Signal< T, VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > >< T, 4 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_205_20_3e_38',['Signal< T, VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > >< T, 5 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_206_20_3e_39',['Signal< T, VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > >< T, 6 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_207_20_3e_40',['Signal< T, VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > >< T, 7 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_208_20_3e_41',['Signal< T, VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > >< T, 8 >',['../classSignal.html',1,'']]], + ['signal_3c_20t_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_209_20_3e_42',['Signal< T, VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > >< T, 9 >',['../classSignal.html',1,'']]], + ['signaldp_43',['SignalDP',['../structSignal_1_1SignalDP.html',1,'Signal']]], + ['simpsonintegratorspec_44',['SimpsonIntegratorSpec',['../structSimpsonIntegratorSpec.html',1,'']]], + ['state_45',['State',['../structState.html',1,'']]], + ['state_3c_20t_2c_20manifoldsignalspec_3c_20t_2c_20manifoldtype_20_3e_2c_20pd_2c_20vectorsignalspec_3c_20t_2c_20td_20_3e_2c_20td_20_3e_46',['State< T, ManifoldSignalSpec< T, ManifoldType >, PD, VectorSignalSpec< T, TD >, TD >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20manifoldsignalspec_3c_20t_2c_20manifoldtype_20_3e_2c_20pd_2c_20vectorsignalspec_3c_20t_2c_20td_20_3e_2c_20td_20_3e_3c_20double_20_3e_47',['State< T, ManifoldSignalSpec< T, ManifoldType >, PD, VectorSignalSpec< T, TD >, TD >< double >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20manifoldsignalspec_3c_20t_2c_20manifoldtype_20_3e_2c_20pd_2c_20vectorsignalspec_3c_20t_2c_20td_20_3e_2c_20td_20_3e_3c_20t_2c_20manifoldtype_2c_20pd_2c_20td_20_3e_48',['State< T, ManifoldSignalSpec< T, ManifoldType >, PD, VectorSignalSpec< T, TD >, TD >< T, ManifoldType, PD, TD >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20manifoldsignalspec_3c_20t_2c_20manifoldtype_20_3e_2c_20pd_2c_20vectorsignalspec_3c_20t_2c_20td_20_3e_2c_20td_20_3e_3c_20t_2c_20se2_3c_20t_20_3e_2c_204_2c_203_20_3e_49',['State< T, ManifoldSignalSpec< T, ManifoldType >, PD, VectorSignalSpec< T, TD >, TD >< T, SE2< T >, 4, 3 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20manifoldsignalspec_3c_20t_2c_20manifoldtype_20_3e_2c_20pd_2c_20vectorsignalspec_3c_20t_2c_20td_20_3e_2c_20td_20_3e_3c_20t_2c_20se3_3c_20t_20_3e_2c_207_2c_206_20_3e_50',['State< T, ManifoldSignalSpec< T, ManifoldType >, PD, VectorSignalSpec< T, TD >, TD >< T, SE3< T >, 7, 6 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20manifoldsignalspec_3c_20t_2c_20manifoldtype_20_3e_2c_20pd_2c_20vectorsignalspec_3c_20t_2c_20td_20_3e_2c_20td_20_3e_3c_20t_2c_20so2_3c_20t_20_3e_2c_202_2c_201_20_3e_51',['State< T, ManifoldSignalSpec< T, ManifoldType >, PD, VectorSignalSpec< T, TD >, TD >< T, SO2< T >, 2, 1 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20manifoldsignalspec_3c_20t_2c_20manifoldtype_20_3e_2c_20pd_2c_20vectorsignalspec_3c_20t_2c_20td_20_3e_2c_20td_20_3e_3c_20t_2c_20so3_3c_20t_20_3e_2c_204_2c_203_20_3e_52',['State< T, ManifoldSignalSpec< T, ManifoldType >, PD, VectorSignalSpec< T, TD >, TD >< T, SO3< T >, 4, 3 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20scalarsignalspec_3c_20t_20_3e_2c_201_2c_20scalarsignalspec_3c_20t_20_3e_2c_201_20_3e_53',['State< T, ScalarSignalSpec< T >, 1, ScalarSignalSpec< T >, 1 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20scalarsignalspec_3c_20t_20_3e_2c_201_2c_20scalarsignalspec_3c_20t_20_3e_2c_201_20_3e_3c_20double_20_3e_54',['State< T, ScalarSignalSpec< T >, 1, ScalarSignalSpec< T >, 1 >< double >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20scalarsignalspec_3c_20t_20_3e_2c_201_2c_20scalarsignalspec_3c_20t_20_3e_2c_201_20_3e_3c_20t_20_3e_55',['State< T, ScalarSignalSpec< T >, 1, ScalarSignalSpec< T >, 1 >< T >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_56',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_3c_20double_20_3e_57',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >< double >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_3c_20t_2c_201_20_3e_58',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >< T, 1 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_3c_20t_2c_2010_20_3e_59',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >< T, 10 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_3c_20t_2c_202_20_3e_60',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >< T, 2 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_3c_20t_2c_203_20_3e_61',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >< T, 3 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_3c_20t_2c_204_20_3e_62',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >< T, 4 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_3c_20t_2c_205_20_3e_63',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >< T, 5 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_3c_20t_2c_206_20_3e_64',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >< T, 6 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_3c_20t_2c_207_20_3e_65',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >< T, 7 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_3c_20t_2c_208_20_3e_66',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >< T, 8 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_3c_20t_2c_209_20_3e_67',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >< T, 9 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_3c_20t_2c_20d_20_3e_68',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >< T, d >',['../structState.html',1,'']]] +]; diff --git a/docs/search/classes_5.js b/docs/search/classes_5.js new file mode 100644 index 0000000..e198267 --- /dev/null +++ b/docs/search/classes_5.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['translationaldynamicsbase_0',['TranslationalDynamicsBase',['../structTranslationalDynamicsBase.html',1,'']]], + ['translationaldynamicsbase_3c_20scalarsignal_3c_20t_20_3e_2c_20scalarstatesignal_3c_20t_20_3e_2c_20scalarstatesignal_3c_20t_20_3e_2c_201_2c_20rigidbodyparams1d_20_3e_1',['TranslationalDynamicsBase< ScalarSignal< T >, ScalarStateSignal< T >, ScalarStateSignal< T >, 1, RigidBodyParams1D >',['../structTranslationalDynamicsBase.html',1,'']]], + ['translationaldynamicsbase_3c_20vector2signal_3c_20t_20_3e_2c_20vector2statesignal_3c_20t_20_3e_2c_20vector2statesignal_3c_20t_20_3e_2c_202_2c_20rigidbodyparams2d_20_3e_2',['TranslationalDynamicsBase< Vector2Signal< T >, Vector2StateSignal< T >, Vector2StateSignal< T >, 2, RigidBodyParams2D >',['../structTranslationalDynamicsBase.html',1,'']]], + ['translationaldynamicsbase_3c_20vector3signal_3c_20t_20_3e_2c_20vector3statesignal_3c_20t_20_3e_2c_20vector3statesignal_3c_20t_20_3e_2c_203_2c_20rigidbodyparams3d_20_3e_3',['TranslationalDynamicsBase< Vector3Signal< T >, Vector3StateSignal< T >, Vector3StateSignal< T >, 3, RigidBodyParams3D >',['../structTranslationalDynamicsBase.html',1,'']]], + ['trapezoidalintegratorspec_4',['TrapezoidalIntegratorSpec',['../structTrapezoidalIntegratorSpec.html',1,'']]] +]; diff --git a/docs/search/classes_6.js b/docs/search/classes_6.js new file mode 100644 index 0000000..1b5c2d3 --- /dev/null +++ b/docs/search/classes_6.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['vectorsignalspec_0',['VectorSignalSpec',['../structVectorSignalSpec.html',1,'']]], + ['vectorstatesignalspec_1',['VectorStateSignalSpec',['../structVectorStateSignalSpec.html',1,'']]] +]; diff --git a/docs/search/close.svg b/docs/search/close.svg new file mode 100644 index 0000000..337d6cc --- /dev/null +++ b/docs/search/close.svg @@ -0,0 +1,18 @@ + + + + + + diff --git a/docs/search/defines_0.js b/docs/search/defines_0.js new file mode 100644 index 0000000..25a2454 --- /dev/null +++ b/docs/search/defines_0.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['make_5fintegrator_0',['MAKE_INTEGRATOR',['../Integration_8h.html#ac22028f5bd0a2ecee786d53a348e4073',1,'Integration.h']]], + ['make_5fmanif_5fsignal_1',['MAKE_MANIF_SIGNAL',['../Signal_8h.html#adf89e7a1e286d52fa755d04f0c087ea3',1,'Signal.h']]], + ['make_5fmanif_5fstates_2',['MAKE_MANIF_STATES',['../State_8h.html#a72800aeb486c7eebe1ab0fe8cfae6294',1,'State.h']]], + ['make_5fmodel_3',['MAKE_MODEL',['../Models_8h.html#a01637abb86bd3009fcff2cebc8a8735a',1,'Models.h']]], + ['make_5fvector_5fsignal_4',['MAKE_VECTOR_SIGNAL',['../Signal_8h.html#a45ef87a3bf4ac7938147e95995f76849',1,'Signal.h']]], + ['make_5fvector_5fstates_5',['MAKE_VECTOR_STATES',['../State_8h.html#aed0e3d5bd576a92c33ab3950c98a4e3b',1,'State.h']]] +]; diff --git a/docs/search/enums_0.js b/docs/search/enums_0.js new file mode 100644 index 0000000..466754e --- /dev/null +++ b/docs/search/enums_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['derivativemethod_0',['DerivativeMethod',['../Signal_8h.html#a35d05b0e727a39b86907d8669e9e1242',1,'Signal.h']]] +]; diff --git a/docs/search/enums_1.js b/docs/search/enums_1.js new file mode 100644 index 0000000..4ea2cae --- /dev/null +++ b/docs/search/enums_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['extrapolationmethod_0',['ExtrapolationMethod',['../Signal_8h.html#a9943b8bd1a1a1cdb774553d44c12cde4',1,'Signal.h']]] +]; diff --git a/docs/search/enums_2.js b/docs/search/enums_2.js new file mode 100644 index 0000000..b99562e --- /dev/null +++ b/docs/search/enums_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['interpolationmethod_0',['InterpolationMethod',['../Signal_8h.html#aa0081e804011c551ea0f4a596a64b284',1,'Signal.h']]] +]; diff --git a/docs/search/enumvalues_0.js b/docs/search/enumvalues_0.js new file mode 100644 index 0000000..ffdb0cb --- /dev/null +++ b/docs/search/enumvalues_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['closest_0',['CLOSEST',['../Signal_8h.html#a9943b8bd1a1a1cdb774553d44c12cde4a901e715f86c693ccd2851e8c0b64cca3',1,'Signal.h']]], + ['cubic_5fspline_1',['CUBIC_SPLINE',['../Signal_8h.html#aa0081e804011c551ea0f4a596a64b284a13480ea7779c90806a9fa4ef70322ebc',1,'Signal.h']]] +]; diff --git a/docs/search/enumvalues_1.js b/docs/search/enumvalues_1.js new file mode 100644 index 0000000..992a90c --- /dev/null +++ b/docs/search/enumvalues_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['dirty_0',['DIRTY',['../Signal_8h.html#a35d05b0e727a39b86907d8669e9e1242a6a4e132eb192a22c351397837d4c082c',1,'Signal.h']]] +]; diff --git a/docs/search/enumvalues_2.js b/docs/search/enumvalues_2.js new file mode 100644 index 0000000..f74ca2b --- /dev/null +++ b/docs/search/enumvalues_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['finite_5fdiff_0',['FINITE_DIFF',['../Signal_8h.html#a35d05b0e727a39b86907d8669e9e1242a31a5b438304c770230e3fbb9999c9c2e',1,'Signal.h']]] +]; diff --git a/docs/search/enumvalues_3.js b/docs/search/enumvalues_3.js new file mode 100644 index 0000000..399f5cf --- /dev/null +++ b/docs/search/enumvalues_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['linear_0',['LINEAR',['../Signal_8h.html#aa0081e804011c551ea0f4a596a64b284adc101ebf31c49c2d4b80b7c6f59f22cb',1,'Signal.h']]] +]; diff --git a/docs/search/enumvalues_4.js b/docs/search/enumvalues_4.js new file mode 100644 index 0000000..c286826 --- /dev/null +++ b/docs/search/enumvalues_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['nans_0',['NANS',['../Signal_8h.html#a9943b8bd1a1a1cdb774553d44c12cde4af4517d0db561241ccfcf150e1629767f',1,'Signal.h']]] +]; diff --git a/docs/search/enumvalues_5.js b/docs/search/enumvalues_5.js new file mode 100644 index 0000000..2df62e7 --- /dev/null +++ b/docs/search/enumvalues_5.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['zero_5forder_5fhold_0',['ZERO_ORDER_HOLD',['../Signal_8h.html#aa0081e804011c551ea0f4a596a64b284ad873f8ab97a3f6e892c8b834b23db574',1,'Signal.h']]], + ['zeros_1',['ZEROS',['../Signal_8h.html#a9943b8bd1a1a1cdb774553d44c12cde4a5d7341ec5879a7f47c5cb82c0fdf6b5f',1,'Signal.h']]] +]; diff --git a/docs/search/files_0.js b/docs/search/files_0.js new file mode 100644 index 0000000..399a7ee --- /dev/null +++ b/docs/search/files_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['integration_2eh_0',['Integration.h',['../Integration_8h.html',1,'']]] +]; diff --git a/docs/search/files_1.js b/docs/search/files_1.js new file mode 100644 index 0000000..1a6772a --- /dev/null +++ b/docs/search/files_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['models_2eh_0',['Models.h',['../Models_8h.html',1,'']]] +]; diff --git a/docs/search/files_2.js b/docs/search/files_2.js new file mode 100644 index 0000000..df4a0ce --- /dev/null +++ b/docs/search/files_2.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['signal_2eh_0',['Signal.h',['../Signal_8h.html',1,'']]], + ['signals_2eh_1',['Signals.h',['../Signals_8h.html',1,'']]], + ['state_2eh_2',['State.h',['../State_8h.html',1,'']]] +]; diff --git a/docs/search/files_3.js b/docs/search/files_3.js new file mode 100644 index 0000000..9f8c25f --- /dev/null +++ b/docs/search/files_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['utils_2eh_0',['Utils.h',['../Utils_8h.html',1,'']]] +]; diff --git a/docs/search/functions_0.js b/docs/search/functions_0.js new file mode 100644 index 0000000..51d9393 --- /dev/null +++ b/docs/search/functions_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['basenorm_0',['baseNorm',['../classSignal.html#a1704e3bae899be60d372210d11982f90',1,'Signal']]], + ['basezero_1',['baseZero',['../classSignal.html#a57e630e4058ed6ce26c8eb8f6ae25512',1,'Signal']]] +]; diff --git a/docs/search/functions_1.js b/docs/search/functions_1.js new file mode 100644 index 0000000..88b0f71 --- /dev/null +++ b/docs/search/functions_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['dot_0',['dot',['../classSignal.html#ad2f62804e18f2cb579a4f854f7381fb8',1,'Signal::dot() const'],['../classSignal.html#af622cbe01dc2d991914b66d748d67d82',1,'Signal::dot(const double &t) const'],['../classSignal.html#aa6d9afdff4e331b471d563b3af955907',1,'Signal::dot(const std::vector< double > &t) const']]], + ['dotsignal_1',['dotSignal',['../classSignal.html#ae4e987f1a142b689966bb81ac2f89180',1,'Signal']]] +]; diff --git a/docs/search/functions_2.js b/docs/search/functions_2.js new file mode 100644 index 0000000..4a3a29b --- /dev/null +++ b/docs/search/functions_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['gettimedelta_0',['getTimeDelta',['../namespacesignal__utils.html#ad7667542f893604d059a5d0022d2890c',1,'signal_utils']]] +]; diff --git a/docs/search/functions_3.js b/docs/search/functions_3.js new file mode 100644 index 0000000..44dcb2b --- /dev/null +++ b/docs/search/functions_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['hasparams_0',['hasParams',['../classModel.html#a4f059d658bfda1665bf44a36b7aaf8e5',1,'Model']]] +]; diff --git a/docs/search/functions_4.js b/docs/search/functions_4.js new file mode 100644 index 0000000..26182fc --- /dev/null +++ b/docs/search/functions_4.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['identity_0',['identity',['../structState.html#a035f1f7193895463743b8ee58d75634f',1,'State']]], + ['integrate_1',['integrate',['../structIntegrator.html#a263c92051eee31afcb6ddede4cc0f501',1,'Integrator::integrate(Signal< T, BaseSignalSpec, TangentSignalSpec > &xInt, const Signal< T, TangentSignalSpec, TangentSignalSpec > &x, const double &tf, const bool &insertIntoHistory=false)'],['../structIntegrator.html#a2e5ed56fea1f9dbe95b35d509432095b',1,'Integrator::integrate(Signal< T, BaseSignalSpec, TangentSignalSpec > &xInt, const Signal< T, TangentSignalSpec, TangentSignalSpec > &x, const double & > > > > > > > master tf, const double &dt, const bool &insertIntoHistory=false)'],['../structEulerIntegratorSpec.html#a29b0d734872c468790a910096e2146e7',1,'EulerIntegratorSpec::integrate()'],['../structTrapezoidalIntegratorSpec.html#a5527a1385da3194b2d2bbe2968a8526d',1,'TrapezoidalIntegratorSpec::integrate()'],['../structSimpsonIntegratorSpec.html#a6194da52902a391e4a9b251c05e6abf2',1,'SimpsonIntegratorSpec::integrate()']]] +]; diff --git a/docs/search/functions_5.js b/docs/search/functions_5.js new file mode 100644 index 0000000..386bff5 --- /dev/null +++ b/docs/search/functions_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['model_0',['Model',['../classModel.html#a3cbccc00606661a35110dbe111af54ad',1,'Model']]] +]; diff --git a/docs/search/functions_6.js b/docs/search/functions_6.js new file mode 100644 index 0000000..c8ac210 --- /dev/null +++ b/docs/search/functions_6.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['nans_0',['nans',['../structState.html#a9e331e0ecbed1ab2a03d9b3e5a457426',1,'State']]], + ['nanstype_1',['NansType',['../structScalarSignalSpec.html#a040a016b3023c9df47a913599e9af1e2',1,'ScalarSignalSpec::NansType()'],['../structVectorSignalSpec.html#a3a25051bf64d2677fc511bd026b7f6a2',1,'VectorSignalSpec::NansType()'],['../structManifoldSignalSpec.html#a0da455b5ddb7a1636da0316970d159e3',1,'ManifoldSignalSpec::NansType()'],['../structScalarStateSignalSpec.html#ac3878dfd1b21706364c34d09e6da37ce',1,'ScalarStateSignalSpec::NansType()'],['../structVectorStateSignalSpec.html#a4729eec41bab8eb5ed7b45aa8272be4d',1,'VectorStateSignalSpec::NansType()'],['../structManifoldStateSignalSpec.html#a7542075f653a7e8fba76702499936b17',1,'ManifoldStateSignalSpec::NansType()']]], + ['norm_2',['Norm',['../structScalarSignalSpec.html#ae1b0ea2ca918c4e3f5d960077d819dc8',1,'ScalarSignalSpec::Norm()'],['../structVectorSignalSpec.html#aabd9be7dcb81956c93b1ccb3235a1596',1,'VectorSignalSpec::Norm()'],['../structManifoldSignalSpec.html#a7dd7e481e18e41fca7f4560ea11b38de',1,'ManifoldSignalSpec::Norm()'],['../structScalarStateSignalSpec.html#a20c150a5f8ea74ee791b70a0df4358c2',1,'ScalarStateSignalSpec::Norm()'],['../structVectorStateSignalSpec.html#aa700e9b352d009941c3a81261bbec332',1,'VectorStateSignalSpec::Norm()'],['../structManifoldStateSignalSpec.html#a1940016ea13e87980d659f5e7510cef1',1,'ManifoldStateSignalSpec::Norm()']]], + ['norm_3',['norm',['../structState.html#a718035815fa0c84ba5175b8f1e769bf5',1,'State']]] +]; diff --git a/docs/search/functions_7.js b/docs/search/functions_7.js new file mode 100644 index 0000000..ce7d1f7 --- /dev/null +++ b/docs/search/functions_7.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['operator_28_29_0',['operator()',['../classSignal.html#ac4530cf5ec12ce1c72067137a24faf85',1,'Signal::operator()() const'],['../classSignal.html#a77caf4746f6f644771952aa4fb6929a2',1,'Signal::operator()(const double &t) const'],['../classSignal.html#a4d1a040a13d70375a0d8341383538bb2',1,'Signal::operator()(const std::vector< double > &t) const']]], + ['operator_2a_1',['operator*',['../Signal_8h.html#abc6ca4ae108bb396ee8f8e6e49c72726',1,'operator*(const double &l, const Signal< T, BaseSignalSpec, TangentSignalSpec > &r): Signal.h'],['../Signal_8h.html#ae7c5ba17f9c292f3afb995d5ca9fca64',1,'operator*(const Signal< T, BaseSignalSpec, TangentSignalSpec > &l, const double &r): Signal.h'],['../State_8h.html#a795d2ff5c53f24de712134f27e197001',1,'operator*(const double &l, const State< T, PTS, PD, TTS, TD > &r): State.h'],['../State_8h.html#a7fa016cf853be0dbc882359bf5b637f9',1,'operator*(const State< T, PTS, PD, TTS, TD > &l, const double &r): State.h']]], + ['operator_2a_3d_2',['operator*=',['../structState.html#af76faa98cfc18fb81afb0c86f7a0aa75',1,'State']]], + ['operator_2b_3',['operator+',['../Signal_8h.html#a5a26056c1f1fd07a31f62ee2f6ef454b',1,'operator+(const Signal< T, BaseSignalSpec, TangentSignalSpec > &l, const Signal< T, TangentSignalSpec, TangentSignalSpec > &r): Signal.h'],['../State_8h.html#ac3e1ccc35f63b762bdd2c87478f8aad6',1,'operator+(const State< T, PTS, PD, TTS, TD > &l, const State< T, TTS, TD, TTS, TD > &r): State.h']]], + ['operator_2b_3d_4',['operator+=',['../structState.html#a7764970f0c29576eac07ab57c28261be',1,'State']]], + ['operator_2d_5',['operator-',['../Signal_8h.html#ab3fabcc65538dee9ff663a100e5f6f5b',1,'operator-(const Signal< T, BaseSignalSpec, TangentSignalSpec > &l, const Signal< T, BaseSignalSpec, TangentSignalSpec > &r): Signal.h'],['../State_8h.html#ad7ac1ecc8c925fbc991d2fa8ca50d4eb',1,'operator-(const State< T, PTS, PD, TTS, TD > &l, const State< T, PTS, PD, TTS, TD > &r): State.h']]], + ['operator_2f_6',['operator/',['../State_8h.html#af3ec1e7d28a9aac4e1cde4c7f3438128',1,'operator/(const ScalarStateType< T > &l, const double &r): State.h'],['../State_8h.html#a0f388e10603fb47846a1147ff5b6839d',1,'operator/(const VectorStateType< T, d > &l, const double &r): State.h']]], + ['operator_3c_3c_7',['operator<<',['../Signal_8h.html#a47318c97bced9b7ee828c94c1a4eeb29',1,'operator<<(std::ostream &os, const ScalarSignal< T > &x): Signal.h'],['../Signal_8h.html#aeb7f6d79d7e692981221b685c0863d54',1,'operator<<(std::ostream &os, const VectorSignal< T, d > &x): Signal.h'],['../Signal_8h.html#a6a76598b459ea2e14353617de437c808',1,'operator<<(std::ostream &os, const ManifoldSignal< T, ManifoldType, d > &x): Signal.h'],['../State_8h.html#ae29ac55bb38cdbd3acce109857e8e7a4',1,'operator<<(std::ostream &os, const ScalarStateType< T > &x): State.h'],['../State_8h.html#af1eca508289d2fcbdecd0cc136eed43d',1,'operator<<(std::ostream &os, const VectorStateType< T, d > &x): State.h'],['../State_8h.html#a494fe74e8c2fc3cd3f7e14886eeb7d6c',1,'operator<<(std::ostream &os, const ManifoldStateType< T, ManifoldType, PD, TD > &x): State.h'],['../State_8h.html#ab6fe6347b40120d5f45445b1fc6596f4',1,'operator<<(std::ostream &os, const ScalarStateSignal< T > &x): State.h'],['../State_8h.html#a1675ff98779b45e08f5d169056e26a4d',1,'operator<<(std::ostream &os, const VectorStateSignal< T, d > &x): State.h'],['../State_8h.html#a6c0f637d1f1980a2de56f125e9cf4ec1',1,'operator<<(std::ostream &os, const ManifoldStateSignal< T, ManifoldType, PD, TD > &x): State.h']]] +]; diff --git a/docs/search/functions_8.js b/docs/search/functions_8.js new file mode 100644 index 0000000..c71c5bb --- /dev/null +++ b/docs/search/functions_8.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['reset_0',['reset',['../classModel.html#a823536a9764d6a35cce173573ee62e90',1,'Model::reset()'],['../classSignal.html#ab50a583ce4790025215aa8e6af56e186',1,'Signal::reset()']]], + ['rigidbodyparams1d_1',['RigidBodyParams1D',['../structRigidBodyParams1D.html#ab2b9c3eb89bcbf0ac06a33e95725e0eb',1,'RigidBodyParams1D']]], + ['rigidbodyparams2d_2',['RigidBodyParams2D',['../structRigidBodyParams2D.html#a6febaa8c9f355105b908979da3dd1255',1,'RigidBodyParams2D']]], + ['rigidbodyparams3d_3',['RigidBodyParams3D',['../structRigidBodyParams3D.html#a8aa76fea7a0790ead025bf79e767d0cf',1,'RigidBodyParams3D']]] +]; diff --git a/docs/search/functions_9.js b/docs/search/functions_9.js new file mode 100644 index 0000000..6bfc917 --- /dev/null +++ b/docs/search/functions_9.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['setderivativemethod_0',['setDerivativeMethod',['../classSignal.html#a1013bb3f4f81fac83f1ca204efe61156',1,'Signal']]], + ['setextrapolationmethod_1',['setExtrapolationMethod',['../classSignal.html#a2c32f16f327c871f83b8b7a70276a926',1,'Signal']]], + ['setinterpolationmethod_2',['setInterpolationMethod',['../classSignal.html#a5722b03ddbfc6936fdadd19aa41098f5',1,'Signal']]], + ['setparams_3',['setParams',['../classModel.html#a96533143a30ab87c379e411fcae59643',1,'Model']]], + ['signal_4',['Signal',['../classSignal.html#a88dbcbb228e7392c52823bb4eff04813',1,'Signal::Signal()'],['../classSignal.html#a20cf7505fc82893b44be888c6ea26000',1,'Signal::Signal(const Signal &other)']]], + ['simulate_5',['simulate',['../classModel.html#ac7446138b27c8feba779ebfe8e82b99d',1,'Model::simulate(const InputSignalType &u, const double &tf, const bool &insertIntoHistory=false, const bool &calculateXddot=false)'],['../classModel.html#ac2550ae8ed888d167450160ce55286df',1,'Model::simulate(const InputSignalType &u, const double &tf, const double &dt, const bool &insertIntoHistory=false, const bool &calculateXddot=false)']]], + ['state_6',['State',['../structState.html#adcb914ebe25fe14622a945801267fa7a',1,'State::State()'],['../structState.html#a097d236bc46ca02a379e2fd188fe3e97',1,'State::State(T *arr)'],['../structState.html#aa10b450dbe8a806a0b203521b4738c0c',1,'State::State(const State &other)']]] +]; diff --git a/docs/search/functions_a.js b/docs/search/functions_a.js new file mode 100644 index 0000000..5e648dc --- /dev/null +++ b/docs/search/functions_a.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['t_0',['t',['../classModel.html#a7661852411b9ffd59240d5d5ca0e4dd3',1,'Model::t()'],['../classSignal.html#a181510d087510590fe765d424c40c2e5',1,'Signal::t() const']]], + ['tangentnorm_1',['tangentNorm',['../classSignal.html#a9bd584cd80363b7aab134ddecf2ef9fa',1,'Signal']]], + ['tangentzero_2',['tangentZero',['../classSignal.html#a00fa5d541388d26197c3d2426cfcd609',1,'Signal']]] +]; diff --git a/docs/search/functions_b.js b/docs/search/functions_b.js new file mode 100644 index 0000000..2eac5f0 --- /dev/null +++ b/docs/search/functions_b.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['update_0',['update',['../structTranslationalDynamicsBase.html#a3f1e02018ec014fe38ba851dc0d5b2ed',1,'TranslationalDynamicsBase::update()'],['../structRotationalDynamics1DOF.html#a433f042fafdcff07948eb952e47f13b6',1,'RotationalDynamics1DOF::update()'],['../structRotationalDynamics3DOF.html#aee5958f7949268650c00097b2a871252',1,'RotationalDynamics3DOF::update()'],['../structRigidBodyDynamics3DOF.html#acafe68f9e9ea78f54bc70d64a1b39d9c',1,'RigidBodyDynamics3DOF::update()'],['../structRigidBodyDynamics6DOF.html#ae0d9bb27da7f804a1f8dc4923546a95d',1,'RigidBodyDynamics6DOF::update()'],['../classSignal.html#aaa355cde30a3aed048de084301395daf',1,'Signal::update(const double &_t, const BaseType &_x, bool insertHistory=false)'],['../classSignal.html#a1bcc4ff1ca1532a52fbe954e449324bc',1,'Signal::update(const double &_t, const BaseType &_x, const TangentType &_xdot, bool insertHistory=false)'],['../classSignal.html#ac1985c5c74318ac8d991c847090bb530',1,'Signal::update(const std::vector< double > &_tHistory, const std::vector< BaseType > &_xHistory)'],['../classSignal.html#ab28abd49a8bba19967a565ae1b988e5a',1,'Signal::update(const std::vector< double > &_tHistory, const std::vector< BaseType > &_xHistory, const std::vector< TangentType > &_xdotHistory)']]] +]; diff --git a/docs/search/functions_c.js b/docs/search/functions_c.js new file mode 100644 index 0000000..69063ec --- /dev/null +++ b/docs/search/functions_c.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['zerotype_0',['ZeroType',['../structScalarSignalSpec.html#a941ad7ca4c5943d3b2244e1126d1febf',1,'ScalarSignalSpec::ZeroType()'],['../structVectorSignalSpec.html#a4c535f5d5b25faa7148f8719d74693fd',1,'VectorSignalSpec::ZeroType()'],['../structManifoldSignalSpec.html#a8927849586c7301e1158c03d5e16c868',1,'ManifoldSignalSpec::ZeroType()'],['../structScalarStateSignalSpec.html#a0dc57853395e3c57d6447a23ae513b91',1,'ScalarStateSignalSpec::ZeroType()'],['../structVectorStateSignalSpec.html#ae659b96e95497b25e711fab331037c21',1,'VectorStateSignalSpec::ZeroType()'],['../structManifoldStateSignalSpec.html#adca9f48f26d97f95b2083b9e55bb58cb',1,'ManifoldStateSignalSpec::ZeroType()']]] +]; diff --git a/docs/search/mag.svg b/docs/search/mag.svg new file mode 100644 index 0000000..ffb6cf0 --- /dev/null +++ b/docs/search/mag.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/docs/search/mag_d.svg b/docs/search/mag_d.svg new file mode 100644 index 0000000..4122773 --- /dev/null +++ b/docs/search/mag_d.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/docs/search/mag_sel.svg b/docs/search/mag_sel.svg new file mode 100644 index 0000000..553dba8 --- /dev/null +++ b/docs/search/mag_sel.svg @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/docs/search/mag_seld.svg b/docs/search/mag_seld.svg new file mode 100644 index 0000000..c906f84 --- /dev/null +++ b/docs/search/mag_seld.svg @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/docs/search/namespaces_0.js b/docs/search/namespaces_0.js new file mode 100644 index 0000000..eef63d3 --- /dev/null +++ b/docs/search/namespaces_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['signal_5futils_0',['signal_utils',['../namespacesignal__utils.html',1,'']]] +]; diff --git a/docs/search/pages_0.js b/docs/search/pages_0.js new file mode 100644 index 0000000..cf942cf --- /dev/null +++ b/docs/search/pages_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['cpp_20library_20documentation_0',['signals-cpp Library Documentation',['../index.html',1,'']]] +]; diff --git a/docs/search/pages_1.js b/docs/search/pages_1.js new file mode 100644 index 0000000..7b10194 --- /dev/null +++ b/docs/search/pages_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['documentation_0',['signals-cpp Library Documentation',['../index.html',1,'']]] +]; diff --git a/docs/search/pages_2.js b/docs/search/pages_2.js new file mode 100644 index 0000000..16b3edc --- /dev/null +++ b/docs/search/pages_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['library_20documentation_0',['signals-cpp Library Documentation',['../index.html',1,'']]] +]; diff --git a/docs/search/pages_3.js b/docs/search/pages_3.js new file mode 100644 index 0000000..6ff6d59 --- /dev/null +++ b/docs/search/pages_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['signals_20cpp_20library_20documentation_0',['signals-cpp Library Documentation',['../index.html',1,'']]] +]; diff --git a/docs/search/related_0.js b/docs/search/related_0.js new file mode 100644 index 0000000..25cddad --- /dev/null +++ b/docs/search/related_0.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['operator_2a_0',['operator*',['../classSignal.html#a46553341b8f83ac7b49e168286018ba6',1,'Signal::operator*(const double &l, const Signal< S, BSS, TSS > &r)'],['../classSignal.html#a518ac0f150b0f53c1b573b36cf03624f',1,'Signal::operator*(const Signal< S, BSS, TSS > &l, const double &r)']]], + ['operator_2b_1',['operator+',['../classSignal.html#afd50d7b54e0b26c913d6a7ee6decf858',1,'Signal']]], + ['operator_2d_2',['operator-',['../classSignal.html#a52d14b1840b8c49bf2143a5979a73635',1,'Signal']]] +]; diff --git a/docs/search/search.css b/docs/search/search.css new file mode 100644 index 0000000..d7b0f90 --- /dev/null +++ b/docs/search/search.css @@ -0,0 +1,291 @@ +/*---------------- Search Box positioning */ + +#main-menu > li:last-child { + /* This
  • object is the parent of the search bar */ + display: flex; + justify-content: center; + align-items: center; + height: 36px; + margin-right: 1em; +} + +/*---------------- Search box styling */ + +.SRPage * { + font-weight: normal; + line-height: normal; +} + +dark-mode-toggle { + margin-left: 5px; + display: flex; + float: right; +} + +#MSearchBox { + display: inline-block; + white-space : nowrap; + background: white; + border-radius: 0.65em; + box-shadow: inset 0.5px 0.5px 3px 0px #555; + z-index: 102; +} + +#MSearchBox .left { + display: inline-block; + vertical-align: middle; + height: 1.4em; +} + +#MSearchSelect { + display: inline-block; + vertical-align: middle; + width: 20px; + height: 19px; + background-image: url('mag_sel.svg'); + margin: 0 0 0 0.3em; + padding: 0; +} + +#MSearchSelectExt { + display: inline-block; + vertical-align: middle; + width: 10px; + height: 19px; + background-image: url('mag.svg'); + margin: 0 0 0 0.5em; + padding: 0; +} + + +#MSearchField { + display: inline-block; + vertical-align: middle; + width: 7.5em; + height: 19px; + margin: 0 0.15em; + padding: 0; + line-height: 1em; + border:none; + color: #909090; + outline: none; + font-family: Arial,Verdana,sans-serif; + -webkit-border-radius: 0px; + border-radius: 0px; + background: none; +} + +@media(hover: none) { + /* to avoid zooming on iOS */ + #MSearchField { + font-size: 16px; + } +} + +#MSearchBox .right { + display: inline-block; + vertical-align: middle; + width: 1.4em; + height: 1.4em; +} + +#MSearchClose { + display: none; + font-size: inherit; + background : none; + border: none; + margin: 0; + padding: 0; + outline: none; + +} + +#MSearchCloseImg { + padding: 0.3em; + margin: 0; +} + +.MSearchBoxActive #MSearchField { + color: black; +} + + + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #90A5CE; + background-color: #F9FAFC; + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt Arial,Verdana,sans-serif; + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: black; + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: black; + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: white; + background-color: #3D578C; + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + /*width: 60ex;*/ + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid black; + background-color: #EEF1F7; + z-index:10000; + width: 300px; + height: 400px; + overflow: auto; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +div.SRPage { + margin: 5px 2px; + background-color: #EEF1F7; +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: #425E97; + font-family: Arial,Verdana,sans-serif; + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: #425E97; + font-family: Arial,Verdana,sans-serif; + font-size: 8pt; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; + font-family: Arial,Verdana,sans-serif; +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; + font-family: Arial,Verdana,sans-serif; +} + +.SRResult { + display: none; +} + +div.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: url("../tab_a.png"); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/docs/search/search.js b/docs/search/search.js new file mode 100644 index 0000000..666af01 --- /dev/null +++ b/docs/search/search.js @@ -0,0 +1,694 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +const SEARCH_COOKIE_NAME = ''+'search_grp'; + +const searchResults = new SearchResults(); + +/* A class handling everything associated with the search panel. + + Parameters: + name - The name of the global variable that will be + storing this instance. Is needed to be able to set timeouts. + resultPath - path to use for external files +*/ +function SearchBox(name, resultsPath, extension) { + if (!name || !resultsPath) { alert("Missing parameters to SearchBox."); } + if (!extension || extension == "") { extension = ".html"; } + + function getXPos(item) { + let x = 0; + if (item.offsetWidth) { + while (item && item!=document.body) { + x += item.offsetLeft; + item = item.offsetParent; + } + } + return x; + } + + function getYPos(item) { + let y = 0; + if (item.offsetWidth) { + while (item && item!=document.body) { + y += item.offsetTop; + item = item.offsetParent; + } + } + return y; + } + + // ---------- Instance variables + this.name = name; + this.resultsPath = resultsPath; + this.keyTimeout = 0; + this.keyTimeoutLength = 500; + this.closeSelectionTimeout = 300; + this.lastSearchValue = ""; + this.lastResultsPage = ""; + this.hideTimeout = 0; + this.searchIndex = 0; + this.searchActive = false; + this.extension = extension; + + // ----------- DOM Elements + + this.DOMSearchField = () => document.getElementById("MSearchField"); + this.DOMSearchSelect = () => document.getElementById("MSearchSelect"); + this.DOMSearchSelectWindow = () => document.getElementById("MSearchSelectWindow"); + this.DOMPopupSearchResults = () => document.getElementById("MSearchResults"); + this.DOMPopupSearchResultsWindow = () => document.getElementById("MSearchResultsWindow"); + this.DOMSearchClose = () => document.getElementById("MSearchClose"); + this.DOMSearchBox = () => document.getElementById("MSearchBox"); + + // ------------ Event Handlers + + // Called when focus is added or removed from the search field. + this.OnSearchFieldFocus = function(isActive) { + this.Activate(isActive); + } + + this.OnSearchSelectShow = function() { + const searchSelectWindow = this.DOMSearchSelectWindow(); + const searchField = this.DOMSearchSelect(); + + const left = getXPos(searchField); + const top = getYPos(searchField) + searchField.offsetHeight; + + // show search selection popup + searchSelectWindow.style.display='block'; + searchSelectWindow.style.left = left + 'px'; + searchSelectWindow.style.top = top + 'px'; + + // stop selection hide timer + if (this.hideTimeout) { + clearTimeout(this.hideTimeout); + this.hideTimeout=0; + } + return false; // to avoid "image drag" default event + } + + this.OnSearchSelectHide = function() { + this.hideTimeout = setTimeout(this.CloseSelectionWindow.bind(this), + this.closeSelectionTimeout); + } + + // Called when the content of the search field is changed. + this.OnSearchFieldChange = function(evt) { + if (this.keyTimeout) { // kill running timer + clearTimeout(this.keyTimeout); + this.keyTimeout = 0; + } + + const e = evt ? evt : window.event; // for IE + if (e.keyCode==40 || e.keyCode==13) { + if (e.shiftKey==1) { + this.OnSearchSelectShow(); + const win=this.DOMSearchSelectWindow(); + for (let i=0;i do a search + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) { // Up + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } else if (e.keyCode==13 || e.keyCode==27) { + e.stopPropagation(); + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() { + this.keyTimeout = 0; + + // strip leading whitespace + const searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + const code = searchValue.toLowerCase().charCodeAt(0); + let idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) { // surrogate pair + idxChar = searchValue.substr(0, 2); + } + + let jsFile; + let idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) { + const hexCode=idx.toString(16); + jsFile = this.resultsPath + indexSectionNames[this.searchIndex] + '_' + hexCode + '.js'; + } + + const loadJS = function(url, impl, loc) { + const scriptTag = document.createElement('script'); + scriptTag.src = url; + scriptTag.onload = impl; + scriptTag.onreadystatechange = impl; + loc.appendChild(scriptTag); + } + + const domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + const domSearchBox = this.DOMSearchBox(); + const domPopupSearchResults = this.DOMPopupSearchResults(); + const domSearchClose = this.DOMSearchClose(); + const resultsPath = this.resultsPath; + + const handleResults = function() { + document.getElementById("Loading").style.display="none"; + if (typeof searchData !== 'undefined') { + createResults(resultsPath); + document.getElementById("NoMatches").style.display="none"; + } + + if (idx!=-1) { + searchResults.Search(searchValue); + } else { // no file with search results => force empty search results + searchResults.Search('===='); + } + + if (domPopupSearchResultsWindow.style.display!='block') { + domSearchClose.style.display = 'inline-block'; + let left = getXPos(domSearchBox) + 150; + let top = getYPos(domSearchBox) + 20; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + const maxWidth = document.body.clientWidth; + const maxHeight = document.body.clientHeight; + let width = 300; + if (left<10) left=10; + if (width+left+8>maxWidth) width=maxWidth-left-8; + let height = 400; + if (height+top+8>maxHeight) height=maxHeight-top-8; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResultsWindow.style.height = height + 'px'; + } + } + + if (jsFile) { + loadJS(jsFile, handleResults, this.DOMPopupSearchResultsWindow()); + } else { + handleResults(); + } + + this.lastSearchValue = searchValue; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) { + this.DOMSearchBox().className = 'MSearchBoxActive'; + this.searchActive = true; + } else if (!isActive) { // directly remove the panel + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + this.DOMSearchField().value = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults() { + + function convertToId(search) { + let result = ''; + for (let i=0;i. + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) { + const parentElement = document.getElementById(id); + let element = parentElement.firstChild; + + while (element && element!=parentElement) { + if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') { + return element; + } + + if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) { + element = element.firstChild; + } else if (element.nextSibling) { + element = element.nextSibling; + } else { + do { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) { + const element = this.FindChildElement(id); + if (element) { + if (element.style.display == 'block') { + element.style.display = 'none'; + } else { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) { + if (!search) { // get search word from URL + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + const resultRows = document.getElementsByTagName("div"); + let matches = 0; + + let i = 0; + while (i < resultRows.length) { + const row = resultRows.item(i); + if (row.className == "SRResult") { + let rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) { + row.style.display = 'block'; + matches++; + } else { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) { // no results + document.getElementById("NoMatches").style.display='block'; + } else { // at least one result + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) { + let focusItem; + for (;;) { + const focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { + break; + } else if (!focusItem) { // last element + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) { + let focusItem; + for (;;) { + const focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { + break; + } else if (!focusItem) { // last element + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) { + if (e.type == "keydown") { + this.repeatOn = false; + this.lastKey = e.keyCode; + } else if (e.type == "keypress") { + if (!this.repeatOn) { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } else if (e.type == "keyup") { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) { // Up + const newIndex = itemIndex-1; + let focusItem = this.NavPrev(newIndex); + if (focusItem) { + let child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') { // children visible + let n=0; + let tmpElem; + for (;;) { // search for last child + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) { + focusItem = tmpElem; + } else { // found it! + break; + } + n++; + } + } + } + if (focusItem) { + focusItem.focus(); + } else { // return focus to search field + document.getElementById("MSearchField").focus(); + } + } else if (this.lastKey==40) { // Down + const newIndex = itemIndex+1; + let focusItem; + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') { // children visible + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } else if (this.lastKey==39) { // Right + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } else if (this.lastKey==37) { // Left + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } else if (this.lastKey==27) { // Escape + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } else if (this.lastKey==13) { // Enter + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) { // Up + if (childIndex>0) { + const newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } else { // already at first child, jump to parent + document.getElementById('Item'+itemIndex).focus(); + } + } else if (this.lastKey==40) { // Down + const newIndex = childIndex+1; + let elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) { // last child, jump to parent next parent + elem = this.NavNext(itemIndex+1); + } + if (elem) { + elem.focus(); + } + } else if (this.lastKey==27) { // Escape + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } else if (this.lastKey==13) { // Enter + return true; + } + return false; + } +} + +function createResults(resultsPath) { + + function setKeyActions(elem,action) { + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); + } + + function setClassAttr(elem,attr) { + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); + } + + const results = document.getElementById("SRResults"); + results.innerHTML = ''; + searchData.forEach((elem,index) => { + const id = elem[0]; + const srResult = document.createElement('div'); + srResult.setAttribute('id','SR_'+id); + setClassAttr(srResult,'SRResult'); + const srEntry = document.createElement('div'); + setClassAttr(srEntry,'SREntry'); + const srLink = document.createElement('a'); + srLink.setAttribute('id','Item'+index); + setKeyActions(srLink,'return searchResults.Nav(event,'+index+')'); + setClassAttr(srLink,'SRSymbol'); + srLink.innerHTML = elem[1][0]; + srEntry.appendChild(srLink); + if (elem[1].length==2) { // single result + srLink.setAttribute('href',resultsPath+elem[1][1][0]); + srLink.setAttribute('onclick','searchBox.CloseResultsWindow()'); + if (elem[1][1][1]) { + srLink.setAttribute('target','_parent'); + } else { + srLink.setAttribute('target','_blank'); + } + const srScope = document.createElement('span'); + setClassAttr(srScope,'SRScope'); + srScope.innerHTML = elem[1][1][2]; + srEntry.appendChild(srScope); + } else { // multiple results + srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")'); + const srChildren = document.createElement('div'); + setClassAttr(srChildren,'SRChildren'); + for (let c=0; c + + + + + + +signals-cpp: Member List + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    EulerIntegratorSpec Member List
    +
    +
    + +

    This is the complete list of members for EulerIntegratorSpec, including all inherited members.

    + + +
    integrate(Signal< T, BaseSignalSpec, TangentSignalSpec > &xInt, const Signal< T, TangentSignalSpec, TangentSignalSpec > &x, const double &t0, const double &tf, const bool &insertIntoHistory)EulerIntegratorSpecinlinestatic
    +
    + + + + diff --git a/docs/structEulerIntegratorSpec.html b/docs/structEulerIntegratorSpec.html new file mode 100644 index 0000000..c40b167 --- /dev/null +++ b/docs/structEulerIntegratorSpec.html @@ -0,0 +1,202 @@ + + + + + + + +signals-cpp: EulerIntegratorSpec Struct Reference + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    EulerIntegratorSpec Struct Reference
    +
    +
    + +

    Specification for numerically integrating a black box function using Euler's method. + More...

    + +

    #include <Integration.h>

    + + + + + + +

    +Static Public Member Functions

    template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
    static bool integrate (Signal< T, BaseSignalSpec, TangentSignalSpec > &xInt, const Signal< T, TangentSignalSpec, TangentSignalSpec > &x, const double &t0, const double &tf, const bool &insertIntoHistory)
     Euler integration implementation.
     
    +

    Detailed Description

    +

    Specification for numerically integrating a black box function using Euler's method.

    +

    Member Function Documentation

    + +

    ◆ integrate()

    + +
    +
    +
    +template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    static bool EulerIntegratorSpec::integrate (Signal< T, BaseSignalSpec, TangentSignalSpec > & xInt,
    const Signal< T, TangentSignalSpec, TangentSignalSpec > & x,
    const double & t0,
    const double & tf,
    const bool & insertIntoHistory )
    +
    +inlinestatic
    +
    + +

    Euler integration implementation.

    +
    Parameters
    + + + + + + +
    xIntThe output signal representing the integration.
    xThe input signal to be integrated.
    t0The start time for the integration.
    tfThe time to integrate to. Ideally the delta from the start time is small.
    insertIntoHistoryWhether to store the result in xInt's memory.
    +
    +
    +
    Returns
    Whether the integration was successful.
    +

    Euler integration increments the current integral by

    +

    \(x(t_f)\Delta t\)

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/structIntegrator-members.html b/docs/structIntegrator-members.html new file mode 100644 index 0000000..d6b8702 --- /dev/null +++ b/docs/structIntegrator-members.html @@ -0,0 +1,123 @@ + + + + + + + +signals-cpp: Member List + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Integrator< IntegratorType > Member List
    +
    +
    + +

    This is the complete list of members for Integrator< IntegratorType >, including all inherited members.

    + + + +
    integrate(Signal< T, BaseSignalSpec, TangentSignalSpec > &xInt, const Signal< T, TangentSignalSpec, TangentSignalSpec > &x, const double &tf, const bool &insertIntoHistory=false)Integrator< IntegratorType >inlinestatic
    integrate(Signal< T, BaseSignalSpec, TangentSignalSpec > &xInt, const Signal< T, TangentSignalSpec, TangentSignalSpec > &x, const double & > > > > > > > master tf, const double &dt, const bool &insertIntoHistory=false)Integrator< IntegratorType >inlinestatic
    +
    + + + + diff --git a/docs/structIntegrator.html b/docs/structIntegrator.html new file mode 100644 index 0000000..89365aa --- /dev/null +++ b/docs/structIntegrator.html @@ -0,0 +1,274 @@ + + + + + + + +signals-cpp: Integrator< IntegratorType > Struct Template Reference + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    Integrator< IntegratorType > Struct Template Reference
    +
    +
    + +

    Base type for all integrators. + More...

    + +

    #include <Integration.h>

    + + + + + + + + + + +

    +Static Public Member Functions

    template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
    static bool integrate (Signal< T, BaseSignalSpec, TangentSignalSpec > &xInt, const Signal< T, TangentSignalSpec, TangentSignalSpec > &x, const double &tf, const bool &insertIntoHistory=false)
     Integrate a signal from the current time to the specified end time.
     
    template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
    static bool integrate (Signal< T, BaseSignalSpec, TangentSignalSpec > &xInt, const Signal< T, TangentSignalSpec, TangentSignalSpec > &x, const double & > > > > > > > master tf, const double &dt, const bool &insertIntoHistory=false)
     Integrate a signal from the current time to the specified end time, chunked up into smaller integration increments.
     
    +

    Detailed Description

    +
    template<typename IntegratorType>
    +struct Integrator< IntegratorType >

    Base type for all integrators.

    +

    Provides methods for incremental (e.g., for control) or holistic (e.g., for open-loop simulation) integrations of arbitrary signal types.

    +

    Derived types:

    + +

    Member Function Documentation

    + +

    ◆ integrate() [1/2]

    + +
    +
    +
    +template<typename IntegratorType>
    +
    +template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    static bool Integrator< IntegratorType >::integrate (Signal< T, BaseSignalSpec, TangentSignalSpec > & xInt,
    const Signal< T, TangentSignalSpec, TangentSignalSpec > & x,
    const double & > > > > > > ,
    master tf,
    const double & dt,
    const bool & insertIntoHistory = false )
    +
    +inlinestatic
    +
    + +

    Integrate a signal from the current time to the specified end time, chunked up into smaller integration increments.

    +
    Parameters
    + + + + + + +
    xIntThe output signal representing the integration.
    xThe input signal to be integrated.
    tfThe time to integrate to.
    dtTime delta length by which to chunk up the integrations. Ideally this is small.
    insertIntoHistoryWhether to store the result in xInt's memory.
    +
    +
    +
    Returns
    Whether the integration was successful.
    + +
    +
    + +

    ◆ integrate() [2/2]

    + +
    +
    +
    +template<typename IntegratorType>
    +
    +template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    static bool Integrator< IntegratorType >::integrate (Signal< T, BaseSignalSpec, TangentSignalSpec > & xInt,
    const Signal< T, TangentSignalSpec, TangentSignalSpec > & x,
    const double & tf,
    const bool & insertIntoHistory = false )
    +
    +inlinestatic
    +
    + +

    Integrate a signal from the current time to the specified end time.

    +
    Parameters
    + + + + + +
    xIntThe output signal representing the integration.
    xThe input signal to be integrated.
    tfThe time to integrate to. Ideally the delta from the current time is small.
    insertIntoHistoryWhether to store the result in xInt's memory.
    +
    +
    +
    Returns
    Whether the integration was successful.
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/structManifoldSignalSpec-members.html b/docs/structManifoldSignalSpec-members.html new file mode 100644 index 0000000..3586608 --- /dev/null +++ b/docs/structManifoldSignalSpec-members.html @@ -0,0 +1,125 @@ + + + + + + + +signals-cpp: Member List + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    ManifoldSignalSpec< T, ManifoldType > Member List
    +
    +
    + +

    This is the complete list of members for ManifoldSignalSpec< T, ManifoldType >, including all inherited members.

    + + + + + +
    NansType()ManifoldSignalSpec< T, ManifoldType >inlinestatic
    Norm(const Type &a)ManifoldSignalSpec< T, ManifoldType >inlinestatic
    Type typedefManifoldSignalSpec< T, ManifoldType >
    ZeroType()ManifoldSignalSpec< T, ManifoldType >inlinestatic
    +
    + + + + diff --git a/docs/structManifoldSignalSpec.html b/docs/structManifoldSignalSpec.html new file mode 100644 index 0000000..2affc71 --- /dev/null +++ b/docs/structManifoldSignalSpec.html @@ -0,0 +1,270 @@ + + + + + + + +signals-cpp: ManifoldSignalSpec< T, ManifoldType > Struct Template Reference + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    ManifoldSignalSpec< T, ManifoldType > Struct Template Reference
    +
    +
    + +

    Type specification for manifold-valued signals (e.g., SO2, SO3, SE2, SE3). + More...

    + +

    #include <Signal.h>

    + + + + +

    +Public Types

    using Type = ManifoldType
     
    + + + + + + + + + + +

    +Static Public Member Functions

    static Type ZeroType ()
     Returns identity element of the manifold.
     
    static Type NansType ()
     Returns manifold element with NaN values.
     
    static T Norm (const Type &a)
     Compute the norm of a manifold element via its logarithmic map.
     
    +

    Detailed Description

    +
    template<typename T, typename ManifoldType>
    +struct ManifoldSignalSpec< T, ManifoldType >

    Type specification for manifold-valued signals (e.g., SO2, SO3, SE2, SE3).

    +
    Template Parameters
    + + +
    ManifoldTypeThe manifold type (e.g., SO2<double>, SE3<float>).
    +
    +
    +

    Member Typedef Documentation

    + +

    ◆ Type

    + +
    +
    +
    +template<typename T, typename ManifoldType>
    + + + + +
    using ManifoldSignalSpec< T, ManifoldType >::Type = ManifoldType
    +
    + +
    +
    +

    Member Function Documentation

    + +

    ◆ NansType()

    + +
    +
    +
    +template<typename T, typename ManifoldType>
    + + + + + +
    + + + + + + + +
    static Type ManifoldSignalSpec< T, ManifoldType >::NansType ()
    +
    +inlinestatic
    +
    + +

    Returns manifold element with NaN values.

    + +
    +
    + +

    ◆ Norm()

    + +
    +
    +
    +template<typename T, typename ManifoldType>
    + + + + + +
    + + + + + + + +
    static T ManifoldSignalSpec< T, ManifoldType >::Norm (const Type & a)
    +
    +inlinestatic
    +
    + +

    Compute the norm of a manifold element via its logarithmic map.

    +
    Parameters
    + + +
    aThe manifold element.
    +
    +
    +
    Returns
    The norm of the logarithmic map.
    + +
    +
    + +

    ◆ ZeroType()

    + +
    +
    +
    +template<typename T, typename ManifoldType>
    + + + + + +
    + + + + + + + +
    static Type ManifoldSignalSpec< T, ManifoldType >::ZeroType ()
    +
    +inlinestatic
    +
    + +

    Returns identity element of the manifold.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/structManifoldSignalSpec.js b/docs/structManifoldSignalSpec.js new file mode 100644 index 0000000..a4395c1 --- /dev/null +++ b/docs/structManifoldSignalSpec.js @@ -0,0 +1,4 @@ +var structManifoldSignalSpec = +[ + [ "Type", "structManifoldSignalSpec.html#a7e215846bd092774400152872700ea9c", null ] +]; \ No newline at end of file diff --git a/docs/structManifoldStateSignalSpec-members.html b/docs/structManifoldStateSignalSpec-members.html new file mode 100644 index 0000000..504db36 --- /dev/null +++ b/docs/structManifoldStateSignalSpec-members.html @@ -0,0 +1,125 @@ + + + + + + + +signals-cpp: Member List + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    ManifoldStateSignalSpec< T, ManifoldType, PD, TD > Member List
    +
    + +
    + + + + diff --git a/docs/structManifoldStateSignalSpec.html b/docs/structManifoldStateSignalSpec.html new file mode 100644 index 0000000..4ffb1ff --- /dev/null +++ b/docs/structManifoldStateSignalSpec.html @@ -0,0 +1,273 @@ + + + + + + + +signals-cpp: ManifoldStateSignalSpec< T, ManifoldType, PD, TD > Struct Template Reference + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    ManifoldStateSignalSpec< T, ManifoldType, PD, TD > Struct Template Reference
    +
    +
    + +

    Type specification for manifold state signals. + More...

    + +

    #include <State.h>

    + + + + +

    +Public Types

    using Type = ManifoldStateType<T, ManifoldType, PD, TD>
     
    + + + + + + + + + + +

    +Static Public Member Functions

    static Type ZeroType ()
     Returns identity (zero) state.
     
    static Type NansType ()
     Returns state with NaN values.
     
    static T Norm (const Type &a)
     Compute the combined norm of a manifold state.
     
    +

    Detailed Description

    +
    template<typename T, typename ManifoldType, size_t PD, size_t TD>
    +struct ManifoldStateSignalSpec< T, ManifoldType, PD, TD >

    Type specification for manifold state signals.

    +
    Template Parameters
    + + + + + +
    TScalar element type (e.g., double, float).
    ManifoldTypeThe manifold type (e.g., SO2<double>, SE3<float>).
    PDPose dimension.
    TDTangent (twist) dimension.
    +
    +
    +

    Member Typedef Documentation

    + +

    ◆ Type

    + +
    +
    +
    +template<typename T, typename ManifoldType, size_t PD, size_t TD>
    + + + + +
    using ManifoldStateSignalSpec< T, ManifoldType, PD, TD >::Type = ManifoldStateType<T, ManifoldType, PD, TD>
    +
    + +
    +
    +

    Member Function Documentation

    + +

    ◆ NansType()

    + +
    +
    +
    +template<typename T, typename ManifoldType, size_t PD, size_t TD>
    + + + + + +
    + + + + + + + +
    static Type ManifoldStateSignalSpec< T, ManifoldType, PD, TD >::NansType ()
    +
    +inlinestatic
    +
    + +

    Returns state with NaN values.

    + +
    +
    + +

    ◆ Norm()

    + +
    +
    +
    +template<typename T, typename ManifoldType, size_t PD, size_t TD>
    + + + + + +
    + + + + + + + +
    static T ManifoldStateSignalSpec< T, ManifoldType, PD, TD >::Norm (const Type & a)
    +
    +inlinestatic
    +
    + +

    Compute the combined norm of a manifold state.

    +
    Parameters
    + + +
    aThe manifold state.
    +
    +
    +
    Returns
    The combined norm of pose and twist.
    + +
    +
    + +

    ◆ ZeroType()

    + +
    +
    +
    +template<typename T, typename ManifoldType, size_t PD, size_t TD>
    + + + + + +
    + + + + + + + +
    static Type ManifoldStateSignalSpec< T, ManifoldType, PD, TD >::ZeroType ()
    +
    +inlinestatic
    +
    + +

    Returns identity (zero) state.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/structManifoldStateSignalSpec.js b/docs/structManifoldStateSignalSpec.js new file mode 100644 index 0000000..8fa2d7c --- /dev/null +++ b/docs/structManifoldStateSignalSpec.js @@ -0,0 +1,4 @@ +var structManifoldStateSignalSpec = +[ + [ "Type", "structManifoldStateSignalSpec.html#aef8d411c012125303e1faa1d66b35c1c", null ] +]; \ No newline at end of file diff --git a/docs/structRigidBodyDynamics3DOF-members.html b/docs/structRigidBodyDynamics3DOF-members.html new file mode 100644 index 0000000..f4df096 --- /dev/null +++ b/docs/structRigidBodyDynamics3DOF-members.html @@ -0,0 +1,130 @@ + + + + + + + +signals-cpp: Member List + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    RigidBodyDynamics3DOF< T > Member List
    +
    +
    + +

    This is the complete list of members for RigidBodyDynamics3DOF< T >, including all inherited members.

    + + + + + + + + + + +
    InputSignalType typedefRigidBodyDynamics3DOF< T >
    InputType typedefRigidBodyDynamics3DOF< T >
    ParamsType typedefRigidBodyDynamics3DOF< T >
    StateDotDotType typedefRigidBodyDynamics3DOF< T >
    StateDotSignalType typedefRigidBodyDynamics3DOF< T >
    StateDotType typedefRigidBodyDynamics3DOF< T >
    StateSignalType typedefRigidBodyDynamics3DOF< T >
    StateType typedefRigidBodyDynamics3DOF< T >
    update(StateDotSignalType &xdot, const StateSignalType &x, const InputSignalType &u, const double &t0, const double &tf, const ParamsType &params, const bool &insertIntoHistory=false, const bool &calculateXddot=false)RigidBodyDynamics3DOF< T >inlinestatic
    +
    + + + + diff --git a/docs/structRigidBodyDynamics3DOF.html b/docs/structRigidBodyDynamics3DOF.html new file mode 100644 index 0000000..87eb9ab --- /dev/null +++ b/docs/structRigidBodyDynamics3DOF.html @@ -0,0 +1,366 @@ + + + + + + + +signals-cpp: RigidBodyDynamics3DOF< T > Struct Template Reference + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    RigidBodyDynamics3DOF< T > Struct Template Reference
    +
    +
    + +

    Definition of the dynamics for planar motion of a mass that's allowed to rotate. + More...

    + +

    #include <Models.h>

    + + + + + + + + + + + + + + + + + + +

    +Public Types

    using InputSignalType = Vector3Signal<T>
     
    using StateSignalType = SE2StateSignal<T>
     
    using StateDotSignalType = Vector3StateSignal<T>
     
    using InputType = typename InputSignalType::BaseType
     
    using StateType = typename StateSignalType::BaseType
     
    using StateDotType = typename StateDotSignalType::BaseType
     
    using StateDotDotType = typename StateDotSignalType::TangentType
     
    using ParamsType = RigidBodyParams2D
     
    + + + + +

    +Static Public Member Functions

    static bool update (StateDotSignalType &xdot, const StateSignalType &x, const InputSignalType &u, const double &t0, const double &tf, const ParamsType &params, const bool &insertIntoHistory=false, const bool &calculateXddot=false)
     Update a provided state time derivative given an input and time interval.
     
    +

    Detailed Description

    +
    template<typename T>
    +struct RigidBodyDynamics3DOF< T >

    Definition of the dynamics for planar motion of a mass that's allowed to rotate.

    +

    Member Typedef Documentation

    + +

    ◆ InputSignalType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RigidBodyDynamics3DOF< T >::InputSignalType = Vector3Signal<T>
    +
    + +
    +
    + +

    ◆ InputType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RigidBodyDynamics3DOF< T >::InputType = typename InputSignalType::BaseType
    +
    + +
    +
    + +

    ◆ ParamsType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RigidBodyDynamics3DOF< T >::ParamsType = RigidBodyParams2D
    +
    + +
    +
    + +

    ◆ StateDotDotType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RigidBodyDynamics3DOF< T >::StateDotDotType = typename StateDotSignalType::TangentType
    +
    + +
    +
    + +

    ◆ StateDotSignalType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RigidBodyDynamics3DOF< T >::StateDotSignalType = Vector3StateSignal<T>
    +
    + +
    +
    + +

    ◆ StateDotType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RigidBodyDynamics3DOF< T >::StateDotType = typename StateDotSignalType::BaseType
    +
    + +
    +
    + +

    ◆ StateSignalType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RigidBodyDynamics3DOF< T >::StateSignalType = SE2StateSignal<T>
    +
    + +
    +
    + +

    ◆ StateType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RigidBodyDynamics3DOF< T >::StateType = typename StateSignalType::BaseType
    +
    + +
    +
    +

    Member Function Documentation

    + +

    ◆ update()

    + +
    +
    +
    +template<typename T>
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    static bool RigidBodyDynamics3DOF< T >::update (StateDotSignalType & xdot,
    const StateSignalType & x,
    const InputSignalType & u,
    const double & t0,
    const double & tf,
    const ParamsType & params,
    const bool & insertIntoHistory = false,
    const bool & calculateXddot = false )
    +
    +inlinestatic
    +
    + +

    Update a provided state time derivative given an input and time interval.

    +
    Parameters
    + + + + + + + + + +
    xdotThe state time derivative signal to update.
    xThe state signal to reference for the dynamics.
    uThe input signal to reference for the dynamics.
    t0The time at which to sample the state and input.
    tfThe time at which to modify the state time derivative.
    paramsThe 2D rigid body model parameters.
    insertIntoHistoryWhether to insert the answer into state time derivative signal history.
    calculateXddotWhether to use finite differencing to calculate the second time derivative of the state.
    +
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/structRigidBodyDynamics3DOF.js b/docs/structRigidBodyDynamics3DOF.js new file mode 100644 index 0000000..67406e7 --- /dev/null +++ b/docs/structRigidBodyDynamics3DOF.js @@ -0,0 +1,11 @@ +var structRigidBodyDynamics3DOF = +[ + [ "InputSignalType", "structRigidBodyDynamics3DOF.html#a4341d5e4a676e15edc8f8faafef5431a", null ], + [ "InputType", "structRigidBodyDynamics3DOF.html#aa90232643a368b1d4b9fd618ae8d57f7", null ], + [ "ParamsType", "structRigidBodyDynamics3DOF.html#afa1ade3cc027b78a2d2c65df867d52b0", null ], + [ "StateDotDotType", "structRigidBodyDynamics3DOF.html#a562a8cc5e6e8dca19982509022a22ba4", null ], + [ "StateDotSignalType", "structRigidBodyDynamics3DOF.html#a28d138392ca0069c5e6274f78fd08e29", null ], + [ "StateDotType", "structRigidBodyDynamics3DOF.html#a7a9fa29ba97531d856e87560806a805c", null ], + [ "StateSignalType", "structRigidBodyDynamics3DOF.html#a0c346a983bc929f1f7a6e5d2be3a0841", null ], + [ "StateType", "structRigidBodyDynamics3DOF.html#a448c5efb998f492d1518eb0d2d7ded74", null ] +]; \ No newline at end of file diff --git a/docs/structRigidBodyDynamics6DOF-members.html b/docs/structRigidBodyDynamics6DOF-members.html new file mode 100644 index 0000000..ec671d0 --- /dev/null +++ b/docs/structRigidBodyDynamics6DOF-members.html @@ -0,0 +1,130 @@ + + + + + + + +signals-cpp: Member List + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    RigidBodyDynamics6DOF< T > Member List
    +
    +
    + +

    This is the complete list of members for RigidBodyDynamics6DOF< T >, including all inherited members.

    + + + + + + + + + + +
    InputSignalType typedefRigidBodyDynamics6DOF< T >
    InputType typedefRigidBodyDynamics6DOF< T >
    ParamsType typedefRigidBodyDynamics6DOF< T >
    StateDotDotType typedefRigidBodyDynamics6DOF< T >
    StateDotSignalType typedefRigidBodyDynamics6DOF< T >
    StateDotType typedefRigidBodyDynamics6DOF< T >
    StateSignalType typedefRigidBodyDynamics6DOF< T >
    StateType typedefRigidBodyDynamics6DOF< T >
    update(StateDotSignalType &xdot, const StateSignalType &x, const InputSignalType &u, const double &t0, const double &tf, const ParamsType &params, const bool &insertIntoHistory=false, const bool &calculateXddot=false)RigidBodyDynamics6DOF< T >inlinestatic
    +
    + + + + diff --git a/docs/structRigidBodyDynamics6DOF.html b/docs/structRigidBodyDynamics6DOF.html new file mode 100644 index 0000000..719c8f7 --- /dev/null +++ b/docs/structRigidBodyDynamics6DOF.html @@ -0,0 +1,366 @@ + + + + + + + +signals-cpp: RigidBodyDynamics6DOF< T > Struct Template Reference + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    RigidBodyDynamics6DOF< T > Struct Template Reference
    +
    +
    + +

    Definition of the dynamics for a 3D rigid body that can rotate about any axis. + More...

    + +

    #include <Models.h>

    + + + + + + + + + + + + + + + + + + +

    +Public Types

    using InputSignalType = Vector6Signal<T>
     
    using StateSignalType = SE3StateSignal<T>
     
    using StateDotSignalType = Vector6StateSignal<T>
     
    using InputType = typename InputSignalType::BaseType
     
    using StateType = typename StateSignalType::BaseType
     
    using StateDotType = typename StateDotSignalType::BaseType
     
    using StateDotDotType = typename StateDotSignalType::TangentType
     
    using ParamsType = RigidBodyParams3D
     
    + + + + +

    +Static Public Member Functions

    static bool update (StateDotSignalType &xdot, const StateSignalType &x, const InputSignalType &u, const double &t0, const double &tf, const ParamsType &params, const bool &insertIntoHistory=false, const bool &calculateXddot=false)
     Update a provided state time derivative given an input and time interval.
     
    +

    Detailed Description

    +
    template<typename T>
    +struct RigidBodyDynamics6DOF< T >

    Definition of the dynamics for a 3D rigid body that can rotate about any axis.

    +

    Member Typedef Documentation

    + +

    ◆ InputSignalType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RigidBodyDynamics6DOF< T >::InputSignalType = Vector6Signal<T>
    +
    + +
    +
    + +

    ◆ InputType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RigidBodyDynamics6DOF< T >::InputType = typename InputSignalType::BaseType
    +
    + +
    +
    + +

    ◆ ParamsType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RigidBodyDynamics6DOF< T >::ParamsType = RigidBodyParams3D
    +
    + +
    +
    + +

    ◆ StateDotDotType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RigidBodyDynamics6DOF< T >::StateDotDotType = typename StateDotSignalType::TangentType
    +
    + +
    +
    + +

    ◆ StateDotSignalType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RigidBodyDynamics6DOF< T >::StateDotSignalType = Vector6StateSignal<T>
    +
    + +
    +
    + +

    ◆ StateDotType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RigidBodyDynamics6DOF< T >::StateDotType = typename StateDotSignalType::BaseType
    +
    + +
    +
    + +

    ◆ StateSignalType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RigidBodyDynamics6DOF< T >::StateSignalType = SE3StateSignal<T>
    +
    + +
    +
    + +

    ◆ StateType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RigidBodyDynamics6DOF< T >::StateType = typename StateSignalType::BaseType
    +
    + +
    +
    +

    Member Function Documentation

    + +

    ◆ update()

    + +
    +
    +
    +template<typename T>
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    static bool RigidBodyDynamics6DOF< T >::update (StateDotSignalType & xdot,
    const StateSignalType & x,
    const InputSignalType & u,
    const double & t0,
    const double & tf,
    const ParamsType & params,
    const bool & insertIntoHistory = false,
    const bool & calculateXddot = false )
    +
    +inlinestatic
    +
    + +

    Update a provided state time derivative given an input and time interval.

    +
    Parameters
    + + + + + + + + + +
    xdotThe state time derivative signal to update.
    xThe state signal to reference for the dynamics.
    uThe input signal to reference for the dynamics.
    t0The time at which to sample the state and input.
    tfThe time at which to modify the state time derivative.
    paramsThe 3D rigid body model parameters.
    insertIntoHistoryWhether to insert the answer into state time derivative signal history.
    calculateXddotWhether to use finite differencing to calculate the second time derivative of the state.
    +
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/structRigidBodyDynamics6DOF.js b/docs/structRigidBodyDynamics6DOF.js new file mode 100644 index 0000000..4877c13 --- /dev/null +++ b/docs/structRigidBodyDynamics6DOF.js @@ -0,0 +1,11 @@ +var structRigidBodyDynamics6DOF = +[ + [ "InputSignalType", "structRigidBodyDynamics6DOF.html#a8927301269f2ce616317819c769b9364", null ], + [ "InputType", "structRigidBodyDynamics6DOF.html#ac8780c98b59889f8329aa467a5b375fe", null ], + [ "ParamsType", "structRigidBodyDynamics6DOF.html#ad252337a912dcd1cfaa097d9c2d5814e", null ], + [ "StateDotDotType", "structRigidBodyDynamics6DOF.html#a32c92b85c94f66739358385a0a3a07fc", null ], + [ "StateDotSignalType", "structRigidBodyDynamics6DOF.html#afcafc7961087b27b239ad998e436da9a", null ], + [ "StateDotType", "structRigidBodyDynamics6DOF.html#aa664579d3d691fcd4c5824b242dd2061", null ], + [ "StateSignalType", "structRigidBodyDynamics6DOF.html#ad4e0605bf2a0c90acbe9a1a333b9b952", null ], + [ "StateType", "structRigidBodyDynamics6DOF.html#adf5c3e5f6090032d18019c7aeab91f51", null ] +]; \ No newline at end of file diff --git a/docs/structRigidBodyParams1D-members.html b/docs/structRigidBodyParams1D-members.html new file mode 100644 index 0000000..4e73e0e --- /dev/null +++ b/docs/structRigidBodyParams1D-members.html @@ -0,0 +1,124 @@ + + + + + + + +signals-cpp: Member List + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    RigidBodyParams1D Member List
    +
    +
    + +

    This is the complete list of members for RigidBodyParams1D, including all inherited members.

    + + + + +
    gRigidBodyParams1D
    mRigidBodyParams1D
    RigidBodyParams1D()RigidBodyParams1Dinline
    +
    + + + + diff --git a/docs/structRigidBodyParams1D.html b/docs/structRigidBodyParams1D.html new file mode 100644 index 0000000..b562a23 --- /dev/null +++ b/docs/structRigidBodyParams1D.html @@ -0,0 +1,209 @@ + + + + + + + +signals-cpp: RigidBodyParams1D Struct Reference + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    RigidBodyParams1D Struct Reference
    +
    +
    + +

    Parameters for a 1D rigid body model. + More...

    + +

    #include <Models.h>

    + + + + +

    +Public Member Functions

     RigidBodyParams1D ()
     
    + + + + + + + +

    +Public Attributes

    double m
     Model mass.
     
    double g
     Gravitational constant.
     
    +

    Detailed Description

    +

    Parameters for a 1D rigid body model.

    +

    Picture a point mass existing on a line, whether horizontal or vertical.

    +

    Constructor & Destructor Documentation

    + +

    ◆ RigidBodyParams1D()

    + +
    +
    + + + + + +
    + + + + + + + +
    RigidBodyParams1D::RigidBodyParams1D ()
    +
    +inline
    +
    + +
    +
    +

    Member Data Documentation

    + +

    ◆ g

    + +
    +
    + + + + +
    double RigidBodyParams1D::g
    +
    + +

    Gravitational constant.

    +

    Essentially defines which way is "down." Set to zero if e.g., the 1D dimension is horizontal.

    + +
    +
    + +

    ◆ m

    + +
    +
    + + + + +
    double RigidBodyParams1D::m
    +
    + +

    Model mass.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/structRigidBodyParams1D.js b/docs/structRigidBodyParams1D.js new file mode 100644 index 0000000..83288f1 --- /dev/null +++ b/docs/structRigidBodyParams1D.js @@ -0,0 +1,6 @@ +var structRigidBodyParams1D = +[ + [ "RigidBodyParams1D", "structRigidBodyParams1D.html#ab2b9c3eb89bcbf0ac06a33e95725e0eb", null ], + [ "g", "structRigidBodyParams1D.html#a823d208bcbabadd83d3cc8f222973c95", null ], + [ "m", "structRigidBodyParams1D.html#a2f5a1c0e6320c14d72d0ff98ad979332", null ] +]; \ No newline at end of file diff --git a/docs/structRigidBodyParams2D-members.html b/docs/structRigidBodyParams2D-members.html new file mode 100644 index 0000000..ca27749 --- /dev/null +++ b/docs/structRigidBodyParams2D-members.html @@ -0,0 +1,125 @@ + + + + + + + +signals-cpp: Member List + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    RigidBodyParams2D Member List
    +
    +
    + +

    This is the complete list of members for RigidBodyParams2D, including all inherited members.

    + + + + + +
    gRigidBodyParams2D
    JRigidBodyParams2D
    mRigidBodyParams2D
    RigidBodyParams2D()RigidBodyParams2Dinline
    +
    + + + + diff --git a/docs/structRigidBodyParams2D.html b/docs/structRigidBodyParams2D.html new file mode 100644 index 0000000..1d8add0 --- /dev/null +++ b/docs/structRigidBodyParams2D.html @@ -0,0 +1,229 @@ + + + + + + + +signals-cpp: RigidBodyParams2D Struct Reference + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    RigidBodyParams2D Struct Reference
    +
    +
    + +

    Parameters for a 2D rigid body model. + More...

    + +

    #include <Models.h>

    + + + + +

    +Public Member Functions

     RigidBodyParams2D ()
     
    + + + + + + + + + + +

    +Public Attributes

    double m
     Model mass.
     
    double J
     Moment of inertia.
     
    Vector2d g
     Gravitational vector.
     
    +

    Detailed Description

    +

    Parameters for a 2D rigid body model.

    +

    Picture a mass (not necessarily a point mass) confined to a 2D plane.

    +

    Constructor & Destructor Documentation

    + +

    ◆ RigidBodyParams2D()

    + +
    +
    + + + + + +
    + + + + + + + +
    RigidBodyParams2D::RigidBodyParams2D ()
    +
    +inline
    +
    + +
    +
    +

    Member Data Documentation

    + +

    ◆ g

    + +
    +
    + + + + +
    Vector2d RigidBodyParams2D::g
    +
    + +

    Gravitational vector.

    +

    Essentially defines which way is "down." Set to all zeroes if e.g., the 2D plane represents flat ground.

    + +
    +
    + +

    ◆ J

    + +
    +
    + + + + +
    double RigidBodyParams2D::J
    +
    + +

    Moment of inertia.

    +

    The moment of inertia is about the axis coming out of the 2D plane.

    + +
    +
    + +

    ◆ m

    + +
    +
    + + + + +
    double RigidBodyParams2D::m
    +
    + +

    Model mass.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/structRigidBodyParams2D.js b/docs/structRigidBodyParams2D.js new file mode 100644 index 0000000..695919a --- /dev/null +++ b/docs/structRigidBodyParams2D.js @@ -0,0 +1,7 @@ +var structRigidBodyParams2D = +[ + [ "RigidBodyParams2D", "structRigidBodyParams2D.html#a6febaa8c9f355105b908979da3dd1255", null ], + [ "g", "structRigidBodyParams2D.html#ab212f53241edb1bf232499a6ba963258", null ], + [ "J", "structRigidBodyParams2D.html#aaefd836b5e013be87bc317aaba261a25", null ], + [ "m", "structRigidBodyParams2D.html#a5e37a979a1a69333bcc5576d14397185", null ] +]; \ No newline at end of file diff --git a/docs/structRigidBodyParams3D-members.html b/docs/structRigidBodyParams3D-members.html new file mode 100644 index 0000000..7e5fb5a --- /dev/null +++ b/docs/structRigidBodyParams3D-members.html @@ -0,0 +1,125 @@ + + + + + + + +signals-cpp: Member List + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    RigidBodyParams3D Member List
    +
    +
    + +

    This is the complete list of members for RigidBodyParams3D, including all inherited members.

    + + + + + +
    gRigidBodyParams3D
    JRigidBodyParams3D
    mRigidBodyParams3D
    RigidBodyParams3D()RigidBodyParams3Dinline
    +
    + + + + diff --git a/docs/structRigidBodyParams3D.html b/docs/structRigidBodyParams3D.html new file mode 100644 index 0000000..62ef73c --- /dev/null +++ b/docs/structRigidBodyParams3D.html @@ -0,0 +1,229 @@ + + + + + + + +signals-cpp: RigidBodyParams3D Struct Reference + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    RigidBodyParams3D Struct Reference
    +
    +
    + +

    Parameters for a 3D rigid body model. + More...

    + +

    #include <Models.h>

    + + + + +

    +Public Member Functions

     RigidBodyParams3D ()
     
    + + + + + + + + + + +

    +Public Attributes

    double m
     Model mass.
     
    Matrix3d J
     Moment of inertia.
     
    Vector3d g
     Gravitational vector.
     
    +

    Detailed Description

    +

    Parameters for a 3D rigid body model.

    +

    Picture a mass (not necessarily a point mass) free to move around 3D space.

    +

    Constructor & Destructor Documentation

    + +

    ◆ RigidBodyParams3D()

    + +
    +
    + + + + + +
    + + + + + + + +
    RigidBodyParams3D::RigidBodyParams3D ()
    +
    +inline
    +
    + +
    +
    +

    Member Data Documentation

    + +

    ◆ g

    + +
    +
    + + + + +
    Vector3d RigidBodyParams3D::g
    +
    + +

    Gravitational vector.

    +

    Essentially defines which way is "down." Set to all zeroes if there's no gravity.

    + +
    +
    + +

    ◆ J

    + +
    +
    + + + + +
    Matrix3d RigidBodyParams3D::J
    +
    + +

    Moment of inertia.

    +

    Moments of inertia about all three principal axes, represented as \(\boldsymbol{J}\in\mathbb{R}^{3\times 3}\).

    + +
    +
    + +

    ◆ m

    + +
    +
    + + + + +
    double RigidBodyParams3D::m
    +
    + +

    Model mass.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/structRigidBodyParams3D.js b/docs/structRigidBodyParams3D.js new file mode 100644 index 0000000..6c7b237 --- /dev/null +++ b/docs/structRigidBodyParams3D.js @@ -0,0 +1,7 @@ +var structRigidBodyParams3D = +[ + [ "RigidBodyParams3D", "structRigidBodyParams3D.html#a8aa76fea7a0790ead025bf79e767d0cf", null ], + [ "g", "structRigidBodyParams3D.html#a87b9c6a467ebcd6805a1d9419e6149d1", null ], + [ "J", "structRigidBodyParams3D.html#a049fb70b2897579849053dfe2ea840e6", null ], + [ "m", "structRigidBodyParams3D.html#acfa4c165c3278306dac4c0f51819e694", null ] +]; \ No newline at end of file diff --git a/docs/structRotationalDynamics1DOF-members.html b/docs/structRotationalDynamics1DOF-members.html new file mode 100644 index 0000000..6d39276 --- /dev/null +++ b/docs/structRotationalDynamics1DOF-members.html @@ -0,0 +1,130 @@ + + + + + + + +signals-cpp: Member List + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    RotationalDynamics1DOF< T > Member List
    +
    +
    + +

    This is the complete list of members for RotationalDynamics1DOF< T >, including all inherited members.

    + + + + + + + + + + +
    InputSignalType typedefRotationalDynamics1DOF< T >
    InputType typedefRotationalDynamics1DOF< T >
    ParamsType typedefRotationalDynamics1DOF< T >
    StateDotDotType typedefRotationalDynamics1DOF< T >
    StateDotSignalType typedefRotationalDynamics1DOF< T >
    StateDotType typedefRotationalDynamics1DOF< T >
    StateSignalType typedefRotationalDynamics1DOF< T >
    StateType typedefRotationalDynamics1DOF< T >
    update(StateDotSignalType &xdot, const StateSignalType &x, const InputSignalType &u, const double &t0, const double &tf, const ParamsType &params, const bool &insertIntoHistory=false, const bool &calculateXddot=false)RotationalDynamics1DOF< T >inlinestatic
    +
    + + + + diff --git a/docs/structRotationalDynamics1DOF.html b/docs/structRotationalDynamics1DOF.html new file mode 100644 index 0000000..11715a9 --- /dev/null +++ b/docs/structRotationalDynamics1DOF.html @@ -0,0 +1,366 @@ + + + + + + + +signals-cpp: RotationalDynamics1DOF< T > Struct Template Reference + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    RotationalDynamics1DOF< T > Struct Template Reference
    +
    +
    + +

    Definition of the dynamics for planar rotation-only motion of a mass. + More...

    + +

    #include <Models.h>

    + + + + + + + + + + + + + + + + + + +

    +Public Types

    using InputSignalType = Vector1Signal<T>
     
    using StateSignalType = SO2StateSignal<T>
     
    using StateDotSignalType = Vector1StateSignal<T>
     
    using InputType = typename InputSignalType::BaseType
     
    using StateType = typename StateSignalType::BaseType
     
    using StateDotType = typename StateDotSignalType::BaseType
     
    using StateDotDotType = typename StateDotSignalType::TangentType
     
    using ParamsType = RigidBodyParams2D
     
    + + + + +

    +Static Public Member Functions

    static bool update (StateDotSignalType &xdot, const StateSignalType &x, const InputSignalType &u, const double &t0, const double &tf, const ParamsType &params, const bool &insertIntoHistory=false, const bool &calculateXddot=false)
     Update a provided state time derivative given an input and time interval.
     
    +

    Detailed Description

    +
    template<typename T>
    +struct RotationalDynamics1DOF< T >

    Definition of the dynamics for planar rotation-only motion of a mass.

    +

    Member Typedef Documentation

    + +

    ◆ InputSignalType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RotationalDynamics1DOF< T >::InputSignalType = Vector1Signal<T>
    +
    + +
    +
    + +

    ◆ InputType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RotationalDynamics1DOF< T >::InputType = typename InputSignalType::BaseType
    +
    + +
    +
    + +

    ◆ ParamsType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RotationalDynamics1DOF< T >::ParamsType = RigidBodyParams2D
    +
    + +
    +
    + +

    ◆ StateDotDotType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RotationalDynamics1DOF< T >::StateDotDotType = typename StateDotSignalType::TangentType
    +
    + +
    +
    + +

    ◆ StateDotSignalType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RotationalDynamics1DOF< T >::StateDotSignalType = Vector1StateSignal<T>
    +
    + +
    +
    + +

    ◆ StateDotType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RotationalDynamics1DOF< T >::StateDotType = typename StateDotSignalType::BaseType
    +
    + +
    +
    + +

    ◆ StateSignalType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RotationalDynamics1DOF< T >::StateSignalType = SO2StateSignal<T>
    +
    + +
    +
    + +

    ◆ StateType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RotationalDynamics1DOF< T >::StateType = typename StateSignalType::BaseType
    +
    + +
    +
    +

    Member Function Documentation

    + +

    ◆ update()

    + +
    +
    +
    +template<typename T>
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    static bool RotationalDynamics1DOF< T >::update (StateDotSignalType & xdot,
    const StateSignalType & x,
    const InputSignalType & u,
    const double & t0,
    const double & tf,
    const ParamsType & params,
    const bool & insertIntoHistory = false,
    const bool & calculateXddot = false )
    +
    +inlinestatic
    +
    + +

    Update a provided state time derivative given an input and time interval.

    +
    Parameters
    + + + + + + + + + +
    xdotThe state time derivative signal to update.
    xThe state signal to reference for the dynamics.
    uThe input signal to reference for the dynamics.
    t0The time at which to sample the state and input.
    tfThe time at which to modify the state time derivative.
    paramsThe 2D rigid body model parameters.
    insertIntoHistoryWhether to insert the answer into state time derivative signal history.
    calculateXddotWhether to use finite differencing to calculate the second time derivative of the state.
    +
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/structRotationalDynamics1DOF.js b/docs/structRotationalDynamics1DOF.js new file mode 100644 index 0000000..54c8085 --- /dev/null +++ b/docs/structRotationalDynamics1DOF.js @@ -0,0 +1,11 @@ +var structRotationalDynamics1DOF = +[ + [ "InputSignalType", "structRotationalDynamics1DOF.html#a80b5f730e292fda15bdcf1e8b96fe02e", null ], + [ "InputType", "structRotationalDynamics1DOF.html#ad43b9ce6a37b65d677d01ceafe448259", null ], + [ "ParamsType", "structRotationalDynamics1DOF.html#a38ff3a3028dc85817407d15587bf3451", null ], + [ "StateDotDotType", "structRotationalDynamics1DOF.html#a5e2f1cd471e7be99dc9e0f3f29f146f3", null ], + [ "StateDotSignalType", "structRotationalDynamics1DOF.html#a32c4979bf8f6aa3f9c1b0f2818ba4abd", null ], + [ "StateDotType", "structRotationalDynamics1DOF.html#a7df05f9db990eecd331f506d1a17597e", null ], + [ "StateSignalType", "structRotationalDynamics1DOF.html#ac321d27d0098cb3e8e64ea0d98500cb6", null ], + [ "StateType", "structRotationalDynamics1DOF.html#aada86d78db85576298e606afda8c928d", null ] +]; \ No newline at end of file diff --git a/docs/structRotationalDynamics3DOF-members.html b/docs/structRotationalDynamics3DOF-members.html new file mode 100644 index 0000000..67c3a92 --- /dev/null +++ b/docs/structRotationalDynamics3DOF-members.html @@ -0,0 +1,130 @@ + + + + + + + +signals-cpp: Member List + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    RotationalDynamics3DOF< T > Member List
    +
    +
    + +

    This is the complete list of members for RotationalDynamics3DOF< T >, including all inherited members.

    + + + + + + + + + + +
    InputSignalType typedefRotationalDynamics3DOF< T >
    InputType typedefRotationalDynamics3DOF< T >
    ParamsType typedefRotationalDynamics3DOF< T >
    StateDotDotType typedefRotationalDynamics3DOF< T >
    StateDotSignalType typedefRotationalDynamics3DOF< T >
    StateDotType typedefRotationalDynamics3DOF< T >
    StateSignalType typedefRotationalDynamics3DOF< T >
    StateType typedefRotationalDynamics3DOF< T >
    update(StateDotSignalType &xdot, const StateSignalType &x, const InputSignalType &u, const double &t0, const double &tf, const ParamsType &params, const bool &insertIntoHistory=false, const bool &calculateXddot=false)RotationalDynamics3DOF< T >inlinestatic
    +
    + + + + diff --git a/docs/structRotationalDynamics3DOF.html b/docs/structRotationalDynamics3DOF.html new file mode 100644 index 0000000..98eac25 --- /dev/null +++ b/docs/structRotationalDynamics3DOF.html @@ -0,0 +1,366 @@ + + + + + + + +signals-cpp: RotationalDynamics3DOF< T > Struct Template Reference + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    RotationalDynamics3DOF< T > Struct Template Reference
    +
    +
    + +

    Definition of the dynamics for 3D rotation-only motion of a mass. + More...

    + +

    #include <Models.h>

    + + + + + + + + + + + + + + + + + + +

    +Public Types

    using InputSignalType = Vector3Signal<T>
     
    using StateSignalType = SO3StateSignal<T>
     
    using StateDotSignalType = Vector3StateSignal<T>
     
    using InputType = typename InputSignalType::BaseType
     
    using StateType = typename StateSignalType::BaseType
     
    using StateDotType = typename StateDotSignalType::BaseType
     
    using StateDotDotType = typename StateDotSignalType::TangentType
     
    using ParamsType = RigidBodyParams3D
     
    + + + + +

    +Static Public Member Functions

    static bool update (StateDotSignalType &xdot, const StateSignalType &x, const InputSignalType &u, const double &t0, const double &tf, const ParamsType &params, const bool &insertIntoHistory=false, const bool &calculateXddot=false)
     Update a provided state time derivative given an input and time interval.
     
    +

    Detailed Description

    +
    template<typename T>
    +struct RotationalDynamics3DOF< T >

    Definition of the dynamics for 3D rotation-only motion of a mass.

    +

    Member Typedef Documentation

    + +

    ◆ InputSignalType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RotationalDynamics3DOF< T >::InputSignalType = Vector3Signal<T>
    +
    + +
    +
    + +

    ◆ InputType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RotationalDynamics3DOF< T >::InputType = typename InputSignalType::BaseType
    +
    + +
    +
    + +

    ◆ ParamsType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RotationalDynamics3DOF< T >::ParamsType = RigidBodyParams3D
    +
    + +
    +
    + +

    ◆ StateDotDotType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RotationalDynamics3DOF< T >::StateDotDotType = typename StateDotSignalType::TangentType
    +
    + +
    +
    + +

    ◆ StateDotSignalType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RotationalDynamics3DOF< T >::StateDotSignalType = Vector3StateSignal<T>
    +
    + +
    +
    + +

    ◆ StateDotType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RotationalDynamics3DOF< T >::StateDotType = typename StateDotSignalType::BaseType
    +
    + +
    +
    + +

    ◆ StateSignalType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RotationalDynamics3DOF< T >::StateSignalType = SO3StateSignal<T>
    +
    + +
    +
    + +

    ◆ StateType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RotationalDynamics3DOF< T >::StateType = typename StateSignalType::BaseType
    +
    + +
    +
    +

    Member Function Documentation

    + +

    ◆ update()

    + +
    +
    +
    +template<typename T>
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    static bool RotationalDynamics3DOF< T >::update (StateDotSignalType & xdot,
    const StateSignalType & x,
    const InputSignalType & u,
    const double & t0,
    const double & tf,
    const ParamsType & params,
    const bool & insertIntoHistory = false,
    const bool & calculateXddot = false )
    +
    +inlinestatic
    +
    + +

    Update a provided state time derivative given an input and time interval.

    +
    Parameters
    + + + + + + + + + +
    xdotThe state time derivative signal to update.
    xThe state signal to reference for the dynamics.
    uThe input signal to reference for the dynamics.
    t0The time at which to sample the state and input.
    tfThe time at which to modify the state time derivative.
    paramsThe 3D rigid body model parameters.
    insertIntoHistoryWhether to insert the answer into state time derivative signal history.
    calculateXddotWhether to use finite differencing to calculate the second time derivative of the state.
    +
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/structRotationalDynamics3DOF.js b/docs/structRotationalDynamics3DOF.js new file mode 100644 index 0000000..7f99ba7 --- /dev/null +++ b/docs/structRotationalDynamics3DOF.js @@ -0,0 +1,11 @@ +var structRotationalDynamics3DOF = +[ + [ "InputSignalType", "structRotationalDynamics3DOF.html#aac317f9992071217ce644f6b9ccd8763", null ], + [ "InputType", "structRotationalDynamics3DOF.html#aafaa22bb44de6a10f6293f66da5c52e5", null ], + [ "ParamsType", "structRotationalDynamics3DOF.html#a2ac951c964726729410488c2bfcfa156", null ], + [ "StateDotDotType", "structRotationalDynamics3DOF.html#a6e75764a6e9b0ec406d716dfb60943b1", null ], + [ "StateDotSignalType", "structRotationalDynamics3DOF.html#a6b1ce3427c65404128d15a66c3d11621", null ], + [ "StateDotType", "structRotationalDynamics3DOF.html#a40c9649794d2d6e82da6451d17c32bb5", null ], + [ "StateSignalType", "structRotationalDynamics3DOF.html#a2814e21ab959a4cb71fdc2682d1cad69", null ], + [ "StateType", "structRotationalDynamics3DOF.html#aaee29651f3b1671b6ab4e10656ea6f9a", null ] +]; \ No newline at end of file diff --git a/docs/structScalarSignalSpec-members.html b/docs/structScalarSignalSpec-members.html new file mode 100644 index 0000000..d209975 --- /dev/null +++ b/docs/structScalarSignalSpec-members.html @@ -0,0 +1,125 @@ + + + + + + + +signals-cpp: Member List + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    ScalarSignalSpec< T > Member List
    +
    +
    + +

    This is the complete list of members for ScalarSignalSpec< T >, including all inherited members.

    + + + + + +
    NansType()ScalarSignalSpec< T >inlinestatic
    Norm(const Type &a)ScalarSignalSpec< T >inlinestatic
    Type typedefScalarSignalSpec< T >
    ZeroType()ScalarSignalSpec< T >inlinestatic
    +
    + + + + diff --git a/docs/structScalarSignalSpec.html b/docs/structScalarSignalSpec.html new file mode 100644 index 0000000..e20623a --- /dev/null +++ b/docs/structScalarSignalSpec.html @@ -0,0 +1,270 @@ + + + + + + + +signals-cpp: ScalarSignalSpec< T > Struct Template Reference + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    ScalarSignalSpec< T > Struct Template Reference
    +
    +
    + +

    Type specification for scalar-valued signals. + More...

    + +

    #include <Signal.h>

    + + + + +

    +Public Types

    using Type = T
     
    + + + + + + + + + + +

    +Static Public Member Functions

    static Type ZeroType ()
     Returns zero value for the scalar type.
     
    static Type NansType ()
     Returns NaN value for the scalar type.
     
    static T Norm (const Type &a)
     Compute the norm (absolute value) of a scalar.
     
    +

    Detailed Description

    +
    template<typename T>
    +struct ScalarSignalSpec< T >

    Type specification for scalar-valued signals.

    +
    Template Parameters
    + + +
    TScalar type (e.g., double, float).
    +
    +
    +

    Member Typedef Documentation

    + +

    ◆ Type

    + +
    +
    +
    +template<typename T>
    + + + + +
    using ScalarSignalSpec< T >::Type = T
    +
    + +
    +
    +

    Member Function Documentation

    + +

    ◆ NansType()

    + +
    +
    +
    +template<typename T>
    + + + + + +
    + + + + + + + +
    static Type ScalarSignalSpec< T >::NansType ()
    +
    +inlinestatic
    +
    + +

    Returns NaN value for the scalar type.

    + +
    +
    + +

    ◆ Norm()

    + +
    +
    +
    +template<typename T>
    + + + + + +
    + + + + + + + +
    static T ScalarSignalSpec< T >::Norm (const Type & a)
    +
    +inlinestatic
    +
    + +

    Compute the norm (absolute value) of a scalar.

    +
    Parameters
    + + +
    aThe scalar value.
    +
    +
    +
    Returns
    The absolute value.
    + +
    +
    + +

    ◆ ZeroType()

    + +
    +
    +
    +template<typename T>
    + + + + + +
    + + + + + + + +
    static Type ScalarSignalSpec< T >::ZeroType ()
    +
    +inlinestatic
    +
    + +

    Returns zero value for the scalar type.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/structScalarSignalSpec.js b/docs/structScalarSignalSpec.js new file mode 100644 index 0000000..b3e0065 --- /dev/null +++ b/docs/structScalarSignalSpec.js @@ -0,0 +1,4 @@ +var structScalarSignalSpec = +[ + [ "Type", "structScalarSignalSpec.html#a4a319643aeb76b94214f8b41d64d5402", null ] +]; \ No newline at end of file diff --git a/docs/structScalarStateSignalSpec-members.html b/docs/structScalarStateSignalSpec-members.html new file mode 100644 index 0000000..50adfa4 --- /dev/null +++ b/docs/structScalarStateSignalSpec-members.html @@ -0,0 +1,125 @@ + + + + + + + +signals-cpp: Member List + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    ScalarStateSignalSpec< T > Member List
    +
    +
    + +

    This is the complete list of members for ScalarStateSignalSpec< T >, including all inherited members.

    + + + + + +
    NansType()ScalarStateSignalSpec< T >inlinestatic
    Norm(const Type &a)ScalarStateSignalSpec< T >inlinestatic
    Type typedefScalarStateSignalSpec< T >
    ZeroType()ScalarStateSignalSpec< T >inlinestatic
    +
    + + + + diff --git a/docs/structScalarStateSignalSpec.html b/docs/structScalarStateSignalSpec.html new file mode 100644 index 0000000..5887c9d --- /dev/null +++ b/docs/structScalarStateSignalSpec.html @@ -0,0 +1,270 @@ + + + + + + + +signals-cpp: ScalarStateSignalSpec< T > Struct Template Reference + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    ScalarStateSignalSpec< T > Struct Template Reference
    +
    +
    + +

    Type specification for scalar state signals. + More...

    + +

    #include <State.h>

    + + + + +

    +Public Types

    using Type = ScalarStateType<T>
     
    + + + + + + + + + + +

    +Static Public Member Functions

    static Type ZeroType ()
     Returns identity (zero) state.
     
    static Type NansType ()
     Returns state with NaN values.
     
    static T Norm (const Type &a)
     Compute the combined norm of a scalar state.
     
    +

    Detailed Description

    +
    template<typename T>
    +struct ScalarStateSignalSpec< T >

    Type specification for scalar state signals.

    +
    Template Parameters
    + + +
    TScalar type (e.g., double, float).
    +
    +
    +

    Member Typedef Documentation

    + +

    ◆ Type

    + +
    +
    +
    +template<typename T>
    + + + + +
    using ScalarStateSignalSpec< T >::Type = ScalarStateType<T>
    +
    + +
    +
    +

    Member Function Documentation

    + +

    ◆ NansType()

    + +
    +
    +
    +template<typename T>
    + + + + + +
    + + + + + + + +
    static Type ScalarStateSignalSpec< T >::NansType ()
    +
    +inlinestatic
    +
    + +

    Returns state with NaN values.

    + +
    +
    + +

    ◆ Norm()

    + +
    +
    +
    +template<typename T>
    + + + + + +
    + + + + + + + +
    static T ScalarStateSignalSpec< T >::Norm (const Type & a)
    +
    +inlinestatic
    +
    + +

    Compute the combined norm of a scalar state.

    +
    Parameters
    + + +
    aThe scalar state.
    +
    +
    +
    Returns
    The combined norm of pose and twist.
    + +
    +
    + +

    ◆ ZeroType()

    + +
    +
    +
    +template<typename T>
    + + + + + +
    + + + + + + + +
    static Type ScalarStateSignalSpec< T >::ZeroType ()
    +
    +inlinestatic
    +
    + +

    Returns identity (zero) state.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/structScalarStateSignalSpec.js b/docs/structScalarStateSignalSpec.js new file mode 100644 index 0000000..87741a1 --- /dev/null +++ b/docs/structScalarStateSignalSpec.js @@ -0,0 +1,4 @@ +var structScalarStateSignalSpec = +[ + [ "Type", "structScalarStateSignalSpec.html#a7ae52069e3aafdb7c45b14168b1ad11b", null ] +]; \ No newline at end of file diff --git a/docs/structSignal_1_1SignalDP-members.html b/docs/structSignal_1_1SignalDP-members.html new file mode 100644 index 0000000..56c28ca --- /dev/null +++ b/docs/structSignal_1_1SignalDP-members.html @@ -0,0 +1,124 @@ + + + + + + + +signals-cpp: Member List + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Signal< T, BaseSignalSpec, TangentSignalSpec >::SignalDP Member List
    +
    + +
    + + + + diff --git a/docs/structSignal_1_1SignalDP.html b/docs/structSignal_1_1SignalDP.html new file mode 100644 index 0000000..48cdd23 --- /dev/null +++ b/docs/structSignal_1_1SignalDP.html @@ -0,0 +1,195 @@ + + + + + + + +signals-cpp: Signal< T, BaseSignalSpec, TangentSignalSpec >::SignalDP Struct Reference + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    Signal< T, BaseSignalSpec, TangentSignalSpec >::SignalDP Struct Reference
    +
    +
    + +

    Data point structure storing time, value, and derivative. + More...

    + +

    #include <Signal.h>

    + + + + + + + + +

    +Public Attributes

    double t
     
    BaseType x
     
    TangentType xdot
     
    +

    Detailed Description

    +
    template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
    +struct Signal< T, BaseSignalSpec, TangentSignalSpec >::SignalDP

    Data point structure storing time, value, and derivative.

    +

    Member Data Documentation

    + +

    ◆ t

    + +
    +
    +
    +template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
    + + + + +
    double Signal< T, BaseSignalSpec, TangentSignalSpec >::SignalDP::t
    +
    +

    Time stamp.

    + +
    +
    + +

    ◆ x

    + +
    +
    +
    +template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
    + + + + +
    BaseType Signal< T, BaseSignalSpec, TangentSignalSpec >::SignalDP::x
    +
    +

    Signal value at time t.

    + +
    +
    + +

    ◆ xdot

    + +
    +
    +
    +template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
    + + + + +
    TangentType Signal< T, BaseSignalSpec, TangentSignalSpec >::SignalDP::xdot
    +
    +

    Time derivative of signal at time t.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/structSignal_1_1SignalDP.js b/docs/structSignal_1_1SignalDP.js new file mode 100644 index 0000000..a4a44da --- /dev/null +++ b/docs/structSignal_1_1SignalDP.js @@ -0,0 +1,6 @@ +var structSignal_1_1SignalDP = +[ + [ "t", "structSignal_1_1SignalDP.html#aa8996bb75e9ef7533e2ec8987221a926", null ], + [ "x", "structSignal_1_1SignalDP.html#a728647aa9ae18e89087f1bc22b4a405a", null ], + [ "xdot", "structSignal_1_1SignalDP.html#a250999409c388f359351b77d38807e49", null ] +]; \ No newline at end of file diff --git a/docs/structSimpsonIntegratorSpec-members.html b/docs/structSimpsonIntegratorSpec-members.html new file mode 100644 index 0000000..8cfb045 --- /dev/null +++ b/docs/structSimpsonIntegratorSpec-members.html @@ -0,0 +1,122 @@ + + + + + + + +signals-cpp: Member List + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    SimpsonIntegratorSpec Member List
    +
    +
    + +

    This is the complete list of members for SimpsonIntegratorSpec, including all inherited members.

    + + +
    integrate(Signal< BaseSignalSpec, TangentSignalSpec > &xInt, const Signal< TangentSignalSpec, TangentSignalSpec > &x, const double &t0, const double &tf, const bool &insertIntoHistory)SimpsonIntegratorSpecinlinestatic
    +
    + + + + diff --git a/docs/structSimpsonIntegratorSpec.html b/docs/structSimpsonIntegratorSpec.html new file mode 100644 index 0000000..9e55a1a --- /dev/null +++ b/docs/structSimpsonIntegratorSpec.html @@ -0,0 +1,202 @@ + + + + + + + +signals-cpp: SimpsonIntegratorSpec Struct Reference + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    SimpsonIntegratorSpec Struct Reference
    +
    +
    + +

    Specification for numerically integrating a black box function using Simpson's method. + More...

    + +

    #include <Integration.h>

    + + + + + + +

    +Static Public Member Functions

    template<typename BaseSignalSpec, typename TangentSignalSpec>
    static bool integrate (Signal< BaseSignalSpec, TangentSignalSpec > &xInt, const Signal< TangentSignalSpec, TangentSignalSpec > &x, const double &t0, const double &tf, const bool &insertIntoHistory)
     Simpson integration implementation.
     
    +

    Detailed Description

    +

    Specification for numerically integrating a black box function using Simpson's method.

    +

    Member Function Documentation

    + +

    ◆ integrate()

    + +
    +
    +
    +template<typename BaseSignalSpec, typename TangentSignalSpec>
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    static bool SimpsonIntegratorSpec::integrate (Signal< BaseSignalSpec, TangentSignalSpec > & xInt,
    const Signal< TangentSignalSpec, TangentSignalSpec > & x,
    const double & t0,
    const double & tf,
    const bool & insertIntoHistory )
    +
    +inlinestatic
    +
    + +

    Simpson integration implementation.

    +
    Parameters
    + + + + + + +
    xIntThe output signal representing the integration.
    xThe input signal to be integrated.
    t0The start time for the integration.
    tfThe time to integrate to. Ideally the delta from the start time is small.
    insertIntoHistoryWhether to store the result in xInt's memory.
    +
    +
    +
    Returns
    Whether the integration was successful.
    +

    Simpson's method for integration increments the current integral by

    +

    \(\frac{x(t_0)+4x((t_0+t_f)/2)+x(t_f)}{6}\Delta t\)

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/structState-members.html b/docs/structState-members.html new file mode 100644 index 0000000..185c828 --- /dev/null +++ b/docs/structState-members.html @@ -0,0 +1,133 @@ + + + + + + + +signals-cpp: Member List + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + + + + + + diff --git a/docs/structState.html b/docs/structState.html new file mode 100644 index 0000000..bc6578b --- /dev/null +++ b/docs/structState.html @@ -0,0 +1,510 @@ + + + + + + + +signals-cpp: State< T, PoseTypeSpec, PoseDim, TwistTypeSpec, TwistDim > Struct Template Reference + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    State< T, PoseTypeSpec, PoseDim, TwistTypeSpec, TwistDim > Struct Template Reference
    +
    +
    + +

    Base type for all Model state representations. + More...

    + +

    #include <State.h>

    + + + + + + +

    +Public Types

    using PoseType = typename PoseTypeSpec::Type
     
    using TwistType = typename TwistTypeSpec::Type
     
    + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

     State ()
     Initialize an empty state.
     
     State (T *arr)
     Initialize state from a pose and twist pointer array.
     
     State (const State &other)
     State copy constructor.
     
    norm () const
     Obtain the norm of all pose and twist components combined.
     
    Stateoperator*= (const double &s)
     Scale the state (pose and twist) by a scalar.
     
    template<typename T2>
    Stateoperator+= (const State< T2, TwistTypeSpec, TwistDim, TwistTypeSpec, TwistDim > &r)
     Add a tangent space state (twist and derivative of twist) to the current state.
     
    + + + + + + + +

    +Static Public Member Functions

    static State identity ()
     Set the state to identity (zero) values across the board.
     
    static State nans ()
     Set the state to NaN values across the board.
     
    + + + + + + + +

    +Public Attributes

    PoseType pose
     Pose type.
     
    TwistType twist
     Twist (derivative of Pose) type.
     
    +

    Detailed Description

    +
    template<typename T, typename PoseTypeSpec, size_t PoseDim, typename TwistTypeSpec, size_t TwistDim>
    +struct State< T, PoseTypeSpec, PoseDim, TwistTypeSpec, TwistDim >

    Base type for all Model state representations.

    +

    Provides a convenient union of the "pose" and "twist" (or time derivative of pose) components of a state vector and defines arithmetic operations for that union.

    +

    A state is not a Signal type in itself, which is why separate *Signal types are derived below.

    +

    Derived types:

    +
      +
    • Scalar(d)State and Scalar(d)StateSignal
    • +
    • Vector1(d)State and Vector1(d)StateSignal
    • +
    • Vector2(d)State and Vector2(d)StateSignal
    • +
    • Vector3(d)State and Vector3(d)StateSignal
    • +
    • Vector4(d)State and Vector4(d)StateSignal
    • +
    • Vector5(d)State and Vector5(d)StateSignal
    • +
    • Vector6(d)State and Vector6(d)StateSignal
    • +
    • Vector7(d)State and Vector7(d)StateSignal
    • +
    • Vector8(d)State and Vector8(d)StateSignal
    • +
    • Vector9(d)State and Vector9(d)StateSignal
    • +
    • Vector10(d)State and Vector10(d)StateSignal
    • +
    • SO2(d)State and SO2(d)StateSignal
    • +
    • SO3(d)State and SO3(d)StateSignal
    • +
    • SE2(d)State and SE2(d)StateSignal
    • +
    • SE3(d)State and SE3(d)StateSignal
    • +
    +

    Member Typedef Documentation

    + +

    ◆ PoseType

    + +
    +
    +
    +template<typename T, typename PoseTypeSpec, size_t PoseDim, typename TwistTypeSpec, size_t TwistDim>
    + + + + +
    using State< T, PoseTypeSpec, PoseDim, TwistTypeSpec, TwistDim >::PoseType = typename PoseTypeSpec::Type
    +
    + +
    +
    + +

    ◆ TwistType

    + +
    +
    +
    +template<typename T, typename PoseTypeSpec, size_t PoseDim, typename TwistTypeSpec, size_t TwistDim>
    + + + + +
    using State< T, PoseTypeSpec, PoseDim, TwistTypeSpec, TwistDim >::TwistType = typename TwistTypeSpec::Type
    +
    + +
    +
    +

    Constructor & Destructor Documentation

    + +

    ◆ State() [1/3]

    + +
    +
    +
    +template<typename T, typename PoseTypeSpec, size_t PoseDim, typename TwistTypeSpec, size_t TwistDim>
    + + + + + +
    + + + + + + + +
    State< T, PoseTypeSpec, PoseDim, TwistTypeSpec, TwistDim >::State ()
    +
    +inline
    +
    + +

    Initialize an empty state.

    + +
    +
    + +

    ◆ State() [2/3]

    + +
    +
    +
    +template<typename T, typename PoseTypeSpec, size_t PoseDim, typename TwistTypeSpec, size_t TwistDim>
    + + + + + +
    + + + + + + + +
    State< T, PoseTypeSpec, PoseDim, TwistTypeSpec, TwistDim >::State (T * arr)
    +
    +inline
    +
    + +

    Initialize state from a pose and twist pointer array.

    + +
    +
    + +

    ◆ State() [3/3]

    + +
    +
    +
    +template<typename T, typename PoseTypeSpec, size_t PoseDim, typename TwistTypeSpec, size_t TwistDim>
    + + + + + +
    + + + + + + + +
    State< T, PoseTypeSpec, PoseDim, TwistTypeSpec, TwistDim >::State (const State< T, PoseTypeSpec, PoseDim, TwistTypeSpec, TwistDim > & other)
    +
    +inline
    +
    + +

    State copy constructor.

    + +
    +
    +

    Member Function Documentation

    + +

    ◆ identity()

    + +
    +
    +
    +template<typename T, typename PoseTypeSpec, size_t PoseDim, typename TwistTypeSpec, size_t TwistDim>
    + + + + + +
    + + + + + + + +
    static State State< T, PoseTypeSpec, PoseDim, TwistTypeSpec, TwistDim >::identity ()
    +
    +inlinestatic
    +
    + +

    Set the state to identity (zero) values across the board.

    + +
    +
    + +

    ◆ nans()

    + +
    +
    +
    +template<typename T, typename PoseTypeSpec, size_t PoseDim, typename TwistTypeSpec, size_t TwistDim>
    + + + + + +
    + + + + + + + +
    static State State< T, PoseTypeSpec, PoseDim, TwistTypeSpec, TwistDim >::nans ()
    +
    +inlinestatic
    +
    + +

    Set the state to NaN values across the board.

    + +
    +
    + +

    ◆ norm()

    + +
    +
    +
    +template<typename T, typename PoseTypeSpec, size_t PoseDim, typename TwistTypeSpec, size_t TwistDim>
    + + + + + +
    + + + + + + + +
    T State< T, PoseTypeSpec, PoseDim, TwistTypeSpec, TwistDim >::norm () const
    +
    +inline
    +
    + +

    Obtain the norm of all pose and twist components combined.

    + +
    +
    + +

    ◆ operator*=()

    + +
    +
    +
    +template<typename T, typename PoseTypeSpec, size_t PoseDim, typename TwistTypeSpec, size_t TwistDim>
    + + + + + +
    + + + + + + + +
    State & State< T, PoseTypeSpec, PoseDim, TwistTypeSpec, TwistDim >::operator*= (const double & s)
    +
    +inline
    +
    + +

    Scale the state (pose and twist) by a scalar.

    + +
    +
    + +

    ◆ operator+=()

    + +
    +
    +
    +template<typename T, typename PoseTypeSpec, size_t PoseDim, typename TwistTypeSpec, size_t TwistDim>
    +
    +template<typename T2>
    + + + + + +
    + + + + + + + +
    State & State< T, PoseTypeSpec, PoseDim, TwistTypeSpec, TwistDim >::operator+= (const State< T2, TwistTypeSpec, TwistDim, TwistTypeSpec, TwistDim > & r)
    +
    +inline
    +
    + +

    Add a tangent space state (twist and derivative of twist) to the current state.

    + +
    +
    +

    Member Data Documentation

    + +

    ◆ pose

    + +
    +
    +
    +template<typename T, typename PoseTypeSpec, size_t PoseDim, typename TwistTypeSpec, size_t TwistDim>
    + + + + +
    PoseType State< T, PoseTypeSpec, PoseDim, TwistTypeSpec, TwistDim >::pose
    +
    + +

    Pose type.

    + +
    +
    + +

    ◆ twist

    + +
    +
    +
    +template<typename T, typename PoseTypeSpec, size_t PoseDim, typename TwistTypeSpec, size_t TwistDim>
    + + + + +
    TwistType State< T, PoseTypeSpec, PoseDim, TwistTypeSpec, TwistDim >::twist
    +
    + +

    Twist (derivative of Pose) type.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/structState.js b/docs/structState.js new file mode 100644 index 0000000..b07f752 --- /dev/null +++ b/docs/structState.js @@ -0,0 +1,13 @@ +var structState = +[ + [ "PoseType", "structState.html#a31bd8aa44dff5f656b2b2057c8d63821", null ], + [ "TwistType", "structState.html#ab58b6e2fe6ea3c2777c5a8a92f6665a1", null ], + [ "State", "structState.html#adcb914ebe25fe14622a945801267fa7a", null ], + [ "State", "structState.html#a097d236bc46ca02a379e2fd188fe3e97", null ], + [ "State", "structState.html#aa10b450dbe8a806a0b203521b4738c0c", null ], + [ "norm", "structState.html#a718035815fa0c84ba5175b8f1e769bf5", null ], + [ "operator*=", "structState.html#af76faa98cfc18fb81afb0c86f7a0aa75", null ], + [ "operator+=", "structState.html#a7764970f0c29576eac07ab57c28261be", null ], + [ "pose", "structState.html#a0a5874d4c3988770f5498c34ec508c34", null ], + [ "twist", "structState.html#a3f5fb4275701e71a56d2fa1fb8d54080", null ] +]; \ No newline at end of file diff --git a/docs/structTranslationalDynamicsBase-members.html b/docs/structTranslationalDynamicsBase-members.html new file mode 100644 index 0000000..3971e5a --- /dev/null +++ b/docs/structTranslationalDynamicsBase-members.html @@ -0,0 +1,130 @@ + + + + + + + +signals-cpp: Member List + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    TranslationalDynamicsBase< IST, SST, SDST, d, PT > Member List
    +
    + +
    + + + + diff --git a/docs/structTranslationalDynamicsBase.html b/docs/structTranslationalDynamicsBase.html new file mode 100644 index 0000000..8aae15d --- /dev/null +++ b/docs/structTranslationalDynamicsBase.html @@ -0,0 +1,366 @@ + + + + + + + +signals-cpp: TranslationalDynamicsBase< IST, SST, SDST, d, PT > Struct Template Reference + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    TranslationalDynamicsBase< IST, SST, SDST, d, PT > Struct Template Reference
    +
    +
    + +

    Base class for defining the dynamics for 1D, 2D, and 3D point masses. + More...

    + +

    #include <Models.h>

    + + + + + + + + + + + + + + + + + + +

    +Public Types

    using InputSignalType = IST
     
    using StateDotSignalType = SST
     
    using StateSignalType = SDST
     
    using InputType = typename InputSignalType::BaseType
     
    using StateType = typename StateSignalType::BaseType
     
    using StateDotType = typename StateDotSignalType::BaseType
     
    using StateDotDotType = typename StateDotSignalType::TangentType
     
    using ParamsType = PT
     
    + + + + +

    +Static Public Member Functions

    static bool update (StateDotSignalType &xdot, const StateSignalType &x, const InputSignalType &u, const double &t0, const double &tf, const ParamsType &params, const bool &insertIntoHistory=false, const bool &calculateXddot=false)
     Update a provided state time derivative given an input and time interval.
     
    +

    Detailed Description

    +
    template<typename IST, typename SST, typename SDST, size_t d, typename PT>
    +struct TranslationalDynamicsBase< IST, SST, SDST, d, PT >

    Base class for defining the dynamics for 1D, 2D, and 3D point masses.

    +

    Member Typedef Documentation

    + +

    ◆ InputSignalType

    + +
    +
    +
    +template<typename IST, typename SST, typename SDST, size_t d, typename PT>
    + + + + +
    using TranslationalDynamicsBase< IST, SST, SDST, d, PT >::InputSignalType = IST
    +
    + +
    +
    + +

    ◆ InputType

    + +
    +
    +
    +template<typename IST, typename SST, typename SDST, size_t d, typename PT>
    + + + + +
    using TranslationalDynamicsBase< IST, SST, SDST, d, PT >::InputType = typename InputSignalType::BaseType
    +
    + +
    +
    + +

    ◆ ParamsType

    + +
    +
    +
    +template<typename IST, typename SST, typename SDST, size_t d, typename PT>
    + + + + +
    using TranslationalDynamicsBase< IST, SST, SDST, d, PT >::ParamsType = PT
    +
    + +
    +
    + +

    ◆ StateDotDotType

    + +
    +
    +
    +template<typename IST, typename SST, typename SDST, size_t d, typename PT>
    + + + + +
    using TranslationalDynamicsBase< IST, SST, SDST, d, PT >::StateDotDotType = typename StateDotSignalType::TangentType
    +
    + +
    +
    + +

    ◆ StateDotSignalType

    + +
    +
    +
    +template<typename IST, typename SST, typename SDST, size_t d, typename PT>
    + + + + +
    using TranslationalDynamicsBase< IST, SST, SDST, d, PT >::StateDotSignalType = SST
    +
    + +
    +
    + +

    ◆ StateDotType

    + +
    +
    +
    +template<typename IST, typename SST, typename SDST, size_t d, typename PT>
    + + + + +
    using TranslationalDynamicsBase< IST, SST, SDST, d, PT >::StateDotType = typename StateDotSignalType::BaseType
    +
    + +
    +
    + +

    ◆ StateSignalType

    + +
    +
    +
    +template<typename IST, typename SST, typename SDST, size_t d, typename PT>
    + + + + +
    using TranslationalDynamicsBase< IST, SST, SDST, d, PT >::StateSignalType = SDST
    +
    + +
    +
    + +

    ◆ StateType

    + +
    +
    +
    +template<typename IST, typename SST, typename SDST, size_t d, typename PT>
    + + + + +
    using TranslationalDynamicsBase< IST, SST, SDST, d, PT >::StateType = typename StateSignalType::BaseType
    +
    + +
    +
    +

    Member Function Documentation

    + +

    ◆ update()

    + +
    +
    +
    +template<typename IST, typename SST, typename SDST, size_t d, typename PT>
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    static bool TranslationalDynamicsBase< IST, SST, SDST, d, PT >::update (StateDotSignalType & xdot,
    const StateSignalType & x,
    const InputSignalType & u,
    const double & t0,
    const double & tf,
    const ParamsType & params,
    const bool & insertIntoHistory = false,
    const bool & calculateXddot = false )
    +
    +inlinestatic
    +
    + +

    Update a provided state time derivative given an input and time interval.

    +
    Parameters
    + + + + + + + + + +
    xdotThe state time derivative signal to update.
    xThe state signal to reference for the dynamics.
    uThe input signal to reference for the dynamics.
    t0The time at which to sample the state and input.
    tfThe time at which to modify the state time derivative.
    paramsThe rigid body model parameters.
    insertIntoHistoryWhether to insert the answer into state time derivative signal history.
    calculateXddotWhether to use finite differencing to calculate the second time derivative of the state.
    +
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/structTranslationalDynamicsBase.js b/docs/structTranslationalDynamicsBase.js new file mode 100644 index 0000000..b7c4ab0 --- /dev/null +++ b/docs/structTranslationalDynamicsBase.js @@ -0,0 +1,11 @@ +var structTranslationalDynamicsBase = +[ + [ "InputSignalType", "structTranslationalDynamicsBase.html#aac403e4db54adf389b8f1fa3700f6f6a", null ], + [ "InputType", "structTranslationalDynamicsBase.html#ac57d5ab2e4cf3e6afe4a5ae550e858bb", null ], + [ "ParamsType", "structTranslationalDynamicsBase.html#a4ba374f05dd1f5c4168adf3d6a15ef0c", null ], + [ "StateDotDotType", "structTranslationalDynamicsBase.html#a4ae3874e31bcc97d54f4cebea0606002", null ], + [ "StateDotSignalType", "structTranslationalDynamicsBase.html#a3870f6b57fcb6cb578b3640401331a39", null ], + [ "StateDotType", "structTranslationalDynamicsBase.html#a25c6532290d222c25e727394a0afa0b7", null ], + [ "StateSignalType", "structTranslationalDynamicsBase.html#a1f0fdd4bbfb73f52878c7e5c7e459f16", null ], + [ "StateType", "structTranslationalDynamicsBase.html#aabb958cc98babacfc8478a04fb7a37dd", null ] +]; \ No newline at end of file diff --git a/docs/structTrapezoidalIntegratorSpec-members.html b/docs/structTrapezoidalIntegratorSpec-members.html new file mode 100644 index 0000000..cddd2f0 --- /dev/null +++ b/docs/structTrapezoidalIntegratorSpec-members.html @@ -0,0 +1,122 @@ + + + + + + + +signals-cpp: Member List + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    TrapezoidalIntegratorSpec Member List
    +
    +
    + +

    This is the complete list of members for TrapezoidalIntegratorSpec, including all inherited members.

    + + +
    integrate(Signal< T, BaseSignalSpec, TangentSignalSpec > &xInt, const Signal< T, TangentSignalSpec, TangentSignalSpec > &x, const double &t0, const double &tf, const bool &insertIntoHistory)TrapezoidalIntegratorSpecinlinestatic
    +
    + + + + diff --git a/docs/structTrapezoidalIntegratorSpec.html b/docs/structTrapezoidalIntegratorSpec.html new file mode 100644 index 0000000..51479ef --- /dev/null +++ b/docs/structTrapezoidalIntegratorSpec.html @@ -0,0 +1,202 @@ + + + + + + + +signals-cpp: TrapezoidalIntegratorSpec Struct Reference + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    TrapezoidalIntegratorSpec Struct Reference
    +
    +
    + +

    Specification for numerically integrating a black box function using the Trapezoidal method. + More...

    + +

    #include <Integration.h>

    + + + + + + +

    +Static Public Member Functions

    template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
    static bool integrate (Signal< T, BaseSignalSpec, TangentSignalSpec > &xInt, const Signal< T, TangentSignalSpec, TangentSignalSpec > &x, const double &t0, const double &tf, const bool &insertIntoHistory)
     Trapezoidal integration implementation.
     
    +

    Detailed Description

    +

    Specification for numerically integrating a black box function using the Trapezoidal method.

    +

    Member Function Documentation

    + +

    ◆ integrate()

    + +
    +
    +
    +template<typename T, typename BaseSignalSpec, typename TangentSignalSpec>
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    static bool TrapezoidalIntegratorSpec::integrate (Signal< T, BaseSignalSpec, TangentSignalSpec > & xInt,
    const Signal< T, TangentSignalSpec, TangentSignalSpec > & x,
    const double & t0,
    const double & tf,
    const bool & insertIntoHistory )
    +
    +inlinestatic
    +
    + +

    Trapezoidal integration implementation.

    +
    Parameters
    + + + + + + +
    xIntThe output signal representing the integration.
    xThe input signal to be integrated.
    t0The start time for the integration.
    tfThe time to integrate to. Ideally the delta from the start time is small.
    insertIntoHistoryWhether to store the result in xInt's memory.
    +
    +
    +
    Returns
    Whether the integration was successful.
    +

    Trapezoidal integration increments the current integral by

    +

    \(\frac{x(t_0)+x(t_f)}{2}\Delta t\)

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/structVectorSignalSpec-members.html b/docs/structVectorSignalSpec-members.html new file mode 100644 index 0000000..2e6f3bc --- /dev/null +++ b/docs/structVectorSignalSpec-members.html @@ -0,0 +1,125 @@ + + + + + + + +signals-cpp: Member List + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    VectorSignalSpec< T, d > Member List
    +
    +
    + +

    This is the complete list of members for VectorSignalSpec< T, d >, including all inherited members.

    + + + + + +
    NansType()VectorSignalSpec< T, d >inlinestatic
    Norm(const Type &a)VectorSignalSpec< T, d >inlinestatic
    Type typedefVectorSignalSpec< T, d >
    ZeroType()VectorSignalSpec< T, d >inlinestatic
    +
    + + + + diff --git a/docs/structVectorSignalSpec.html b/docs/structVectorSignalSpec.html new file mode 100644 index 0000000..bfb2123 --- /dev/null +++ b/docs/structVectorSignalSpec.html @@ -0,0 +1,271 @@ + + + + + + + +signals-cpp: VectorSignalSpec< T, d > Struct Template Reference + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    VectorSignalSpec< T, d > Struct Template Reference
    +
    +
    + +

    Type specification for vector-valued signals. + More...

    + +

    #include <Signal.h>

    + + + + +

    +Public Types

    using Type = Matrix<T, d, 1>
     
    + + + + + + + + + + +

    +Static Public Member Functions

    static Type ZeroType ()
     Returns zero vector.
     
    static Type NansType ()
     Returns vector filled with NaN values.
     
    static T Norm (const Type &a)
     Compute the Euclidean norm of a vector.
     
    +

    Detailed Description

    +
    template<typename T, size_t d>
    +struct VectorSignalSpec< T, d >

    Type specification for vector-valued signals.

    +
    Template Parameters
    + + + +
    TScalar element type (e.g., double, float).
    dDimension of the vector.
    +
    +
    +

    Member Typedef Documentation

    + +

    ◆ Type

    + +
    +
    +
    +template<typename T, size_t d>
    + + + + +
    using VectorSignalSpec< T, d >::Type = Matrix<T, d, 1>
    +
    + +
    +
    +

    Member Function Documentation

    + +

    ◆ NansType()

    + +
    +
    +
    +template<typename T, size_t d>
    + + + + + +
    + + + + + + + +
    static Type VectorSignalSpec< T, d >::NansType ()
    +
    +inlinestatic
    +
    + +

    Returns vector filled with NaN values.

    + +
    +
    + +

    ◆ Norm()

    + +
    +
    +
    +template<typename T, size_t d>
    + + + + + +
    + + + + + + + +
    static T VectorSignalSpec< T, d >::Norm (const Type & a)
    +
    +inlinestatic
    +
    + +

    Compute the Euclidean norm of a vector.

    +
    Parameters
    + + +
    aThe vector.
    +
    +
    +
    Returns
    The Euclidean norm.
    + +
    +
    + +

    ◆ ZeroType()

    + +
    +
    +
    +template<typename T, size_t d>
    + + + + + +
    + + + + + + + +
    static Type VectorSignalSpec< T, d >::ZeroType ()
    +
    +inlinestatic
    +
    + +

    Returns zero vector.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/structVectorSignalSpec.js b/docs/structVectorSignalSpec.js new file mode 100644 index 0000000..ff66fe0 --- /dev/null +++ b/docs/structVectorSignalSpec.js @@ -0,0 +1,4 @@ +var structVectorSignalSpec = +[ + [ "Type", "structVectorSignalSpec.html#ac21d15d01635665373eaf23b62f3d440", null ] +]; \ No newline at end of file diff --git a/docs/structVectorStateSignalSpec-members.html b/docs/structVectorStateSignalSpec-members.html new file mode 100644 index 0000000..e842a67 --- /dev/null +++ b/docs/structVectorStateSignalSpec-members.html @@ -0,0 +1,125 @@ + + + + + + + +signals-cpp: Member List + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    VectorStateSignalSpec< T, d > Member List
    +
    +
    + +

    This is the complete list of members for VectorStateSignalSpec< T, d >, including all inherited members.

    + + + + + +
    NansType()VectorStateSignalSpec< T, d >inlinestatic
    Norm(const Type &a)VectorStateSignalSpec< T, d >inlinestatic
    Type typedefVectorStateSignalSpec< T, d >
    ZeroType()VectorStateSignalSpec< T, d >inlinestatic
    +
    + + + + diff --git a/docs/structVectorStateSignalSpec.html b/docs/structVectorStateSignalSpec.html new file mode 100644 index 0000000..6c968d5 --- /dev/null +++ b/docs/structVectorStateSignalSpec.html @@ -0,0 +1,271 @@ + + + + + + + +signals-cpp: VectorStateSignalSpec< T, d > Struct Template Reference + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    VectorStateSignalSpec< T, d > Struct Template Reference
    +
    +
    + +

    Type specification for vector state signals. + More...

    + +

    #include <State.h>

    + + + + +

    +Public Types

    using Type = VectorStateType<T, d>
     
    + + + + + + + + + + +

    +Static Public Member Functions

    static Type ZeroType ()
     Returns identity (zero) state.
     
    static Type NansType ()
     Returns state with NaN values.
     
    static T Norm (const Type &a)
     Compute the combined norm of a vector state.
     
    +

    Detailed Description

    +
    template<typename T, size_t d>
    +struct VectorStateSignalSpec< T, d >

    Type specification for vector state signals.

    +
    Template Parameters
    + + + +
    TScalar element type (e.g., double, float).
    dDimension of the vector.
    +
    +
    +

    Member Typedef Documentation

    + +

    ◆ Type

    + +
    +
    +
    +template<typename T, size_t d>
    + + + + +
    using VectorStateSignalSpec< T, d >::Type = VectorStateType<T, d>
    +
    + +
    +
    +

    Member Function Documentation

    + +

    ◆ NansType()

    + +
    +
    +
    +template<typename T, size_t d>
    + + + + + +
    + + + + + + + +
    static Type VectorStateSignalSpec< T, d >::NansType ()
    +
    +inlinestatic
    +
    + +

    Returns state with NaN values.

    + +
    +
    + +

    ◆ Norm()

    + +
    +
    +
    +template<typename T, size_t d>
    + + + + + +
    + + + + + + + +
    static T VectorStateSignalSpec< T, d >::Norm (const Type & a)
    +
    +inlinestatic
    +
    + +

    Compute the combined norm of a vector state.

    +
    Parameters
    + + +
    aThe vector state.
    +
    +
    +
    Returns
    The combined norm of pose and twist.
    + +
    +
    + +

    ◆ ZeroType()

    + +
    +
    +
    +template<typename T, size_t d>
    + + + + + +
    + + + + + + + +
    static Type VectorStateSignalSpec< T, d >::ZeroType ()
    +
    +inlinestatic
    +
    + +

    Returns identity (zero) state.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/structVectorStateSignalSpec.js b/docs/structVectorStateSignalSpec.js new file mode 100644 index 0000000..8bcb22b --- /dev/null +++ b/docs/structVectorStateSignalSpec.js @@ -0,0 +1,4 @@ +var structVectorStateSignalSpec = +[ + [ "Type", "structVectorStateSignalSpec.html#a3994948f467b39ca2dcd77d220a8cf3a", null ] +]; \ No newline at end of file diff --git a/docs/sync_off.png b/docs/sync_off.png new file mode 100644 index 0000000..3b443fc Binary files /dev/null and b/docs/sync_off.png differ diff --git a/docs/sync_on.png b/docs/sync_on.png new file mode 100644 index 0000000..e08320f Binary files /dev/null and b/docs/sync_on.png differ diff --git a/docs/tab_a.png b/docs/tab_a.png new file mode 100644 index 0000000..3b725c4 Binary files /dev/null and b/docs/tab_a.png differ diff --git a/docs/tab_ad.png b/docs/tab_ad.png new file mode 100644 index 0000000..e34850a Binary files /dev/null and b/docs/tab_ad.png differ diff --git a/docs/tab_b.png b/docs/tab_b.png new file mode 100644 index 0000000..e2b4a86 Binary files /dev/null and b/docs/tab_b.png differ diff --git a/docs/tab_bd.png b/docs/tab_bd.png new file mode 100644 index 0000000..91c2524 Binary files /dev/null and b/docs/tab_bd.png differ diff --git a/docs/tab_h.png b/docs/tab_h.png new file mode 100644 index 0000000..fd5cb70 Binary files /dev/null and b/docs/tab_h.png differ diff --git a/docs/tab_hd.png b/docs/tab_hd.png new file mode 100644 index 0000000..2489273 Binary files /dev/null and b/docs/tab_hd.png differ diff --git a/docs/tab_s.png b/docs/tab_s.png new file mode 100644 index 0000000..ab478c9 Binary files /dev/null and b/docs/tab_s.png differ diff --git a/docs/tab_sd.png b/docs/tab_sd.png new file mode 100644 index 0000000..757a565 Binary files /dev/null and b/docs/tab_sd.png differ diff --git a/docs/tabs.css b/docs/tabs.css new file mode 100644 index 0000000..edbb424 --- /dev/null +++ b/docs/tabs.css @@ -0,0 +1 @@ +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:#364D7C;-webkit-transition:all .25s;transition:all .25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px,1px,1px,1px)}#main-menu-state:not(:checked) ~ #main-menu{display:none}#main-menu-state:checked ~ #main-menu{display:block}@media(min-width:768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked) ~ #main-menu{display:block}}.sm-dox{background-image:url('tab_b.png')}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0px 1px 1px rgba(255, 255, 255, 0.9);color:#283A5D;outline:0}.sm-dox a:hover{background-image:url('tab_a.png');background-repeat:repeat-x;color:white;text-shadow:0px 1px 1px rgba(0, 0, 0, 1.0)}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:rgba(255, 255, 255, 0.5);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:white}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url('tab_a.png');background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url('tab_b.png');line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283A5D transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:url('tab_s.png');background-repeat:no-repeat;background-position:right;-moz-border-radius:0 !important;-webkit-border-radius:0;border-radius:0 !important}.sm-dox a:hover{background-image:url('tab_a.png');background-repeat:repeat-x;color:white;text-shadow:0px 1px 1px rgba(0, 0, 0, 1.0)}.sm-dox a:hover span.sub-arrow{border-color:white transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent white transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:white;-moz-border-radius:5px !important;-webkit-border-radius:5px;border-radius:5px !important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555555;background-image:none;border:0 !important}.sm-dox ul a:hover{background-image:url('tab_a.png');background-repeat:repeat-x;color:white;text-shadow:0px 1px 1px rgba(0, 0, 0, 1.0)}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent white}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:white;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url('tab_b.png')}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:white}} diff --git a/doxygen-awesome-css b/doxygen-awesome-css new file mode 160000 index 0000000..9760c30 --- /dev/null +++ b/doxygen-awesome-css @@ -0,0 +1 @@ +Subproject commit 9760c30014131f4eacb8e96f15f3869c7bc5dd8c diff --git a/include/signals/Integration.h b/include/signals/Integration.h index 6e1666a..0988f63 100644 --- a/include/signals/Integration.h +++ b/include/signals/Integration.h @@ -1,9 +1,29 @@ #pragma once #include "signals/Signal.h" +/** + * @brief Base type for all integrators. + * + * Provides methods for incremental (e.g., for control) or holistic (e.g., for open-loop simulation) integrations of + * arbitrary signal types. + * + * **Derived types**: + * + * - `EulerIntegrator` + * - `TrapezoidalIntegrator` + * - `SimpsonIntegrator` + */ template struct Integrator { + /** + * @brief Integrate a signal from the current time to the specified end time. + * @param xInt The output signal representing the integration. + * @param x The input signal to be integrated. + * @param tf The time to integrate to. Ideally the delta from the current time is small. + * @param insertIntoHistory Whether to store the result in xInt's memory. + * @returns Whether the integration was successful. + */ template static bool integrate(Signal& xInt, const Signal& x, @@ -19,6 +39,16 @@ struct Integrator return IntegratorType::integrate(xInt, x, t0, tf, insertIntoHistory); } + /** + * @brief Integrate a signal from the current time to the specified end time, chunked up into smaller integration + * increments. + * @param xInt The output signal representing the integration. + * @param x The input signal to be integrated. + * @param tf The time to integrate to. + * @param dt Time delta length by which to chunk up the integrations. Ideally this is small. + * @param insertIntoHistory Whether to store the result in xInt's memory. + * @returns Whether the integration was successful. + */ template static bool integrate(Signal& xInt, const Signal& x, @@ -46,8 +76,24 @@ struct Integrator } }; +/** + * @brief Specification for numerically integrating a black box function using Euler's method. + */ struct EulerIntegratorSpec { + /** + * @brief Euler integration implementation. + * @param xInt The output signal representing the integration. + * @param x The input signal to be integrated. + * @param t0 The start time for the integration. + * @param tf The time to integrate to. Ideally the delta from the start time is small. + * @param insertIntoHistory Whether to store the result in xInt's memory. + * @returns Whether the integration was successful. + * + * Euler integration increments the current integral by + * + * \f$x(t_f)\Delta t\f$ + */ template static bool integrate(Signal& xInt, const Signal& x, @@ -60,8 +106,24 @@ struct EulerIntegratorSpec } }; +/** + * @brief Specification for numerically integrating a black box function using the Trapezoidal method. + */ struct TrapezoidalIntegratorSpec { + /** + * @brief Trapezoidal integration implementation. + * @param xInt The output signal representing the integration. + * @param x The input signal to be integrated. + * @param t0 The start time for the integration. + * @param tf The time to integrate to. Ideally the delta from the start time is small. + * @param insertIntoHistory Whether to store the result in xInt's memory. + * @returns Whether the integration was successful. + * + * Trapezoidal integration increments the current integral by + * + * \f$\frac{x(t_0)+x(t_f)}{2}\Delta t\f$ + */ template static bool integrate(Signal& xInt, const Signal& x, @@ -70,11 +132,45 @@ struct TrapezoidalIntegratorSpec const bool& insertIntoHistory) { double dt = tf - t0; - return xInt.update(tf, xInt() + (xInt.dot() + x(tf)) * dt / 2.0, x(tf), insertIntoHistory); + return xInt.update(tf, xInt() + (x(t0) + x(tf)) * dt / 2.0, x(tf), insertIntoHistory); } }; -// TODO SimpsonIntegratorSpec +/** + * @brief Specification for numerically integrating a black box function using Simpson's method. + */ +struct SimpsonIntegratorSpec +{ + /** + * @brief Simpson integration implementation. + * @param xInt The output signal representing the integration. + * @param x The input signal to be integrated. + * @param t0 The start time for the integration. + * @param tf The time to integrate to. Ideally the delta from the start time is small. + * @param insertIntoHistory Whether to store the result in xInt's memory. + * @returns Whether the integration was successful. + * + * Simpson's method for integration increments the current integral by + * + * \f$\frac{x(t_0)+4x((t_0+t_f)/2)+x(t_f)}{6}\Delta t\f$ + */ + template + static bool integrate(Signal& xInt, + const Signal& x, + const double& t0, + const double& tf, + const bool& insertIntoHistory) + { + double dt = tf - t0; + return xInt.update(tf, + xInt() + (x(t0) + 4.0 * x((t0 + tf) / 2.0) + x(tf)) * dt / 6.0, + x(tf), + insertIntoHistory); + } +}; + +#define MAKE_INTEGRATOR(IntegratorName) typedef Integrator IntegratorName##Integrator; -typedef Integrator EulerIntegrator; -typedef Integrator TrapezoidalIntegrator; +MAKE_INTEGRATOR(Euler) +MAKE_INTEGRATOR(Trapezoidal) +MAKE_INTEGRATOR(Simpson) diff --git a/include/signals/Models.h b/include/signals/Models.h index ec318b8..42b74d4 100644 --- a/include/signals/Models.h +++ b/include/signals/Models.h @@ -5,6 +5,21 @@ using namespace Eigen; +/** + * @brief Base type for all model simulators. + * + * Provides methods for initialization, reset, and simulation of dynamic models. + * + * **Derived types**: + * + * - `Translational1DOFModel(d)` + * - `Translational2DOFModel(d)` + * - `Translational3DOFModel(d)` + * - `Rotational1DOFModel(d)` + * - `Rotational3DOFModel(d)` + * - `RigidBody3DOFModel(d)` + * - `RigidBody6DOFModel(d)` + */ template class Model { @@ -14,35 +29,66 @@ class Model using StateSignalType = typename DynamicsType::StateSignalType; using ParamsType = typename DynamicsType::ParamsType; - StateSignalType x; + /** + * @brief Model state signal. + */ + StateSignalType x; + /** + * @brief Time derivative of the model state signal. + */ StateDotSignalType xdot; + /** + * @brief Initialize a model with no parameters. + */ Model() : params_{std::nullopt} { reset(); } + /** + * @brief Initialize the model with any required parameters. + * + * The required parameters are determined by the model / dynamics specialization. + */ void setParams(const ParamsType& params) { params_ = params; } + /** + * @brief Verify that the model has parameters explicity set by `setParams()`. + */ bool hasParams() { return params_.has_value(); } + /** + * @brief Zero out the model state and derivative variables and reset simulation time to zero. + */ void reset() { x.reset(); xdot.reset(); } + /** + * @brief Get the current simulation time. + */ double t() const { return x.t(); } + /** + * @brief Simulate the system response to an input over a specified time interval. + * @param u The input signal, which should be defined up to tf. + * @param tf The time to simulate to. Ideally the delta from the current time is small. + * @param insertIntoHistory Whether to store the result in state memory. + * @param calculateXddot Whether to use finite differencing to calculate the second time derivative of the state. + * @returns Whether the simulation was successful. + */ template bool simulate(const InputSignalType& u, const double& tf, @@ -68,6 +114,16 @@ class Model return true; } + /** + * @brief Simulate the system response to an input over a specified time interval, chunked up into smaller + * integration increments. + * @param u The input signal, which should be defined up to tf. + * @param tf The time to simulate to. + * @param dt Time delta length by which to chunk up the integrations. Ideally this is small. + * @param insertIntoHistory Whether to store the result in state memory. + * @param calculateXddot Whether to use finite differencing to calculate the second time derivative of the state. + * @returns Whether the simulation was successful. + */ template bool simulate(const InputSignalType& u, const double& tf, @@ -103,29 +159,81 @@ class Model std::optional params_; }; +/** + * @brief Parameters for a 1D rigid body model. + * + * Picture a point mass existing on a line, whether horizontal or vertical. + */ struct RigidBodyParams1D { RigidBodyParams1D() : m(1), g(0) {} + /** + * @brief Model mass. + */ double m; + /** + * @brief Gravitational constant. + * + * Essentially defines which way is "down." Set to zero if e.g., the 1D dimension is horizontal. + */ double g; }; +/** + * @brief Parameters for a 2D rigid body model. + * + * Picture a mass (not necessarily a point mass) confined to a 2D plane. + */ struct RigidBodyParams2D { RigidBodyParams2D() : m(1), J(1), g(Vector2d::Zero()) {} - double m; - double J; + /** + * @brief Model mass. + */ + double m; + /** + * @brief Moment of inertia. + * + * The moment of inertia is about the axis coming out of the 2D plane. + */ + double J; + /** + * @brief Gravitational vector. + * + * Essentially defines which way is "down." Set to all zeroes if e.g., the 2D plane represents flat ground. + */ Vector2d g; }; +/** + * @brief Parameters for a 3D rigid body model. + * + * Picture a mass (not necessarily a point mass) free to move around 3D space. + */ struct RigidBodyParams3D { RigidBodyParams3D() : m(1), J(Matrix3d::Identity()), g(Vector3d::Zero()) {} - double m; + /** + * @brief Model mass. + */ + double m; + /** + * @brief Moment of inertia. + * + * Moments of inertia about all three principal axes, represented as \f$\boldsymbol{J}\in\mathbb{R}^{3\times 3}\f$. + */ Matrix3d J; + /** + * @brief Gravitational vector. + * + * Essentially defines which way is "down." Set to all zeroes if there's no gravity. + */ Vector3d g; }; +/** + * @brief Base class for defining the dynamics for 1D, 2D, and 3D *point masses*. + */ template struct TranslationalDynamicsBase { @@ -140,6 +248,17 @@ struct TranslationalDynamicsBase using ParamsType = PT; + /** + * @brief Update a provided state time derivative given an input and time interval. + * @param xdot The state time derivative signal to update. + * @param x The state signal to reference for the dynamics. + * @param u The input signal to reference for the dynamics. + * @param t0 The time at which to sample the state and input. + * @param tf The time at which to modify the state time derivative. + * @param params The rigid body model parameters. + * @param insertIntoHistory Whether to insert the answer into state time derivative signal history. + * @param calculateXddot Whether to use finite differencing to calculate the second time derivative of the state. + */ static bool update(StateDotSignalType& xdot, const StateSignalType& x, const InputSignalType& u, @@ -179,6 +298,9 @@ template using TranslationalDynamics3DOF = TranslationalDynamicsBase, Vector3StateSignal, Vector3StateSignal, 3, RigidBodyParams3D>; +/** + * @brief Definition of the dynamics for planar rotation-only motion of a mass. + */ template struct RotationalDynamics1DOF { @@ -193,6 +315,17 @@ struct RotationalDynamics1DOF using ParamsType = RigidBodyParams2D; + /** + * @brief Update a provided state time derivative given an input and time interval. + * @param xdot The state time derivative signal to update. + * @param x The state signal to reference for the dynamics. + * @param u The input signal to reference for the dynamics. + * @param t0 The time at which to sample the state and input. + * @param tf The time at which to modify the state time derivative. + * @param params The 2D rigid body model parameters. + * @param insertIntoHistory Whether to insert the answer into state time derivative signal history. + * @param calculateXddot Whether to use finite differencing to calculate the second time derivative of the state. + */ static bool update(StateDotSignalType& xdot, const StateSignalType& x, const InputSignalType& u, @@ -220,6 +353,9 @@ struct RotationalDynamics1DOF } }; +/** + * @brief Definition of the dynamics for 3D rotation-only motion of a mass. + */ template struct RotationalDynamics3DOF { @@ -234,6 +370,17 @@ struct RotationalDynamics3DOF using ParamsType = RigidBodyParams3D; + /** + * @brief Update a provided state time derivative given an input and time interval. + * @param xdot The state time derivative signal to update. + * @param x The state signal to reference for the dynamics. + * @param u The input signal to reference for the dynamics. + * @param t0 The time at which to sample the state and input. + * @param tf The time at which to modify the state time derivative. + * @param params The 3D rigid body model parameters. + * @param insertIntoHistory Whether to insert the answer into state time derivative signal history. + * @param calculateXddot Whether to use finite differencing to calculate the second time derivative of the state. + */ static bool update(StateDotSignalType& xdot, const StateSignalType& x, const InputSignalType& u, @@ -261,6 +408,9 @@ struct RotationalDynamics3DOF } }; +/** + * @brief Definition of the dynamics for planar motion of a mass that's allowed to rotate. + */ template struct RigidBodyDynamics3DOF { @@ -275,6 +425,17 @@ struct RigidBodyDynamics3DOF using ParamsType = RigidBodyParams2D; + /** + * @brief Update a provided state time derivative given an input and time interval. + * @param xdot The state time derivative signal to update. + * @param x The state signal to reference for the dynamics. + * @param u The input signal to reference for the dynamics. + * @param t0 The time at which to sample the state and input. + * @param tf The time at which to modify the state time derivative. + * @param params The 2D rigid body model parameters. + * @param insertIntoHistory Whether to insert the answer into state time derivative signal history. + * @param calculateXddot Whether to use finite differencing to calculate the second time derivative of the state. + */ static bool update(StateDotSignalType& xdot, const StateSignalType& x, const InputSignalType& u, @@ -305,6 +466,9 @@ struct RigidBodyDynamics3DOF } }; +/** + * @brief Definition of the dynamics for a 3D rigid body that can rotate about any axis. + */ template struct RigidBodyDynamics6DOF { @@ -319,6 +483,17 @@ struct RigidBodyDynamics6DOF using ParamsType = RigidBodyParams3D; + /** + * @brief Update a provided state time derivative given an input and time interval. + * @param xdot The state time derivative signal to update. + * @param x The state signal to reference for the dynamics. + * @param u The input signal to reference for the dynamics. + * @param t0 The time at which to sample the state and input. + * @param tf The time at which to modify the state time derivative. + * @param params The 3D rigid body model parameters. + * @param insertIntoHistory Whether to insert the answer into state time derivative signal history. + * @param calculateXddot Whether to use finite differencing to calculate the second time derivative of the state. + */ static bool update(StateDotSignalType& xdot, const StateSignalType& x, const InputSignalType& u, @@ -356,31 +531,15 @@ struct RigidBodyDynamics6DOF } }; -template -using Translational1DOFModel = Model>; - -template -using Translational2DOFModel = Model>; - -template -using Translational3DOFModel = Model>; - -template -using Rotational1DOFModel = Model>; - -template -using Rotational3DOFModel = Model>; - -template -using RigidBody3DOFModel = Model>; - -template -using RigidBody6DOFModel = Model>; - -typedef Translational1DOFModel Translational1DOFModeld; -typedef Translational2DOFModel Translational2DOFModeld; -typedef Translational3DOFModel Translational3DOFModeld; -typedef Rotational1DOFModel Rotational1DOFModeld; -typedef Rotational3DOFModel Rotational3DOFModeld; -typedef RigidBody3DOFModel RigidBody3DOFModeld; -typedef RigidBody6DOFModel RigidBody6DOFModeld; +#define MAKE_MODEL(ModelBaseName, ModelDOF) \ + template \ + using ModelBaseName##ModelDOF##Model = Model>; \ + typedef ModelBaseName##ModelDOF##Model ModelBaseName##ModelDOF##Modeld; + +MAKE_MODEL(Translational, 1DOF) +MAKE_MODEL(Translational, 2DOF) +MAKE_MODEL(Translational, 3DOF) +MAKE_MODEL(Rotational, 1DOF) +MAKE_MODEL(Rotational, 3DOF) +MAKE_MODEL(RigidBody, 3DOF) +MAKE_MODEL(RigidBody, 6DOF) diff --git a/include/signals/Signal.h b/include/signals/Signal.h index 41738bc..b034f6c 100644 --- a/include/signals/Signal.h +++ b/include/signals/Signal.h @@ -1,5 +1,6 @@ #pragma once #include +#include #include #include #include @@ -9,26 +10,54 @@ using namespace Eigen; +/** + * @brief Methods for interpolating signal values between discrete time points. + */ enum InterpolationMethod { - ZERO_ORDER_HOLD, - LINEAR, - CUBIC_SPLINE + ZERO_ORDER_HOLD, /**< Hold the previous value constant until the next data point. */ + LINEAR, /**< Linearly interpolate between adjacent data points. */ + CUBIC_SPLINE /**< Use cubic spline interpolation for smooth transitions. */ }; +/** + * @brief Methods for extrapolating signal values outside the defined time range. + */ enum ExtrapolationMethod { - NANS, - ZEROS, - CLOSEST + NANS, /**< Return NaN (Not a Number) values outside the defined range. */ + ZEROS, /**< Return zero values outside the defined range. */ + CLOSEST /**< Return the closest boundary value (first or last data point). */ }; +/** + * @brief Methods for computing numerical derivatives of signals. + */ enum DerivativeMethod { - DIRTY, - FINITE_DIFF + DIRTY, /**< Use a discrete-time dirty derivative filter for smoothing. */ + FINITE_DIFF /**< Use simple finite difference approximation. */ }; +/** + * @brief Template class for time-series signals with interpolation, extrapolation, and derivative capabilities. + * + * The Signal class represents a time-varying signal that stores both the value and its time derivative. + * It supports various interpolation methods for querying values at arbitrary time points, configurable + * extrapolation behavior outside the defined time range, and automatic derivative computation. + * + * @tparam BaseSignalSpec Type specification for the signal values (can be scalar, vector, or manifold types). + * @tparam TangentSignalSpec Type specification for the signal derivatives (typically vector types). + * + * **Example usage:** + * ```cpp + * ScalardSignal mySignal; + * mySignal.setInterpolationMethod(InterpolationMethod::LINEAR); + * mySignal.update(1.0, 5.0, true); // time=1.0, value=5.0, store in history + * mySignal.update(2.0, 7.0, true); // time=2.0, value=7.0, store in history + * double interpValue = mySignal(1.5); // Query interpolated value at t=1.5 + * ``` + */ template class Signal { @@ -36,13 +65,19 @@ class Signal using BaseType = typename BaseSignalSpec::Type; using TangentType = typename TangentSignalSpec::Type; + /** + * @brief Data point structure storing time, value, and derivative. + */ struct SignalDP { - double t; - BaseType x; - TangentType xdot; + double t; /**< Time stamp. */ + BaseType x; /**< Signal value at time t. */ + TangentType xdot; /**< Time derivative of signal at time t. */ }; + /** + * @brief Comparator for sorting signal data points by time. + */ struct { bool operator()(SignalDP a, SignalDP b) const @@ -51,10 +86,13 @@ class Signal } } SignalDPComparator; - InterpolationMethod interpolationMethod; - ExtrapolationMethod extrapolationMethod; - DerivativeMethod derivativeMethod; + InterpolationMethod interpolationMethod; /**< Current interpolation method. */ + ExtrapolationMethod extrapolationMethod; /**< Current extrapolation method. */ + DerivativeMethod derivativeMethod; /**< Current derivative computation method. */ + /** + * @brief Default constructor initializing with LINEAR interpolation, ZEROS extrapolation, and DIRTY derivative. + */ Signal() { interpolationMethod = InterpolationMethod::LINEAR; @@ -63,6 +101,10 @@ class Signal reset(); } + /** + * @brief Copy constructor. + * @param other The signal to copy from. + */ Signal(const Signal& other) { this->interpolationMethod = other.interpolationMethod; @@ -75,6 +117,10 @@ class Signal this->needsSort_ = other.needsSort_; } + /** + * @brief Create a new signal representing the time derivative of this signal. + * @return A signal containing the derivative values from this signal's history. + */ Signal dotSignal() { Signal signalDot; @@ -98,31 +144,58 @@ class Signal template friend Signal operator*(const Signal& l, const double& r); + /** + * @brief Get the current time of the signal. + * @return The current time value. + */ double t() const { return t_; } + /** + * @brief Get the current signal value. + * @return The current value. + */ BaseType operator()() const { return x_; } + /** + * @brief Get the current time derivative of the signal. + * @return The current derivative value. + */ TangentType dot() const { return xdot_; } + /** + * @brief Get the signal value at a specific time using interpolation/extrapolation. + * @param t The time to query. + * @return The interpolated/extrapolated signal value at time t. + */ BaseType operator()(const double& t) const { return xAt(t); } + /** + * @brief Get the signal derivative at a specific time using interpolation/extrapolation. + * @param t The time to query. + * @return The interpolated/extrapolated derivative value at time t. + */ TangentType dot(const double& t) const { return xDotAt(t); } + /** + * @brief Get signal values at multiple time points. + * @param t Vector of time points to query. + * @return Vector of interpolated/extrapolated signal values. + */ std::vector operator()(const std::vector& t) const { std::vector xInterp; @@ -133,6 +206,11 @@ class Signal return xInterp; } + /** + * @brief Get signal derivatives at multiple time points. + * @param t Vector of time points to query. + * @return Vector of interpolated/extrapolated derivative values. + */ std::vector dot(const std::vector& t) const { std::vector xDotInterp; @@ -143,21 +221,36 @@ class Signal return xDotInterp; } + /** + * @brief Set the interpolation method for this signal. + * @param method The interpolation method to use. + */ void setInterpolationMethod(InterpolationMethod method) { interpolationMethod = method; } + /** + * @brief Set the extrapolation method for this signal. + * @param method The extrapolation method to use. + */ void setExtrapolationMethod(ExtrapolationMethod method) { extrapolationMethod = method; } + /** + * @brief Set the derivative computation method for this signal. + * @param method The derivative method to use. + */ void setDerivativeMethod(DerivativeMethod method) { derivativeMethod = method; } + /** + * @brief Reset the signal to initial state, clearing all history. + */ void reset() { t_ = -1.0; @@ -167,6 +260,13 @@ class Signal needsSort_ = false; } + /** + * @brief Update the signal with a new value at a given time, computing derivative automatically. + * @param _t The time of the new data point. + * @param _x The value at time _t. + * @param insertHistory Whether to store this data point in history for interpolation. + * @return true if update was successful, false otherwise. + */ bool update(const double& _t, const BaseType& _x, bool insertHistory = false) { TangentType _xdot; @@ -177,6 +277,14 @@ class Signal return update(_t, _x, _xdot, insertHistory); } + /** + * @brief Update the signal with a new value and derivative at a given time. + * @param _t The time of the new data point. + * @param _x The value at time _t. + * @param _xdot The derivative at time _t. + * @param insertHistory Whether to store this data point in history for interpolation. + * @return true if update was successful, false otherwise. + */ bool update(const double& _t, const BaseType& _x, const TangentType& _xdot, bool insertHistory = false) { t_ = _t; @@ -201,6 +309,12 @@ class Signal return true; } + /** + * @brief Update the signal with a history of values, computing derivatives automatically. + * @param _tHistory Vector of time points. + * @param _xHistory Vector of values corresponding to each time point. + * @return true if update was successful, false otherwise. + */ bool update(const std::vector& _tHistory, const std::vector& _xHistory) { size_t nTH = _tHistory.size(); @@ -229,6 +343,13 @@ class Signal return true; } + /** + * @brief Update the signal with a history of values and derivatives. + * @param _tHistory Vector of time points. + * @param _xHistory Vector of values corresponding to each time point. + * @param _xdotHistory Vector of derivatives corresponding to each time point. + * @return true if update was successful, false if vector sizes don't match. + */ bool update(const std::vector& _tHistory, const std::vector& _xHistory, const std::vector& _xdotHistory) @@ -255,21 +376,39 @@ class Signal return true; } + /** + * @brief Get the zero (identity) value for the base signal type. + * @return Zero/identity element for the base type. + */ static inline BaseType baseZero() { return BaseSignalSpec::ZeroType(); } + /** + * @brief Get the zero (identity) value for the tangent signal type. + * @return Zero/identity element for the tangent type. + */ static inline TangentType tangentZero() { return TangentSignalSpec::ZeroType(); } + /** + * @brief Compute the norm of a base signal value. + * @param x The base signal value. + * @return The norm (magnitude) of the value. + */ static inline T baseNorm(const BaseType& x) { return BaseSignalSpec::Norm(x); } + /** + * @brief Compute the norm of a tangent signal value. + * @param x The tangent signal value. + * @return The norm (magnitude) of the value. + */ static inline T tangentNorm(const TangentType& x) { return TangentSignalSpec::Norm(x); @@ -563,6 +702,12 @@ class Signal } }; +/** + * @brief Add a tangent signal to a base signal. + * @param l The left-hand side signal (base type). + * @param r The right-hand side signal (tangent type) to add. + * @return A new signal with r added to l's values and derivatives. + */ template Signal operator+(const Signal& l, const Signal& r) @@ -578,6 +723,12 @@ Signal operator+(const Signal Signal operator-(const Signal& l, const Signal& r) @@ -603,6 +754,12 @@ Signal operator-(const Signal Signal operator*(const double& l, const Signal& r) @@ -618,6 +775,12 @@ Signal operator*(const double& return lr; } +/** + * @brief Multiply a signal by a scalar from the right. + * @param l The signal to multiply. + * @param r The scalar multiplier. + * @return A new signal with all values and derivatives scaled by r. + */ template Signal operator*(const Signal& l, const double& r) @@ -633,54 +796,100 @@ Signal operator*(const Signal struct ScalarSignalSpec { using Type = T; + /** + * @brief Returns zero value for the scalar type. + */ static Type ZeroType() { return (T)0.0; } + /** + * @brief Returns NaN value for the scalar type. + */ static Type NansType() { return (T)1. / 0.; } + /** + * @brief Compute the norm (absolute value) of a scalar. + * @param a The scalar value. + * @return The absolute value. + */ static T Norm(const Type& a) { return a; } }; +/** + * @brief Type specification for vector-valued signals. + * @tparam T Scalar element type (e.g., double, float). + * @tparam d Dimension of the vector. + */ template struct VectorSignalSpec { using Type = Matrix; + /** + * @brief Returns zero vector. + */ static Type ZeroType() { return Type::Zero(); } + /** + * @brief Returns vector filled with NaN values. + */ static Type NansType() { - return Type::Zero(); // TODO fix + return Type::Constant(std::numeric_limits::quiet_NaN()); } + /** + * @brief Compute the Euclidean norm of a vector. + * @param a The vector. + * @return The Euclidean norm. + */ static T Norm(const Type& a) { return a.norm(); } }; +/** + * @brief Type specification for manifold-valued signals (e.g., SO2, SO3, SE2, SE3). + * @tparam ManifoldType The manifold type (e.g., SO2, SE3). + */ template struct ManifoldSignalSpec { using Type = ManifoldType; + /** + * @brief Returns identity element of the manifold. + */ static Type ZeroType() { return Type::identity(); } + /** + * @brief Returns manifold element with NaN values. + */ static Type NansType() { - return Type::identity(); // TODO fix + return Type::nans(); } + /** + * @brief Compute the norm of a manifold element via its logarithmic map. + * @param a The manifold element. + * @return The norm of the logarithmic map. + */ static T Norm(const Type& a) { return ManifoldType::Log(a).norm(); @@ -717,47 +926,28 @@ inline std::ostream& operator<<(std::ostream& os, const ManifoldSignal -using Vector1Signal = VectorSignal; -template -using Vector2Signal = VectorSignal; -template -using Vector3Signal = VectorSignal; -template -using Vector4Signal = VectorSignal; -template -using Vector5Signal = VectorSignal; -template -using Vector6Signal = VectorSignal; -template -using Vector7Signal = VectorSignal; -template -using Vector8Signal = VectorSignal; -template -using Vector9Signal = VectorSignal; -template -using Vector10Signal = VectorSignal; -template -using SO2Signal = ManifoldSignal, 1>; -template -using SO3Signal = ManifoldSignal, 3>; -template -using SE2Signal = ManifoldSignal, 3>; -template -using SE3Signal = ManifoldSignal, 6>; - -typedef ScalarSignal ScalardSignal; -typedef Vector1Signal Vector1dSignal; -typedef Vector2Signal Vector2dSignal; -typedef Vector3Signal Vector3dSignal; -typedef Vector4Signal Vector4dSignal; -typedef Vector5Signal Vector5dSignal; -typedef Vector6Signal Vector6dSignal; -typedef Vector7Signal Vector7dSignal; -typedef Vector8Signal Vector8dSignal; -typedef Vector9Signal Vector9dSignal; -typedef Vector10Signal Vector10dSignal; -typedef SO2Signal SO2dSignal; -typedef SO3Signal SO3dSignal; -typedef SE2Signal SE2dSignal; -typedef SE3Signal SE3dSignal; +#define MAKE_VECTOR_SIGNAL(Dimension) \ + template \ + using Vector##Dimension##Signal = VectorSignal; \ + typedef Vector##Dimension##Signal Vector##Dimension##dSignal; + +#define MAKE_MANIF_SIGNAL(Manif, Dimension) \ + template \ + using Manif##Signal = ManifoldSignal, Dimension>; \ + typedef Manif##Signal Manif##dSignal; + +typedef ScalarSignal ScalardSignal; +MAKE_VECTOR_SIGNAL(1) +MAKE_VECTOR_SIGNAL(2) +MAKE_VECTOR_SIGNAL(3) +MAKE_VECTOR_SIGNAL(4) +MAKE_VECTOR_SIGNAL(5) +MAKE_VECTOR_SIGNAL(6) +MAKE_VECTOR_SIGNAL(7) +MAKE_VECTOR_SIGNAL(8) +MAKE_VECTOR_SIGNAL(9) +MAKE_VECTOR_SIGNAL(10) +MAKE_MANIF_SIGNAL(SO2, 1) +MAKE_MANIF_SIGNAL(SO3, 3) +MAKE_MANIF_SIGNAL(SE2, 3) +MAKE_MANIF_SIGNAL(SE3, 6) diff --git a/include/signals/Signals.h b/include/signals/Signals.h index 2f2f459..e5b2ec4 100644 --- a/include/signals/Signals.h +++ b/include/signals/Signals.h @@ -4,3 +4,34 @@ #include "signals/Integration.h" #include "signals/State.h" #include "signals/Models.h" + +/** + * @mainpage signals-cpp Library Documentation + * + * @section intro_sec Introduction + * Header-only templated C++ library implementing rigid-body dynamics, derivatives, integrals, and interpolation. + * + * The key class definitions in this library from which all specialized types are derived are: + * + * - Signal + * - State + * - Model + * - Integrator + * + * @section install Installation + * This code is meant to be built as a static library with CMake. It should be compatible with the latest versions of + * Eigen and Boost (unit test framework only). + * The library [manif-geom-cpp](https://github.com/goromal/manif-geom-cpp) must also be installed. + * + * Install with + * + * ```bash + * mkdir build + * cd build + * cmake .. + * make # or make install + * ``` + * + * By default, building will also build and run the unit tests, but this can be turned off with the CMake option + * `BUILD_TESTS`. + */ diff --git a/include/signals/State.h b/include/signals/State.h index 5569581..1284f3e 100644 --- a/include/signals/State.h +++ b/include/signals/State.h @@ -3,25 +3,69 @@ using namespace Eigen; +/** + * @brief Base type for all Model state representations. + * + * Provides a convenient union of the "pose" and "twist" (or time derivative of pose) components of a state vector and + * defines arithmetic operations for that union. + * + * A state is *not* a Signal type in itself, which is why separate `*Signal` types are derived below. + * + * **Derived types**: + * + * - `Scalar(d)State` and `Scalar(d)StateSignal` + * - `Vector1(d)State` and `Vector1(d)StateSignal` + * - `Vector2(d)State` and `Vector2(d)StateSignal` + * - `Vector3(d)State` and `Vector3(d)StateSignal` + * - `Vector4(d)State` and `Vector4(d)StateSignal` + * - `Vector5(d)State` and `Vector5(d)StateSignal` + * - `Vector6(d)State` and `Vector6(d)StateSignal` + * - `Vector7(d)State` and `Vector7(d)StateSignal` + * - `Vector8(d)State` and `Vector8(d)StateSignal` + * - `Vector9(d)State` and `Vector9(d)StateSignal` + * - `Vector10(d)State` and `Vector10(d)StateSignal` + * - `SO2(d)State` and `SO2(d)StateSignal` + * - `SO3(d)State` and `SO3(d)StateSignal` + * - `SE2(d)State` and `SE2(d)StateSignal` + * - `SE3(d)State` and `SE3(d)StateSignal` + */ template struct State { using PoseType = typename PoseTypeSpec::Type; using TwistType = typename TwistTypeSpec::Type; - PoseType pose; + /** + * @brief Pose type. + */ + PoseType pose; + /** + * @brief Twist (derivative of Pose) type. + */ TwistType twist; + /** + * @brief Initialize an empty state. + */ State() {} + /** + * @brief Initialize state from a pose and twist pointer array. + */ State(T* arr) : pose(arr), twist(arr + PoseDim) {} + /** + * @brief State copy constructor. + */ State(const State& other) { this->pose = other.pose; this->twist = other.twist; } + /** + * @brief Set the state to identity (zero) values across the board. + */ static State identity() { State x; @@ -30,6 +74,20 @@ struct State return x; } + /** + * @brief Set the state to NaN values across the board. + */ + static State nans() + { + State x; + x.pose = PoseTypeSpec::NansType(); + x.twist = TwistTypeSpec::NansType(); + return x; + } + + /** + * @brief Obtain the norm of all pose and twist components combined. + */ T norm() const { const T poseNorm = PoseTypeSpec::Norm(pose); @@ -37,6 +95,9 @@ struct State return std::sqrt(poseNorm * poseNorm + twistNorm * twistNorm); } + /** + * @brief Scale the state (pose and twist) by a scalar. + */ State& operator*=(const double& s) { pose *= s; @@ -44,6 +105,9 @@ struct State return *this; } + /** + * @brief Add a tangent space state (twist and derivative of twist) to the current state. + */ template State& operator+=(const State& r) { @@ -53,6 +117,9 @@ struct State } }; +/** + * @brief Add a tangent space state (twist and derivative of twist) to the current state. + */ template State operator+(const State& l, const State& r) { @@ -62,6 +129,9 @@ State operator+(const State& l, const return lpr; } +/** + * @brief Subtract a tangent space state (twist and derivative of twist) from the current state. + */ template State operator-(const State& l, const State& r) { @@ -71,6 +141,9 @@ State operator-(const State& l, const return lmr; } +/** + * @brief Scale the state (pose and twist) by a scalar. + */ template State operator*(const double& l, const State& r) { @@ -80,6 +153,9 @@ State operator*(const double& l, const State State operator*(const State& l, const double& r) { @@ -99,6 +175,9 @@ inline std::ostream& operator<<(std::ostream& os, const ScalarStateType& x) return os; } +/** + * @brief Scale the state (pose and twist) by a scalar. + */ template ScalarStateType operator/(const ScalarStateType& l, const double& r) { @@ -118,6 +197,9 @@ inline std::ostream& operator<<(std::ostream& os, const VectorStateType& x return os; } +/** + * @brief Scale the state (pose and twist) by a scalar. + */ template VectorStateType operator/(const VectorStateType& l, const double& r) { @@ -137,85 +219,103 @@ inline std::ostream& operator<<(std::ostream& os, const ManifoldStateType -using ScalarState = ScalarStateType; -template -using Vector1State = VectorStateType; -template -using Vector2State = VectorStateType; -template -using Vector3State = VectorStateType; -template -using Vector4State = VectorStateType; -template -using Vector5State = VectorStateType; -template -using Vector6State = VectorStateType; -template -using Vector7State = VectorStateType; -template -using Vector8State = VectorStateType; -template -using Vector9State = VectorStateType; -template -using Vector10State = VectorStateType; -template -using SO2State = ManifoldStateType, 2, 1>; -template -using SO3State = ManifoldStateType, 4, 3>; -template -using SE2State = ManifoldStateType, 4, 3>; -template -using SE3State = ManifoldStateType, 7, 6>; - +/** + * @brief Type specification for scalar state signals. + * @tparam T Scalar type (e.g., double, float). + */ template struct ScalarStateSignalSpec { using Type = ScalarStateType; + /** + * @brief Returns identity (zero) state. + */ static Type ZeroType() { return Type::identity(); } + /** + * @brief Returns state with NaN values. + */ static Type NansType() { - return Type::identity(); // TODO fix + return Type::nans(); } + /** + * @brief Compute the combined norm of a scalar state. + * @param a The scalar state. + * @return The combined norm of pose and twist. + */ static T Norm(const Type& a) { return a.norm(); } }; +/** + * @brief Type specification for vector state signals. + * @tparam T Scalar element type (e.g., double, float). + * @tparam d Dimension of the vector. + */ template struct VectorStateSignalSpec { using Type = VectorStateType; + /** + * @brief Returns identity (zero) state. + */ static Type ZeroType() { return Type::identity(); } + /** + * @brief Returns state with NaN values. + */ static Type NansType() { - return Type::identity(); // TODO fix + return Type::nans(); } + /** + * @brief Compute the combined norm of a vector state. + * @param a The vector state. + * @return The combined norm of pose and twist. + */ static T Norm(const Type& a) { return a.norm(); } }; +/** + * @brief Type specification for manifold state signals. + * @tparam T Scalar element type (e.g., double, float). + * @tparam ManifoldType The manifold type (e.g., SO2, SE3). + * @tparam PD Pose dimension. + * @tparam TD Tangent (twist) dimension. + */ template struct ManifoldStateSignalSpec { using Type = ManifoldStateType; + /** + * @brief Returns identity (zero) state. + */ static Type ZeroType() { return Type::identity(); } + /** + * @brief Returns state with NaN values. + */ static Type NansType() { - return Type::identity(); // TODO fix + return Type::nans(); } + /** + * @brief Compute the combined norm of a manifold state. + * @param a The manifold state. + * @return The combined norm of pose and twist. + */ static T Norm(const Type& a) { return a.norm(); @@ -253,64 +353,37 @@ inline std::ostream& operator<<(std::ostream& os, const ManifoldStateSignal \ + using Vector##Dimension##State = VectorStateType; \ + template \ + using Vector##Dimension##StateSignal = VectorStateSignal; \ + typedef Vector##Dimension##State Vector##Dimension##dState; \ + typedef Vector##Dimension##StateSignal Vector##Dimension##dStateSignal; + +#define MAKE_MANIF_STATES(Manif, Dimension, TangentDimension) \ + template \ + using Manif##State = ManifoldStateType, Dimension, TangentDimension>; \ + template \ + using Manif##StateSignal = ManifoldStateSignal, Dimension, TangentDimension>; \ + typedef Manif##State Manif##dState; \ + typedef Manif##StateSignal Manif##dStateSignal; + template -using Vector1StateSignal = VectorStateSignal; -template -using Vector2StateSignal = VectorStateSignal; -template -using Vector3StateSignal = VectorStateSignal; -template -using Vector4StateSignal = VectorStateSignal; -template -using Vector5StateSignal = VectorStateSignal; -template -using Vector6StateSignal = VectorStateSignal; -template -using Vector7StateSignal = VectorStateSignal; -template -using Vector8StateSignal = VectorStateSignal; -template -using Vector9StateSignal = VectorStateSignal; -template -using Vector10StateSignal = VectorStateSignal; -template -using SO2StateSignal = ManifoldStateSignal, 2, 1>; -template -using SO3StateSignal = ManifoldStateSignal, 4, 3>; -template -using SE2StateSignal = ManifoldStateSignal, 4, 3>; -template -using SE3StateSignal = ManifoldStateSignal, 7, 6>; - -// TODO Macro-ize all these types of declarations and put them in Signals.h? -typedef ScalarState ScalardState; -typedef Vector1State Vector1dState; -typedef Vector2State Vector2dState; -typedef Vector3State Vector3dState; -typedef Vector4State Vector4dState; -typedef Vector5State Vector5dState; -typedef Vector6State Vector6dState; -typedef Vector7State Vector7dState; -typedef Vector8State Vector8dState; -typedef Vector9State Vector9dState; -typedef Vector10State Vector10dState; -typedef SO2State SO2dState; -typedef SO3State SO3dState; -typedef SE2State SE2dState; -typedef SE3State SE3dState; - -typedef ScalarStateSignal ScalardStateSignal; -typedef Vector1StateSignal Vector1dStateSignal; -typedef Vector2StateSignal Vector2dStateSignal; -typedef Vector3StateSignal Vector3dStateSignal; -typedef Vector4StateSignal Vector4dStateSignal; -typedef Vector5StateSignal Vector5dStateSignal; -typedef Vector6StateSignal Vector6dStateSignal; -typedef Vector7StateSignal Vector7dStateSignal; -typedef Vector8StateSignal Vector8dStateSignal; -typedef Vector9StateSignal Vector9dStateSignal; -typedef Vector10StateSignal Vector10dStateSignal; -typedef SO2StateSignal SO2dStateSignal; -typedef SO3StateSignal SO3dStateSignal; -typedef SE2StateSignal SE2dStateSignal; -typedef SE3StateSignal SE3dStateSignal; +using ScalarState = ScalarStateType; +typedef ScalarState ScalardState; +typedef ScalarStateSignal ScalardStateSignal; +MAKE_VECTOR_STATES(1) +MAKE_VECTOR_STATES(2) +MAKE_VECTOR_STATES(3) +MAKE_VECTOR_STATES(4) +MAKE_VECTOR_STATES(5) +MAKE_VECTOR_STATES(6) +MAKE_VECTOR_STATES(7) +MAKE_VECTOR_STATES(8) +MAKE_VECTOR_STATES(9) +MAKE_VECTOR_STATES(10) +MAKE_MANIF_STATES(SO2, 2, 1) +MAKE_MANIF_STATES(SO3, 4, 3) +MAKE_MANIF_STATES(SE2, 4, 3) +MAKE_MANIF_STATES(SE3, 7, 6) diff --git a/include/signals/Utils.h b/include/signals/Utils.h index b54dd24..f0c2b4f 100644 --- a/include/signals/Utils.h +++ b/include/signals/Utils.h @@ -3,6 +3,10 @@ namespace signal_utils { +/** + * @internal + * This function is for internal use for the Model and Integrator classes. + */ inline bool getTimeDelta(double& dt, const double& t0, const double& tf, const double& dt_max = std::numeric_limits::max()) { diff --git a/scripts/check_dockstrings.sh b/scripts/check_dockstrings.sh new file mode 100644 index 0000000..afa6116 --- /dev/null +++ b/scripts/check_dockstrings.sh @@ -0,0 +1,9 @@ +SOURCE="${BASH_SOURCE[0]}" +while [ -h "$SOURCE" ]; do +DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" +SOURCE="$(readlink "$SOURCE")" +[[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" +done +DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" +cd "$DIR/.." +grep -Prn '(?