9. z merupakan nilai koordinat z end-effector yang didapatkan dari hasil percobaan penggerakan robot lengan. Data ini khusus untuk tipe inverse
3.7.2.1. Penjelasan Program Penggerak Robot Lengan
Program gerak.py merupakan program penggerak robot lengan yang akan dipanggil oleh worker.py ketika sudut-sudut kemiringan robot lengan masih berada dalam jangkauan robot. Mekanisme kerja gerak.py dapat dilihat pada gambar berikut.
Start
angle 1, angle 2, angle 3
Mengkonversi sudut kemiringan link menjadi posisi sudut pada
setiap motor servo Mengambil data 1, data 2, dan data3 atau hitung 1, hitung 2, dan
hitung 3 pada id antrian yang telah diproses dari tabel data
(database)
a1, a2, a3
Penginisiasian awal dari sensor kompas
Menggerakan motor servo 1 sesuai nilai sudut a1
Mengambil data heading dari tabel kompas pada database robot
Mengambil data raw dari sensor kompas
Data heading kompas saat menunjukan θ1 = 0
A
B
Gambar 3.55. Flowchart (1) penggerakan robot
Nilai raw axis x, y, z
Pengolahan nilai menggunakan persamaan matematika
Nilai derajat 1
Penginisiasian awal dari sensor accelerometer pada link 2
Menggerakan motor servo 2 sesuai nilai sudut a2
Mengambil data raw dari sensor accelerometer
Penginisiasian awal dari sensor accelerometer pada link 3 Gambar 3.56. Flowchart (2) penggerakan robot
Menggerakan motor servo 3 sesuai nilai sudut a3
Mengambil data raw dari sensor accelerometer
Gambar 3.57. Flowchart (3) penggerakan robot
Pada bagian awal program gerak.py dilakukan import library smbus (untuk komunikasi i2c), time (untuk keperluan delay), math (untuk melakukan operasi matematika), ServoKit (untuk keperluan pengendalian motor servo melalui PWM/servo driver board), dan mysql.connector (untuk keperluan komunikasu dengan database).
import smbus import time import math
from adafruit_servokit import ServoKit import mysql.connector
Gambar 3.58. Cuplikan (1) program gerak.py
Program kemudian dilanjutkan untuk mengambil nilai data 1, data 2, dan data 3 (bila tipe forward) atau hitung 1, hitung 2, dan hitung 3 (bila tipe inverse). Nilai tersebut dimasuk secara berurutan pada variabel angle 1, angle 2, dan angle 3.
Berikut cuplikan program pengambilan data tersebut.
connection = mysql.connector.connect(host="localhost", user="root", passwd="017", database="robot") cur = connection.cursor()
cur.execute ("SELECT id FROM data WHERE status = 'process' LIMIT 1")
if tipe[0] == "forward":
cur.execute ("SELECT data1, data2, data3 FROM data WHERE id
= %s LIMIT 1", (_id[0], )) data = list()
data = cur.fetchone() connection.commit() else :
cur.execute ("SELECT hitung1, hitung2, hitung3 FROM data WHERE id = %s LIMIT 1", (_id[0], ))
Gambar 3.59. Cuplikan (2) program gerak.py
Ketiga nilai angle tersebut kemudian dimasukan ke dalam persamaan konversi nilai sudut kemiringan link menjadi nilai posisi sudut motor servo (telah dijelaskan pada sub-bab 3.4.3) sehingga dihasilkan nilai a1, a2, dan a3. Lalu, dilakukan penginisiasian sensor kompas dengan memberi nilai hexa 70 pada register A (nilai output raw yang ditampilkan adalah rata-rata dari 8 sampel yang diambil), memberi nilai hexa A0 pada register B (mengatur nilai gain pada sensor sebesar 390 dengan resolusi 2,56 Mg/LSb) dan memberi nilai hexa 0 pada register mode (mode pembacaan sensor secara continously).
def Magnetometer_Init():
#write to Configuration Register A
bus.write_byte_data(Device_Address, Register_A, 0x70)
#Write to Configuration Register B for gain
bus.write_byte_data(Device_Address, Register_B, 0xa0)
#Write to mode Register for selecting mode
bus.write_byte_data(Device_Address, Register_mode, 0)
Gambar 3.60. Cuplikan (3) program gerak.py
Kemudian dilakukan penggerakan motor servo 1 dengan posisi sudut sebesar nilai a1. Namun sebelum dapat menggerakkan motor servo perlu untuk melakukan penginisiasian channel-channel servo driver yang akan digunakan.
kit = ServoKit(channels=16)
kit.servo[0].set_pulse_width_range(544, 2095) kit.servo[1].set_pulse_width_range(544, 2210) kit.servo[2].set_pulse_width_range(544, 2095)
Gambar 3.61. Cuplikan (4) program gerak.py
Pada channel 0 dan 2 servo driver besar pulsa pada sisi high diatur dengan rentang 544-2095 Hz. Sedangkan pada channel 1 diatur pada rentang 544-2210 Hz. Tujuan pengaturan ini agar servo dapat mencapai jangkauan maksimum yaitu 180o. Setelah motor servo 1 bergerak maka dilanjutkan dengan proses pengambilan data heading dari tabel kompas pada database. Nilai data ini merupakan heading nilai sensor
kompas saat posisi robot lengan θ1 = 0o. Nilai ini didapatkan ketika menjalankan program kalibrasi kompas kalibrasi_kompas.py yang terdapat pada directory /home/pi/Desktop/kalibrasi. Berikut tampilan program kalibrasi_kompas.py ketika dijalankan.
Gambar 3.62. Tampilan program kalibrasi_kompas.py
Cara penggunaan program ini adalah menekan tombol >>> atau <<< hingga posisi laser robot pada bidang xy terdapat pada garis sumbu x (y = 0). Kemudian klik tombol simpan untuk melakukan pembacaan data raw sensor kompas dan pengolahan hingga mendapatkan nilai heading kompas yang kemudian disimpan pada database. Setelah mendapatkan nilai heading dari database, proses dilanjutkan dengan pembacaan data raw dari kompas untuk kemudiaan diolah hingga menjadi nilai heading kompas pada posisi terbaru. Proses ini diulang sebanyak lima kali untuk keakurasian sistem. Kemudian untuk mendapatkan nilai θ1 maka nilai heading tersebut dirata-ratakan dan dikurangi dengan nilai heading dari database. Karena pembacaan kompas agak bergeser akibat dekatnya posisi kompas dengan logam, dan motor servo maka nilai θ1 dimasukan ke dalam sebuah persamaan regeresi linier. Untuk nilai θ1 dibawah nilai -14o maka berikut persamaannya.
𝑑𝑒𝑟𝑎𝑗𝑎𝑡 1 = 1,131036 θ1+ 0,356996 (3.20)
Untuk nilai θ1 lebih besar dari -14o tetap dibiarkan, sehingga akan menghasilkan nilai derajat 1 yang tetap sama. Gambar 3.63 merupakan cuplikan program yang berfungsi untuk membaca dan mengolah data dari sensor kompas. Setelah mendapatkan nilai derajat 1 maka akan dilakukan pengecekan apakan nilai
o o
memenuhi kondisi tersebut maka akan dilakukan perhitungan selisih antara derajat 1 dengan angle 1 (nilai b1). Kemudian motor servo 1 digerakkan pada posisi sudut sebesar nilai a1 ditambah dengan nilai b1 dikali 2. Lalu proses mengulang kembali pada proses pengambilan data heading dari tabel kompas pada database. Bila telah memenuhi kondisi, program akan dilanjutkan dengan inisiasi sensor accelerometer pada link 2 terlebih dahulu. Penginisiasian ini dapat dilihat pada gambar 3.64.
def sensor1():
Gambar 3.63. Cuplikan (5) program gerak.py
def MPU_Init():
bus.write_byte_data(Device_Address, SMPLRT_DIV, 7) bus.write_byte_data(Device_Address, PWR_MGMT_1, 1) bus.write_byte_data(Device_Address, CONFIG, 0)
bus.write_byte_data(Device_Address, GYRO_CONFIG, 24) bus.write_byte_data(Device_Address, INT_ENABLE, 1)
Gambar 3.64. Cuplikan (6) program gerak.py
Setelah dilakukan penginisiasian, maka dilanjutkan dengan menggerakkan motor servo 2 sebesar a2. Kemudian, dilakukan pembacaan data raw dari accelerometer.
Proses ini diulang sebanyak lima kali untuk keakurasian sistem. Kemudian untuk mendapatkan nilai derajat 2 maka nilai sudut tersebut dirata-ratakan. Setelah mendapatkan nilai derajat 2 maka akan dilakukan pengecekan apakan nilai tersebut berada dalam rentang angle 2 – 0,5o hingga angle 2 + 0,5o. Jika belum memenuhi kondisi tersebut maka akan dilakukan perhitungan selisih antara angle 2 dengan derajat 2 (nilai b2). Kemudian motor servo 2 digerakkan pada posisi sudut sebesar nilai a2 dikurangi nilai b2. Lalu proses mengulang kembali pada proses pembacaan data raw dari sensor accelerometer pada link 2. Bila telah memenuhi kondisi, program akan dilanjutkan dengan inisiasi sensor accelerometer pada link 3 terlebih dahulu. Setelah dilakukan penginisiasian, maka dilanjutkan dengan menggerakkan motor servo 3 sebesar a3. Kemudian, dilakukan pembacaan data raw dari accelerometer. Pengolahan sudut untuk sensor ini akan sedikit berbeda yaitu penambahan 5o, dikarenakan adanya offset sebesar 5o antara kemiringan posisi sensor dengan garis link 3 (gambar 3.65). Hal ini sebelumnya telah disinggung pada sub-bab 3.2.
Gambar 3.65. Offset pada sensor MPU-6050 link 3 Garis Link 3 Garis Kemiringan Sensor
Selain ditambah dengan offset, nilai sudut yang telah didapatkan akan dikurangi dengan nilai derajat 2 yang telah didapatkan sebelumnya. Proses ini diulang sebanyak lima kali untuk keakurasian sistem. Kemudian untuk mendapatkan nilai derajat 3 maka nilai sudut tersebut dirata-ratakan. Setelah mendapatkan nilai derajat 3 maka akan dilakukan pengecekan apakan nilai tersebut berada dalam rentang angle 3 – 0,5o hingga angle 3 + 0,5o. Jika belum memenuhi kondisi tersebut maka akan dilakukan perhitungan selisih antara derajat 3 dengan angle 3 (nilai b3). Kemudian motor servo 2 digerakkan pada posisi sudut sebesar nilai a3 dikurangi nilai b3. Lalu proses mengulang kembali pada proses pembacaan data raw dari sensor accelerometer pada link 3. Bila telah memenuhi kondisi, program akan berhenti. Berikut cuplikan program gerak.py yang berfungsi untuk membaca dan mengolah data sensor accelerometer pada link 3.
def sensor3(derajat2):
Gambar 3.66. Cuplikan (7) program gerak.py
3.7.2.2. Penjelasan Pengolahan Data Raw Sensor Kompas dan Akselerometer