Skip to content

Release 1.0 Features and Docs #10

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 4 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "docs/doxygen-awesome-css"]
path = docs/doxygen-awesome-css
url = https://github.com/jothepro/doxygen-awesome-css.git
31 changes: 31 additions & 0 deletions Doxyfile
Original file line number Diff line number Diff line change
@@ -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
75 changes: 16 additions & 59 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,73 +4,30 @@

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<T> 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<T> x;
Vector2Signal<T> x;
Vector3Signal<T> x;
Vector4Signal<T> x;
Vector5Signal<T> x;
Vector6Signal<T> x;
Vector7Signal<T> x;
Vector8Signal<T> x;
Vector9Signal<T> x;
Vector10Signal<T> x;
```

Manifold signal types:

```
SO3Signal<T> x;
SE3Signal<T> x;
```

### Integrators
## Docs Generation

Euler integrator:
Generate updated docs in the `docs/` directory with

```cpp
IntegrateEuler f;
f(SignalType &xInt, TangentSignalType x, double t, bool insertHistory = false);
f(SignalType &xInt, TangentSignalType x, double t, double dt, bool insertHistory = false);
```bash
doxygen Doxyfile
```

Trapezoidal integrator:

```cpp
IntegrateTrapezoidal f;
f(SignalType &xInt, TangentSignalType x, double t, bool insertHistory = false);
f(SignalType &xInt, TangentSignalType x, double t, double dt, bool insertHistory = false);
```

### Models

*Pending implementations:*

