\section{Metode} \subsection{Model Robot} Berikut adalah model dari robot holonomic dalam bentuk \textit{state-space} \kutip{CORREIA20127}. Dimana robot menggunakan tiga buah motor yang dihubungkan pada \textit{omniwheel} sehingga robot dapat bergerak kesegala arah. \begin{align} \dot{x}(t) & = A_r x(t) + B_r u(t) + K_rsgn(x(t)) \label{eq:ss1} \\ y(t) & = Cx(t) \label{eq:ss2} \end{align} Vector $u(t) = \begin{bmatrix} u_1(t) & u_1(t) & u(2)(t) \end{bmatrix}^T$ adalah masukan model bersatuan $volt$ dengan batasan $-6 \leq u_i(t) \leq 6$ pada tegangan motor robot. Vector $y(t) = x(t) = \begin{bmatrix} v(t) & v_n(t) & w(t) \end{bmatrix}^T$ adalah kecepatan robot yang akan diperoleh dari sensor percepatan, dimana $v(t)$ adalah kecepatan pada sumbu $x$, $v_n(t)$ adalah kecepatan pada sumbu $y$, dan $w(t)$ adalah kecepatan rotasi dari frame robot. Matrix $A_r \in \mathbb{R}^{3\times 3}$ dan $B_r \in \mathbb{R}^{3 \times 3}$ adalah parameter fisik robot berdasarkan yang diperoleh dari identifikasi secara persamaan fisika. Matrix $K_r \in \mathbb{R}^{3 \times 3}$ adalah parameter \textit{friction} dari robot yang diestimasi dari hasil percobaan. \subsection{Kendali Robot Holonomic} Kendali dari robot akan menggunakan dua mode \textit{state-feedback}. \textbf{Mode satu}, bertujuan untuk mencapai kecepatan robot yang diinginkan. Untuk mencapai tujuan tersebut akan menggunakan persamaan kendali sebagai berikut \begin{equation} \begin{split} u_{c1}(t) &= -K^c_1 x(t) + N^c_1 r^c_1 \\ r^c_1 &= \begin{bmatrix} v^*(t) & v_n^*(t) & w^*(t) \end{bmatrix}^T \end{split} \label{eq:kendali_kecepatan} \end{equation} Dimana $r^c_1$ , $K^c_1 \in \mathbb{R} ^ {3 \times 3}$ dan $N^c_1 \in \mathbb{R} ^ {3 \times 3}$ adalah setpoint kendali mode satu, konstanta yang diperoleh dari optimasi persamaan \textit{Riccati} terhadap matrix $A_r$ dan $B_r$, dan kostanta yang diperoleh dari \textit{inverse state-space} pada keadaan \textit{steady state}. \begin{equation*} N^c_1 = -[ C(A_r - B_rK^c_1)^{-1}B_r ] ^{-1} \end{equation*} Dengan menggabungkan persamaan~\eqref{eq:ss1} dengan persamaan~\eqref{eq:kendali_kecepatan} akan mendapatkan persamaan \textit{state-space} robot yang baru \begin{align} \begin{split} \dot{x}(t) & = (A_r - B_r K^c_1) x(t)+B_r N^c_1 r^c_1 + K_r sgn(x(t)) \\ & = A_c x(t) + B_c r^c_1 + K_r sgn(x(t)) \end{split} \label{eq:ss_kendali_kecepatan} \end{align} \textbf{Mode dua}, bertujuan untuk mencapai titik koordinat tertentu berdasarkan koordinat frame robot. Untuk mencapai tujuan tersebut akan dimodifikasi persamaan~\eqref{eq:ss1} dengan menambah state koordinat frame robot menjadi $y_{c2}(t) = x_{c2}(t) = \begin{bmatrix} x_r(t) & y_r(t) & \theta_r(t) & v(t) & v_n(t) & w(t) \end{bmatrix}^T$, $ A_{c2} = \begin{bmatrix} 0 & I \\ 0 & A_r \\ \end{bmatrix} \in \mathbb{R} ^ {6 \times 6} $, $B_{c2} = \begin{bmatrix} 0 \\ B_r \end{bmatrix} \in \mathbb{R} ^ {6 \times 3} $, $K_{c2}(x) = \begin{bmatrix} 0 & 0 \\ 0 & K_rsgn(x) \\ \end{bmatrix} \in \mathbb{R} ^ {6 \times 3} $. Berikut adalah state space model untuk kendali mode satu. \begin{equation*} \begin{split} \dot{x}_{c2}(t) & = A_{c2} x_{c2}(t) + B_{c2} u_{c2}(t) + K_{c2}(x_{c2}(t)) \\ y_{c2}(t) & = C_{c2} x_{c2}(t) \\ \end{split} \end{equation*} Dimana $u_{c2}(t)$ adalah persamaan kendali mode dua. \begin{equation} \begin{split} u_{c2} (t) &= -K^c_2 x_{c2}(t) + N^c_2 r^c_2 \\ r^c_2 &= \begin{bmatrix} x_r^*(t) & y_r^*(t) & \theta_r^*(t) & v^*(t) & v_n^*(t) & w^*(t) \end{bmatrix}^T \end{split} \end{equation} Dimana $r^c_2$, $K^c_2 \in \mathbb{R} ^ {3 \times 6}$ dan $N^c_2 \in \mathbb{R} ^ {3 \times 6}$ adalah setpoint kendali mode dua dan kostanta yang diperoleh dari cara yang sama pada mode satu menggunakan matrix model yang dimodifikasi. \subsection{Kendali Formasi Berdasarkan Jarak} Dinotasikan $n \triangleq | \simpul |$ sebagai jumlah dari node dan $m \triangleq | \sisi |$ sebagai jumlah dari sisinya. Dinotasikan $p = \begin{bmatrix} x_1^T & \dots & x_n^T \end{bmatrix}^T \in \mathbb{R}^{3n}$, dimana $x_i \in \mathbb{R}^3$ dan $x_i \neq x_j$ untuk semua $i \neq j$. Dinotasikan vektor posisi relatif $ e_k \triangleq x_j - x_i$ dan semua vector sisi $e=\begin{bmatrix}e_1^t & \dots & e_m^T\end{bmatrix} \in \mathbb{R}^{3m}$. didefinisikan fungsi \textit{Jacobian} sisi \kutip{Rozenheck2015}), \begin{align} R(p) & \triangleq diag(e_i^T)(E^T \otimes I_2) \in \mathbb{R}^{m\times 3n} \nonumber \\ \end{align} Dimana $E \in \mathbb{R}^{n\times m}$, adalah matrik \textit{incidence} $\{0,\pm 1\}$ dimana baris matrik mengindikasikan simpulnya dan kolomnya sebagai sisinya dan $diag(A_i) \triangleq blkdiag\{A_1, \dots, A_n\} \in \mathbb{R}^{np \times nq}$ Orde kendali formasi yang digunakan adalah orde dua Mengadopsi persamaan potensial, didefinisi persamaan \kutip{Oh2014}. \begin{align} \Phi(e) & = \frac{1}{2} \sum_{i \in \simpul }||v_i||^2 + \frac{1}{2} \sum_{k=1}^{m} \big( ||e_k||^2 - d_k^2 \big)^2 \end{align} Lalu kendali formasi menggunakan persamaan~\eqref{eq:ss_kendali_kecepatan} sebagai modelnya diberikan \textit{negative gradient} dari fungsi potensial dan konstanta \textit{proportional} \kutip{Rozenheck2015} \begin{equation} \begin{split} \dot{p} & = A_f p(t) + B_f\frac{\partial \Phi(e)}{\partial v} \\ & = A_f p(t) + B_fv(t) \\ \dot{v} & = -C \Big( \frac{\partial \Phi(e)}{\partial v} + \frac{\partial \Phi(e)}{\partial p} \Big) \\ & = -k_{p1}v(t) + R(p(t))^Tk_{p2}(R(p(t))p(t) - d )) \\ \end{split} \label{eq:dynmState} \end{equation} Dimana $A_f \in \mathbb{R}^{3n \times 3n}$ dan $B_f \in \mathbb{R}^{3n \times 3n}$ adalah matrix diagonal dari $A_c$ dan $B_c$. \subsection{Algoritma Cosinus} Robot $B_i \in \tetangga_A$, adalah tetangga dari robot $A$ . $d_i[k]$ adalah jarak yang diperoleh dari sensor. Dalam strategi (Gambar~\ref{fig:strategiPenentuanKoordinat}) ini diperlukan perpindahan robot $A$ ke $ A' = (0, l_a)$. Perpindahan tersebut akan menghasilkan jarak $d_i[k+1]$. Dari perbedaan tersebut akan didapatkan sudut $\alpha_i^\circ$. \begin{align} \alpha_i^\circ & = 180^\circ \pm cos^{-1}\Bigg( \frac{l_a^2 + d_i[k+1]^2 -d_i[k]^2}{2 d_i[k+1] l_a} \Bigg).\nonumber \\ & = 180^\circ \pm \zeta_i^a \label{eq:algo_getAngle} \end{align} Dari persamaan~\eqref{eq:algo_getAngle} akan didapat koordinat tetangga. \begin{align} x_{B_i}^A = \begin{bmatrix} x_{B_i} = d_i[k+1]\cos \alpha_i^\circ \\ y_{B_i} = d_i[k+1]\sin \alpha_i^\circ \end{bmatrix} \label{eq:algo_koordinat_tetangga} \end{align} Untuk memvalidasi apakah koordinat telah sesuai dapat menggunakan nilai jarak pada sensor dibandingkan dengan jarak dari hasil koordinat persamaan~\eqref{eq:algo_koordinat_tetangga}. Akan tetapi hasil validasi tersebut akan mengalami bias dikarenakan sudut $\zeta_i^a$ adalah sudut segitiga $\angle{AA'B_1}$ atau $\angle{AA'B_2}$. Oleh karena itu pada persamaan~\eqref{eq:algo_getAngle} terdapat operasi $\pm$ dimana operasi tersebut akan dilakukan berdasarkan letak kuadran $B_i$. \begin{align} \alpha_i^\circ & = \begin{cases} 180^\circ - \zeta_i^a, & \text{Kuadran \RN{1},\RN{2}} \\ 180^\circ + \zeta_i^a, & \text{Kuadran \RN{3},\RN{4}} \\ \end{cases}. \label{eq:algo_getAngle2} \end{align} Diperlukan satu langkah lagi untuk menentukan kejadian pada persamaan~\eqref{eq:algo_getAngle2}(Gambar~\ref{fig:strategiPenentuanKoordinat2}). Langkah 2 adalah langkah pengujian dari hasil koordinat yang telah dikalkulasi dan membandingkannya dengan nilai yang didapat dari sensor. Apabila terdapat perbedaan maka kejadian pada persamaan~\eqref{eq:algo_getAngle2} diubah ke kejadian selanjutnya. \begin{figure}[ht] \begin{subfigure}[t]{.5\textwidth} \centering \includegraphics[scale=.2]{BAB3/img/estimate_coordinate.png} \caption{} \label{fig:strategiPenentuanKoordinat} \end{subfigure} \begin{subfigure}[t]{.5\textwidth} \centering \includegraphics[scale=.2]{BAB3/img/estimate_coordinate2.png} \caption{} \label{fig:strategiPenentuanKoordinat2} \end{subfigure} \caption{Strategi penentuan koordinat (a) langkah 1 dan (b) Langkah 2} \end{figure}