\chapter{Praktická část}

\section{3D model}
Pro modelování dílů jsem se rozhodl použít CAD software FreeCAD. Pro tento CAD jsem se rozhodl proto, že je open source a tedy dostupný pro každého, kdo jej chce používat. Software FreeCAD byl nedávno vydán ve verzi 1.0, což ve světě open-source mj. znamená připravenost pro použití v praxi.

FreeCAD je univerzální parametrický modelovací systém vydaný pod licencí LGPL, tudíž jej lze libovolně šířit a modifikovat. FreeCAD je také multiplatformní, tudíž jej lze používat v operačních systémech Windows, Linux i MacOS. FreeCAD je napsán v jazyce C++ a pro manipulaci s geometrií využívá knihovny OpenCASCADE. FreeCAD lze jej rozšiřovat pomocí zásuvných modulů (pluginů). FreeCAD též umožňuje psaní vlastních skriptů v jazyce Python a nahrávání vlastních maker. \cite{FreeCAD_wiki}

Mnou vytvářené modely vychází z projektu x-scara. \cite{x-scara} Model je rozdělen do tří dílčích částí. První je základna, druhou je rameno a třetí je samotná hlava nástroje. Další částí je sestava s vyhřívanou podložkou.

\subsection{Základna}
Základna je složena ze hliníkových profilů 20x20mm a 20x40mm. Na základnu je upevněno rameno, které se díky lineárně valivým ložiskům pohybuje po vodící tyči o průměru 8mm. Základna je složena ze hliníkových profilů 20x20mm a 20x40mm. Na základnu je upevněno rameno, které se díky lineárně valivým ložiskům pohybuje po třech vodících tyčích o průměru 8mm. V horní části základny je upevněn krokový motor, který pomocí trapézové tyče o průměru 8mm pohybuje ramenem v ose Z.

Pro spojení hliníkových profilů jsem zvolil techniku "Blind Joint", která umožňuje pevné a levné spojení dvou hliníkových profilů. Tuto techniku jsem zvolil i z důvodů snadnější montáže akrylové desky a možnosti zapuštění elektroniky do rámu tiskárny.

V zadní části zakladny je též prostor pro upevnění elektroniky. Za akrylovým panelem jsou přimontovány dvě DIN lišty, na které jsou pomocí adaptérů upevněny jednotlivé elektronické prvky.

\section{Implementace kinematiky SCARA do Klippy}
% cSpell:disable-next-line
Klippy je část firmwaru Klipper, která běží na počítači uvnitř 3D tiskárny, ke kterému je připojena řídící deska. Kód je napsán převážně v jazyce Python, přičemž některé funkce jsou implementovány v jazyce C. Volání těchto funkcí je realizováno použitím rozhraní CFFI (C Foreign Function Interface).  \cite{klipper_code_overview}

\subsection{Přímá a inverzní kinematika}
Kinematické transformace se používají k převodu natočení kloubů na souřadnice koncového bodu (přímá transformace) a naopak (inverzní transformace). Pro výpočet transformace je třeba znát délky ramen \(L_1\) a \(L_2\), offsety ramen \(x_{offset}\) a \(y_{offset}\) a Elbow Crosstalk Ratio (ECR).

Pro další výpočty je potřebné znát Elbow Crosstalk Ratio (převodový poměr řemenice v ose ramene vůči řemenici v ose kloubu).

\begin{equation}
    ECR = \frac { n_S } { n_E }
\end{equation}

\subsubsection{Přímá kinematika}

\begin{equation}
    \phi_S = a
\end{equation}

\begin{equation}
    \phi_E = b - \frac{a}{ECR}
\end{equation}

\begin{equation}
    a\_sin = - \sin(\phi_S) \cdot L_1
\end{equation}

\begin{equation}
    a\_cos = \cos(\phi_S) \cdot L_1
\end{equation}

\begin{equation}
    b\_sin = - \sin(\phi_S + \phi_E) \cdot L_2
\end{equation}

\begin{equation}
    b\_cos = \cos(\phi_S + \phi_E) \cdot L_2
\end{equation}

Nakonec je potřeba přičíst odsazení souřadného systému nástroje vůči souřadnému systému báze (konkrétně odsazení kloubu ramene vůči počátku tiskové podložky). 

\begin{equation}
    x = a\_sin + b\_sin + x_{offset}
\end{equation}

\begin{equation}
    y = a\_cos + b\_cos + y_{offset}
\end{equation}


\subsubsection{Inverzní kinematika}
Nejprve je třeba kompenzovat offset polohy TCP v osách x a y.

\begin{equation}
    x = - (raw_x - x_{offset})
\end{equation}

\begin{equation}
    y = (raw_y - y_{offset})
\end{equation}

Dalším krokem je výpočet vzdálenosti od počátku.

\begin{equation}
    % cSpell:disable-next-line
    hypot = \sqrt{x^2 + y^2}
\end{equation}

Dále se vypočítají úhly ramen \(\phi_S\) (shoulder) a \(\phi_E\) (elbow).

\begin{equation}
    % cSpell:disable-next-line
    \phi_S = arctan2 \left( x, y \right) - arccos \left( \frac { x^2 + y^2 + L_1^2 - L_2^2 } { 2 \cdot L_1 \cdot hypot } \right) [\si{\radian}]
\end{equation}

kde \(L_1\) a \(L_2\) jsou délky ramen.

\begin{equation}
    \phi_E = \frac { \phi_S } { ECR } + arccos \left( \frac { x^2 + y^2 + L_1^2 + L_2^2 } { 2 \cdot L_1 \cdot L_2 } \right) [\si{\radian}]
\end{equation}
    
kde \(ECR\) je Elbow Crosstalk Ratio, \(L_1\) a \(L_2\) jsou délky ramen.

Následně stačí převést úhel v radiánech na stupně.

\begin{equation}
    \Phi_S = \phi_S \cdot \frac { 180 } { \pi } [\si{\degree}]
\end{equation}

\begin{equation}
    \Phi_E = \phi_E \cdot \frac { 180 } { \pi } [\si{\degree}]
\end{equation}
\section{}