\chapter{\babEmpat}

\section{Strategi Kendali Multi Robot}

Analisa akan dilakukan dalam beberapa bagian agar mudah dipahami dan diterapkan.
Analisa tersebut adalah mengenai kendali dari model dinamika robot dan kendali formasi,
dan mengenai metode percobaan akan dibahas secara matematis, simulasi, dan HIL.\

\subsection{Kendali Robot}
Pada kendali robot akan dibahas mengenai analisis kendali robot menggunakan
state-space feedback. Kendali robot ini adalah kendali tahap akhir 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}
\todo{Gambar grafik state space feedback}
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) \\
    \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) \\
    \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)
\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 controlable. Sedangkan untuk
menguji observable 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 determinan dari matriks Observablity $P_o$ tidak nol.

Menggunakan parameter robot oleh~\kutip{CORREIA20127} yang diterapkan pada per-
samaan~\eqref{eq:ss1}-\eqref{eq:ss2}, hasil pengujian controlable $rank[P_c] = 6$, maka dapat disim-
pulkan sistem robot controlable. Hasil pengujian observable $rank[P o] = 6$, maka
sistem robot juga observable. Karena sistem robot observable, maka dalam desain
kendali tidak diperlukan observer.

\subsubsection{Desain Kendali}
\todo{Kriteria}
Kriteria didefinisi menggunakan analisis sistem orde dua pada domain waktu. 
Berikut adalah transfer fungsi tertutup dari sistem orde dua (\kutip{Richard2010}).
\begin{align}
     Y(s) = \frac{\omega_n^2}{s^2+2\zeta\omega_n+\omega_n^2} R(s) 
\end{align}
Dengan input $R(s) = 1/s$ sebagai unit impulse, maka didapat persamaan keluaran sistem dalam domain waktu.
\begin{align}
  y(t) = 1 - \frac{1}{\beta}\exp^{-\zeta\omega_n t}sin(\omega_n\beta t + \theta)
\end{align}
dimana $\beta = \sqrt{1-\zeta^2}$, $\theta = \cos^{-1}\zeta$, dan $0<\zeta<1$.
Dari persamaan domain waktu tersebut didapat 4 kriteria dalam sistem,
yaitu \textit{satling time} ($T_s$), Prosentase \textit{overshoot} ($P.O$), 
\textit{peek time} ($T_p$), dan \textit{Transient Time} ($T_{r1}$).



\todo{Parameter K}
\todo{Parameter N}


\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}
Penentuan koordinat tentangga dapat ditemukan dengang mengubah koordinat polar menjadi koordinat kartesian.
Koordinat polar membutuhkan panjang, $d_a$, dan sudut, $\alpha$.
Variable $d_a$ dapat diperoleh dari sensor, akan tetapi sudu $\alpha$ tidak bisa dideteksi secara langsung oleh sensor.
Dengan menggunakan \textit{cosinus}  pada segitiga dimungkinkan 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}
   \alpha[k+1] = cos^{-1}\Bigg[ \frac{l_a^2 + d[k+1]^2 -d_a[k]^2}{2d_a[k+1]l_a} \Bigg].
\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$ adalah koordinat relatif robot $B$ terhadap $A$,
maka $\dot{x}_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 pada kondisi inisial.

\section{Kestabilan 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
   \begin{subfigure}[t]{.4\textwidth}
      \includegraphics[scale=.5]{BAB3/img/hil_graph.png}
      \caption{}
      \label{fig:hil_graph}
   \end{subfigure}
   \begin{subfigure}[t]{.4\textwidth}
      \includegraphics[scale=.5]{BAB3/img/hil_graph_1.png}
      \caption{}
      \label{fig:hil_graph_1}
   \end{subfigure}
   \caption{(a)Grafik Hardware-in-the-loop (\kutip{Jim1999}). (b) HIL Kendali Multi-Robot. }
\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:solusi_ODE}.
Dapat diperhatikan pada gambar~\ref{fig:hil_graph_1}, pada HIL untuk kendali multi robot akan
menggunakan tiga kendali untuk mempresentasikan tiga robot.
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.

\subsection{Kestabilan Model}
Pada persamaan~\eqref{eq:disstab} apabila model dikalkulasi akan bergantung dengan besarnya \textit{step size}, $h$.
Oleh karena itu, setelah persamaan~\eqref{eq:ss1}-\eqref{eq:ss2} dilakukan parameterisasi harus dilakukan penentuan \textit{step size} agar model tersebut stabil dalam mensimulasikan modelnya.
Penentuan \textit{step size} harus berdasarkan kriteria kestabilan pada gamabar~\ref{fig:explicit_euler}.