- `TranslationalDynamics1DOF<T>`
- Point mass system confined to a straight line.
- `TranslationalDynamics2DOF<T>`
- Point mass system confined to a plane.
- `TranslationalDynamics3DOF<T>`
- Point mass system in a 3-dimensional space.
- `RotationalDynamics1DOF<T>`
- Single-axis rotating mass system fixed in space.
- `RotationalDynamics3DOF<T>`
- Rotating mass fixed in 3D space.
- `RigidBodyDynamics3DOF<T>`
- Rigid body system confined to a plane (unicycle model).
- `RigidBodyDynamics6DOF<T>`
- Rigid body system in 3D space.
213 changes: 213 additions & 0 deletions docs/Integration_8h.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,213 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.10.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>signals-cpp: include/signals/Integration.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
extensions: ["tex2jax.js"],
jax: ["input/TeX","output/HTML-CSS"],
});
</script>
<script type="text/javascript" async="async" src="https://cdn.jsdelivr.net/npm/mathjax@2/MathJax.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="doxygen-awesome.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">signals-cpp
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.10.0 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){initNavTree('Integration_8h.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>

<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> &#124;
<a href="#define-members">Macros</a> &#124;
<a href="#typedef-members">Typedefs</a> </div>
<div class="headertitle"><div class="title">Integration.h File Reference</div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><code>#include &quot;<a class="el" href="Signal_8h_source.html">signals/Signal.h</a>&quot;</code><br />
</div>
<p><a href="Integration_8h_source.html">Go to the source code of this file.</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
Classes</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structIntegrator.html">Integrator&lt; IntegratorType &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Base type for all integrators. <a href="structIntegrator.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structEulerIntegratorSpec.html">EulerIntegratorSpec</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Specification for numerically integrating a black box function using Euler's method. <a href="structEulerIntegratorSpec.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structTrapezoidalIntegratorSpec.html">TrapezoidalIntegratorSpec</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Specification for numerically integrating a black box function using the Trapezoidal method. <a href="structTrapezoidalIntegratorSpec.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structSimpsonIntegratorSpec.html">SimpsonIntegratorSpec</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Specification for numerically integrating a black box function using Simpson's method. <a href="structSimpsonIntegratorSpec.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:ac22028f5bd0a2ecee786d53a348e4073" id="r_ac22028f5bd0a2ecee786d53a348e4073"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ac22028f5bd0a2ecee786d53a348e4073">MAKE_INTEGRATOR</a>(IntegratorName)&#160;&#160;&#160;typedef <a class="el" href="structIntegrator.html">Integrator</a>&lt;IntegratorName##IntegratorSpec&gt; IntegratorName##<a class="el" href="structIntegrator.html">Integrator</a>;</td></tr>
<tr class="separator:ac22028f5bd0a2ecee786d53a348e4073"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="typedef-members" name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:aa77358d3cb26c8b8992d44c2079a2a49" id="r_aa77358d3cb26c8b8992d44c2079a2a49"><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="structIntegrator.html">Integrator</a>&lt; <a class="el" href="structEulerIntegratorSpec.html">EulerIntegratorSpec</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa77358d3cb26c8b8992d44c2079a2a49">EulerIntegrator</a></td></tr>
<tr class="separator:aa77358d3cb26c8b8992d44c2079a2a49"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a95780a5b17730ea091c504cc3ab98b84" id="r_a95780a5b17730ea091c504cc3ab98b84"><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="structIntegrator.html">Integrator</a>&lt; <a class="el" href="structTrapezoidalIntegratorSpec.html">TrapezoidalIntegratorSpec</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a95780a5b17730ea091c504cc3ab98b84">TrapezoidalIntegrator</a></td></tr>
<tr class="separator:a95780a5b17730ea091c504cc3ab98b84"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa29ec69e4ec01e7fe15ed9bbc59fd93b" id="r_aa29ec69e4ec01e7fe15ed9bbc59fd93b"><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="structIntegrator.html">Integrator</a>&lt; <a class="el" href="structSimpsonIntegratorSpec.html">SimpsonIntegratorSpec</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa29ec69e4ec01e7fe15ed9bbc59fd93b">SimpsonIntegrator</a></td></tr>
<tr class="separator:aa29ec69e4ec01e7fe15ed9bbc59fd93b"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h2 class="groupheader">Macro Definition Documentation</h2>
<a id="ac22028f5bd0a2ecee786d53a348e4073" name="ac22028f5bd0a2ecee786d53a348e4073"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac22028f5bd0a2ecee786d53a348e4073">&#9670;&#160;</a></span>MAKE_INTEGRATOR</h2>

<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define MAKE_INTEGRATOR</td>
<td>(</td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname">IntegratorName</span></td><td>)</td>
<td>&#160;&#160;&#160;typedef <a class="el" href="structIntegrator.html">Integrator</a>&lt;IntegratorName##IntegratorSpec&gt; IntegratorName##<a class="el" href="structIntegrator.html">Integrator</a>;</td>
</tr>
</table>
</div><div class="memdoc">

</div>
</div>
<h2 class="groupheader">Typedef Documentation</h2>
<a id="aa77358d3cb26c8b8992d44c2079a2a49" name="aa77358d3cb26c8b8992d44c2079a2a49"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa77358d3cb26c8b8992d44c2079a2a49">&#9670;&#160;</a></span>EulerIntegrator</h2>

<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef <a class="el" href="structIntegrator.html">Integrator</a>&lt; <a class="el" href="structEulerIntegratorSpec.html">EulerIntegratorSpec</a>&gt; <a class="el" href="#aa77358d3cb26c8b8992d44c2079a2a49">EulerIntegrator</a></td>
</tr>
</table>
</div><div class="memdoc">

</div>
</div>
<a id="aa29ec69e4ec01e7fe15ed9bbc59fd93b" name="aa29ec69e4ec01e7fe15ed9bbc59fd93b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa29ec69e4ec01e7fe15ed9bbc59fd93b">&#9670;&#160;</a></span>SimpsonIntegrator</h2>

<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef <a class="el" href="structIntegrator.html">Integrator</a>&lt; <a class="el" href="structSimpsonIntegratorSpec.html">SimpsonIntegratorSpec</a>&gt; <a class="el" href="#aa29ec69e4ec01e7fe15ed9bbc59fd93b">SimpsonIntegrator</a></td>
</tr>
</table>
</div><div class="memdoc">

</div>
</div>
<a id="a95780a5b17730ea091c504cc3ab98b84" name="a95780a5b17730ea091c504cc3ab98b84"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a95780a5b17730ea091c504cc3ab98b84">&#9670;&#160;</a></span>TrapezoidalIntegrator</h2>

<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef <a class="el" href="structIntegrator.html">Integrator</a>&lt; <a class="el" href="structTrapezoidalIntegratorSpec.html">TrapezoidalIntegratorSpec</a>&gt; <a class="el" href="#a95780a5b17730ea091c504cc3ab98b84">TrapezoidalIntegrator</a></td>
</tr>
</table>
</div><div class="memdoc">

</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_661483514bb8dea267426763b771558e.html">signals</a></li><li class="navelem"><a class="el" href="Integration_8h.html">Integration.h</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.10.0 </li>
</ul>
</div>
</body>
</html>
11 changes: 11 additions & 0 deletions docs/Integration_8h.js
Original file line number Diff line number Diff line change
@@ -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#aa77358d3cb26c8b8992d44c2079a2a49", null ],
[ "SimpsonIntegrator", "Integration_8h.html#aa29ec69e4ec01e7fe15ed9bbc59fd93b", null ],
[ "TrapezoidalIntegrator", "Integration_8h.html#a95780a5b17730ea091c504cc3ab98b84", null ]
];
Loading
Loading