-p-formation-control/BAB4/bab4.tex

515 lines
25 KiB
TeX
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

\chapter{\babEmpat}
\section{Perangkat Percobaan}
Sub bab ini akan dibahas mengenai prangkat penunjang sebagai pembatu dalam menyelesaikan penelitian.
Sebagai langkah awal pengembangan, metode yang digunakan adalah \textit{Hardware-In Loop}.
\begin{figure}
\centering
\includegraphics[scale=.5]{BAB3/img/hil_graph.png}
\caption{Hardware-in-the-loop (\kutip{Jim1999}). }
\label{fig:hil_graph}
\end{figure}
\textit{Hardware-in-the-loop} (HIL) adalah metode untuk pengembangan prangkat kendali dengan memanfaatkan model sebagai objek kendalinya. Seperti pada gambar~\ref{fig:hil_graph},
bahwa HIL terdiri dari dua prangkat, yaitu prangkat untuk menjalankan objek kendali atau dapat
disebut sebagai model/plant dan prangkat sistem kontrolnya, dalam kasus ini sistem kontrol menggunakan sistem tertanam (\textit{embedded system}).
Metode HIL, banyak digunakan oleh peneliti dalam proses pengembangan dengan pertimbangan efisiensi terhadap berbagai hal.
Seperti yang digunakan oleh~\kutip{Irwanto2018}, mengembangkan kendali UAV menggunakan HIL;
dan \kutip{QUESADA2019275}, mengembangkan prangkat pankreas buatan yang digunakan untuk mengendalikan kadar gula pada pengidap diabetes.
Pada penelitian ini akan digunakan \textit{microcontroller}(MCU) STM32F466 sebagai prangkat kendalinya.
MCU tersebut ber-arsitektur ARM Cortex-M4 dengan clock 180MHz, menampung ukuran program sampai 256K didalam memori Flash, serta fitur komunikasi standart MCU dengan lengkap.
\textit{Platform Library} yang digunakan dalam pembuatan aplikasi didalamnya adalah \textit{Mbed},
yang menyediakan berbagai banyak fungsi yang lengkap dan mudah untuk berinteraksi dengan fitur-fitur MCU. \textit{Mbed} juga menyediakan fungsi untuk mengaplikasikan RTOS (Real-time Operating System) dengan mudah dan terdokumentasi secara jelas didalam lamannya.
Pada prangkat PC akan dikembangkan program berbasis \textit{Python} yang akan
menjalankan simulasi model dan berkomunikasi dengan MCU secara \textit{real-time}.
Program \textit{Python} akan menjalankan model pada persamaan~\eqref{eq:ss1}-\eqref{eq:ss2}
dengan metode yang dijabarkan pada sub bab~\ref{bab:dua:solusi_ODE}.
Dalam penerapan multi-robot, digunakan 3 perangkat sistem tertanam untuk mempresentasikan kendali 3 robot (Gambar.~\ref{fig:hil_graph_1}).
Setiap prangkat pengendali akan saling terhubung satu sama lain dan semua prangkat pengendali terhubung dengan prangkat PC.
Komunikasi antar prangkat pengendali akan digunakan untuk pertukaran informasi.
Sedangkan komunikasi dengan PC akan mempresentasikan aktuator dan sensor untuk setiap prangkat
kendali. PC akan merekam setiap keluaran dari model dan masukan dari setiap prangkat kendali
sebagai tampilan pergerakan robotnya.
\begin{figure}
\centering
\input{BAB4/img/Diagram_hil_controller.tex}
\caption{HIL Kendali Multi-Robot.}
\label{fig:hil_graph_1}
\end{figure}
% \todo{
% Tambahkan subsection mengenai
% \begin{itemize}
% %% \item pengembangan data/akuisisi data ?
% % \item skenario pengujian/simulasi? (lebih ke teknis seperti lapangan environtment dll)
% % \item skenario Analisa hasil
% \item jadwal penelitian
% \end{itemize}
% }
\section{Strategi Kendali Multi Robot}
Pembahasan strategi akan dibagi menjadi dua bagian, yaitu kendali tingkat bawah dan kendali tingkat atas.
Kendali tingkat bawah akan membahas mengenai kendali robot secara individu, sedangkan kendali tingkat atas akan dibahas mengenai penggabungan antara kendali tingkat bawah dan atas.
\subsection{Kendali Robot}
Pada kendali robot akan dibahas mengenai analisis kendali robot menggunakan
state-space feedback. Kendali robot ini adalah kendali tingkat bawah dari kendali ke-
seluruhan. Dapat diperhatikan pada persamaan~\eqref{eq:ss-formasi}, sebagai kendali tahap awal,
bahwa state yang digunakan adalah koordinat. Maka koordinat tersebut akan men-
jadi set point bagi robot. Variable yang dikendalikan pada kendali robot adalah
koordinat robot dari kondisi inisial. Koordinat disini adalah koordinat state pada
persamaan~\eqref{eq:ss1}. Pada sub bab ini akan didefinisi mengenai kriteria pencapaian
set point dan membahas parameter kendali state-space feedback agar mencapai kri-
teria yang diinginkan.
\subsubsection{State Feedback}
\begin{figure}
\centering
\input{BAB4/img/statefeedback.tex}
\caption{State-feedback Sistem}
\label{fig:state-feedback}
\end{figure}
Pada persamaan~\eqref{eq:ss1} diketahui bahwa state memiliki dimensi $6 \times 1$. Dimensi
tersebut tidak menunjukan sistem memiliki orde 6. Apabila diperhatikan orde
dari sistem adalah orde 2. Dengan membaginya kedalam 3 persamaan state-space
akan lebih mudah dalam analisis parameter kendalinya. Berikut adalah persamaan
\begin{align}
\begin{bmatrix}\dot{x}_p \\ \ddot{x}_r \end{bmatrix} & =
\begin{bmatrix}0 & A_{14} \\ 0 & A_{44} \end{bmatrix}
\begin{bmatrix}{x}_p \\ \dot{x}_r\end{bmatrix} +
\begin{bmatrix}0 & 0& 0 \\ B_{11} & B_{12} & B_{13} \end{bmatrix}
\begin{bmatrix}u_1 \\ u_2 \\ u_3 \end{bmatrix} + k_{44}sgn(\dot{x}_r) \label{eq:ssx} \\
\begin{bmatrix}\dot{y}_p \\ \ddot{y}_r \end{bmatrix} & =
\begin{bmatrix}0 & A_{25} \\ 0 & A_{55} \end{bmatrix}
\begin{bmatrix}{y}_p \\ \dot{y}_r\end{bmatrix} +
\begin{bmatrix}0 & 0& 0 \\ B_{21} & B_{22} & B_{23} \end{bmatrix}
\begin{bmatrix}u_1 \\ u_2 \\ u_3 \end{bmatrix} + k_{55}sgn(\dot{y}_r)\label{eq:ssy} \\
\begin{bmatrix}\dot{\theta}_p \\ \ddot{\theta}_r\end{bmatrix} & =
\begin{bmatrix}0 & A_{34} \\ 0 & A_{66} \end{bmatrix}
\begin{bmatrix}{\theta}_p \\ \dot{\theta}_r\end{bmatrix} +
\begin{bmatrix}0 & 0& 0 \\ B_{31} & B_{32} & B_{33} \end{bmatrix}
\begin{bmatrix}u_1 \\ u_2 \\ u_3 \end{bmatrix} + k_{66}sgn(\dot{\theta}_r) \label{eq:ssthe}
\end{align}
State feedback membutuhkan kembalian nilai state dari sistem dan mengka-
likanya dengan besaran tertentu agar nilai karakteristik sistem tetap dalam keadaan
stabil atau sesuai ketentuan. Secara umum, state tidak dapat diperoleh langsung dari
sistem. Kemampuan untuk memperoleh state dari sistem langsung disebut dengan
kemampuan Observablity. Apabila sebuh sistem tidak Observable, maka dalam
kendalinya dibutuhkan Observer. Dimana tugasnya adalah mengestimasi state pada
sistem dengan membandingkan keluaran dan masukan. Syarat untuk dapat diterap-
kan state feedback, sistem harus observable dan controlable. Berikut adalah rumus
untuk menguji apakah sistem bersifat controlable atau tidak (Dorf, dkk (2010)).
\begin{align*} P_c = \begin{bmatrix} B & AB & A^2B & \dots & A^{n-1}B \end{bmatrix}\end{align*}
\begin{align} rank[P_c] = n \end{align}
Apabila hasil dari $rank(P_c ) \neq n$ maka sistem tidak \textit{fully controlable}. Sedangkan untuk
menguji observabilitas dapat menggunakan rumus berikut.
\begin{align*} P_o = \begin{bmatrix} C \\ CA \\ CA^2 \\ \vdots \\ CA^{n-1} \end{bmatrix}\end{align*}
\begin{align} rank[P_o] = n \end{align}
Apabila sistem observable, rank dari matriks Observablity $P_o$ sama dengan besar orde sistem.
Menggunakan parameter robot pada Tabel~\ref{tab:param_model} untuk diimplementasi pada persamaan~\eqref{eq:ss1}-\eqref{eq:ss2} akan menghasilkan $rank[P_c]=6$ dan $rank[P o] = 6$ .
Maka dari itu dapat disimpulkan sistem robot adalah controlable dan observable.
Karena pengukuran pada setiap \textit{state} dapat dilakukan,
maka \textit{observer} tidak dibutuhkan dalam desain kendali robot.
\begin{table}
\caption{Parameter model oleh~\kutip{CORREIA20127}}
\label{table:parameter_model}
\begin{center}
\begin{tabular}{| c | c | c |}
\hline
Simbol & Deskripsi & Nilai \\ \hline
$B_v (N/m/s)$ & viscous friction coefficient related to v & 0.94 \\
$B_{vn} (N/m/s)$ & viscous friction coefficient related to vn & 0.96 \\
$B_\omega (N/rad/s)$ & viscous friction coefficient related to $\omega$ & 0.01 \\
$C_v (N )$ & coulomb friction coefficient related to v & 2.2 \\
$C_{vn} (N )$ & coulomb friction coefficient related to vn & 1.5 \\
$C_\omega (N.m)$ & coulomb friction coefficient related to $\omega$ & 0.099 \\
$b(m)$ & radius of the robot & 0.1 \\
$M (kg)$ & mass of the robot & 1.5 \\
$In(kg.m^2 )$ & inertia moment of the robot & 0.025 \\
$\delta$ & angle & $30^\circ$ \\
$r_1 , r_2 , r_3 (m)$ & radius of the wheels & 0.035 \\
$l_1, l_2, l_3$ & reduction of the motors & 19:1 \\
$L_{a1...3} (H)$ & motors armature inductance & 0.00011 \\
$R_{a1...3} (\Omega)$ & motors armature resistance & 1.69 \\
$K_v (V olts/rad/$s) & motors emf constant & 0.0059 \\
$K_{t1...3}$ (N.m/A) & motors torque constant & 0.0059 \\
\hline
\end{tabular}
\end{center}
\label{tab:param_model}
\end{table}
\subsubsection{Desain Kendali}
Berdasarkan \kutip{Richard2010}, bahwa kendali optimal berdasarkan indeks kinerja sistem. Indeks tersebut adalah hasil dari meminimalisasi pada integral kuadrat error atau \textit{integration square error} (ISE).
Kendali optimal dilakukan oleh komputer untuk mengkalkulasi minimal indeks tersebut.
Apabila sebuah sistem \textit{state space}
\begin{align*}
\dot{x} & = Ax + Bu \\
u & = -K_sx
\end{align*}
maka indeks kinerja
\begin{align}
J & = \int_0^{\infty} (x^T Q x + u^TRu ) dt
\end{align}
dimana $Q$ adalah matriks diagonal $n \times n$, $R$ adalah matriks diagonal $m \times m$ dan keduanya adalah matriks pembobot terhadap state sistem dan input.
Ketika indeks terminimalisasi, maka
\begin{align}
K_s = R^{-1}B^TP
\end{align}
dengan matriks P $n \times n$ ditentukan dari solusi persamaan \textit{Riccati}.
\begin{align}
A^TP+PA-PBR^{-1}B^TP+Q=0
\end{align}
% here is it KST from octave
% 0.00000 -21.08185 3.33333 0.00000 -3.74993 0.99738
% 18.25742 10.54093 3.33333 3.25168 1.87496 0.99738
% -18.25742 10.54093 3.33333 -3.25168 1.87496 0.99738
Kalkulasi konstanta $K_s$ akan dikalkulasi menggunakan persamaan-\eqref{eq:ssx}~\eqref{eq:ssthe}.
Sehingga konstanta $K_s$ akan terbagi dalam sub matriks $K_{sx}, K_{sy},$ dan $K_{s\theta}$.
Berikut adalah hasil kalkulasi.
\begin{align*}
K_{s}^{x} & = \begin{bmatrix}
0.00000 & 0.00000 \\
18.25742 & 3.25168 \\
-18.25742 & -3.25168 \\
\end{bmatrix} = \begin{bmatrix} K_{s}^{x1} & K_{s}^{x2} \end{bmatrix} \\
K_{s}^{y} & = \begin{bmatrix}
-21.08185 & -3.74993 \\
10.54093 & 1.87496 \\
10.54093 & 1.87496 \\
\end{bmatrix} = \begin{bmatrix} K_{s}^{y1} & K_{s}^{y2} \end{bmatrix} \\
K_{s}^{\theta} & = \begin{bmatrix}
3.33333 & 0.99738 \\
3.33333 & 0.99738 \\
3.33333 & 0.99738 \\
\end{bmatrix} = \begin{bmatrix} K_{s}^{\theta 1} & K_{s}^{\theta 2} \end{bmatrix}
\end{align*}
Apabila diintegrasi terhadap persamaan~\eqref{eq:ss1} terhadap diagram~\ref{fig:state-feedback}
\begin{align}
K_s = \begin{bmatrix}
K_{s}^{x1} & K_{s}^{y1} & K_{s}^{\theta 1} &
K_{s}^{x2} & K_{s}^{y2} & K_{s}^{\theta 2}
\end{bmatrix}
\end{align}
Setelah mendapatkan konstanta $K_s$, sistem sudah dalam keadaan stabil.
Akan tetapi sistem tidak mencapai set poin yang diinginkan.
Maka permasalahan tersebut dapat diselesaikan dengan \textit{input refrence}.
Dimana refrence tersebut akan dikalikan dengan konstanta $N$.
Berikut adalah persamaan \textit{input refrence} sebagai penambah dari \textit{state feedback}.
\begin{align}
u(t) = -Kx(t)+Nr
\end{align}
Sehingga persamaan \textit{state space} menjadi berikut.
\begin{align}
\begin{cases}
\dot{x} & = (A-BK_s)x + BNr \\
y & = Cx
\end{cases}
\label{eq:ss-control-robot}
\end{align}
Untuk mendapatkan nilai $N$ maka dapat diasumsikan bahwa sistem dalam keadaan \textit{steady state}, yaitu $\dot{x} = 0$, sehingga persamaan state space menjadi berikut.
\begin{align}
x & = -(A-BK_s)^{-1}BNr
\end{align}
Dalam keadaan \textit{steady state}, harapannya adalah nilai refrence sama dengan nilai keluaran, $y=r$.
Sehingga dapat diperoleh persamaan $N$.
\begin{align}
N & = -[C(A-BK_s)^{-1}B]^{-1}
\end{align}
Berikut adalah hasil kalkulasi dari rumus $N$ menggunakan matriks pada persamaan~\eqref{eq:ssx},\eqref{eq:ssy}, dan \eqref{eq:ssthe}.
% 0.00000 -21.08185 3.33333 0.00000 0.00000 0.00000
% 18.25742 10.54093 3.33333 0.00000 0.00000 0.00000
% -18.25742 10.54093 3.33333 0.00000 0.00000 0.00000
\begin{align*}
N^x & = \begin{bmatrix}
0.00000 & 0.00000 \\
18.25742 & 0.00000 \\
-18.25742 & 0.00000
\end{bmatrix} = \begin{bmatrix}N^{x1} & N^{x2}\end{bmatrix} \\
N^y & = \begin{bmatrix}
-21.08185 & 0.00000 \\
10.54093 & 0.00000 \\
10.54093 & 0.00000
\end{bmatrix} = \begin{bmatrix}N^{y1} & N^{y2}\end{bmatrix} \\
N^\theta & = \begin{bmatrix}
3.33333 & 0.00000 \\
3.33333 & 0.00000 \\
3.33333 & 0.00000
\end{bmatrix} = \begin{bmatrix}N^{\theta 1} & N^{\theta 2}\end{bmatrix} \\
\end{align*}
Apabila diintegrasi terhadap persamaan~\eqref{eq:ss1} terhadap diagram~\ref{fig:state-feedback}
\begin{align}
N = \begin{bmatrix}
N^{x1} & N^{y1} & N^{\theta 1} &
N^{x2} & N^{y2} & N^{\theta 2}
\end{bmatrix}
\end{align}
\begin{figure}
\begin{center}
\begin{subfigure}[t]{.3\linewidth}
\dataGraph{t}{x}{t}{x}{BAB4/data_response.csv}
\end{subfigure}
\begin{subfigure}[t]{.3\linewidth}
\dataGraph{t}{y}{t}{y}{BAB4/data_response.csv}
\end{subfigure}
\begin{subfigure}[t]{.3\linewidth}
\dataGraph{t}{theta}{t}{$\theta$}{BAB4/data_response.csv}
\end{subfigure}
\begin{subfigure}[t]{.3\linewidth}
\dataGraph{t}{dx}{t}{$\dot{x}$}{BAB4/data_response.csv}
\end{subfigure}
\begin{subfigure}[t]{.3\linewidth}
\dataGraph{t}{dy}{t}{$\dot{y}$}{BAB4/data_response.csv}
\end{subfigure}
\begin{subfigure}[t]{.3\linewidth}
\dataGraph{t}{dtheta}{t}{$\dot{\theta}$}{BAB4/data_response.csv}
\end{subfigure}
\captionsetup{singlelinecheck=off}
\caption[.]{\centering Grafik state terhadap t dengan state refrensi $ r = \begin{bmatrix}6 & -3 & -90 &0 &0 &0\end{bmatrix} $ }
\end{center}
\end{figure}
\subsection{Kendali Formasi Multi Robot}
Pada sub bab~\ref{subbab:KendaliFormasi} dijabarkan bagaimana kendali formasi menggunakan
kendali-PI dan menghasilkan persamaan~\eqref{eq:ss-formasi}.
Persamaan tersebut adalah persamaan \textit{state-space} kendali formasi.
Apabila diperhatikan \textit{state} yang digunakan adalah koordinat relatif dari robot.
Akan tetapi dalam batasanya, robot hanya bisa mengetahui nilai jarak dari robot lain.
Dengan kata lain, yang dibutuhkan dalam metode kendali formasi adalah jarak dalam bentuk koordinat,
$x \in \mathbb{R}^2$. Sedangkan dalam kenyataanya yang diketahui adalah jarak, $r \in \mathbb{R}$.
Apabila hanya variable jarak tersebut sebagai acuan kendali, maka robot tidak mengerti kearah mana
harusnya robot itu bergerak untuk meminimalisasi error jaraknya.
\subsubsection{Strategi Penentuan Koordinat Tetangga}
\label{bab:empat:Strategi_koordinat_tetangga}
Telah dibahas bahwa model robot memiliki sifat \textit{observable}, dimana state dapat diperoleh dari sensor.
Informasi state tersebut dapat dikirim melalu komunikasi sehingga dapat dipantau koordinat tetangga dari individu robot.
Informasi state yang dibutuhkan pada individu robot adalah percepatan, sedangkan koordinat bersifat relatif.
Oleh karena itu untuk mengetahui koordinat yang relatif, individu robot membutuhkan nilai koordinat sebagai nilai inisialisasi.
Penentuan koordinat tentangga dapat ditemukan dengang mengubah koordinat polar menjadi koordinat kartesian.
Koordinat polar membutuhkan panjang $d_a$, dan sudut $\alpha$.
Panjang $d_a$ adalah variable yang didapat dari sensor yang memberikan nilai jarak dari robot $A$ ke robot $B$,
akan tetapi untuk mendapatkan koordinat polar, pengukuran sudu $\alpha$ tidak tersedia.
Algoritama yang ditawarkan memanfaatkan hukum \textit{cosinus} pada segitiga untuk mendapatkan sudut tersebut.
\begin{figure}
\centering
\includegraphics[scale=.5]{BAB3/img/estimate_coordinate.png}
\caption{Strategi Penentuan Koordinat}
\label{fig:strategiPenentuanKoordinat}
\end{figure}
Dapat diperhatikan pada gambar~\ref{fig:strategiPenentuanKoordinat} untuk gambaran strateginya.
Robot $B \in \tetangga_A$, adalah tetangga dari robot $A$.
Pertama-tama, sebelum robot $A$ bergerak, disimpan terlebih dahulu nilai $d_a$,
atau dinotasikan dengan $d_a[k]$ sebagai jarak sebelum bergerak.
Lalu robot $A$ berjalan secara random kesegala arah dengan jarak $l_a$.
Disimpan kembali nilai jara $d_a$, atau dinotasikan dengan $d_a[k+1]$.
Setalah itu dapat ditentukan sudut $\alpha[k+1]$
\begin{align}
d_a[k]^2 & = d_a[k+1]^2 + l_a^2 + 2 d_a[k+1] l_a \cos{(\alpha[k+1])} \\
\alpha[k+1] & = cos^{-1}\Bigg( \frac{l_a^2 + d_a[k+1]^2 -d_a[k]^2}{2d_a[k+1]l_a} \Bigg)
\label{eq:algo_getAngle}
\end{align}
Sebelum $\alpha[k+1]$ digunakan, jarak $d_a[k+1]$ dan $d_a[k]$ berpengaruh dalam penentuan koordinat.
Sehingga diperlukan sedikit algoritma
\begin{align}
\alpha_i=
\begin{cases}
\alpha[k+1] & ,d_a[k+1] > d_a[k] \\
180-\alpha[k+1] & ,d_a[k+1] < d_a[k]
\end{cases}.\label{eq:init_relatif_koordinat}
\end{align}
Strategi pada gambar~\ref{fig:strategiPenentuanKoordinat} hanya berlaku apabila target ukur berhenti. Apabila dinotasikan koordinat $(x_B^A, y_B^A)$ adalah koordinat relatif robot $B$ terhadap $A$,
maka $(\dot{x}_B^A, \dot{y}_B^A)$ adalah notasi kecepatan koordinat dari robot B.
Dengan menggunakan persamaan~\eqref{eq:kinematika_robot} untuk menyelesaikan koordinat dalam
keadaan robot $B$ bergerak, yaitu mengirimkan informasi kecepatan koordinatnya
ke robot $A$. Lalu robot $A$ dapat mengkalkulasi koordinat relatif dengan persamaan berikut
\begin{align}
\alpha[k+1] & = \alpha[k]+tan^{-1} \Big[ \frac{\dot{x}_B^A}{\dot{y}_B^A} \Big]
\end{align}
dimana kondisi inisial adalah $\alpha[k] = \alpha_i$ diperoleh dari hasil strategi pada persamaan~\eqref{eq:init_relatif_koordinat}.
Dengan memanfaatkan kedua strategi tersebut dapat digunakan untuk
mengkalkulasi koordinat robot $B$ relatif terhadap robot $A$
\begin{align}
x_B^A = \begin{bmatrix}
x_B = d_a[k]\cos \alpha[k] \\
y_B = d_a[k]\sin \alpha[k]
\end{bmatrix}
\end{align}
Dalam strategi ini akan terjadi ketidak akuratan dalam pengukuran apabila target ukur
berada pada sudut $90^\circ$.
Akan tetapi, \kutip{Cao2007} sudah menjelaskan mengenai kriteria posisi agent ketika dalam kondisi inisial.
Yaitu semua agent tidak berada pada kondisi sejajar secara koordinat global.
\begin{algorithm}
\DontPrintSemicolon
\KwInput{
Integer $l_a>0$,
$\tetangga_i=getConnectionRobot()$, }
\KwOutput{$x_i^j$}
\If{isInisilised() == false}{
\tcc{inisialisasi}
\tcc{getRandomDirection() akan mengembalikan sudur random antara 0 - 360}
$dir = getRandomDirection()$\;
$d_{before} = getDistanceFromSensor(\tetangga_i)$\;
$r = \begin{bmatrix}
l_a \cos(dir) \\
l_a \sin(dir)
\end{bmatrix}$\;
\tcc{Menjalankan robot hingga mencapai setpoint}
\While{isSetpointReached()}{
$runRobotToSetpoint(r)$\;
}
\tcc{Mengambil jarak setelah robot mencapai setpoint}
$d_{after} = getDistanceFromSensor(\tetangga_i)$\;
\tcc{Mengkalkulasi sudut}
$ang = cos^{-1}\Bigg[ \frac{l_a^2 + d_{after}^2 -d_{before}^2}{2d_{before}l_a} \Bigg]$\;
}
\Else{
\tcc{mendapatkan infromasi state dari tetangga}
$\begin{bmatrix}
\dot{x}_B^A \\ \dot{y}_B^A
\end{bmatrix} = getState()$ \;
$ang = \alpha[k]+tan^{-1} \Big[ \frac{\dot{x}_B^A}{\dot{y}_B^A} \Big]$ \;
}
\If{$d_{before}<d_{after}$}
{
$ang = 180-ang$\;
}
\tcc{Menjadikan koordinat kartesian}
\Return $x_i^j = \begin{bmatrix}
d_{after} \cos(ang) \\
d_{after} \sin(ang)
\end{bmatrix}$\;
\caption{\textit{Algoritma Cosinus}}
\label{algo:algoritma_cosinus}
\end{algorithm}
\subsubsection{Implementasi Kendali Formasi Dengan Kendali Robot}
Implementasi kendali formasi pada kendali robot akan menggabungkan persamaan state space pada~\eqref{eq:ss-formasi} dengan persamaan~\eqref{eq:ss-control-robot}.
Implementasi ini akan menjadikan persamaan~\eqref{eq:ss-formasi} sebagai kendali utama sedangkan pada persamaan~\eqref{eq:ss-control-robot} adalah kendali tingkat bawah.
Kendali utama akan diberikan input berupa jarak, $d$, sebagai tujuan pengendali. Sedangkan keluaran dari kendali tersebut adalah koordinat yang perlu dicapai oleh kendali tingkat bawah.
Pembahasan akan diambil dari sudut pandang robot secara individual.
Dengan menulis ulang persamaan~\eqref{eq:ss-control-robot} dengan notasi baru akan lebih mudah dalam penjelasaan lebih lanjut.
\begin{align}
\begin{cases}
\dot{x_r} & = (A_r-B_rK_s)x_r + B_rN_rr \\
y_r & = C_rx_r
\end{cases}
\label{eq:ss-control-robot-implement}
\end{align}
Apabila diasumsikan state pada persamaan~\eqref{eq:ss-formasi} sebagai berikut
\begin{align*}
x(t) & = \begin{bmatrix}
y_r^T & y_{rj1}^T & y_{rj2}^T & \dots & y_{rjn}^T
\end{bmatrix}^T , \quad (i,jn) \in \sisi
\end{align*}
maka $y_{rjn}$ adalah koordinat yang didapat dari algoritma atau hasil pengiriman data dari robot tetangga.
Sedangkan $r$ pada persamaan~\eqref{eq:ss-control-robot-implement} adalah koordinat refrensi yang dihasilkan dari persamaan~\eqref{eq:ss-formasi}, $r = C_fx(t)$. Untuk lebih mudah dalam memahami dapat diperhatikan diagram pada gambar~\ref{fig:all-control}
\section{Strategi Uji Coba}
Strategi ujicoba akan diawali dengan menghitung kesetabilan menggunakan teori Euler pada Bab \ref{bab:dua:solusi_ODE}.
Langkah selanjutnya adalah percobaan terhadap Algoritma~\ref{algo:algoritma_cosinus} dengan kondisi robot tetangga dalam keadaan statis.
Percobaan tersebut bermaksut untuk menguji apakah algoritma berjalan dengan benar.
Langkah terakhir adalah percobaan keseluruhan robot menggunakan Algoritma yang dikembangkan
dengan skenario percobaan yang sama dengan penelitian sebelumnya oleh \kutip{Rozenheck2015}.
\begin{figure}
\centering
\input{BAB4/img/implement-control.tex}
\caption{Kendali keseluruhan}
\label{fig:all-control}
\end{figure}
\subsection{Analisa Kesetabilan Model}
Perhitungan kesetabilan akan menggunakan parameter model dari penelitian sebelumnya, dapat diperhatikan di Tabel \ref{tab:param_model}.
Parameter tersebut akan diimplementasi di persamaan~\eqref{eq:ss1}-\eqref{eq:ss2}.
Lalu ditentukan waktu sample dan diubah menjadi persamaan diskrit meggunakan persamaan~\eqref{eq:disstab}.
Setelah itu akan diuji menggunakan diagram Gambar.\ref{fig:explicit_euler} untuk mengetahui kesetabilan model.
Dari hasil analisa ini akan menghasilkan parameter waktu sampling ($h$) untuk menjalankan Algoritma~\ref{algo:eEuler}.
Pembuktian secara grafik sangat dibutuhkan untuk mengetahui respon model.
\subsection{Analisa Algoritama Dengan Tetangga Statis}
Telah dijelaskan pada Bab \ref{bab:empat:Strategi_koordinat_tetangga} bahwa robot bergerak kearah yang random dengan jarak tertentu untuk mengetahui koordinat tetangga.
Analisa akan dilakukan dengan membandingkan berbagai jarak dari tinggat rendah, sedang, dan tinggi untuk mengetahui respon algoritma yang sesuai dan optimal untuk mendapatkan koordinat tetangga.
Dari hasil analisa ini akan menghasilkan jarak terbaik untuk algoritma menentukan koordinat tetangga. Pembuktian akan dilakukan secara menampilkan grafik respon.
\subsection{Analisa Percobaan Keseluruhan}
Percobaan keseluruhan akan menjalankan Algoritma \ref{algo:algoritma_cosinus} yang diterapkan pada seluruh robot. Lalu, seperti skenario penelitian sebelumnya salah satu robot diberikan kecepatan refrensi untuk bergerak ke arah tertentu.
Dari hasil percobaan ini akan menghasilkan grafik respon dari keseluruhan robot terhadap perubahan error yang terjadi.
Dengan hipotesis, keseluruhan robot akan menjaga jarak formasi dengan baik.
\subsection{Jadwal Penelitian}
% \todo{
% buat draftnya dan pakek library ini
% \url{
% http://www.martin-kumm.de/wiki/doku.php?id=05Misc:A_LaTeX_package_for_gantt_plots
% }
% }
\begin{enumerate}
\item Analisa kestabilan model
\begin{enumerate}
\item Pengembangan dan test Individu Model(1)
\end{enumerate}
\item Analisa algoritma dengan tetangga statis
\begin{enumerate}
\item Pengembangan dan test Kendali (1)
\item Pengembangan dan test Koneksi antara Individu Model dan Kendali (2)
\item Pengembangan dan test Algoritma dengan tetangga yang statis (2)
\end{enumerate}
\item Analisa algoritma keseluruhan
\begin{enumerate}
\item Pengembangan dan test Algoritma komunikasi antar kendali (3)
\item Pengembangan dan test Algoritma keseluruhan (3)
\end{enumerate}
\end{enumerate}
\begin{gantt}{7}{12}
\begin{ganttitle}
\numtitle{1}{1}{12}{1}
\end{ganttitle}
\ganttbar{1.a}{0}{1}
\ganttbarcon{2.a}{1}{1}
\ganttbarcon{2.b}{2}{2}
\ganttbarcon{2.c}{4}{2}
\ganttbarcon{3.a}{6}{3}
\ganttbarcon{3.b}{9}{3}
% \ganttbar{task 1}{0}{2}
% \ganttbarcon{task 2}{2}{4}
% \ganttbarcon{task 3}{8}{2}
% \ganttmilestone[color=cyan]{task 4}{4}
% \ganttbar{task 5}{2}{2}
% \ganttbar[color=cyan]{task 6}{4}{4}
% \ganttbar{task 7}{4}{2}
% \ganttcon{4}{5}{4}{7}
% \ganttmilestonecon{task 8}{7}
% \ganttbarcon{task 9}{8}{2}
\end{gantt}
%% \subsection{