Apabila didefinisi ulang \textit{state} pada persamaan~\eqref{eq:ss1}-\eqref{eq:ss2} dengan
$x(t) = \begin{bmatrix}\dot{x}_r & \dot{y}_r & \dot{\theta}_r \end{bmatrix}^T$,
maka akan lebih mudah untuk menghitung kestabilan dari matriks $A \in \mathbb{R}^{3 \times 3}$.
Dengan menggunakan parameter dari penelitian oleh \kutip{CORREIA20127}, maka akan diperoleh matriks $A, B, K,$ dan $C$.
\begin{align*}
   A & = \begin{bmatrix}
      -6.69666 & 0.00000  & 0.00000  \\
      0.00000  & -6.71000 & 0.00000  \\
      0.00000  & 0.00000  & -4.04200 \\
   \end{bmatrix} ; \quad     
   B = \begin{bmatrix}
      0.00000  & 0.57735 & -0.57735 \\
      -0.66667 & 0.33333 & 0.33333  \\
      4.00000  & 4.00000 & 4.00000  \\
   \end{bmatrix} ;     \\
   K & = \begin{bmatrix}
      -1.46667 & 0.00000  & 0.00000  \\
      0.00000  & -1.00000 & 0.00000  \\
      0.00000  & 0.00000  & -0.06600 \\
   \end{bmatrix}; \quad
   C = \begin{bmatrix}
      1 & 0 & 0 \\
      0 & 1 & 0 \\
      0 & 0 & 1
   \end{bmatrix}.
\end{align*}

Dengan menggunakan pendekatan pada persamaan~\eqref{eq:desdotode1} untuk persamaan~\eqref{eq:ss1} maka diperoleh bentuk diskretnya
\begin{align}
   x[k+1] & = (I + A.h).x[k] + B.h.u[k] + K.h.sgn(x[k]). \\
\end{align}
Pengali $sgn(.)$ bersifat penambah dari sistem, maka dalam penentuan kestabilan ini akan dianggap penambah dari matriks sistem.
\begin{align}
   x[k+1] & = (I + (A+K).h).x[k] + B.h.u[k]. \\
\end{align}
Kriteria kestabilan akan bergantung dari hasil penentuan $h$ pada $I+(A+K)h~=~\Lambda$.
Untuk semua nilai $\lambda$ pada matriks $\Lambda$ harus memenuhi kriteris $\lambda \leq 1$.
Dimungkinkan akan mengalami kebingungan ketika menentukan besar $h$,
akan tetapi nantinya persamaan ini akan diterapkan dan diselesaikan oleh komputer.
Alangkah baiknya apabila diidentifikasi terlebih dahulu konsumsi waktu yang dibutuhkan untuk menyelesaikan
satu iterasi dari persamaan tersebut.
Setelah dilakukan identifikasi, waktu yang dibutuhkan untuk satu kali iterasi berkisar $0.001$ ms (Pembulatan).
Sehingga penentuan \textit{step size} sebesar $0.1$ ms sangat dimungkinkan, dengan pertimbangan
sisa dari waktu yang digunakan kalkulasi dapat digunakan untuk waktu \textit{idle} dan menjalankan program yang lain. Berikut adalah matriks $\Lambda$ setelah dikalkulasi menggunakan $h=0.1$
\begin{align*}
   \Lambda = \begin{bmatrix}
      0.18367 & 0.00000 & 0.00000 \\
      0.00000 & 0.22900 & 0.00000 \\
      0.00000 & 0.00000 & 0.58920 \\
   \end{bmatrix}.
\end{align*}
Terbukti bahwa semua nilai item didalam matriks kurang dari sama dengan satu.
Sehingga menggunakan algoritma \textit{Expilicit Euler} sudah cukup untuk menjalankan model robot \textit{omni 3-wheel} sebagai model \textit{holonomic} yang akan digunakan untuk percobaan kendali multi robot.
Hasil plot dari simulasi model dapat dilihat pada gambar~\ref{fig:sim_model}.
\begin{figure}
   \centering
   \begin{subfigure}[t]{.6\textwidth}
      \includegraphics[scale=.4]{BAB3/img/speedRobot_-6_3_3.png}
      \caption{}
   \end{subfigure}
   \begin{subfigure}[t]{.6\textwidth}
      \includegraphics[scale=.4]{BAB3/img/speedRobot_0_6_-6.png}
      \caption{}
   \end{subfigure}
   \begin{subfigure}[t]{.6\textwidth}
      \includegraphics[scale=.4]{BAB3/img/speedRobot_6_6_6.png}
      \caption{}
   \end{subfigure}
   \caption{(a)$w_1=-6; w_2=3; w_3=3$. (b) $w_1=0; w_2=6; w_3=-6$ (c)  $w_1=6; w_2=6; w_3=6$}
   \label{fig:sim_model}
\end{figure}
\subsection{Rencana Hardware-in-Loop}
\todo{kutip hasil HIL yang sudah ada lalu gabungkan model dan kendali jadi satu secara sederhana}

\subsection{Rencana Uji Lapangan}
\todo{Membahas mengenai cara pengambilan data penerapan pada robot aslinya}
