Algoritma-algoritma Robotika Paling Populer

Ilmu Robotika semakin berkembang dari tahun ke tahun. Ilmu ini semakin digemari karena sesuai dengan perkembangan zaman terutama dalam pengembangan robot-robot di masa depan.
Jika ingin mulai coding robot, algoritma apa sih yang paling cocok?

Pada dasarnya akan banyak sekali ditemukan jawaban. Namun, pada tulisan ini, kami sajikan beberapa algoritma robotika yang paling populer.

Berikut ini kami sajikan beberapa pengetahuan tentang algoritma dalam robotika.

Selamat menikmati..

Algoritma-algoritma Robotika Paling Populer


#1 Algoritma Dead Reckoning

Dead Reckoning adalah sebuah proses dalam memperkirakan posisi berdasarkan posisi sebelumnya yang telah diketahui kecepatan, waktu dan jarak yang telah diketahui. Dead Reckoning banyak digunakan oleh binatang sebagai suatu cara navigasi untuk mengetahui posisinya berdasarkan pergerakan yang telah mereka buat sejak lokasi terakhir yang diketahui mereka.

Dengan Dead Reckoning, kamu bisa memprediksi posisi berikutnya melalui perhitungan kecepatan dan jarak saat ini.

Di dalam dunia networking, dead reckoning adalah sebuah metode yang digunakan untuk mengurangi lag yang disebabkan oleh network latency dan masalah bandwidth. Program melakukan hal ini dengan memprediksi state berikutnya dari sebuah entitas berdasarkan state saat ini.

Algoritma-algoritma Robotika Paling Populer

Pseudocode

ada dua jenis Dead Reckoning, zero-order convergence dan first-order convergence.

