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}