Squashed 'third_party/ct/' content from commit 0048d02
Change-Id: Ia7e5360cbb414f92ce4f118bd9613ea23597db52
git-subtree-dir: third_party/ct
git-subtree-split: 0048d027531b6cf1ea730da17b68a0b7ef9070b1
diff --git a/ct_doc/doc/getting_started.dox b/ct_doc/doc/getting_started.dox
new file mode 100644
index 0000000..5e00771
--- /dev/null
+++ b/ct_doc/doc/getting_started.dox
@@ -0,0 +1,60 @@
+/*!
+@page getting_started Getting Started
+
+In order to get you started with using the Control Toolbox, there are several useful resources available. First make sure
+you have installed the Control Toolbox as described in the \ref install_guide "Installation Guide". Afterwards you can
+follow the Tutorials below.
+
+- \subpage tut_basics "Basics Tutorial"
+- \subpage core_tutorials "ct core Tutorials"
+- \subpage optcon_tutorials "ct optcon Tutorials"
+- \subpage rbd_tutorials "ct rbd Tutorials"
+
+If you need additional support, feel free to create an issue on Bitbucket or contact the developers.
+
+\page tut_basics Basic Tutorial
+@tableofcontents
+
+\section tut_basics_pkg Creating a ROS package
+CT is middleware free. Therefore, you are not bound to use ROS or catkin. However, for the sake of simplicity we will use catkin in this tutorial.
+Make sure you have succesfully downloaded and compiled CT according to our @ref gs instructions. Afterwards go to your catkin workspace
+and create a new package
+
+\code{.sh}
+cd ~/catkin_ws/src
+catkin_create_pkg my_ct_project roscpp ct_core ct_rbd ct_optcon ct_models
+\endcode
+
+In this example, we made \a my_ct_project dependent on all CT packages. This is not strictly necessary, however there is no harm to it either.
+
+
+\section tut_basics_exec Creating our first executable
+
+First, we are going to simulate the dynamics of a damped oscillator. Let's create our main file
+
+\include DampedOscillator.cpp
+
+So what happens in this code? We first include ct/core.h. This includes all relevant headers from CT Core. Other CT modules have similar header files
+such as \a ct/rbd.h . If you were to include ct/rbd.h you would not have to include ct/core.h anymore. It is automatically included.
+
+Then, we create a state vector and set it to zero. Afterwards, we can create a shared pointer to a ct::core::SecondOrderSystem
+which is a damped oscillator. It is derived from type ct::core::System, which means we can directly plug it into a ct::core::Integrator. Here, we have many
+choices such as ct::core::IntegratorEuler or ct::core::ODE45. Here, we chose a fourth-order Runge-Kutta integrator. We then simulate (integrate) it forward
+for 1 second with a time step of 0.001 seconds. Finally, we print the new state.
+
+
+\section tut_basics_system Creating our first system
+In the example above, we have been using an oscillator that is provided with CT. However, we might want to model our own system. Here, we will model
+a simple mass point subject to friction. However, if you are interested in more sophisticated models, especially Rigid Body Dynamics, make sure you
+check out the tutorials in ct_rbd as well.
+
+First we create our system within a header Masspoint.h
+
+\include Masspoint.h
+
+As before, we can now integrate this system forward
+
+\include MasspointIntegration.cpp
+
+
+ */