tugas 2

 Robot Hexapod dengan metode decision tree





1.Tujuan       [kembali]


- Mampu mencoba training data dengan Decision tree

2. Alat dan Bahan      [kembali]

- Arduino IDE

3. Dasar Teori      [kembali]

Setiap orang tentu menginginkan sebuah pengambilan keputusan yang tepat dan efisien tak terkecuali sebuah perusahaan. Untuk itu banyak sekali perusahaan yang membutuhkan suatu media seperti Business Intellegence guna membantu dalam pengambilan keputusan yang tepat.

Namun, hal tersebut tidak akan berarti tanpa adanya konsep decision tree (pohon keputusan). Decision tree adalah salah satu metode klasifikasi yang paling populer, karena mudah untuk diinterpretasi oleh manusia. Decision tree adalah model prediksi menggunakan struktur pohon atau struktur berhirarki.

Decision tree menyediakan cara untuk menyajikan algoritma dengan pernyataan kontrol bersyarat. Mereka termasuk cabang yang mewakili langkah-langkah pengambilan keputusan yang dapat mengarah pada hasil yang menguntungkan.

Struktur flowchart mencakup node internal yang mewakili tes atau atribut pada setiap tahap. Setiap cabang mewakili hasil untuk atribut, sedangkan jalur dari daun ke akar mewakili aturan untuk klasifikasi.

Konsep dari pohon keputusan adalah mengubah data menjadi decision tree dan aturan-aturan keputusan. Manfaat utama dari penggunaan decision tree adalah kemampuannya untuk mem-break down proses pengambilan keputusan yang kompleks menjadi lebih simple, sehingga pengambil keputusan akan lebih menginterpretasikan solusi dari permasalahan.

Decision Tree meningkatkan model prediktif dengan akurasi, kemudahan dalam interpretasi, dan stabilitas. Alat ini juga efektif dalam menyesuaikan hubungan non-linier karena mampu memecahkan tantangan penyesuaian data, seperti regresi dan klasifikasi.

Disebut deecision tree atau pohon keputusan karena pilihannya bercabang, membentuk struktur yang terlihat seperti pohon.

Anda dapat membuat pohon keputusan vertikal atau horizontal tergantung pada preferensi Anda. Membaca pohon keputusan horizontal dari kiri ke kanan dan pohon keputusan vertikal dari atas ke bawah.

Pohon keputusan bekerja paling baik ketika Anda mengikuti aturan diagram alur dasar:

·       Persegi panjang atau bujur sangkar: Tunjukkan awal pohon tempat Anda menulis pertanyaan.

·       Garis: Mewakili cabang-cabang pohon. Ini semua adalah kemungkinan tindakan.

·       Lingkaran: Menandakan hasil yang tidak pasti bahwa Anda akan membutuhkan cabang tambahan untuk diklarifikasi.

·       Segitiga: Berikan jawaban yang jelas dan final. Mereka juga disebut “daun.”

Dengan membat decision tree memungkinkan Anda untuk memvisualisasikan hasil dari setiap pilihan dalam cara yang terorganisir.

Anda dapat menggunakan pohon keputusan ketika Anda memiliki tujuan tertentu, seperti menentukan apakah Anda harus menerima tawaran pekerjaan.

Alat ini juga bermanfaat jika Anda perlu mengevaluasi sejumlah besar data atau statistik. Misalnya, jika Anda seorang agen penjualan dan ingin menentukan berapa banyak pendapatan yang dapat dihasilkan oleh calon pelanggan versus biaya untuk mengejar dan mempertahankan hubungan, Anda dapat menggunakan pohon keputusan untuk menganalisis laba atas investasi.

Nama lain dari decision tree adalah CART (Classification and Regression Tree). Dimana metode ini merupakan gabungan dari dua jenis pohon, yaitu classification tree dan juga regression tree. Untuk memudahkan, berikut ilustrasi dari keduanya.



Untuk gambar diatas merupakan contoh dari classification tree, sedangkan gambar dibawah merupakan contoh dari regression tree.

Example Program

Metode Follow wall

a. Pengenalan

Sistem navigasi wall following adalah suatu aksi robot untuk mengikuti dinding dan berada tidak jauh dari dinding, wall following bekerja berdasarkan prinsip mengikuti suatu objek, dalam hal ini objek tersebut adalah dinding. Wall following dapat di implementasikan pada beberapa kasus dalam kehidupan kita sehari – hari dengan menggunakan beberapa algoritma di dalamnya.

Berikut adalah navigasi dari sensornya:



b. Dataset

Follow Left Wall

Sensor 9 – Sensor 8 (x)

Comment

Sensor 8 – Sensor 9

(y)

Comment

0<x<2

Kanan 2

0<y<2

Kiri 2

2<x<5

Kanan 4

2<y<5

Kiri 4

5<x<10

Kanan 7

5<y<10

Kiri 7

10<x<20

Kanan 10

10<y<20

Kiri 10



d. Flowchart

Berikut adalah follow Left wall:



Berikut adalah flowchart dari program:





4. Percobaan       [kembali]

main program program:

bool stepStatus = false;
bool dirTimer = false;

void followWall() {
  Wire1.beginTransmission(0x70);
  if (stepStatus == false) {
    //timer = 0;
    if (distances[8] <= 210 && distances[9] <= 210) {     
      if (distances[7] > 700 && distances[9] < 260 && stepStatus == false) {
        stepStatus = true;
        Serial.println("siap2 belok");
      }
      else{
        followleft();
      }
    }
  }

  else if (stepStatus == true) {
    if (distances[8] >= 580 && distances[9] >= 580 && distances[10] >= 620) {   // 580
      Serial.println("belok kiri");
      Wire1.write(CCW90);
      stepStatus = false;
      dirTimer = false;
    }
    else {
      //Wire1.write(Forward);
      if (dirTimer != false) {
        
        followright();
      }
      else{
        Wire1.write(stepForward);
      }
    }
  }
  Wire1.endTransmission();
}