Zero-order convergence: (source: http://www.it.uu.se/edu)
For each shared object
{
PredictedPathVector = Last_KnownPos - Last_Last_KnownPos
DeltaTime = Last_KnownTime - Last_Last_KnownTime
DeltaVelocity = PredictedPathVector / DeltaTime
NewDeltaTime = CurrentTime - LastLastKnownTime
NewPos = LastKnownPos + NewDeltaTime * DeltaVelocity
}

first-order convergence: (source: http://www.it.uu.se/edu)
For each shared object{
PrevPredictedPathVector = Last_KnownPos[1]-
Last_KnownPos[2]
PrevDeltaTime = Last_KnownTime[1] - Last_KnownTime[2]
StartDeltaTime = Last_KnownTime[0] - Last_KnownTime[2]
PrevVelocity = PrevPredictedPathVector / PrevDeltaTime
StartPos = Last_KnownPos[2] + StartDeltaTime *
PrevVelocity
CurrentDeltaTime = Now - Last_KnownTime[0]
PredictedPathVector = Last_KnownPos[0] -
Last_KnownPos[1]
DeltaTime = Last_KnownTime[0] - Last_KnownTime[1]
EndPos = Last_KnownPos[0] + CurrentDeltaTime *
PredictedPathVector / DeltaTime
LinearConvergenceVector = EndPos - StartPos
Velocity = LinearConvergenceVector / DeltaTime
NewPos = StartPos + CurrentDeltaTime * Velocity
}

#2 Follow Line

Algoritma ini digunakan oleh sebuah objek untuk tetap pada garis yang tercetak pada lantai. Biasa digunakan pada robot yang dilombakan pada berbagai kompetisi dimana sang robot harus berjalan mengikuti garis yang tercetak pada lantai sampai tujuan.


#3 Follow Wall

Algoritma ini digunakan oleh sebuah objek untuk dapat mengikuti arah dimana tembok berada. algoritma ini banyak digunakan pada maze solving (keluar dari labirin). Kesesuaian arah disesuaikan dengan yang diminta.

Algoritma yang terkenal adalah algoritma prinsip tangan kanan. algoritma ini sederhana: taruh tangan kanan kamu pada tembok, lalu jalanlah sesuai dengan tembok yang menempel pada tangan. Maka, kamu akan menemukan jalan keluar dari maze.

Flow Algoritma

Algoritma ini dapat digambarkan sebagai berikut:
- Pastikan posisi tempat kita berada saat ini adalah posisi start
- Untuk mencari jalan keluar dari labirin, periksa tembok-tembok dimulai dari kanan, atas, kiri, bawah.
  1. Periksa kanan: jika ada tembok, periksa atas. Jika tidak ada tembok, belok kanan.
  2. Periksa atas: jika ada tembok, periksa kiri. Jika tidak ada tembok, jalan lurus.
  3. Periksa kiri, jika ada tembok, periksa bawah. Jika tidak ada tembok, belok kiri.
  4. Periksa bawah, jika ada tembok, kembali periksa atas. Jika tidak ada tembok, jalan mundur.
  5. Begitu seterusnya hingga menemukan jalan keluar.

Pseudocode

function maze(kanan, atas, kiri, bawah){
set array[#][#] as maze
start[x][y] = array[0][0] // start dimulai dari titik (0,0)
if(start[x+1][y])==null //kanan
turn right;
maze(bawah, kanan, atas, kiri);
if(start[x][y+1])==null //atas
turn ahead;
maze(kanan, atas, kiri, bawah);
if(start[x-1][y])==null//kiri
turn left;
maze(atas, kiri, bawah, kanan);
if(start[x][y-1])==null//bawah
turn down;
maze(kiri, bawah, kanan, atas);
}

Potongan Program

void maze(){

string finishY, finishX, startY, startX;
string y1 = startY;
string y2 = startX;
while(!(yl == finishY && xl == finishX)){

if(trace[yl][xl+1] ==”tembok”)
else if(trace[yl+1][xl] ==”tembok”)
else if(trace[yl][xl-1] ==”tembok”)
else trace[yl-1][xl]= “jalan”;

...dst...
}

#4 Fuzzy Logic

Fuzzy Logic menggantikan kebenaran konsep logika Boolean (yang menyatakan bahwa segala hal dapat direpresentasikan dengan 0 atau 1) dengan konsep “tingkat kebenaran”.

Fuzzy Logic memungkinkan nilai keanggotaan antara 0 dan 1, abu-abu, hitam atau putih, “sedikit”, “lumayan”, “sangat”, atau “paling”. Fuzzy logic sangat berhubungan dengan teori kemungkinan.

Pseudocode

Sebagai contoh, dalam kasus mengontrol temperatur. Daripada kita harus selalu bergelut dengan permasalahan:
if (Tz>100C && Z==”Cair”)//Tz adalah temperatur Z, Z adalah logam
then “buat pedang”;

lebih baik kita ganti dengan alternatif baru yang tidak perlu menggunakan kompleksnya angka:
if(Tz sudah sangat panas && Z telah mencair)
maka kita buat pedang;

Di dalam Fuzzy Logic, tidak ada pernyataan seperti “tingginya 1.2 m” atau “tingginya 1.67 m”. tetapi, nilai tinggi diberikan dalam suatu batasan range.
Laki-laki pendek sekali = [0, 1.3] m
laki-laki pendek = [1.3, 1.5] m
laki-laki sedang = [1.5, 1.8] m
laki-laki tinggi = [1.8, 2.0] m
laki-laki raksasa > 2.0 m

konsekuensinya, 2 nilai(true atau false) saja tidak cukup. Dibutuhkan nilai yang lebih banyak. Misal:
tidak setuju = 0
agak setuju = 1
setuju = 2
sangat setuju = 3


Algoritma-algoritma Robotika Paling Populer


#5 Maze Mapping


Merupakan algoritma yang digunakan untuk mapping, yakni mencari dan menggambarkan peta jalan keluar dari labirin (maze).

#6 Algoritma Neural Networks

Neural Networks Algorithm, atau disebut juga algoritma jaringan saraf, merupakan sebuah algoritma yang meniru sistem kerja jaringan saraf manusia. Algoritma ini meniru sistem kerja otak manusia dalam menerjemahkan kompleksnya input untuk kemudian dijadikan output.

Algoritma ini terdistribusi secara paralel dan memunyai kecenderungan untuk menyimpan pengetahuan yang didapatkannya dari pengalaman. Oleh karena itu, algoritma akan selalu merubah strukturnya untuk memecahkan masalah berdasarkan informasi eksternal maupun internal yang telah didapatkannya.

#7 Shortest Path

Shortest Path, atau biasa dikenal dengan istilah Algoritma Djikstra, merupakan sebuah cara pencarian yang dilakukan pada graph dimana hanya dibutuhkan jalur yang paling pendek untuk sebuah graph. Algoritma ini menemukan jalur pencapaian tujuan dengan biaya yang paling rendah.

Algoritma Djikstra menghitung jarak semua verteks pada sebuah graf dari current verteks. Algoritma ini hanya berlaku pada kondisi: graf terhubung, edge yang tidak berarah, bobot edge(distance) tidak bernilai negatif.

Flow Algoritma

  1. Buat list untuk jarak, verteks sebelumnya, verteks yang telah dikunjungi, dan verteks saat ini.
  2. Set semua verteks dengan nilai tak hingga, kecuali pada verteks awal-yang diset dengan nol.
  3. Semua nilai pada list verteks yang telah dikunjungi, diset dengan false.
  4. Set semua nilai pada list verteks sebelumnya dengan nilai yang spesial yang menandakan bahwa mereka belum didefinisikan, seperti null.
  5. Set verteks saat ini dengan verkteks awal.
  6. Tandai verteks saat ini bahwa telah dikunjungi.
  7. Update jarak dan list sebelumnya berdasarkan verteks yang bisa secara langsung dicapai dari verteks saat ini.
  8. Update verteks saat ini dengan verteks yang belum dikunjungi yang bisa dicapai dengan jalur terpendek (shortest path) dari verteks awal.
  9. Ulang sampai langkah 6 hingga semua node dikunjungi

Pseudocode

function Dijkstra(Graph, source): (source: wikipedia)
for each vertex v in Graph: // Inisialisasi
dist[v] := infinity // jarak yang belum diketahui
previous[v] := undefined // node sebelumnya
dist[source] := 0 // jarak dari source ke source
Q := the set of all nodes in Graph
while Q is not empty: // main loop
u := node in Q with smallest dist[] // jarak terpendek
remove u from Q // ambil u
for each neighbor v of u:
alt := dist[u] + dist_between(u, v)
if alt

Penutup 

Demikian pembahasan sederhana kami tentang beberapa algoritma dasar robotika paling populer. Semoga ulasan ini dapat bermanfaat bagi perembangan robotika di Indonesia. Semoga dapat pula membantu kamu yang sedang berjuang mengikuti lomba KRCI, ya!

4 comments

Allo lam kenal

wa agak bingung yang ttg following wall, soalnya pake atas n bawah coba pake depan n belakang karena memang seperti itu.
trus penjelasan ttg :

# Periksa kanan: jika ada tembok, periksa atas. Jika tidak ada tembok, belok kanan.
# Periksa atas: jika ada tembok, periksa kiri. Jika tidak ada tembok, jalan lurus.
# Periksa kiri, jika ada tembok, periksa bawah. Jika tidak ada tembok, belok kiri.
# Periksa bawah, jika ada tembok, kembali periksa atas. Jika tidak ada tembok, jalan mundur.

wa agak bingung klo menurut wa :
# Pastikan berada pada posisi start.
# Tentukan dinding yang ingin diraba (Follow) jika kanan maka seterusnya kanan n jika kiri maka seterusnya kiri.
# Follow kanan maka:
- Jika depan tidak ada n kanan ada maka terus lurus.
- Jika depan ada atau tidak ada n kanan tidak ada maka belok kanan.
- Jika depan ada n kanan ada maka belok kiri lalu Follow dinding kanan.
- Jika depan ada n kanan ada n kiri ada maka rotasi 360 derajat lalu Follow dinding kanan (yg tadinya kiri).

Gmana?

Bacaan menarik, wa jd lebih tau byk ttg metode-metodenya.

Thanks Bro.

sebenernya pendapatmu dengan tulisanku itu sama maknanya, hanya penyampaiannya saja yang berbeda. silakan dicek kembali..

coba lihat pernyataanmu poin ke dua:
"Jika depan ada atau tidak ada n kanan tidak ada maka belok kanan"

itu sama saja dengan pernyataanku poin pertama:
"Periksa kanan: jika ada tembok, periksa atas. Jika tidak ada tembok, belok kanan", dst..

btw, ternyata tulisanku ada yang salah, untuk poin ke empat,
"Periksa bawah, jika ada tembok, kembali periksa atas. Jika tidak ada tembok, jalan mundur",

seharusnya:
"# Periksa bawah, jika ada tembok, kembali periksa kanan. Jika tidak ada tembok, jalan mundur."

btw, thx ya atas kunjungannya, salam kenal..

permisi mau tanya tentang logika yang periksa atas dan periksa bawah itu gmn maksudnya?

maaf yach ..say amasih awam banget...
tapi cukup tertarik buat belajar...!!!

thank's before

@anonymous:

iya, tak mengapa, saya pun masih belajar. tapi bisa saya jelaskan sedikit:

algoritma Follow Wall yang saya bahas, yakni algoritma tangan kanan, menggunakan logika yang lumayan sederhana. mungkin untuk memperjelasnya, ada beberapa hal yang harus kita perhatikan:
1. bayangkan labirin yang kita hadapi merupakan sebuah bidang 2 dimensi seperti pada game-game sejenis packman
2. asumsikan terdapat 4 macam arah : atas (atau depan), kanan, bawah(atau belakang), kiri

dengan asumsi-asumsi di atas, maksud dari 'periksa atas' tidak lain adalah 'periksa sisi depan'. sedangkan 'periksa bawah' adalah 'periksa sisi belakang'. begitu kira2..

makasih atas kunjungannya!

Terimakasih sudah mengunjungi KompiDolar, silakan tinggalkan komentar untuk membantu pengunjung lainnya.
EmoticonEmoticon