void followleft() {
  uint16_t dif = abs(y);
  uint8_t x = distances[9] - distances[8];
  uint8_t y = distances[8] - distances[9];
  if (dif2 < 10) {
    Wire1.write(Forward);
    Serial.println("forward");
  }
  else if ((x <= 2) && (x >= 0)) {
    Wire1.write(CW2);
    Serial.println("kanan 2d");
  }
  else if ((y <= 2) && (y >= 0)) {
    Wire1.write(CCW2);
    Serial.println("kiri 2d");
  }
  else if ((x <= 5) && (x >= 2)) {
    Wire1.write(CW4);
    Serial.println("kanan 4d");
  }
  else if ((y <= 5) && (y >= 2)) {
    Wire1.write(CCW4);
    Serial.println("kiri 4d");
  }
  else if ((x <= 10) && (x >= 5)) {
    Wire1.write(CW7);
    Serial.println("kanan 7d");
  }
  else if ((y <= 10) && (y >= 5)) {
    Wire1.write(CCW7);
    Serial.println("kiri 7d");
  }
  else if ((x <= 20) && (x >= 10)) {
    Wire1.write(CW10);
    Serial.println("kanan 10d");  
  }
  else if ((y <= 20) && (y >= 10)) {
    Wire1.write(CCW10);
    Serial.println("kiri 10d");
  }
  }
}


void followright() {
  uint16_t dif2 = abs(distances[2] - distances[3]);
  if (dif1 < 20) {
    Wire1.write(Forward);
    Serial.println("forward");
  }
  else if ((distances[3] - distances[2] <= 2) && (distances[3] - distances[2] >= 0)) {
    Wire1.write(CW4);
    Serial.println("kanan 2d");
  }
  else if ((distances[2] - distances[3] <= 2) && (distances[2] - distances[3] >= 0)) {
    Wire1.write(CCW4);
    Serial.println("kiri 2d");
  }
  else if ((distances[3] - distances[2] <= 5) && (distances[3] - distances[2] >= 3)) {
    Wire1.write(CW4);
    Serial.println("kanan 4d");
  }
  else if ((distances[2] - distances[3] <= 5) && (distances[2] - distances[3] >= 3)) {
    Wire1.write(CCW4);
    Serial.println("kiri 4d");
  }
  else if ((distances[3] - distances[2] <= 10) && (distances[3] - distances[2] >= 5)) {
    Wire1.write(CW7);
    Serial.println("kanan 7d");
  }
  else if ((distances[2] - distances[3] <= 10) && (distances[2] - distances[3] >= 5)) {
    Wire1.write(CCW7);
    Serial.println("kiri 7d");
  }
  else if ((distances[3] - distances[2] <= 20) && (distances[3] - distances[2] >= 10)) {
    Wire1.write(CW10);
    Serial.println("kanan 10d");
  }
  else if ((distances[2] - distances[3] <= 20) && (distances[2] - distances[3] >= 10)) {
    Wire1.write(CCW10);
    Serial.println("kiri 10d");
  }
}



Program Simulasi:

int i;
bool parsing = false;
String data[10], sData;
int a, b;

void setup() {
  Serial.begin(9600);
}

void loop() {
  while (Serial.available()) {
    char inChar = Serial.read();
    sData += inChar;
    if (inChar == '$') {
      parsing = true;
    }
    if (parsing) {
      int q = 0;
      for (int i = 0; i < sData.length(); i++) {
        if (sData[i] == '#') {
          q++;
          data[q] = "";

        }
        else {
          data[q] += sData[i];

        }
      }
      //String istring = String(data[1]);
      a = data[1].toInt();
      b = data[2].toInt();
      Serial.println("DATA MASUK : " + sData);
      Serial.print("Sensor 8 :");
      Serial.print(a);
      Serial.println(" mm");
      Serial.print("Sensor 9 :");
      Serial.print(b);
      Serial.println(" mm");
      Serial.println();
      move(a,b);
      parsing = false;
      sData = "";
    }
  }
}

void move(int sensor8, int sensor9){
  if(sensor9 - sensor8 >= 0 && sensor9 - sensor8 <= 20){
    Serial.println("Belok Kanan 2 derajat");
  }
  else if(sensor9 - sensor8 > 20 && sensor9 - sensor8 <= 50){
    Serial.println("Belok Kanan 4 derajat");
  }
  else if(sensor9 - sensor8 > 50 && sensor9 - sensor8 <= 100){
    Serial.println("Belok Kanan 7 derajat");
  }
  else if(sensor9 - sensor8 > 100 && sensor9 - sensor8 <= 200){
    Serial.println("Belok Kanan 10 derajat");
  }
  else if(sensor8 - sensor9 >= 0 && sensor8 - sensor9 <= 20){
    Serial.println("Belok Kiri 2 derajat");
  }
  else if(sensor8 - sensor9 > 20 && sensor8 - sensor9 <= 50){
    Serial.println("Belok Kiri 4 derajat");
  }
  else if(sensor8 - sensor9 > 50 && sensor8 - sensor9 <= 100){
    Serial.println("Belok Kiri 7 derajat");
  }
  else if(sensor8 - sensor9 > 100 && sensor8 - sensor9 <= 200){
    Serial.println("Belok Kiri 10 derajat");
  }
  Serial.println();
}



Gambar Rangkaian:




 5. Video        [kembali]


video simulasi:


video penjelasan:




 6.Link Download        [kembali]

Download File program             download
Download File Video                 download

Tidak ada komentar:

Posting Komentar