SKRIPSI
Disusun oleh:
Bambang Gunawan Tanjung
NIM: 185150300111051
PROGRAM STUDI TEKNIK KOMPUTER
JURUSAN TEKNIK INFORMATIKA
FAKULTAS ILMU KOMPUTER
UNIVERSITAS BRAWIJAYA
MALANG
2021
PERSETUJUAN
Disusun Oleh :
Bambang Gunawan Tanjung
NIM: 185150300111051
Penulis
bambanggunawan887@gmail.com
ABSTRAK
PERSETUJUAN..........................................................................................................
PERNYATAAN ORISINALITAS...................................................................................
PRAKATA...................................................................................................................
ABSTRAK.................................................................................................................
ABSTRACT..............................................................................................................
DAFTAR ISI...............................................................................................................
DAFTAR TABEL........................................................................................................
DAFTAR GAMBAR...................................................................................................
DAFTAR LAMPIRAN................................................................................................
BAB 1 PENDAHULUAN..............................................................................................
1.1 Latar Belakang........................................................................................
1.2 Rumusan Masalah..................................................................................
1.3 Tujuan.....................................................................................................
1.4 Manfaat..................................................................................................
1.5 Batasan Masalah.....................................................................................
1.6 Sistematika Pembahasan........................................................................
BAB 2 LANDASAN KEPUSTAKAAN............................................................................
2.1 Tinjauan Pustaka.....................................................................................
2.1.1 Autonomous Mobile Robot Berbasis Landmark
Menggunakan Particle Filter Dan Occupancy Grid Maps Untuk
Navigasi, Penentuan Posisi, Dan Pemetaan............................................
2.1.2 2D LiDAR-Based SLAM and Path Planning for Indoor
Rescue Using Mobile Robots.................................................................
2.1.3 Navigasi Indoor Berbasis Peta Pada Robot Beroda
Dengan Platform Robot Operating System...........................................
2.1.4 Sistem Navigasi Mobile Robot Dalam Ruangan Berbasis
Autonomous Navigation.......................................................................
2.1.5 Path Planning for Smart Car Based on Dijkstra Algorithm
and Dynamic Window Approach..........................................................
2.2 Dasar Teori............................................................................................
2.2.1 Robot............................................................................................
2.2.2 Autonomous Mobile Robot (AMR)...............................................
2.2.3 Mekanisme Kemudi Robot Beroda..............................................
2.2.4 Autonomous Navigation..............................................................
2.2.5 Kalman Filter untuk Lokalisasi......................................................
2.2.6 Simultaneous Localization And Mapping (SLAM)........................
2.2.7 Hector Simultaneous Localization and Mapping (Hector
SLAM)....................................................................................................
2.2.8 Navigasi........................................................................................
2.2.9 Path Planning...............................................................................
2.2.10 Algoritme Dijkstra......................................................................
2.2.11 Algoritma Dynamic Window Approach (DWA)..........................
2.2.12 Komponen Utama Robot...........................................................
2.2.13 Light Detection and Ranging......................................................
2.2.14 Wheel Odometry........................................................................
2.2.15 Inertial Measurement Unit (IMU)..............................................
2.2.16 Robot Operating System (ROS)..................................................
2.2.17 ROS Tool.....................................................................................
2.2.18 Virtual Network Computing (VNC).............................................
2.2.19 Firmware....................................................................................
2.2.20 Metode Statistik.........................................................................
BAB 3 METODOLOGI PENELITIAN..........................................................................
3.1 Tipe Penelitian......................................................................................
3.2 Strategi dan Rencana Penelitian...........................................................
3.3 Metode Penelitian................................................................................
3.4 Subjek Penelitian..................................................................................
3.5 Lokasi Penelitian...................................................................................
3.6 Teknik Pengumpulan Data....................................................................
3.7 Teknik Analisis Data..............................................................................
3.8 Peralatan Pendukung............................................................................
BAB 4 Rekayasa Kebutuhan...................................................................................
4.1 Gambaran Umum Sistem.....................................................................
4.2 Analisis Kebutuhan Sistem....................................................................
4.2.1 Kebutuhan Fungsional.................................................................
4.2.2 Kebutuhan Non-Fungsional.........................................................
BAB 5 Perancangan dan implementasi..................................................................
5.1 Perancangan Sistem.............................................................................
5.1.1 Perancangan Skematis Prototype Sistem....................................
5.1.2 Perancangan Perangkat Keras Sistem..........................................
5.1.3 Perancangan Perangkat Lunak.....................................................
5.2 Implementasi Sistem..........................................................................
5.2.1 Implementasi Skematis Prototype Sistem.................................
5.2.2 Implementasi Perangkat Keras..................................................
5.2.3 Implementasi Perangkat Lunak.................................................
BAB 6 PeNGUJIAN................................................................................................
BAB 7 Penutup.....................................................................................................
7.1 Kesimpulan.........................................................................................
7.2 Saran...................................................................................................
DAFTAR REFERENSI..............................................................................................
LAMPIRAN A PERSYARATAN FISIK DAN TATA LETAK...........................................
LAMPIRAN B PERSYARATAN FISIK DAN TATA LETAK...........................................
LAMPIRAN C PERSYARATAN FISIK DAN TATA LETAK...........................................
LAMPIRAN D PERSYARATAN FISIK DAN TATA LETAK...........................................
LAMPIRAN E PERSYARATAN FISIK DAN TATA LETAK...........................................
DAFTAR TABEL
22
Untuk itu dari permasalahan ketiga peneliti sebelumnya, penulis
mengusulkan suatu robot otonom dengan sensor laser yang memiliki pembacaan
luas serta berakurasi tinggi untuk mengimplementasikan pemetaan dan navigasi
dalam ruangan menggunakan algoritme Hector SLAM dan algoritme Dijkstra
pada platform Robot Operating System (ROS). (Utomo, 2015) menyarankan
untuk menggunakan sensor jarak yang memiliki jangkauan dengan sudut 360
derajat. Dalam bukunya (Brombach, 2021) menyarankan untuk menggunakan
Raspberry Pi 4 atau Jetson Nano 4GB sebagai kontroler utama robot karena
resource pemrosesannya yang cukup besar.
Navigasi robot menggunakan perencanaan jalur global Dijkstra untuk
mengoptimalkan waktu dan resource komputasi karena area gudang yang luas.
Kemudian sebagai tambahan, digunakan perencanaan jalur lokal dengan DWA
ketika mendeteksi halangan bergerak. Sebelum melakukan navigasi robot
membutuhkan data peta lokal, maka dari itu Hector SLAM akan berperan sebagai
pemetaan dan membuat peta lokal. Selama proses pemetaan dan navigasi
berlangsung, robot perlu mengetahui lokasi terkini secara simultan melalui
proses lokalisasi. Lokalisasi yang dipakai menggunakan dua sensor pendeteksi
percepatan, yakni sensor IMU dan odometry. Kedua sensor ini digabungkan
menggunakan algoritme EKF sekaligus melakukan koreksi kesalahan. Pada proses
navigasi, untuk mengonfirmasi posisi robot agar benar-benar presisi dan
menghindari kesalahan posisi yang besar dibutuhkan lokalisasi dengan data laser
dan peta menggunakan algoritme AMCL.
Hasil akhir dari penelitian ini adalah purwarupa robot otonom yang
digunakan di dalam gudang penyimpanan dengan mengimplementasikan proses
navigasi menggunakan peta. Harapan dari penelitian ini, agar perusahaan jasa
ekspedisi di Indonesia dapat meningkatkan efisiensi waktu, tenaga kerja dan
mengurangi biaya produksi pada proses distribusi atau sortir barang dengan
memanfaatkan pengembangan robot bergerak otonom dari hasil penelitian ini.
23
A.3 Tujuan
Berdasarkan rumusan masalah yang telah dijelaskan sebelumnya, maka
tujuan dari penelitian ini adalah sebagai berikut.
1. Menguji hasil akurasi dari pembacaan sensor RPLiDAR, sensor IMU dan
sensor Odometry.
2. Menguji hasil akurasi bentuk peta yang dihasilkan pada proses pemetaan
menggunakan algoritme Hector SLAM.
3. Menguji hasil akurasi dan waktu komputasi pada proses navigasi global
menggunakan algoritme Dijkstra.
4. Menguji hasil akurasi dan waktu komputasi pada proses navigasi global
dan lokal menggunakan gabungan algoritme Dijkstra dan DWA.
5. Mengetahui konfigurasi parameter yang digunakan untuk mendapatkan
hasil pemetaan dan navigasi yang terbaik.
A.4 Manfaat
Manfaat yang diharapkan adalah agar penelitian ini bisa menjadi solusi
efisien dalam proses pendistribusian barang di dalam gudang penyimpanan
ekspedisi, sehingga proses logistik pada sistem ekspedisi pengiriman paket
menjadi lebih cepat dan terotomatisasi. Purwarupa robot bergerak otonom ini
juga bisa menjadi referensi pengembang robot selanjutnya dalam pembuatan
robot secara masif karena biaya pembuatan robot yang terjangkau. Selain itu
penelitian ini juga diharapkan bermanfaat bagi akademik di lingkungan
Universitas Brawijaya sebagai referensi penggunaan middleware robot operating
system (ROS), sehingga mampu meningkatkan pengembangan robot mendekati
pengembangan perangkat lunak yang digunakan di Industri.
24
7. Robot tidak mampu mendeteksi halangan yang berada di bawah dan di
atas bidang datar 2 dimensi laser sensor RPLiDAR, termasuk
tanjakan/ganjalan parkir.
8. Robot tidak mampu mendeteksi selokan, lubang besar, anak tangga, dan
permukaan yang tidak rata lainnya.
9. Robot tidak mampu mendeteksi berat atau kondisi barang yang dibawa.
10. Robot dan komputer server harus terus terhubung dengan tethering
smartphone selama proses navigasi berlangsung.
25
perancangan dan implementasi perangkat keras maupun perangkat
lunak.
6. BAB 6: Pengujian dan Analisis
Bab ini membahas percobaan dari hasil perancangan dan implementasi
mengenai data dari keluaran sistem dengan bentuk pengujian yang
berbeda-beda dan melakukan analisa data dengan parameter yang
berbeda untuk bisa membandingkan tingkat akurasi dan keberhasilan
sistem.
7. BAB 7: Penutup
Bab ini berisi tentang kesimpulan yang ditarik dari hasil dari pengujian
dan analisis yang dilakukan sebelumnya dari sisi perancangan,
implementasi, dan pengujian sehingga mampu dijadikan acuan dalam
pengembangan penelitian sejenis yang terangkum dalam saran.
26
BAB B LANDASAN KEPUSTAKAAN
Perbedaan
Tinjauan
No Persamaan
Pustaka Penelitian Rencana
Terdahulu Penelitian
1 Utomo, Eko Menggunakan Penelitian
Penelitian
Budi.2015. jenis menggunakan
menggunakan
Autonomous algoritme sensor ultrasonik,
sensor RPLiDAR,
Mobile Robot lokalisasi yang PSD,
IMU dan
Berbasis sama akselerometer,
Odometer dari
Landmark Extended sensor kamera
DYI robot beroda
Menggunakan Kalman Filter dari platform
diff-drive yang
Particle Filter (EKF) untuk robot HBE
otonom
Dan Occupancy melakukan Robocar
Grid Maps fusion pada
Pengujian
Untuk Navigasi, sensor Pengujian
dilakukan dengan
Penentuan dilakukan dengan
menunjukkan
Posisi, Dan membandingkan
hasil pemetaan
Pemetaan hasil pemetaan
dan hasil navigasi
Arsitektur akhir Arsitektur akhir
penelitian penelitian
menggunakan menggunakan
pemetaan pemetaan Hector
Occupancy grid SLAM dan
dan navigasi navigasi
27
menggunakan
global planning
dengan Dijkstra
menggunakan dan local
Dynamic A* planning dengan
Dynamic
Windows
Approach (DWA)
Pengujian
berfokus pada
Salah satu mapping saja
Pengujian
algoritme seperti
berfokus pada hal
yang perbandingan
yang lebih luas
digunakan algoritme
seperti pengujian
sebagai mapping
Zhang, dkk. semua sensor
perbandingan menggunakan
2020. 2D LiDAR- yang digunakan
pada GMapping,
Based SLAM and hingga pemetaan,
penelitian Hector SLAM, dan
2 Path Planning navigasi dan
sama, yakni Cartographer
for Indoor lokalisasi.
Hector SLAM untuk mencari
Rescue Using hasil pemetaan
Mobile Robots yang optimal
Menggunakan
Menggunakan
platform
perangkat Menggunakan
perangkat
personal perangkat Jetson
lunak yang
komputer Nano
sama, yakni
notebook intel i5
ROS
3 Tara Anggada Penelitian Pengontrol utama Menggunakan
Putra, dkk. 2020. menggunakan robot adalah Jetson Nano dan
Navigasi Indoor metode ODROID-XU4 dan Motor Driver
Berbasis Peta pemetaan robot dikontrol Hoverboard
Pada Robot yang sama, dengan 4 buah sebagai perangkat
Beroda Dengan yakni Hector roda sebagai keras utamanya
Platform Robot SLAM penggeraknya serta
Operating menggunakan
System jenis robot
differential drive
pada kemudinya,
yakni hanya
menggunakan 2
buah roda
sebagai
penggeraknya
28
Menggunakan
Penelitian ini Menggunakan
algoritme
menggunakan algoritme Dijkstra
Dynamic A-Star
algoritme untuk global path
untuk global path
fusion EKF, planning
planning
Penelitian ini
menggunakan Menggunakan Menggunakan
Dwiky algoritme algoritme g- algoritme Hector
Erlangga.2019. AMCL untuk mapping untuk SLAM untuk
Sistem Navigasi lokalisasi pemetaan pemetaan
Mobile Robot navigasinya
4
Dalam Ruangan
Berbasis Penelitian ini Menggunakan
Autonomous menggunakan sensor RGB-D
Menggunakan
Navigation algoritme untuk
sensor RPLiDAR
DWA untuk mendapatkan
local planner data
Menggunakan Menggunakan
Penelitian ini
robot dengan robot dengan
menggunakan
Li-sang Liu, dkk. jenis kemudi jenis kemudi
sensor
2021. Path Ackerman dengan Differential Drive
RPLiDAR
Planning for 4 roda dengan 3 roda
Smart Car Based
5 on Dijkstra Penelitian ini
Pengujian sistem
Algorithm and menggunakan Pengujian sistem
pemetaan
Dynamic algoritme pemetaan
dilakukan di
Window perencanaan dilakukan di
dalam basemen
Approach jalur yang dalam rumah
parkir dengan
sama, yaitu dengan ruangan
ruangan yang
Dijkstra dan yang sempit
sangat luas
DWA
29
menunjukkan cell occupied (warna putih) tidak berada di tepi peta. Hal ini
disebabkan karena sensor ultrasonik pada robot hanya berada di bagian depan
robot. Sedangkan di sisi kanan dan kiri pada badan robot tidak terdapat sensor
ultrasonik. Kemudian Semakin kecil jumlah partikel, diperlukan iterasi yang lebih
banyak dalam mencapai konvergen partikel (estimasi pose (𝑥, 𝑦, θ)). Lalu
Semakin banyak jumlah partikel, waktu komputasi yang diperlukan semakin
lama. Hasil dari algoritmenya Penggunaan algoritme A* dapat membantu robot
menemukan jalur terpendek dengan eror pose robot untuk data arah sebesar
4.34 % dan error jarak tempuh robot sebesar 4.8 %.
B.1.2 2D LiDAR-Based SLAM and Path Planning for Indoor Rescue Using
Mobile Robots
Penelitian yang dilakukan oleh (Zhang, dkk., 2020) mengimplementasikan 4
algoritme untuk pemetaan yakni GMapping, Hector-SLAM, Cartografer dan RGB-
D. Penelitian ini membahas mengenai pemetaan dan navigasi akan tetapi yang
lebih terlihat dengan detail adalah proses penggunaan algoritme untuk proses
Mapping. Dari pengujian yang dilakukan didapatkan kesimpulan bahwa
algoritme GMapping, Hector-SLAM dan Cartographer memiliki performa yang
baik di dalam ruangan. Sedangkan RGB-D sangat buruk karena tidak bisa
mendeteksi pada kondisi pencahayaan yang redup. Kemudian didapatkan data
bahwa GMapping dan Cartographer memiliki potensi yang sangat baik dalam
melakukan pemetaan. Terutama hasil peta yang dibuat dengan Cartographer
menghasilkan peta yang paling akurat dengan bentuk bangunan aslinya (Zhang,
dkk., 2020).
B.1.3 Navigasi Indoor Berbasis Peta Pada Robot Beroda Dengan Platform
Robot Operating System
Penelitian yang dilakukan oleh (Putra, Muliady dan Setiadikarunia, 2020)
mengimplementasikan sistem navigasi indoor berbasis peta pada robot beroda
dengan platform Robot Operating System (ROS) menggunakan algoritme Hector
Mapping untuk pemetaan. Hasilnya adalah robot berhasil melakukan pemetaan
lingkungan indoor dengan eror rata-rata 0.174 meter dan berhasil melakukan
lokalisasi dengan eror rata-rata 0.05 meter pada koordinat x, 0.028 meter pada
koordinat y, dan 1.506° pada sudut orientasi. Path planner memiliki tingkat
keberhasilan sebesar 62.5% dalam menghasilkan jalur yang dapat dilewati robot
dan tingkat keberhasilan 75% dalam mengikut jalurnya. Kesimpulan yang
didapatkan pada jurnal ini adalah bahwa pemetaan menggunakan Hector SLAM,
lokalisasi data fusion menggunakan Extended Kalman Filter (EKF), path planning
dengan Field Dynamic A-Star dan Trajectory tracking dengan pengontrol on-off
berhasil di implementasikan dengan ROS. Hasil yang didapat berupa kesimpulan
bahwa kecepatan robot berpengaruh terhadap hasil pemetaan. Lokalisasi Wheel
Odometer berhasil menentukan posisi robot dengan tingkat kesalahan kurang
dari 0.05 meter. Untuk navigasi peneliti sebelumnya menyarankan untuk
menggunakan local path planner agar robot dapat beroperasi pada lingkungan
dinamis serta menggunakan PID untuk meningkatkan performa robot.
30
B.1.4 Sistem Navigasi Mobile Robot Dalam Ruangan Berbasis
Autonomous Navigation
Penelitian yang dilakukan oleh (Erlangga, dkk., 2019) mengimplementasikan
navigasi mobile robot dalam ruangan yang menerapkan sistem kemudi otonom.
Pembuatan peta menggunakan algoritme Simultaneous Localization and
Mapping (SLAM) yang mengolah data dari sensor kamera RGB-D dan bumper
yang di konversi ke laser scan dan point cloud digunakan untuk memperoleh
perception. Sedangkan wheel encoder dan gyroscope digunakan untuk
mendapatkan data odometry yang digunakan untuk membangun peta perjalanan
dengan algoritme SLAM, GMapping dan melakukan autonomous navigation.
Sistem terdiri dari tiga sub-sistem yaitu: sensor sebagai input, single board
computer untuk proses, dan aktuator sebagai penggerak. Hasil dari pengujian
menunjukkan sistem dapat memberikan data depth yang dikonversi ke laser
scan, data bumper, dan data odometry kepada single board computer berbasis
ROS sehingga mobile robot yang dikendalikan secara Wireless dari Workstation
dapat membangun peta grid 2 dimensi dengan akurasi total error rate sebesar
0.987%. Dengan menggunakan peta, data dari sensor, dan odometry tersebut
mobile robot dapat melakukan autonomous navigation secara konsisten dan
mampu melakukan path replanning, menghindari rintangan-rintangan statis dan
terus menerus melakukan localization untuk mencapai titik tujuan.
B.1.5 Path Planning for Smart Car Based on Dijkstra Algorithm and
Dynamic Window Approach
Penelitian ini dilakukan oleh (Liu, dkk., 2021) menjelaskan mengenai
percobaan penggunaan algoritme Dijkstra dan DWA local planner sebagai
perencanaan jalur. Algoritme ini dipilih karena hasil riset yang sudah dilakukan
sebelumnya oleh peneliti. Setelah melakukan perancangan alat dan perangkat
lunak, peneliti melakukan pengujian di dalam rumah dengan kondisi ruangan
yang sempit. Hasil dari pengujian tersebut adalah halangan diam atau statis
cenderung mudah untuk dilewati dengan mudah, bahkan saat ditambahkan
halangan yang lebih banyak untuk menciptakan lingkungan lebih kompleks,
hasilnya tetap robot mampu melewati halangan dengan sangat baik. Namun
sangat disayangkan pada hasil penelitian tersebut tidak disebutkan atau tidak
dilakukan pengujian pada benda yang bergerak secara dinamis. Dari hasil
pengujiannya hanya dijelaskan bahwa benda-benda diam diletakkan di depan
robot, selanjutnya robot yang sedang diam di posisi awal diberikan koordinat
tujuan dan diharapkan mampu melewati halangan statis tersebut. Akan lebih
baik jika pengujian juga dilakukan dengan menggunakan halangan yang bergerak
secara dinamis, baik itu bergerak cepat ataupun lambat.
Berdasarkan ke-5 tinjauan pustaka di atas, dapat disimpulkan bahwa
permasalahan komputasi pada robot bergerak otonom terdiri dari 3 proses
utama, yaitu lokalisasi, pemetaan dan navigasi (Utomo, 2015, hal.1). Selain itu
pada penelitian oleh (Putra, Muliady dan Setiadikarunia, 2020) dijelaskan bahwa
sensor IMU dan Odometer akan menghasilkan nilai lokalisasi dengan kesalahan
31
yang rendah dengan bantuan algoritme fusion sensor yaitu Extended Kalman
Filter, maka dari itu berdasarkan pertimbangan hasil penelitian tersebut maka
penulis akan menerapkan metode yang sama untuk mendapatkan nilai lokalisasi
yang konsisten dan sedikit kesalahan. Kemudian pada tinjauan pustaka yang
terakhir, yakni pada penelitian yang dilakukan oleh (Liu, dkk., 2021) dapat
disimpulkan bahwa algoritme Dijkstra sebagai perencanaan global dan algoritme
DWA sebagai perencanaan lokal dapat berjalan dengan sangat baik.
Kemudian dalam pengimplementasiannya robot yang digunakan pada setiap
referensi penelitian tidak dirancang khusus untuk menjalani tugas tertentu. Pada
penelitian tersebut hanya berfokus pada metode komputasi yang digunakan
sehingga tidak memfokuskan untuk membuat robot yang bekerja secara riil.
Maka dari itu dengan penelitian ini, penulis akan melengkapi kekurangan dari
penelitian sebelumnya. Data-data dari penelitian sebelumnya akan dijadikan
sebagai metode pembanding dari apa yang penulis temukan dalam penelitian.
Penulis akan menggunakan nilai parameter terbaik yang bisa digunakan dan
tetap memperhatikan akurasi dan waktu komputasi serta penggunaan daya CPU.
Dengan demikian, penelitian ini bertujuan untuk membuat purwarupa robot riil
sesuai dengan kebutuhan yang perlukan pada distribusi gudang dibidang
ekspedisi.
B.2.1 Robot
Robot adalah alat berupa orang-orangan dan sebagainya yang dapat
bergerak (berbuat seperti manusia) yang dikendalikan oleh mesin (KBBI, 2016).
Menurut (Bekey, 2005) robot didefinisikan sebagai sebuah mesin yang mampu
merasakan, berpikir, dan bertindak. Dengan demikian, robot harus dilengkapi
dengan sensor, kemampuan pemrosesan yang meniru beberapa aspek
kecerdasan dan aktuator. (Bekey, 2005) menambahkan bahwa sensor
dibutuhkan untuk memperoleh informasi dari lingkungan, kecerdasan bawaan
diperlukan jika robot ingin melakukan tugas-tugas penting secara mandiri, dan
actuation diperlukan untuk memungkinkan robot mengerahkan kekuatan pada
lingkungan. Ilustrasi mengenai robot dapat dilihat pada gambar 2.1.
32
Gambar 2.1 Robot Humanoid Pada Lomba RoboCup
Sumber: (www.robocupgermanopen.de, 2020)
33
Gambar 2.3 Autonomous Mobile Robot
Sumber: (www.panasonic.com, 2020)
Pada gambar 2.3 dapat dilihat bahwa terdapat robot drone dan robot beroda
yang memiliki tipe penggerak yang beda namun memiliki tugas yang sama.
Menurut (Bräunl, 2008) salah satu tipe penggerak pada mobile robot adalah tipe
robot beroda differential drive. Penggerak ini terdiri dari dua roda penggerak dan
memiliki satu atau lebih roda pasif atau caster. (Bräunl, 2008) berpendapat
keuntungan dari desain penggerak differential drive adalah aksi kemudi dan
berbelok telah sepenuhnya dipisahkan dengan menggunakan dua motor yang
berbeda. Oleh karena itu, perangkat lunak kontrol untuk mengemudi akan
sangat sederhana. Kerugian dari desain ini adalah bahwa robot tidak dapat
berputar di tempat, karena roda yang digerakkan tidak terletak di tengahnya.
Menurut (Bodrenko, 2019) robot bergerak tepat digunakan pada sektor yang
mengangkut barang dalam jumlah banyak, misalnya sektor pergudangan
ekspedisi. Robot bergerak dapat dimanfaatkan pada proses distribusi ataupun
penyortiran paket kiriman.
B.2.2.1 Autonomous Mobile Robot Dibidang Pergudangan
34
Mengutip dari (Zetes, 2021) perusahaan pengembang robot bergerak
otonom untuk logistik, menjelaskan bahwa robot bergerak otonom bekerja
secara kolaboratif dengan operator gudang, baik itu memindahkan stok selama
pemetikan, mengambil pengisian ulang, atau mentransfer stok massal. Robot ini
melakukan tugas dengan mengangkut barang ke tahap pemrosesan berikutnya,
dengan ini memungkinkan pekerja untuk melanjutkan ke tugas berikutnya
sehingga proses distribusi barang menjadi lebih cepat seperti yang diperlihatkan
pada gambar 2.4. Autonomous Mobile Robot (AMR) memiliki karakteristik dan
tugas utama dalam pekerjaannya, meliputi (Zetes, 2021):
a. Beroperasi secara mandiri, AMR tidak memerlukan infrastruktur khusus
untuk bekerja, seperti sebuah garis atau jalur lintasan khusus.
b. Sensor, peta, dan sistem pemrosesan terpasang memungkinkan robot
untuk merencanakan rute dan beradaptasi secara dinamis dengan
perubahan di sekitarnya.
c. AMR dapat memindahkan stok di dalam gudang atau antar fasilitas.
Robot ini juga dapat melakukan tugas rutin seperti penghitungan
inventaris dan pengecekan stok barang.
35
B.2.3.1 Differential Drive Robot
Menurut (Dudek dan Jenkin, 2001) dalam bukunya, differential drive atau
penggerak diferensial adalah sistem penggerak dua roda dengan aktuator
independen untuk setiap roda. Menurut (Bräunl, 2008, hal.5) keuntungan dari
desain ini adalah motor dan roda berada pada posisi tetap dan tidak perlu
diputar, ini sangat menyederhanakan desain mekanik robot. (Dudek dan Jenkin,
2001) menjelaskan meskipun kita dapat memvariasikan kecepatan setiap roda
agar robot dapat melakukan gerakan bergulir, robot harus berputar di sekitar
titik yang terletak di sepanjang sumbu roda kiri dan kanan. Titik di mana robot
berputar dikenal sebagai ICC (Instantaneous Center of Curvature).
(Dudek dan Jenkin, 2001) juga menjelaskan bahwa variasi kecepatan kedua
roda menentukan lintasan yang diambil robot. Sistem kerja dari mekanisme
kemudi ini memanfaatkan gerak forward kinematic dengan mengandalkan
putaran independen kedua roda untuk mendapatkan manuver yang diinginkan.
Roda penggerak biasanya ditempatkan di setiap sisi robot dan mengarah ke
depan atau sebaliknya.
( 2l )=V r
ω R+ (2.1)
ω ( R− ) =V l
l
(2.2)
2
dimana l adalah jarak dari pusat antara kedua roda, V𝑙 dan V𝑟 adalah
kecepatan roda (translasi), R merupakan jarak antara titik tengah l (l/2) jika
diukur dari salah satu roda) dan ICC yang merupakan titik dimana robot berotasi
(Dudek dan Jenkin, 2001).
Jika Persamaan (2.1) dan (2.2) digabungkan dengan persamaan v=ω R maka
R= ( L2 vrvr−vl
+ vl
) (2.3)
36
ω= ( vr−vl
l )
(2.4)
[][ ]
x cos ( ωδt ) −sin ( ωδt ) 0
y = sin ( ωδt ) cos ( ωδt ) 0 (2.6)
θ 0 0 1
Persamaan ini secara sederhana menggambarkan gerakan robot yang
berputar sejauh R terhadap ICC dengan kecepatan sudut ω.
37
B.2.4 Autonomous Navigation
38
B.2.5 Kalman Filter untuk Lokalisasi
Dalam buku yang berjudul “ROS: Robot Programming” (Pyo, dkk., 2017)
menjelaskan bahwa Kalman Filter yang digunakan dalam proyek Apollo NASA
dikembangkan oleh Dr. Rudolf E. Kalman, yang sejak saat itu menjadi terkenal
menjadi sebuah algoritme. Filternya adalah filter recursive yang melacak keadaan
objek dalam sistem linier dengan noise. (Pyo, dkk., 2017) menambahkan bahwa
filter didasarkan pada probabilitas Bayes yang mengasumsikan model dan
menggunakan model ini untuk memprediksi keadaan saat ini dari keadaan
sebelumnya. Kemudian, kesalahan antara nilai prediksi dari langkah sebelumnya
dan nilai aktual terukur yang diperoleh oleh alat ukur digunakan untuk
melakukan langkah pembaruan untuk memperkirakan nilai keadaan yang lebih
akurat.
Berdasarkan penjelasan (Siegwart, Nourbakhsh dan Scaramuzza, 2004) di
dalam teori filter Kalman, sistem diasumsikan linier dan dengan noise Gaussian.
Teori filter Kalman didasarkan pada asumsi bahwa sistemnya linier dan bahwa
secara keseluruhan konfigurasi robot, model kesalahan odometri, dan model
kesalahan pengukuran dipengaruhi oleh noise putih Gaussian (Siegwart,
Nourbakhsh dan Scaramuzza, 2004). Menurut (Pyo, dkk., 2017) Kalman Filter
hanya dapat diaplikasikan pada sistem yang linier, sedangkan kebanyakan robot
memiliki sistem non linier. Maka dari itu dibuat sebuah varian algoritme dari
hasil modifikasi Kalman Filter yang dikenal dengan Extended Kalman Filter (EKF).
B.2.5.1 Extended Kalman Filter (EKF)
Berdasarkan penjelasan dari (Siegwart, Nourbakhsh dan Scaramuzza, 2004;
Pyo, dkk., 2017) sebelumnya, Extended Kalman Filter (EKF) adalah versi non linier
dari filter Kalman yang terlinear mengenai perkiraan rata-rata dan kovarians saat
ini. (Siegwart, Nourbakhsh dan Scaramuzza, 2004) mengatakan EKF sering
disebut sebagai algoritme fusion sensor karena dalam penggunaannya EKF
digunakan untuk menggabungkan dua buah atau lebih sensor, seperti sensor
IMU, GPS, kompas dan odometry menjadi satu output. Hasil dari algoritme ini
menghasilkan keluaran gabungan sensor yang mampu melacak posisi suatu
robot dengan mengalkulasi nilai dari setiap keluaran sensor yang dimasukkan ke
dalam parameter EKF. Algoritme lokalisasi ini bertujuan untuk mencapai tingkat
akurasi yang tinggi dan cakupan yang luas (Siegwart, Nourbakhsh dan
Scaramuzza, 2004).
(Pyo, dkk., 2017) mengatakan bahwa EKF Localization tergabung ke dalam
paket robot localization yang tersedia pada paket driver ROS dengan node
paketnya bernama ekf_localization_node. Paket ini berisi template launcher dan
file konfigurasi untuk membantu pengguna dalam melakukan lokalisasi. Untuk
penggunaannya, paket lokalisasi ini dapat digunakan pada file launch secara
langsung atau dengan membuat file config dengan extensi .yaml yang nantinya
juga di impor pada file launch (Pyo, dkk., 2017).
(Siegwart, Nourbakhsh dan Scaramuzza, 2004) menjelaskan bahwa EKF
berbasis pada proses iterasi untuk mengestimasi posisi terkini atau suatu state
39
berdasarkan informasi sebelumnya. berdasarkan informasi sebelumnya. Proses
estimasi tersebut dapat dideskripsikan sebagai sistem dinamis non linier yang
ditunjukkan pada Persamaan (2.7). Observation vector atau measurement vector
yang merupakan hasil pengukuran ditunjukkan pada Persamaan (2.8). Variabel x k
adalah state sistem robot pada waktu k , x k−1 adalah state sistem pada waktu
k −1, f adalah fungsi yang menunjukkan hubungan state sistem pada waktu k
dengan state sistem pada waktu k −1. W k −1 adalah process noise, Z k adalah
observation vector (pengukuran pada waktu k), h adalah fungsi non linier yang
mendeskripsikan hubungan antara x k dengan Z k dan V k adalah measurement
noise dengan distribusi normal (Siegwart, Nourbakhsh dan Scaramuzza, 2004).
Berikut adalah persamaan yang digunakan pada EKF.
x k =f ( x k−1+ W k−1) (2.7)
Z k =h( x k +V k ) (2.8)
(Siegwart, Nourbakhsh dan Scaramuzza, 2004) menambahkan bahwa
algoritma EKF terdiri dari 2 fase, yaitu state predict dan state update. Dalam
bukunya (Siegwart, Nourbakhsh dan Scaramuzza, 2004) menjelaskan State
predict merupakan fase prediksi terhadap informasi priori state vector ^x k dengan
menggunakan informasi posteriori state vector x k−1. Pada fase ini informasi priori
state vector diperbaiki dengan menggunakan observation vector dan Fase state
predict ditunjukkan oleh Persamaan 2.9 dan Persamaan 2.10 serta fase state
update ditunjukkan oleh Persamaan 2.11, Persamaan 2.12, dan Persamaan 2.13
(Siegwart, Nourbakhsh dan Scaramuzza, 2004).
^
x k =f (x k−1) (2.9)
^ T
Pk =F Pk−1 F +Q (2.10)
^k H (H P
K= P ^k H + R)
T T −1
(2.11)
x k = x^k + K ( z k − H x^k ) (2.12)
Pk =(1−KH ) ^
T T
Pk (1−KH ) + KRK (2.13)
Tabel 2.2 Penjelasan Variabel Persamaan Fungsi EKF
Sumber: (Siegwart, Nourbakhsh dan Scaramuzza, 2004)
No Notasi Keterangan
1 xk
^ Hasil prediksi state sistem (priori state vector)
2 Pk Kovariansi error sistem pada waktu k
3 Pk−1 Kovariansi error pada waktu k-1
4 ^
Pk Hasil prediksi kovariansi error
5 F Matriks Jacobian dari f
6 Q Process noise covariance
7 K Kalman gain
40
8 H Matriks Jacobian dari h
9 R Kovariansi pengukuran
41
Gambar 2.11 SLAM Dengan Cara Landmark Observation dan Cara Sensor View
Sumber: (Birk dan Pfingsthorn, 2016)
(Birk dan Pfingsthorn, 2016) melanjutkan pada cara kedua, yakni
menggunakan opsi untuk menggunakan registrasi, yaitu metode yang
menyelaraskan data sensor secara spasial berdasarkan isi data sensor. Misalnya,
laser range finder (LRF) memindai sektor lingkungan untuk menghasilkan profil
jangkauan ke rintangan terdekat. Dua pemindaian berikutnya kemudian dapat
didaftarkan dengan menemukan transformasi spasial dan karenanya gerakan
relatif x t dari robot yang mengarah ke kecocokan terbaik dari dua pemindaian.
Pemilihan cara bertujuan menghasilkan bentuk peta yang sama, akan tetapi
perbedaan cara akan menentukan bentuk algoritma SLAM mana yang paling
cocok untuk memecahkan masalah (Birk dan Pfingsthorn, 2016).
Menurut (Birk dan Pfingsthorn, 2016) Implementasi sistem SLAM biasanya
dibagi menjadi dua bagian utama, yaitu frontend dan backend. Frontend
berurusan dengan metode khusus aplikasi yang menghasilkan batasan spasial,
masing-masing mendeteksi dan melokalisasi landmark yang kemudian dipelihara
dan dioptimalkan di backend dengan algoritme generik. Sedangkan backend
adalah inti komputasi dari sistem SLAM di mana optimasi generik terjadi.
Backend juga digunakan untuk memitigasi dan mengurangi kesalahan pada lokasi
(Birk dan Pfingsthorn, 2016). Penelitian ini akan menggunakan metode dari cara
kedua, yakni dengan menggunakan data laser untuk mendapatkan sensor view
dan menggunakan sensor Inertia Measurement Unit untuk melakukan motion
estimate agar pemetaan dapat berjalan dengan baik.
42
B.2.6.1 Occupancy Grid Map
43
(Manuel dan Ferrão, 2018) menambahkan bahwa Hector SLAM
bertentangan dengan solusi SLAM lainnya karena tidak dibagi menjadi front-end
dan back-end. Metode hanya berfungsi sebagai front-end dan tidak didasarkan
pada grafik atau tidak menyediakan teknik pengoptimalan global apa pun.
Pendekatan yang digunakan untuk pencocokan pemindaian didasarkan pada
optimasi penyelarasan titik laser dengan peta grid dengan menggunakan
pengoptimalan berbasis Gauss-Newton dan data baru dari laser ditulis langsung
ke peta grid setelah diterima (Manuel dan Ferrão, 2018). Hector SLAM tidak
menyediakan kemampuan penutupan loop eksplisit, sehingga bergantung pada
penyelarasan dan pengoptimalan data yang berkelanjutan (Manuel dan Ferrão,
2018).
(Manuel dan Ferrão, 2018) berpendapat untuk mengurangi risiko terjebak
dalam minimum lokal selama pengoptimalan gradien naik, Hector SLAM
menggunakan pendekatan peta multi-resolution. Beberapa peta dibuat dengan
resolusi berbeda yang diatur dalam piramida, setiap tingkat piramida memiliki
setengah resolusi dari tingkat sebelumnya. Gambar 2.13 menyajikan hasil
pemetaan simultan multiresolution Hector SLAM.
Gambar 2.13 Representasi Multiresolution Dari Sel Petak Peta Hector SLAM
Sumber: (Kohlbrecher, dkk., 2011)
Mengutip dari (Kohlbrecher, dkk., 2011) menjelaskan bahwa pada Hector
SLAM terdapat proses utama untuk pembuatan peta, yaitu Hector Mapping.
Hector Mapping memanfaatkan sistem LiDAR dengan frekuensi tinggi tanpa
menggunakan informasi Odometry (Kohlbrecher, dkk., 2011). Pada jurnalnya
(Kohlbrecher, dkk., 2011) mengatakan bahwa Hector Mapping menggunakan
algoritma scan matching yang dikembangkan dengan cara menyelaraskan data
dari sensor untuk membangun peta. Scan matching adalah proses
menyelaraskan hasil pemindaian (pengukuran jarak) pada waktu t dengan LIDAR
dengan hasil pemindaian pada waktu t - 1 yang bertujuan untuk memperoleh
posisi robot untuk kemudian memperbarui peta (Kohlbrecher, dkk., 2011).
Pada jurnal lainnya (Kohlbrecher, dkk., 2014) menjelaskan lebih lanjut
mengenai Hector SLAM, hector mapping, hector geotiff, dan lain-lain beserta alur
proses yang terjadi di dalamnya pada skema yang terdapat pada gambar 2.14.
44
Gambar 2.14 Skema Sistem Hector SLAM
Sumber : (Kohlbrecher, dkk., 2014)
Seperti yang dapat dilihat pada gambar 2.14, (Kohlbrecher, dkk., 2014)
menjelaskan bahwa skema Hector SLAM selalu melakukan reset pada awalnya.
Diagram persegi panjang melambangkan semua node yang memegang semacam
informasi status berlangganan topik perintah yang terutama digunakan untuk
mengatur ulang sistem kapan pun diperlukan. Pada proses mapping terdapat tiga
masukkan berupa tf (transformation), laser scan dan reset. Data laser scan
didapat dari sensor laser lidar, misalnya sensor RPLiDAR, sedangkan tf didapat
dari node tf yang terdapat pada file launch atau konfigurasi EKF. Output dari
mapping menghasilkan 2D map yang langsung di proses oleh map server
(Kohlbrecher, dkk., 2014). Output yang disimpan dari map server akan disimpan
pada geotiff dan menghasilkan object tracker.
(Kohlbrecher, dkk., 2014) menjelaskan bahwa hasil dari mapping juga
menghasilkan 2D pose yang dikirimkan ke proses pose estimation yang nantinya
digunakan trajectory server untuk menyimpan jalur path yang sudah dilalui
robot. Jika ingin melakukan navigasi, bisa dengan menambahkan paket
move_base yang nantinya membuat robot memperhitungkan cost mapping dan
mampu membuat exploration planner sehingga akhirnya pendapat kan path
yang bebas dari halangan dan memerintahkan motor untuk berputar
(Kohlbrecher, dkk., 2014). Node yang terpenting pada proses ini adalah mapping
dan geotiff yang mana dua node ini merupakan proses utama untuk membuat
peta menggunakan Hector SLAM. Maka dari itu pada sub bab selanjutnya akan
dijelaskan hector mapping dan hector geotiff.
B.2.7.1 Hector Mapping
Seperti yang telah dijelaskan sebelumnya pada jurnal (Kohlbrecher, dkk.,
2011), bahwa Mapping dengan hector adalah pendekatan SLAM yang dapat
digunakan tanpa odometry serta pada platform yang menunjukkan gerakan
roll/pitch (dari sensor, platform, atau keduanya). Dikombinasikan dengan
45
attitude estimation system dan opsi unit pitch/roll untuk menstabilkan pemindai
laser, sistem ini dapat menyediakan peta lingkungan bahkan jika tanahnya tidak
datar seperti yang ditemui di arena Penyelamatan RoboCup (Kohlbrecher, dkk.,
2014).
Dalam jurnalnya (Kohlbrecher, dkk., 2011) terdapat beberapa persamaan
yang menjadi formula utama pada proses pemetaan dengan Hector Mapping. Di
jelaskan bahwa metode scan matching pada Hector Mapping berbasis pada
pendekatan Gauss- Newton. (Kohlbrecher, dkk., 2011) menambahkan bahwa
perpindahan posisi robot dihitung dengan Persamaan (2.14) dan nilai H dihitung
dengan Persamaan (2.15). Untuk mengetahui penjelasan lebih lanjut mengenai
kegunaan atau fungsi dari setiap variabel dapat dilihat pada tabel 2.3.
[ ][
T
r
∂ S (ξ)
∆ ξ=H −1
∑ ∇ M (Si ( ξ)) i
∂ξ
1−M ( Si (ξ )) ] (2.14)
i=1
[ ][ ]
T
r
∂ S i (ξ) ∂ S i (ξ )
H =∑ ∇ M ( Si ( ξ)) ∇ M (S i (ξ)) (2.15)
i=1 ∂ξ ∂ξ
Tabel 2.3 Penjelasan Variabel Persamaan Fungsi Hector Mapping
Sumber: (Kohlbrecher, dkk., 2011)
No Notasi Keterangan
Perpindahan posisi robot dalam koordinat
1 ∆ξ
Kartesian (x, y, θ)
2 r Jumlah titik pemindaian LIDAR
Koordinat-koordinat hasil pemindaian LiDAR
3 Si (ξ )
berdasarkan posisi robot ξ ( x , y , θ)
4 M (Si (ξ )) Probabilitas adanya halangan pada Si (ξ )
B.2.8 Navigasi
Menurut (Pyo, dkk., 2017) navigasi adalah memindahkan robot dari satu
lokasi ke tujuan yang ditentukan dalam lingkungan tertentu. Untuk tujuan ini,
peta yang berisi informasi geometri furnitur, benda, dan dinding dari lingkungan
46
yang diberikan diperlukan. Seperti yang dijelaskan pada bagian SLAM
sebelumnya, peta dibuat dengan informasi jarak yang diperoleh sensor dan
informasi pose robot itu sendiri. Sedangkan untuk pengertian navigasi dikutip
dari penelitian (Utomo, 2015) dalam tesisnya mengatakan navigasi diartikan
sebagai proses atau aktivitas untuk merencanakan atau menuju jalur secara
langsung dalam sebuah misi yang diberikan pada sebuah autonomous mobile
robot dari satu tempat ke tempat yang lain tanpa kehilangan arah atau
mengalami tabrakan dengan objek. (Pyo, dkk., 2017) menjelaskan bahwa
navigasi memungkinkan robot untuk berpindah dari pose saat ini ke pose tujuan
yang ditentukan di peta dengan menggunakan peta, encoder robot, sensor
inersia, dan sensor jarak.
Gambar 2.15 Hubungan Antara Node dan Topik Pada Konfigurasi Navigasi
Sumber: (Pyo, dkk., 2017)
Pada gambar 2.15 terdapat diagram transformasi yang menyusun proses
navigasi pada sebuah robot. Proses utama yang terjadi pada navigasi terletak
pada bagian diagram tertutup (kotak) dengan melakukan beberapa pengambilan
data dari node lain (Pyo, dkk., 2017).
(Pyo, dkk., 2017) juga menambahkan bahwa, dalam navigasi terdapat suatu
peta biaya atau costmap yang membuat proses navigasi terhindar dari tabrakan,
tidak lupa AMCL untuk lokalisasi robot. Selain itu terdapat pula sistem
perencanaan jalur (path planning) untuk mencari jalur terpendek dari posisi saat
ini menuju posisi tujuan.
B.2.8.1 Costmap
Dalam bukunya (Pyo, dkk., 2017) menjelaskan bahwa dalam navigasi, peta
biaya atau costmap dipakai untuk menghitung area rintangan, kemungkinan area
tabrakan, dan robot yang dapat dipindahkan daerah berdasarkan empat faktor.
Faktor tersebut adalah peta statis, manfaatkan area yang diduduki, area bebas,
dan area yang tidak diketahui untuk navigasi. Costmap dapat dibagi menjadi dua,
salah satunya adalah 'global_costmap', yang menyiapkan rencana jalur untuk
bernavigasi di area global peta tetap. Yang lainnya adalah 'local_costmap' yang
digunakan untuk perencanaan jalur dan penghindaran rintangan di area terbatas
47
di sekitar robot. Meskipun tujuannya berbeda, kedua peta biaya
direpresentasikan dengan cara yang sama (Pyo, dkk., 2017).
(Pyo, dkk., 2017) menjelaskan bahwa peta biaya dinyatakan sebagai nilai
antara '0' dan '255'. Nilai digunakan untuk mengidentifikasi apakah robot dapat
bergerak atau bertabrakan dengan rintangan. Perhitungan setiap area
tergantung pada parameter konfigurasi costmap yang dapat diubah oleh
pengembang. Nilai tersebut sebagai berikut (Pyo, dkk., 2017):
1. 000: Area bebas di mana robot dapat bergerak bebas
2. 001~127: Area dengan kemungkinan tabrakan rendah
3. 128~252: Area dengan kemungkinan tabrakan tinggi
4. 253~254: Area tabrakan
5. 255: Area pendudukan di mana robot tidak bisa bergerak
48
Gambar 2.17 Representasi Costmap
Sumber: (Pyo, dkk., 2017)
B.2.8.2 Adaptive Monte Carlo Localization (AMCL)
Mengutip dari (Pyo, dkk., 2017) menjelaskan bahwa AMCL (Adaptive Monte
Carlo Localization) adalah algoritme untuk menentukan di mana robot berada di
lingkungan tertentu. Metode ini dapat dianggap sebagai versi perbaikan dari
estimasi pose Monte Carlo, yang meningkatkan kinerja waktu nyata dengan
mengurangi waktu eksekusi dengan jumlah sampel yang lebih sedikit dalam
algoritma estimasi pose Monte Carlo. (Pyo, dkk., 2017) mengatakan AMCL
menggunakan metode particle filter yang merupakan metode lokalisasi dengan
menggunakan data jarak dari laser.
AMCL menggunakan beberapa persamaan pada prosesnya, seperti posterior
probability menggunakan Bayes, generate dengan particle filter dan sampling
and resampling untuk mendapatkan lokasi dengan presisi. Dengan mengulangi
proses SIR (Sampling Importance weighting Re-sampling) sambil menggerakkan
partikel, perkiraan posisi robot meningkat akurasinya (Pyo, dkk., 2017).
50
Gambar 2.19 Grid Map Hasil Pemetaan
Tidak seperti layaknya GPS, sistem lokalisasi indoor tidak memiliki peta
semesta seukuran bumi. Maka dari itu perlu dibuat sebuah peta semesta dengan
ukuran terbatas sesuai dengan area kerja robot. Peta ini merupakan bentuk dari
proses mapping dan menghasilkan berupa file Geotiff dengan bentuk Grid Map.
Pada gambar 2.19 terlihat ilustrasi dari proses path planning dari kotak biru
menuju kotak merah. Terdapat banyak kemungkinan jalur yang akan dituju,
robot tidak mengetahui mana jalur terpendek dan bagaimana mengambil
keputusan untuk melewati suatu jalur. Maka dari itu diperlukan sebuah
perencanaan global yang menghitung dimana jarak terpendek dari titik awal
menuju titik tujuan (Bräunl, 2008).
B.2.10.1 Implementasi algoritme Dijkstra
Algoritme Dijkstra terdiri dari beberapa tahapan berupa langkah-langkah
secara sistematis, antara lain sebagai berikut (Dijkstra, 1959; Bräunl, 2008):
1. Tandai simpul awal Anda dengan g_cost 0, tambahkan simpul awal Anda
ke open_list
Fase pertama:
Ulangi yang berikut ini saat open_list tidak kosong:
2. Ekstrak node dengan g_cost terkecil dari open_list dan beri nama
current_node.
3. Tandai sebagai dikunjungi dengan menambahkannya ke closed_list.
4. Periksa apakah current_node adalah node target, jika demikian lanjutkan
ke fase II, jika tidak lanjutkan dengan langkah 5
5. Temukan tetangga dari current_node
For each untuk setiap node dalam daftar tetangga current_node:
51
6. Jika tetangga ada di dalam closed_list, lewati dan pilih tetangga
berikutnya
7. Jika tetangga ada di dalam open_list:
o Jika nilai g_cost baru lebih kecil dari nilai g_cost saat ini:
Perbarui g_cost tersebut
Perbarui simpul induknya
8. Jika tetangga tidak ada di dalam open_list:
o Setel g_cost
o Setel node induknya
o Tambahkan ke open_list
Ketika kita selesai mempertimbangkan semua tetangga dari current_node
lanjutkan ke langkah 2.
Fase kedua:
Membangun jalan dari awal sampai akhir.
1. Telusuri kembali dari node target ke node awal, menggunakan node induk
setiap node
Bentuk sederhana dari hasil implementasi ini adalah berupa pseudocode pada
tabel 2.4.
Tabel 2.4 Pseudocode Algoritme Dijkstra
1 BEGIN dijkstra(G, S)
2 for each vertex V in G
3 distance[V] <- infinite
4 previous[V] <- NULL
5 If V != S, add V to Priority Queue Q
6 distance[S] <- 0
7
8 while Q IS NOT EMPTY
9 U <- Extract MIN from Q
10 for each unvisited neighbour V of U
11 tempDistance <- distance[U] + edge_weight(U, V)
12 if tempDistance < distance[V]
13 distance[V] <- tempDistance
14 previous[V] <- U
15 return distance[], previous[]
16 END
52
B.2.11 Algoritma Dynamic Window Approach (DWA)
Menurut (Pyo, dkk., 2017) Dynamic Window Approach (DWA) adalah
metode populer untuk perencanaan penghindaran rintangan dan menghindari
rintangan. Ini adalah metode pemilihan kecepatan yang dapat dengan cepat
mencapai titik target sambil menghindari rintangan yang mungkin dapat
bertabrakan dengan robot di ruang pencarian kecepatan. (Pyo, dkk., 2017)
menjelaskan di ROS, Perencana lintasan digunakan untuk perencanaan jalur
lokal, tetapi DWA diganti karena kinerjanya yang unggul.
54
12 clearance = (dist-breakDist)/(dmax - breakDist)
13 cost = costFunction(heading,clearance,
14 abs(desired_v - v))
15 if (cost > optimal)
16 best_v = v
17 best_w = w
18 optimal = cost
19 set robot trajectory to best_v, best_w
20 END
55
Perlu diperhatikan bahwa motherboard hoverboard memiliki tipe dan
bentuk yang berbeda-beda. Pada penelitian ini digunakan motherboard
hoverboard dengan tipe single motherboard dan berbentuk seperti pada
gambar 2.22. Hal ini perlu diperhatikan karena penggunaan selain single
motherboard akan sangat menyulitkan proses flashing firmware karena
perbedaan port dan fabrikasi. Misalnya saja dual board motherboard pada
gambar 2.24 yang memiliki port flashing di kedua board, jadi selalu gunakan
single motherboard.
56
Gambar 2.24 Nvidia Jetson Nano
Sumber: (www.nvidia.com, 2021)
B.2.12.3 Aktuator Motor BLDC Hoverboard dan Sensor Rotary Encoder
Menurut (Wang, 2012) Motor BLDC memiliki beberapa keunggulan
dibandingkan motor DC brushed konvensional, terutama pada karakteristik
kecepatan versus torsi yang lebih baik, efisiensi tinggi, respons dinamis tinggi,
masa pakai yang lama, pengoperasian tanpa suara, rentang kecepatan yang lebih
tinggi, dan perawatan yang rendah. (Wang, 2012) juga menjelaskan bahwa
karena BLDC menggunakan metode kontrol konduksi berpasangan, maka ketika
arah putaran BLDC bolak-balik, hanya ada dua MOSEFT daya yang menyala.
Ketika sensor Hall mendeteksi posisi baru berikutnya, yang memberi tahu
mikroprosesor chip GD32 untuk memberikan sinyal kontrol baru.
Kontroler menyesuaikan fase dan amplitudo pulsa arus DC untuk mengontrol
kecepatan dan torsi motor. Sistem kontrol ini merupakan alternatif dari
komutator mekanis (sikat) yang digunakan di banyak motor listrik konvensional
(Wang, 2012).
57
Gambar 2.25 Motor BLDC 6.5” 36V 350W dan build in Encoder
Sumber: (www.hoverboardforlife.blogspot.com, 2016)
Pada gambar 2.25 dapat dilihat bahwa di dalam motor BLDC terdapat sensor
encoder yang berfungsi untuk mengetahui posisi motor berdasarkan data yang
dikirimkan dari HALL sensor. Sensor Encoder ini akan mengirimkan data berupa
odometry yang nantinya akan digunakan sebagai input pada sistem. Pembahasan
lebih lanjut mengenai odometry akan dibahas pada bagian selanjutnya.
B.2.12.4 Sensor RPLiDAR A1
58
kemudian dipantulkan oleh objek yang akan dideteksi. Sinyal kembali di sampel
oleh sistem akuisisi visi di RPLiDAR dan DSP yang tertanam di RPLiDAR mulai
memproses data sampel dan nilai jarak keluaran dan nilai sudut antara objek dan
RPLiDAR melalui antarmuka komunikasi. Hasil dari pemindaian ini akan
dikirimkan melalui komunikasi USART melalui adapter USART dan dihubungkan
ke Jetson Nano menggunakan Port USB. Data yang didapat berupa koordinat dari
setiap titik laser yang terbaca.
B.2.12.5 Sensor IMU GY-521 MPU-6050 6DOF
59
Gambar 2.28 Menghitung Jarak Dengan LDS/LiDAR
(Pyo, dkk., 2017) mengatakan Sensor LDS/LiDAR menghitung perbedaan
panjang gelombang ketika sumber laser dipantulkan oleh objek, seperti yang
ditunjukkan gambar 2.28. Jika dianalogikan, ini sama seperti ketika kita
mengarahkan cahaya senter ke suatu permukaan. Sebenarnya yang terjadi
adalah kita dapat melihat pantulan cahaya senter dari suatu permukaan ke
retina, namun karena prosesnya sangat cepat, maka hal tersebut terjadi seolah-
olah secara instan. Untuk menghitung jarak, LiDAR menggunakan rumus sebagai
berikut:
c∗t
d= (2.16)
2
d = jarak antara sensor dan objek yang diukur (m)
c = Kecepatan cahaya (3 x 108 m/s)
t = Waktu tempuh cahaya/sinyal
61
pada sistem operasi yang sudah ada, contohnya ROS pada sistem operasi Linux
(Pyo, dkk., 2017).
Gambar 2.29 ROS Sebagai Sistem Operasi Meta Pada Sistem Operasi Lain
Sumber: (Pyo, dkk., 2017)
(Pyo, dkk., 2017) menjelaskan bahwa ROS mengembangkan, mengelola, dan
menyediakan aplikasi paket untuk berbagai keperluan, dan telah membentuk
ekosistem yang mendistribusikan paket yang dikembangkan oleh pengguna.
Seperti yang dijelaskan pada gambar 2.29, ROS adalah sistem pendukung untuk
mengendalikan sensor dengan abstraksi perangkat keras dan mengembangkan
aplikasi robot berdasarkan sistem operasi konvensional yang telah ada. (Pyo,
dkk., 2017) mengatakan untuk mengembangkan robot yang terkait dengan ROS,
perlu memahami komponen dan konsep penting dari ROS. Sub bab di bawah ini
akan memperkenalkan terminologi yang digunakan dalam ROS dan konsep
penting ROS seperti komunikasi pesan, file pesan, nama, transformasi koordinat
(TF), pustaka klien, komunikasi antar perangkat heterogen, sistem file, dan
sistem pembangunan.
B.2.16.1 Terminologi Pada Ekosistem ROS
Pada buku “ROS Robot Programming” menjelaskan beberapa terminologi-
terminologi yang digunakan pada ekosistem ROS sebagai komponen atau konsep
penting, berikut ini adalah terminologi yang sering digunakan (Pyo, dkk., 2017).
1. ROS, middle ware yang menyediakan layanan sistem operasi standar
seperti abstraksi perangkat keras, driver perangkat, implementasi fitur
yang umum digunakan termasuk pengindraan, pengenalan, pemetaan,
perencanaan gerak, pengiriman pesan antar proses, manajemen paket,
visualisasi dan perpustakaan kode untuk pengembangan serta alat
debugging (Pyo, dkk., 2017).
2. Master, sebutan untuk node yang bertindak sebagai node server dari
koneksi node-to-node dan komunikasi pesan. Koneksi antara node dan
62
komunikasi pesan seperti topik dan layanan tidak mungkin tanpa master.
Saat menjalankan ROS, master akan dikonfigurasi dengan alamat dan
port URI dikonfigurasi di ROS_MASTER_URI. Secara default, alamat URI
menggunakan alamat IP PC lokal, dan nomor port 11311, kecuali jika
konfigurasi diubah. (Pyo, dkk., 2017).
3. Slave, sebutan untuk node yang terkoneksi dan menerima perintah dari
master. Komunikasi Master dengan slave menggunakan XML Remote
Procedure Call yang merupakan protokol berbasis HTTP yang tidak
membutuhkan konektivitas (Pyo, dkk., 2017).
4. Node, merujuk pada unit terkecil dari proses yang berjalan pada ROS,
seperti program yang berjalan pada satu program executable. ROS
merekomendasikan untuk membuat satu node tunggal untuk setiap
tujuan, dan direkomendasikan untuk dikembangkan agar dapat
digunakan kembali dengan mudah. Saat pertama kali dijalankan, node
mendaftarkan informasi berupa nama, tipe pesan, alamat URI, dan nomor
port. Node yang sudah terdaftar bisa bertindak sebagai publisher,
subscriber, dan service berdasarkan informasi yang terdaftar. Pada
implementasinya node digunakan sebagai media pertukaran pesan
menggunakan topic dan service (Pyo, dkk., 2017).
5. Package, unit dasar dari ROS. Aplikasi ROS dikembangkan berdasarkan
paket-paket dasar yang berisi konfigurasi untuk meluncurkan node
lainnya. Package berisikan semua file penting yang saling terhubung
dengan paket lainnya termasuk dependensi library ROS untuk
menjalankan beberapa proses, dataset, dan konfigurasi (Pyo, dkk., 2017).
6. Metapackage, bagian dari package yang memiliki tujuan umum. Sebagai
contoh pada metapackage “Navigation” yang berisikan 10 paket
termasuk AMCL, DWA, EKF, dan map_server (Pyo, dkk., 2017).
7. Message, variabel yang digunakan untuk mengirim atau menerima pesan
di antara node-node. Message dapat berupa variabel integer, float,
Boolean dan array. Protokol komunikasi TCPROS dan UDPROS digunakan
untuk pengiriman pesan. Topik digunakan dalam pengiriman pesan
searah sementara layanan digunakan dalam pengiriman pesan dua arah
yang melibatkan permintaan dan respons (Pyo, dkk., 2017).
8. Topic, secara harfiah seperti topik di dalam pembicaraan. Node publisher
mendaftarkan topiknya ke master dan kemudian mulai memublikasikan
pesan tentang suatu topik. Node subscriber yang ingin menerima
informasi permintaan topik dari node publisher di sesuaikan dengan nama
topik yang terdaftar di master. Berdasarkan informasi ini, node subscriber
langsung terhubung ke node publisher untuk bertukar pesan sebagai
topik. Sehingga dengan konsep seperti ini sistem dapat mendapatkan
pesan dari banyak sensor yang digunakan untuk mengambil keputusan
menggerakkan aktuator (Pyo, dkk., 2017).
63
9. Publish and Publisher, istilah “publish atau terbitkan” merujuk pada
tindakan mentransmisikan pesan relatif yang sesuai dengan topic yang
diminta. Node publisher mendaftarkan informasi dan topiknya sendiri ke
master, kemudian menerbitkan pesan, untuk nantinya di dapat request
oleh node subscriber. Publisher dideklarasikan di dalam node dan dapat
dideklarasikan beberapa kali dalam satu node (Pyo, dkk., 2017).
10. Subscribe and Subscriber, istilah “subscribe atau berlangganan” merujuk
pada tindakan menerima pesan relatif yang sesuai dengan topik. Node
subscriber mendaftarkan informasi dan topiknya sendiri pada master dan
menerima informasi publisher yang menerbitkan topik relatif dari master.
Berdasarkan informasi publisher yang diterima, node subscriber secara
langsung meminta koneksi ke node publisher yang terhubung. Subscriber
dideklarasikan dalam node dan dapat dideklarasikan beberapa kali dalam
satu node (Pyo, dkk., 2017).
11. Service, komunikasi dua arah yang sinkron antara service client yang
meminta layanan mengenai tugas tertentu dan service server yang
bertanggung jawab untuk menanggapi permintaan (Pyo, dkk., 2017).
12. Service Server, server dalam komunikasi pesan layanan yang menerima
permintaan sebagai input dan mengirimkan respons sebagai output. Baik
permintaan maupun tanggapan adalah berupa pesan. Server layanan
diimplementasikan di node yang menerima dan menjalankan permintaan
yang diberikan (Pyo, dkk., 2017).
13. Service Client, klien dalam komunikasi pesan layanan yang meminta
layanan ke server dan menerima respons sebagai input. Klien
mengirimkan permintaan ke server layanan dan menerima respons.
Service client diimplementasikan di node yang meminta perintah tertentu
dan menerima hasil (Pyo, dkk., 2017).
14. Bag, data dari ROS message dapat disimpan dan hasil penyimpanan
pesan tersebut disebut sebagai bag. Pada ROS, bag digunakan untuk
merekam dan menjalankan ulang pesan untuk menciptakan ulang
lingkungan sebelum perekaman. Fungsi rekam dan jalankan sangat
berguna ketika proses pengembangan algoritme dengan beberapa
pengulangan ulang program untuk dimodifikasi (Pyo, dkk., 2017).
15. Action, metode komunikasi pesan lain yang digunakan untuk komunikasi
dua arah asinkron. Action digunakan ketika dibutuhkan waktu lebih lama
untuk merespons perantara hingga hasilnya dikembalikan (Pyo, dkk.,
2017).
16. Parameter, merujuk pada parameter yang dipakai pada node. Nilai
default diatur dalam parameter dan dapat dibaca atau ditulis jika perlu,
hal ini sangat berguna ketika nilai yang dikonfigurasi ingin dimodifikasi
secara real-time (Pyo, dkk., 2017).
64
17. Catkin, merujuk pada build system dari ROS. Sistem build pada dasarnya
menggunakan Cmake (Cross Platform Make) yang terdefinisi tiap proses
build pada file ‘CMakeLists.txt’. Sistem build Catkin memudahkan
penggunaan build terkait ROS, manajemen paket, dan dependensi di
antara paket (Pyo, dkk., 2017).
18. URI, memiliki kepanjangan Uniform Resource Identifier merupakan
alamat unik yang mewakili sumber daya di internet. URI adalah salah satu
komponen dasar yang memungkinkannya terjadi interaksi dengan
internet dan digunakan sebagai pengenal dalam protokol internet (Pyo,
dkk., 2017).
B.2.16.2 Perintah Dasar Pada ROS
ROS memiliki beberapa perintah operasi dasar yang sering digunakan pada
imbuhan awal setiap perintah yang dilakukan, antara lain sebagai berikut (Pyo,
dkk., 2017):
1. roscore, merupakan perintah yang menjalankan master ROS. Jika
beberapa komputer berada di dalam yang sama jaringan, dapat
dijalankan dari komputer lain dalam jaringan. Namun, kecuali untuk kasus
khusus yang mendukung banyak roscore, hanya satu roscore yang harus
berjalan di jaringan. Ketika ROS master sedang berjalan, alamat URI dan
nomor port ditetapkan untuk ROS_MASTER_URI variabel lingkungan yang
digunakan. Jika pengguna belum mengatur variabel lingkungan, arus
alamat IP lokal digunakan sebagai alamat URI dan nomor port 11311
digunakan yang merupakan port default nomor untuk master (Pyo, dkk.,
2017).
2. rosrun, merupakan perintah eksekusi dasar pada ROS. Rosrun digunakan
untuk menjalankan satu node dalam paket. Node menggunakan variabel
environment ROS_HOSTNAME yang disimpan di komputer tempat node
dijalankan sebagai jalan URI dan port disetel ke nilai unik yang berubah-
ubah (Pyo, dkk., 2017).
3. roslaunch, sementara rosrun adalah perintah untuk mengeksekusi satu
node, maka sebaliknya roslaunch digunakan untuk mengeksekusi banyak
node sekaligus. roslaunch adalah perintah ROS khusus dalam eksekusi
node dengan fungsi tambahan seperti mengubah parameter paket atau
nama node, mengkonfirmasi namespace node, mengatur ROS_ROOT dan
ROS_PACKAGE_PATH, serta mengubah variabel environment saat
mengeksekusi node (Pyo, dkk., 2017).
4. rostopic, perintah untuk mengakses topik yang ditentukan dalam grafik
komputasi (Pyo, dkk., 2017).
5. rosparam, perintah untuk mendapatkan, mengatur, menghapus
parameter dari ROS Parameter Server (Pyo, dkk., 2017).
65
6. rosservice, perintah untuk mengakses layanan yang didefinisikan dalam
grafik komputasi (Pyo, dkk., 2017).
7. rosbeg, perintah untuk menyimpan pesan dengan melakukan perekaman
dari kondisi lingkungan sebelumnya untuk memudahkan proses
pengembangan, sehingga hanya perlu memuat ulang kondisi yang sudah
dicapai sebelumnya (Pyo, dkk., 2017).
B.2.16.3 Coordinate Transformation (TF)
66
Pada gambar 2.31, merupakan transformasi koordinat relatif dari masing-
masing titik koordinat pada pose robot beroda. Penelitian ini menggunakan
robot beroda sebagai platform dari implementasi sistem pemetaan dan navigasi.
Mengutip dari (Pyo, dkk., 2017) dengan menggunakan dua frame di antara frame
odom dan base_footprint dapat digunakan sebagai representasi dari pose 2D
robot. Frame base_stabilized menambahkan informasi tentang tinggi relatif
robot terhadap map atau odometry. Frame base_link melekat erat pada robot
dan menambahkan sudut roll dan pitch dibandingkan dengan frame
base_stabilized (Pyo, dkk., 2017).
(Pyo, dkk., 2017) juga mengatakan bahwa dalam ROS, transformasi koordinat
TF adalah salah satu konsep yang paling berguna saat mendeskripsikan bagian
robot serta rintangan dan objek. Pose dapat digambarkan sebagai kombinasi
posisi dan orientasi. Untuk posisi dinyatakan oleh tiga vektor x, y, dan z
sedangkan orientasi dinyatakan oleh empat vektor, yakni vektor x, y, z, dan w
atau yang disebut dengan quaternion. Bentuk quaternion bebas dari gimbal lock
atau masalah kecepatan yang ada pada vektor roll, pitch, dan yaw metode Euler.
Maka dari itu tipe quaternion lebih banyak digunakan pada robotika dan ROS
menggunakan quaternion karena alasan ini.
67
Gambar 2.32 Tampilan Loading Screen RViz
Sumber: (github.com/ros-visualization/rviz, 2021)
(Pyo, dkk., 2017) juga menjelaskan bahwa RViz Ini juga mendukung berbagai
Penanda Interaktif memungkinkan pengguna untuk melakukan gerakan interaktif
dengan perintah dan data yang diterima dari node pengguna. Selain itu, ROS
memiliki fitur untuk menampilkan visualisasi robot dalam bentuk Unified Robot
Description Format (URDF), yang dinyatakan sebagai model 3D di mana setiap
model dapat dipindahkan atau dioperasikan sesuai dengan derajat
kebebasannya, sehingga dapat digunakan untuk simulasi atau kontrol.
B.2.17.2 rqt (ROS GUI Development Tool)
rqt adalah alat yang dapat digunakan sebagai alat GUI yang memiliki banyak
fitur untuk keperluan pengembangan. Contohnya seperti graphical tool yang
menunjukkan hierarki dari setiap node sebagai diagram, hierarki ini
menunjukkan status node dan topik yang saat ini. Kemudian ada alat plot yang
mampu membuat skema pesan sebagai grafik 2D dan masih plugins lainnya
seperti rqt_plugins, rqt_image_view, rqt_graph, rqt_plot, dan rqt_bag.
68
Gambar 2.33 Tampilan Antarmuka Aplikasi rqt Dan Semua Plugin
Sumber: (www. ros.guru, 2021)
B.2.19 Firmware
Mengutip dari (Pyo, dkk., 2017) dikatakan robot sebagian besar
diklasifikasikan ke dalam perangkat keras dan perangkat lunak. Mekanisme,
motor, roda gigi, sirkuit, sensor dikategorikan sebagai perangkat keras. (Pyo,
dkk., 2017) menjelaskan bahwa firmware mikro kontroler yang menggerakkan
atau mengontrol perangkat keras robot, dan perangkat lunak aplikasi yang
membuat peta, menavigasi, membuat gerakan, dan memersepsikan lingkungan
berdasarkan data sensor diklasifikasikan sebagai perangkat lunak.
Pada penelitian ini pemrograman firmware dibutuhkan untuk mengubah
firmware default dari motherboard hoverboard dengan menggunakan firmware
yang dapat di download pada link berikut,
https://github.com/EFeru/hoverboard-firmware-hack-FOC. Firmware ini ditulis
69
untuk chip STM32 dan GD32 yang banyak digunakan sebagai mikro kontroler
perangkat mainan hoverboard.
∑ ¿ At −F t∨¿
WAPE= t=1n ¿ (2.23)
∑ ¿ A t ∨¿ ¿
t=1
70
BAB C METODOLOGI PENELITIAN
71
C.3 Metode Penelitian
Demi sepenuhnya mencapai tujuan, maka pada penelitian ini dilakukan
secara struktur dan sistematis dalam metode penelitian. Metode yang digunakan
untuk mengembangkan suatu karya harus sesuai dengan kebutuhan pembuatan
karya. Kebutuhan awal yang diperlukan untuk merancang robot ini yaitu
pendalaman informasi terkait permasalahan, pengumpulan, pengkajian teori,
dan penelitian sebelumnya yang telah dilakukan dengan tujuan mendukung
pengembangan robot ini sehingga dapat ditemukan solusi dari permasalahan
dalam pengembangan karya ini. Jurnal ilmiah, artikel ilmiah, situs web, buku, dan
lain sebagainya digunakan sebagai studi literatur pada penelitian ini. Setelah
melakukan studi literatur, maka langkah selanjutnya adalah melakukan definisi
masalah yang ingin diselesaikan, misalnya seperti perangkat lunak (software),
perangkat keras (hardware), algoritme yang digunakan, dan lain sebagainya.
Setelah itu dirumuskan dasar teori yang berisi penelitian secara ilmiah sangat
diperlukan sebagai referensi penunjang dalam pengembangan robot ini
sehingga menghasilkan karya dari permasalahan yang ada dan bisa
dipertanggungjawabkan. Hasil pengkajian teori dari studi literatur yang relevan
digunakan dalam mengaplikasikan proses rekayasa kebutuhan sistem yang sesuai
lalu melakukan perancangan sistem atau gambaran sistem, implementasi sistem,
dan pengujian sistem. Sistem yang telah dilakukan pengujian kemudian dilakukan
analisis. Dari hasil analisis pengujian akan digunakan untuk menginformasikan
bahwa sistem ini belum atau telah memenuhi kebutuhan dalam permasalahan
yang diajukan. Diagram alir tahapan penelitian dapat dilihat pada gambar 3.1.
72
Gambar 3.35 Diagram Alir Penelitian
Penggunaan diagram alir penelitian seperti gambar 3.1 akan membuat proses
lebih tepat arah dan teratur. Setelah analisis hasil pengujian apabila penulis
merasa bahwa rumusan permasalahan tidak terjawab, maka penulis akan
memperbaiki sistem pada perancangan sistem, kemudian melakukan
implementasi sistem, pengujian sistem, dan kembali melakukan analisis hasil
pengujian. Setelah analisis hasil berhasil menjawab rumusan permasalahan,
maka penulis akan mendapatkan kesimpulan dan saran yang dibutuhkan dalam
penelitian.
73
C.4 Subjek Penelitian
Subjek dari penelitian ini memiliki hubungan dengan sebuah tempat
penyimpanan paket pengiriman yang merupakan sebuah gudang ekspedisi yang
memiliki tingkat intensitas aktivitas tinggi dalam penyortiran barang dan
membutuhkan sistem yang terotomatisasi untuk meningkatkan efisiensi waktu
dan tenaga kerja.
74
sudah berjalan sebagaimana mestinya dan menghindari kesalahan sehingga
berbeda dari penelitian sebelumnya. Observasi yang dilakukan bertujuan untuk
mengetahui apakah sistem yang dibuat berjalan sesuai dengan fungsi dan
kebutuhannya. Proses observasi meliputi percobaan setiap parameter pada
algoritme yang telah ditentukan dan dicari nilai yang optimal. Pencarian nilai
optimal ini didasari pada hasil riset pada penelitian yang serupa. Hal ini dilakukan
untuk mengetahui apakah parameter sebagai perhitungan dipengaruhi oleh
lingkungan yang dilihat dari hasil log pada terminal Linux dan hasil visualisasi
bentuk peta dan navigasi pada aplikasi RViz yang merupakan salah satu tool di
dalam ROS. Selanjutnya sampel data hasil observasi digunakan sebagai data
untuk proses analisa lebih lanjut.
75
Sensor RPLiDAR
Sensor IMU GY-521 MPU6050
Dongle Wi-Fi
Push button on-off
Adapter dan port charger hoverboard
STLink V2 Programmer
FTDI to mini USB adapter
Komputer (Personal Komputer)
Chassis papan kayu
3D Printer dan filamen
Keyboard dan Mouse
Kabel Jumper
Kabel micro USB
2. Perangkat lunak
Hoverboard Firmware
STMCube Programmer
Catkin workspace
Robot operating system (ROS)
Terminator
Visual Studio Code
Platform IO
Virtual Network Computing (VNC)
RViz
rqt
Hoverboard driver
RPLiDAR driver
MPU6050 dan I2C driver
Hector SLAM library
Robot localization (EKF & AMCL) library
Move base (Global & local planner) library
76
BAB D REKAYASA KEBUTUHAN
78
pemindaian pada area seluas 360 data berupa pengukuran jarak
derajat. Nilai yang dihasilkan antara robot dengan halangan
berupa nilai distance atau jarak menggunakan alat pengukur
dari range 0.15 meter hingga 6 sebenarnya seperti meter ukur
meter
Sensor Inertial measurement unit Dapat mengirimkan posisi robot
(IMU) dapat membaca nilai derajat pada mikrokontroler terhadap
kemiringan dan gerak akselerasi posisi sebenarnya robot
2 pada robot. Berfungsi untuk menggunakan pemantauan secara
melakukan Sensing proyeksi langsung dan proyeksi melalui 3D
terhadap kemiringan dan gerak visual RViz
akselerasi robot
Motor DC Brushless atau BLDC Diujinya jumlah putaran motor DC
dapat menggerakkan robot menggunakan odometry dan
berdasarkan nilai PWM yang perhitungan secara manual
3 diberikan dari motherboard sehingga dipastikan data odometry
hoverboard adalah putaran sebenarnya dan
robot bergerak sesuai dengan yang
didesain
Sistem mikrokontroler di dalam Diujinya pengiriman data dan
robot mampu mengirim dan penerimaan data ketika diam dan
4
menerima data sensor IMU untuk bergerak
dilaksanakan
Sistem mikrokontroler di dalam Diujinya pengiriman data ketika
robot mampu mengirim dan robot melakukan proses
5
menerima data sensor RPLiDAR pembuatan peta atau mapping
untuk dilaksanakan
Mikrokontroler dapat memproses Diujinya navigasi robot
data dari sensor menjadi menggunakan data yang diberikan
6 kesimpulan arah gerak dan oleh sensor
kecepatan sistem pada aplikasi
ROS
Sistem Motherboard Hoverboard Diujinya kecepatan berdasarkan
dapat menggerakkan kedua motor perputaran roda melalui encoder
7
serta memberi tegangan pada motor BLDC menggunakan metode
semua komponen elektronik. debugging
Aplikasi RViz dapat memantau Diujinya penggunaan RViz untuk
pengontrolan sistem secara melihat hasil pengontrolan otonom
8 otomatis ketika bergerak secara real-time
menggunakan sistem otonom
robot operating system
79
D.2.2 Kebutuhan Non-Fungsional
Kebutuhan non-fungsionalitas pada sistem ini terbagi menjadi dua kebutuhan
yaitu perangkat keras dan perangkat lunak yang diperlukan untuk menunjang
sistem.
D.2.2.1 Kebutuhan Perangkat Keras
1. Motherboard Hoverboard
80
Tegangan operasi 36V
Pengisian daya 42V 2A
Port Fast I/O 80 Port (45P, 9ADC, 16PWM, 6RXTX, 4SC, 3.3V,
5V, GND)
Kekuatan putaran maksimal 1000 r.p.m. 1-25A 350W
Tegangan dan arus DC Pin 5V 100mA
I/O motor
Tegangan dan arus DC Pin 15V 200mA
I/O sensor
Komunikasi USART, SPI, I2C, I2S, USB
81
RViz dilakukan di Slave atau Komputer, akan tetapi untuk melakukan load
data hasil pemetaan juga dibutuhkan sumber daya CPU dan RAM yang besar.
Oleh karena itu, kesimpulannya adalah Nvidia Jetson Nano mampu
menjalankan sistem secara baik pada penelitian ini. Berikut adalah datasheet
dari mikrokontroler Jetson Nano 3B yang ditunjukkan pada tabel 4.3.
Tabel 4.9 Spesifikasi Mikrokontroler Jetson Nano 3B
Sumber: (developer.nvidia.com, 2021)
Keterangan Spesifikasi
CPU Quad-core ARM A57 @ 1.43 GHz
NVIDIA Maxwell architecture with 128 NVIDIA
GPU
CUDA® cores
Memory 4 GB 64-bit LPDDR4, 1600MHz 25.6 GB/s
Storage microSD
4K @ 30 | 4x 1080p @ 30 | 9x 720p @ 30
Video Encode
(H.264/H.265)
4K @ 60 | 2x 4K @ 30 | 8x 1080p @ 30 | 18x
Video Decode
720p @ 30 (H.264/H.265)
Kamera 2x MIPI CSI-2 DPHY
Konektivitas Gigabit Ethernet, M.2 Key E
Display HDMI 2.0 and display port
USB 4x USB 3.0, USB 2.0 Micro-B
Lainnya GPIO, I2C, I2S, SPI, USART
Mechanical 69.6 mm x 45 mm 260-pin edge connector
Memory External 64GB Mikro SD
Power Micro USB 5V 2.5A and DC Barrel Jack 5V 4A
82
Motor BLDC menggunakan pengontrol loop tertutup elektronik untuk
mengalihkan arus DC ke putaran kawat motor yang menghasilkan medan magnet
yang secara efektif berputar di ruang angkasa dan yang diikuti oleh rotor magnet
permanen. Kontroler menyesuaikan fase dan amplitudo pulsa arus DC untuk
mengontrol kecepatan dan torsi motor. Sistem kontrol ini merupakan alternatif
dari komutator mekanis (sikat) yang digunakan di banyak motor listrik
konvensional. Motor BLDC digunakan sebagai aktuator utama penggerak robot
bergerak otonom, berikut adalah datasheet motor dc brushless yang ditunjukkan
pada tabel 4.4 dan bentuk fisik dari motor BLDC hoverboard ditunjukkan pada
gambar 4.4.
Tabel 4.10 Spesifikasi Motor DC Brushless
Sumber: (www.aliexpress.com, 2021)
Keterangan Spesifikasi
Komunikasi Brushless
Kecepatan 5 - 1500 RPM
Tegangan 36V
Arus 1A - 25A
Power Motor 250 - 350W
Kecepatan Maksimal 26km/h
Kecepatan rata-rata 800 RPM
Diameter roda 6.5”
4. Catu Daya
83
tegangan 32V dan kuat arus 2A. Catu daya ini digunakan untuk memberikan
power ke motherboard hoverboard dan yang nantinya akan disalurkan lagi ke
motor BLDC. Bentuk fisik dari baterai ini dapat dilihat pada gambar 4.5.
Kemudian catu daya yang kedua adalah power bank ke Jetson Nano dengan
besar tegangan 5V dan kuat arus 1A. Berikut adalah tabel spesifikasi Baterai Li-
ion 10S2P dan Power bank yang masing-masing ditunjukkan pada tabel 4.5 dan
tabel 4.6.
Tabel 4.11 Spesifikasi Catu Daya untuk Suplai Motherboard Hoverboard
Sumber: (www. hovertech.co.za, 2021)
Keterangan Spesifikasi
Tipe Baterai Litium-Ion
Ukuran Cell 18650 Litium Ion
Tegangan ke motherboard 25.2V - 36V
Arus sistem kerja 1A - 20A
Maksimal pemakaian arus 15A
Tegangan Pengisian 43.2V
Kapasitas 4400 mAh
Struktur 10S2P
Tabel 4.12 Spesifikasi Catu Daya untuk Suplai Jetson Nano
Sumber: (www.shopee.co.id, 2021)
Keterangan Spesifikasi
Tipe Baterai Lithium Polymer
Output 1 USB A DC 5V/3A, 9V/2A, 12V/1,5A
Output 2 USB A DC 5V/3A, 9V/2A, 12V/1,5A
Output 3 Type C 5V/3A, 9V/2,33A, 12V/1,7A
Kapasitas 10000 mAh
5. Sensor RPLiDAR A1
84
Pada gambar 4.6 ditunjukkan bentuk fisik dari sensor RPLiDAR yang
digunakan pada penelitian ini. Terdiri dari sensor RPLiDAR, kabel socket, dan
converter port lidar ke mikro USB. RPLiDAR A1 digunakan sebagai input utama
dari sistem berupa tangkapan jarak dari tembakan laser yang nantinya akan
diproses oleh sistem. Penggunaan RPLiDAR didasarkan dari kemampuannya
mendeteksi objek seluas 360 derajat dan sejauh 6 meter. Selain itu RPLiDAR juga
sangat praktis untuk digunakan karena kita tidak perlu menghitung nilai ataupun
kalibrasi data karena RPLiDAR memiliki prosesornya sendiri dan mampu
mengirimkan data setengah jadi berupa koordinat-koordinat data jarak. Atas
semua pertimbangan dan kemampuannya yang powerful maka dari itu RPLiDAR
dipilih menjadi sensor utama pada penelitian ini. Berikut adalah spesifikasi
sensor RPLiDAR yang ditunjukkan pada tabel 4.7.
Tabel 4.13 Spesifikasi RPLiDAR A1
Sumber: (www.slamtec.com, 2021)
Keterangan Spesifikasi
Measuring Range 0.15 – 12 meter
Angular Field of View 0 - 360°
Angular Resolution: ≤1°
Sampling frequency 4000 - 8000 Hz
Rotational Speed 5.5Hz
Laser wave length 775 - 795nm
Pulse width 110 us
System Voltage 5V
System Current 100mA
Power Consumption 0.5W
Output USART Serial 3.3 Voltage level
≤1% of the range(≤12m)
Range Resolution
≤2% of the range(12m~16m)
1% of the range(≤3 m)
Accuracy 2% of the range(3-5 m)
2.5% of the range(5-25m)
85
Gambar 4.43 Sensor GY-521 IMU6050
Sumber: (geekbuying.com, 2022)
Sensor GY-521 memiliki 3 DOF akselerometer dan 3 DOF giroskop yang dapat
mendeteksi nilai akselerasi dan gerakan roll, pitch atau yaw pada robot. Sensor
GY-521 digunakan sebagai input dari sistem berupa mendeteksi posisi robot
secara lokal. Hal ini sangat berguna dalam proses lokalisasi, walaupun proses
lokalisasi dapat dilakukan hanya dengan menggunakan data dari Odometer, akan
tetapi masih perlu dilakukan validasi lebih lanjut lagi menggunakan sensor yang
mampu membaca akselerasi robot. Ini dikarenakan terkadang ketika motor BLDC
tersangkut atau berputar di tempat maka data yang dikirimkan akan dianggap
sedang melakukan suatu gerakan. Tentunya hal ini tidak diinginkan karena dapat
membuat robot tidak bergerak semestinya dan posisinya akan berbeda ketika di
aplikasi RViz dan keadaan didunia riil. Maka dari itu atas pertimbangan ini, sensor
GY-521 dipilih karena sangat dibutuhkan untuk memvalidasi nilai dari Odometer
dan membuat robot untuk tetap diposisi semestinya walaupun motor BLDC
berputar di tempat. Berikut adalah spesifikasi sensor IMU GY-512 yang
ditunjukkan pada tabel 4.8 dan bentuk fisik dari sensor GY-521 yang digunakan
ditunjukkan pada gambar 4.7.
Tabel 4.14 Spesifikasi Sensor IMU GY-521 MPU6050
Sumber: (www. berrybase.de, 2022)
Keterangan Spesifikasi
Chipset MPU-5060
Tegangan sistem kerja 3.3 - 5V DC
Jalur Komunikasi I2C up to 400kHz
Range Gyroscope 250, 500, 1000, 2000/s
Range Gyroscope 2, 4, 6, 8, 16g
Pin VCC, RX, TX, GND, RST, B0, SCL, SDA
7. Wi-Fi Dongle
Wi-Fi dongle digunakan sebagai Wi-Fi extension karena Jetson Nano tidak
memiliki modul Wi-Fi setelah pabrik. Wi-Fi dongle akan menjadi komunikasi
utama robot dengan komputer server.
8. Tombol Power On-Off
Tombol power on-off digunakan untuk menyalakan atau mematikan
perangkat robot. Tombol ini berupa push button yang kondisinya hanya 1 dan 0.
9. Adapter dan Port Charger Hoverboard
Adapter charger baterai digunakan untuk mengisi ulang daya dari baterai
hoverboard. Adapter ini merupakan adapter AC ke DC yang nantinya ditancapkan
pada lubang port adapter yang terhubung langsung ke motherboard hoverboard.
10. STLink V2
86
STLink bukanlah bagian dari komponen utama robot, alat ini digunakan
dalam proses flashing motherboard hoverboard. Tepatnya STlink berfungsi
sebagai perantara USB Flashing antara komputer dengan motherboard. Flashing
dilakukan untuk reset semua kode yang ada di motherboard sekaligus
menuliskan ulang motherboard dengan kode baru yang sudah di modifikasi.
Spesifikasi dari STLink yang digunakan pada penelitian ini dapat dilihat pada tabel
4.9.
Tabel 4.15 Datasheet STLink V2 mini USB
Sumber: (www.waveshare.com, 2022)
Keterangan Spesifikasi
SWD voltage range 1.65V - 3.6V
SWIM voltage range 1.65V - 5.5V
Supports SWV No
Debug interfaces 2
LED indicator Dual color LED
87
penyimpanan komponen utama seperti Jetson Nano dan bagian atasnya
berperan sebagai tutup sekaligus alas untuk tempat menaruh barang.
14. Filamen 3D print
Filamen 3D printer sebagai bahan utama tinta 3D printer. Chassis robot
menggunakan desain custom maka dari nantinya akan ada beberapa bagian yang
hanya bisa dibuat menggunakan mesin 3D printer. Jenis filamen yang digunakan
adalah PETG berwarna hitam sebanyak 2 kilogram.
15. 3D printer
3D Printer digunakan untuk mencetak bagian utama robot. Jenis 3D printer
yang digunakan pada penelitian ini adalah printer dengan jenis FDM bermerek
Creality CR-10S Pro dengan spesifikasi minimal panjang 30 cm, lebar 30 cm dan
tinggi 20 cm.
16. Kabel jumper
Kabel jumper digunakan untuk menghubungkan serial USART sensor kanan
motherboard dengan FTDI yang terhubung pada Jetson Nano melalui USB mini.
17. Kabel micro USB
Kabel micro USB digunakan untuk menghubungkan sensor RPLiDAR dengan
Jetson Nano melalui USB. Selain itu juga digunakan untuk menghubungkan
Jetson Nano ke catu daya, yakni Power bank.
D.2.2.2 Kebutuhan Non-Fungsional Perangkat Lunak
Kebutuhan non-fungsional adalah batasan dari sistem terhadap layanan yang
diberikan. Batasan tersebut dapat berupa waktu, batasan proses pengembangan
dan batasan terhadap standar tertentu.
1. Hoverboard Firmware
Firmware hoverboard tersimpan di dalam chip GD32 yang menjadi
pemrosesan utama hoverboard. Firmware ini dapat diubah dan dimanipulasi
nilainya dengan mengunggah file ekstensi biner ke dalam chip tersebut.
Penelitian ini akan menggunakan firmware yang dikembangkan oleh Emanuel
Feru dan komunitas hoverboard di GitHub pada link berikut,
https://github.com/EFeru/hoverboard-firmware-hack-FOC.
2. STM32Cube Programmer
Aplikasi STM32Cube Programmer digunakan untuk melakukan flashing pada
motherboard hoverboard. STM32CubeProgrammer dikirimkan dalam versi GUI
(antarmuka pengguna grafis) dan CLI (antarmuka baris perintah). Gambar 4.8
merupakan tampilan GUI dari aplikasi STM32Cube Programmer.
88
Gambar 4.44 STM32Cube Programmer
3. Catkin workspace
Mengutip dari (Pyo, dkk., 2017) mengatakan bahwa ROS menggunakan
sistem pembuatan khusus ROS yang disebut catkin. Catkin mengacu pada sistem
build ROS yang pada dasarnya menggunakan CMake (Cross Platform Make) dan
lingkungan build dijelaskan dalam file 'CMakeLists.txt' di folder paket. CMake
dimodifikasi di ROS untuk membuat sistem build khusus ROS. Menurut (Pyo,
dkk., 2017) catkin merupakan salah satu metode workspace bertujuan untuk
memudahkan proses developing dan compiling, konsep ini sama dengan konsep
webpack yang ada pada web developing, diagram pohon dari struktur catkin
seperti yang terdapat pada gambar 4.9.
89
Gambar 4.46 ROS Melodic
Sumber: (wiki.ros.org, 2018)
Saat ini ROS sudah mempunyai 2 major version dengan arsitektur yang
berbeda, yaitu ada ROS1 dan ROS2. Pada penelitian ini, penulis menggunakan
ROS1 dengan versi Melodic pada mikro komputer Jetson Nano dan
menggunakan versi Noetic pada komputer server. Perbedaan versi ini di karena
kan perbedaan versi Ubuntu pada Jetson Nano dan komputer server, akan tetapi
ROS mampu melakukan komunikasi antar perangkat walaupun memiliki versi
yang berbeda. ROS Melodic Morenia terutama ditargetkan pada rilis Ubuntu
18.04 (Bionic).
5. Terminator
Terminator atau terminal digunakan sebagai terminal pemerintah utama
dalam melakukan penelitian ini, hal ini dikarenakan fiturnya lebih kaya dari pada
terminal default milik Linux. Kelebihan terminal ini adalah mampu membelah
atau membagi tampilan tabnya menjadi beberapa bagian. Dikarenakan proses
untuk menjalankan file terjadi lewat terminal, untuk itu dibutuhkan terminal
yang mampu membelah diri di dalam satu tampilan Window.
6. Visual Studio Code (IDE)
Visual Studio Code atau yang biasa disingkat dengan VSCode merupakan
kode editor yang banyak digunakan oleh developer. Kode editor ini digunakan
karena kemudahan dalam auto koreksi dan kemudahan navigasi antar file. Selain
itu fitur debugging dalam melakukan tracking error akan sangat membantu
sekali.
7. Platform IO
Penggunaan extension Platform IO ini dikarenakan kemudahannya dalam
proses compiling dan flash ke motherboard hoverboard. Dengan cukup
melakukan 1 kali klik maka proses compile dan upload akan sekaligus dilakukan
sehingga mempercepat proses pengembangan robot di dalam penelitian ini.
8. Creality Slicer
Creality Slicer merupakan perangkat lunak pengiris digunakan dalam
pencetakan 3D untuk memotong model 3D menjadi beberapa lapisan (irisan) dan
90
menggambar jalur pencetakan yang dapat diikuti oleh mesin. Creality Slicer
adalah alat pengiris milik Creality, yang juga memproduksi banyak printer 3D
populer seperti seri Ender 3. Aplikasi ini dipakai sebelum melakukan pencetakan
3D, fungsinya adalah melakukan convert dari file ekstensi umum menjadi gcode,
sehingga 3D printer dapat mengenali file tersebut
9. VNC Viewer & VNC Server
VNC Viewer dan VNC Server merupakan software remote-control yang
memungkinkan untuk mengontrol komputer lain melalui koneksi network
(Richardson, dkk., 1998). Komputer server akan di install VNC Viewer sedangkan
Jetson Nano sebagai mikro komputer akan di install VNC Server. Kegunaan
perangkat lunak ini adalah untuk melakukan proses yang membutuhkan
tampilan user interface pada Jetson Nano.
10. RViz
Menurut (Pyo, dkk., 2017) RViz merupakan aplikasi Linux berbasis GUI yang
mendukung visualisasi dari Robot Operating System (ROS). Pada penelitian ini
RViz digunakan sebagai aplikasi untuk melihat sejauh mana pembuatan peta atau
mapping bekerja. Hampir setiap pengembangan ROS pasti menggunakan RViz
sebagai aplikasi visualisasinya. RViz memiliki fitur pendukung utama untuk
melakukan navigasi, yakni 2D Nav Goal. (Pyo, dkk., 2017) mengatakan bahwa
fitur ini mengirimkan data koordinat pada peta yang dijadikan fixed frame,
sehingga ketika robot sudah dilengkapi dengan sistem navigasi maka akan
terbuat sebuah path planning sehingga robot akan mengikuti arahan dari jalur
yang sudah dibuat dan di visualisasikan melalui RViz. Gambar 4.11 merupakan
tampilan antar muka aplikasi RViz.
93
MPU6050 merupakan driver sensor yang digunakan untuk menjembatani
sensor IMU 6050 dengan mikro komputer atau mikro kontroler. Sedangkan I2C
merupakan library untuk komunikasi jalur serial I2C antara kontroler dengan
sensor IMU. Untuk mendapatkan driver ini, kita bisa mengunduh driver
MPU6050 dan I2C driver pada link berikut:
- https://github.com/Brazilian-Institute-of-Robotics/mpu6050_driver
- https://github.com/Brazilian-Institute-of-Robotics/i2c_device_ros
Driver ini bertujuan untuk membaca nilai percepatan dari sensor akselerometer,
giroskop dan magnetometer. Dengan menggunakan driver ini kita mampu
mengakses sensor IMU dengan mudah. Tabel parameter yang digunakan paket
MPU6050 dan I2C driver dapat dilihat pada tabel 4.12.
Tabel 4.18 Parameter MPU6050 Driver
Sumber: (wiki.ros.org, 2022)
No Parameter Keterangan
1 bus_uri I2C Bus URI digunakan untuk berkomunikasi dengan
perangkat I2C
2 mpu_address Alamat I2C dari MPU6050 yang biasanya memiliki
alamat default 0x68
3 pub_rate Frekuensi dalam Hertz yang data IMU diterbitkan
4 frame_id Bingkai jika pesan IMU
5 axes_offsets Offset untuk memperbaiki nilai yang salah yang
disebabkan oleh misalignment. Nilai ini didapat setelah
melakukan kalibrasi
6 ki Konstanta PID yang digunakan dalam prosedur
kalibrasi.
7 kp Konstanta PID yang digunakan dalam prosedur
kalibrasi
8 delta Proses kalibrasi selesai ketika kesalahan mendekati nol
dengan presisi yang ditetapkan oleh delta
94
https://github.com/tu-darmstadt-ros-pkg/hector_slam. Hector SLAM library
memiliki dari beberapa library lagi di dalamnya, terdiri dari library hector
mapping, hector Geotiff, hector Trajectory, hector SLAM dan masih banyak lagi.
Tabel parameter yang digunakan paket robot pose EKF dapat dilihat pada tabel
4.13.
Tabel 4.19 Parameter Hector Mapping
Sumber: (wiki.ros.org, 2022)
No Parameter Keterangan
1 base_frame Nama rangka dasar robot. Ini adalah
frame yang digunakan untuk pelokalan
dan transformasi data pemindaian laser.
2 map_frame Nama dari frame peta
3 odom_frame Nama dari frame odometry
4 map_resolution Resolusi peta [m]. Ini adalah panjang tepi
sel grid.
5 map_size Ukuran [jumlah sel per sumbu] peta. Peta
berbentuk persegi dan memiliki sel kisi
(map_size * map_size).
6 map_start_x Lokasi asal [0.0, 1.0] bingkai /peta pada
sumbu x relatif terhadap peta kisi. 0,5 di
tengah.
7 map_start_y Lokasi asal [0.0, 1.0] bingkai /peta pada
sumbu y relatif terhadap peta kisi. 0,5 di
tengah.
8 map_update Ambang batas untuk melakukan
pembaruan peta.
_distance_thresh
9 map_update Ambang batas untuk melakukan
pembaruan peta.
_angle_thresh
10 map_multi_res_levels Jumlah tingkat petak multi-resolusi.
11 update_factor_free Pengubah pembaruan peta untuk
pembaruan sel gratis dalam kisaran.
12 update_factor_occupied Pengubah pembaruan peta untuk
pembaruan sel yang ditempati dalam
kisaran
13 laser_z_min_value Tinggi minimum [m] relatif terhadap
bingkai pemindai laser untuk titik akhir
pemindaian laser yang akan digunakan
95
oleh sistem
14 laser_z_max_value Tinggi maksimum [m] relatif terhadap
bingkai pemindai laser untuk titik akhir
pemindaian laser yang akan digunakan
oleh sistem
15 pub_map_odom_transform Tentukan apakah transformasi map-
>odom harus dipublikasikan oleh sistem.
16 tf_map_scanmatch Nama frame saat memublikasikan
scanmatcher ke transformasi peta seperti
_transform_frame_name
yang dijelaskan dalam parameter
sebelumnya.
96
odometry
8 gps_used Aktifkan atau nonaktifkan input sensor GPS
9 debug Parameter yang menentukan apakah akan
dijalankan dalam mode debug atau tidak.
98
8 recovery_behavior_enabled Apakah akan mengaktifkan perilaku
pemulihan move_base atau tidak untuk
mencoba mengosongkan ruang
9 clearing_rotation_allowed Menentukan apakah robot akan mencoba
melakukan rotasi di tempat atau tidak
saat mencoba mengosongkan ruang
10 shutdown_costmaps Menentukan apakah akan mematikan
peta biaya node atau tidak saat
move_base dalam keadaan tidak aktif
11 oscillation_timeout Berapa lama dalam detik untuk
memungkinkan osilasi sebelum
menjalankan perilaku pemulihan
12 oscillation_distance Berapa jauh dalam meter robot harus
bergerak agar dianggap tidak berosilasi
13 planner_frequency Laju dalam Hz untuk menjalankan loop
perencanaan global
14 max_planning_retries Berapa kali untuk memungkinkan
perencanaan ulang sebelum menjalankan
perilaku pemulihan
100
20 Biaya ruang yang tidak diketahui jika
unknown_cost_value
melacaknya.
21 update_frequency Frekuensi pembaruan peta biaya.
22 apakah saat menggabungkan peta biaya
use_maximum
untuk menggunakan biaya maksimum
23 Daftar nama plugin yang dipetakan untuk
plugins
ruang nama dan nama parameter
24 Daftar nama filter peta biaya yang
filters dipetakan untuk ruang nama dan nama
parameter.
25 Plugin untuk cost map static layer seperti
plugins/static_layer
peta
26 Plugin untuk cost map obstacle layer
plugins/ obstacle_layer
seperti data laser
27 Plugin untuk melipat gandakan ukuran
plugins/ inflation_layer
costmap
Tabel 4.24 Parameter Konfigurasi Dijkstra Global Planner
Sumber: (wiki.ros.org, 2022)
No Parameter Keterangan
1 allow_unknown Menentukan apakah akan mengizinkan
perencana membuat rencana yang melintasi
ruang yang tidak diketahui atau tidak
2 default_tolerance Sebuah toleransi pada titik tujuan untuk
perencana. Path planner akan mencoba
membuat rencana yang sedekat mungkin
dengan tujuan yang ditentukan tetapi tidak
lebih jauh dari default_tolerance.
3 visualize_potential Menentukan apakah akan memvisualisasikan
area potensial yang dihitung melalui
PointCloud2 atau tidak.
4 use_dijkstra Jika ya, gunakan algoritma dijkstra. Jika tidak,
A*.
5 old_navfn_behavior Jika karena alasan tertentu, kita ingin
global_planner benar-benar mencerminkan
perilaku navfn, setel ini ke true (dan gunakan
default untuk parameter boolean lainnya)
6 lethal_cost Biaya dari lethal area pada konfigurasi ulang
secara dinamis
101
7 neutral_cost Biaya dari netral area pada konfigurasi ulang
secara dinamis
8 cost_factor Faktor yang mengalikan beberapa biaya dari
biaya peta pada konfigurasi ulang secara
dinamis
9 publish_potential Publikasikan Peta Biaya Potensial pada
konfigurasi ulang dinamis
10 orientation_mod Cara mengatur orientasi setiap titik
11 orientation_window_size Window mana yang digunakan untuk
menentukan orientasi berdasarkan turunan
posisi yang ditentukan oleh mode orientasi
12 outline_map Menguraikan peta biaya global dengan
rintangan mematikan. Untuk penggunaan
peta biaya global non-statis (jendela
bergulir), ini perlu disetel ke false
102
robot dalam rad/s
11 min_rot_vel Nilai mutlak kecepatan putar minimum robot
dalam rad/s
12 yaw_goal_tolerance Toleransi dalam radian untuk pengontrol
dalam yaw/rotasi saat mencapai tujuannya
13 xy_goal_tolerance Toleransi dalam meter untuk pengontrol
dalam jarak x & y saat mencapai tujuan
14 latch_xy_goal_ Jika toleransi tujuan terkunci, jika robot
pernah mencapai lokasi tujuan xy, ia hanya
tolerance
akan berputar di tempatnya, bahkan jika itu
berakhir di luar toleransi tujuan saat
melakukannya.
15 sim_time Parameter untuk simulasi. Jumlah waktu
untuk meneruskan simulasi lintasan dalam
hitungan detik
16 sim_granularity Parameter untuk simulasi. Ukuran langkah,
dalam meter, untuk mengambil antara titik
pada lintasan tertentu
17 vx_samples Parameter untuk simulasi. Jumlah sampel
yang akan digunakan saat menjelajahi ruang
kecepatan x
18 vy_samples Parameter untuk simulasi. Jumlah sampel
yang akan digunakan saat menjelajahi ruang
kecepatan y
19 vth_samples Parameter untuk simulasi. Jumlah sampel
yang akan digunakan saat menjelajahi ruang
kecepatan theta
20 controller_frequency Parameter untuk simulasi. Frekuensi di mana
pengontrol ini akan dipanggil dalam Hz.
21 path_distance_bias Pembobotan untuk seberapa banyak
pengontrol harus tetap dekat dengan jalur
yang diberikan
22 goal_distance_bias dia menimbang berapa banyak pengontrol
harus berusaha mencapai tujuan lokalnya,
juga mengontrol kecepatan
23 occdist_scale Pembobotan untuk seberapa banyak
pengontrol harus berusaha menghindari
rintangan
24 forward_point_distance Jarak dari titik pusat robot untuk
103
menempatkan titik penilaian tambahan,
dalam meter
25 stop_time_buffer Jumlah waktu robot harus berhenti sebelum
tabrakan agar lintasan dianggap valid dalam
hitungan detik
26 scaling_speed Nilai absolut dari kecepatan untuk mulai
menskalakan jejak robot, dalam m/s
27 max_scaling_factor Faktor maksimum untuk menskalakan jejak
robot
28 publish_cost_grid Apakah akan mempublikasikan kisi biaya yang
akan digunakan perencana saat
merencanakan atau tidak
29 oscillation_reset_dist Seberapa jauh robot harus berjalan dalam
meter sebelum tanda osilasi direset
30 prune_plan Menentukan apakah akan memakan rencana
saat robot bergerak di sepanjang jalan.
104
BAB E PERANCANGAN DAN IMPLEMENTASI
105
dijadikan sebagai penghubung sisi bagian belakang. Terakhir, papan ke-4
dibiarkan utuh yang nantinya digunakan sebagai penutup chassis. Untuk detail
bentuk dari chassis ini dapat dilihat pada gambar 5.1. Selanjutnya untuk bagian
chassis robot beroda yang merupakan komponen utama robot sebagai
penggerak dan dudukan motor. Terdiri dari gabungan hasil 3D print dan
komponen elektronik hoverboard. Keseluruhan desain 3D ini dapat dilihat pada
gambar 5.2.
106
Gambar 5.50 Assembling Semua Bagian Chassis Belakang Robot
107
Gambar 5.52 Grafik Kinematik Sistem Kemudi Diff-drive
Untuk menggerakkan atau mengemudikan robot kita hanya perlu
memublikasikan pesan geometric_msgs/Twist ke topik cmd_vel. Cmd_vel
merupakan topik yang digunakan oleh paket move_base untuk mengirim
perintah navigasi. Twist message menggunakan m/s untuk satuan kecepatan
linier dan radian/s untuk satuan kecepatan sudut. Untuk melakukan gerak linier
adalah dengan mengalikan kecepatan linier dengan rasio linier dan atur setiap
roda ke kecepatan ini. Dengan menyamakan putaran tiap rasio roda maka akan
mendapatkan gerak lurus. Untuk melakukan gerakan sudut putar, caranya
hampir persis seperti gerak linier hanya saja kita perlu menemukan rasio yang
berbeda, antara radian per sekon dan output kontrol dan pastikan roda berputar
ke arah yang berlawanan. Untuk mendapatkan gerakan berbelok sedikit atau
gerak non-holonomic maka dibutuhkan sedikit kecepatan rasio disalah satu
rodanya. Gerakan ini sebenarnya merupakan gerakan linier dengan sedikit gerak
angular. Cukup tambahkan kecepatan sudut dan linier untuk setiap roda
bersama-sama untuk mendapatkan kecepatan akhir. Pada akhirnya, jelas
terdapat kecepatan maksimum yang dapat diputar oleh roda robot dan twist
message bisa melakukan ini dengan mudah. Jika kita menurunkan kecepatan
kedua roda dengan rasio yang sama sehingga berada dalam kisaran yang mampu
dilakukan motor, maka robot akan mengikuti lintasan yang sama seperti yang
diperintahkan oleh twist message tetapi pada kecepatan yang rendah.
Komponen utama ketiga adalah sensor robot yang terletak pada bagian
depan robot. Sensor terdiri dari sensor utama RPLiDAR, dan dua sensor untuk
lokalisasi yaitu sensor IMU dan build-in Odometer. Sensor ini berfungsi agar
robot mengetahui kondisi sekitarnya dan mampu mengambil keputusan path
planning. Gambar 5.6, gambar 5.7 dan gambar 5.8 merupakan gambar
Rancangan Prototype Keseluruhan Sistem yang terdiri dari bagian mainboard
robot beroda sebagai penggerak, chassis robot sebagai kerangka dan sensor
robot sebagai penglihatan dari robot. Semua desain ini dibuat menggunakan
aplikasi Autodesk Fusion 360 yang merupakan aplikasi untuk desain 3D yang
dikembangkan oleh Autodesk.
108
Gambar 5.53 Rancangan Prototype Keseluruhan Sistem Tampak Samping
109
Gambar 5.54 Rancangan Prototype Keseluruhan Sistem Tampak Atas
110
Gambar 5.56 Rancangan Perangkat Keras Sistem
Pada gambar 5.9 dapat diperhatikan bahwa sistem akan menggunakan
perangkat utama yang saling terintegrasi satu sama lain menggunakan beberapa
protokol komunikasi sebagai penghubung. Perangkat utama yang dimaksud
adalah Jetson Nano, personal komputer dan hoverboard motherboard,
sedangkan protokol komunikasi penghubung yang dimaksud adalah serial
protocol dengan FTDI mini USB dan VNC dengan jaringan Wi-Fi. Namun karena
Jetson Nano tidak memiliki modul Wi-Fi pada komponen utamanya, maka kita
perlu menambahkan modul berupa Wi-Fi dongle yang ditancapkan pada salah
satu port USB Jetson Nano. Berikut ini merupakan penjelasan mengenai sistem
kendali utama robot. Personal komputer atau komputer server berkomunikasi
dengan Jetson Nano menggunakan protokol komunikasi Virtual Network
Computing (VNC) pada jaringan yang saling terhubung dengan Wi-Fi yang sama.
Sedangkan untuk Jetson Nano dengan hoverboard motherboard menggunakan
111
komunikasi data serial USART melalui perangkat elektronik bernama FTDI mini
USB converter. Jetson Nano merupakan komponen utama penyusun sistem
penggerak.
Sistem penggerak berperan sebagai aktuator yang sekaligus mengirimkan
data berupa data odometry. Sistem ini terdiri dari motherboard hoverboard,
motor BLDC, baterai, power on/off dan Jetson Nano yang terhubung dengan FTDI
melalui komunikasi USART. Motherboard di sini berfungsi sebagai motor driver
utama yang mengatur arah putar dan kecepatan putar motor BLDC. Dengan
menggunakan 3 kabel phase di tiap sisi motor, motherboard hoverboard dapat
dengan mudah mengatur kecepatan dengan memanipulasi nilai voltase yang
dialirkan melalui 3 kabel phase ini. Berbeda dengan motor DC biasa yang
menggunakan VCC dan ground saja, motor BLDC memerlukan 3 kabel phase
untuk mengatur tegangan yang masuk di tiap phase magnetnya. Selain itu
dibutuhkan juga 5 pin hall sensor yang digunakan untuk mengetahui posisi
putaran robot sehingga didapatkan data Odometry pada motor BLDC. Untuk
mendeskripsikan rancangan keseluruhan sistem penggerak ini, dapat dilihat pada
gambar 5.10.
Pada gambar 5.10 terdapat diagram skematis dari sistem gerak robot dimana
motherboard hoverboard yang berfungsi sebagai driver motor BLDC, terhubung
langsung dengan kabel phase, hall, on/off, charger dan supply. Kabel phase dan
kabel hall sudah dijelaskan sebelumnya, yakni untuk mengendalikan dan
mendapatkan data odometry dari motor BLDC. Kabel on/off power button
terhubung dengan soket yang sudah tersedia pada motherboard begitu pula
dengan kabel charger port. Kemudian untuk dapat berkomunikasi dengan Jetson
112
Nano, kita perlu menghubungkan motherboard dengan kabel sensor yang ada di
sisi bawah motherboard hoverboard.
Kedua sisi sensor motherboard hoverboard memiliki total 8 buah kabel yang
masing-masing terdiri dari VCC, RX, TX, dan ground. Kedua kabel ini seharusnya
terhubung dengan sensor giroskop pada hoverboard, namun kita bisa membuang
bagian sensor tersebut dan mengambil bagian motherboard saja. Namun secara
pabrikan, hoverboard tidak dibuat untuk tujuan ini maka diperlukan proses
flashing firmware pada motherboard hoverboard. Dari kedua port sensor ini, kita
hanya akan menggunakan kabel sensor sebelah kanan. Kabel sebelah kanan
digunakan karena tegangannya dapat mentoleransi komunikasi data dengan
tegangan maksimal 5V. Konfigurasi ini dapat dilihat pada datasheet jenis
motherboard hoverboard yang digunakan.
Hal ini dilakukan untuk menghindari kerusakan pada Jetson Nano yang mana
jika kita menggunakan kabel sensor sebelah kiri maka motherboard bisa saja
mengirimkan data dengan voltase sebesar 15V. Voltase sebesar itu tidak akan
bisa diterima oleh Jetson Nano dan hal ini akan memicu terjadi short aliran listrik
sehingga Jetson Nano bisa saja terjadi hubungan arus pendek atau lebih
parahnya adalah terbakar. Kemudian perlu diperhatikan juga, dari ke-4 kabel
sensor kanan (VCC MCU, RX MCU, TX MCU, GND MCU) hanya menggunakan 3
dari 4, jadi bagian pin yang digunakan hanyalah RX, TX, dan GND. Pin VCC tidak
digunakan karena akan mengakibatkan short circuit dan membuat rusak
motherboard. Dengan menghubungkan pin VCC berarti sama saja kita
menabrakkan dua tegangan dengan voltase yang jauh berbeda. Output dari pin
VCC pada sensor kanan motherboard memiliki nilai tegangan yang tinggi yaitu
15V, maka dari itu pin ini akan digunting dan di isolasi agar tidak membahayakan
jikalau lupa bahwa pin VCC ini tidak boleh digunakan.
Selanjutnya untuk terhubung dengan Jetson Nano melalui USB port,
dibutuhkan sebuah adapter yang mampu menjembatani komunikasi antar
perangkat. Dalam penelitian ini digunakan FTDI mini USB untuk menjembatani
kabel RX/TX sensor kanan dengan RX/TX Jetson Nano. Dari perangkat FTDI akan
dilanjutkan dengan kabel mini USB menuju port USB Jetson Nano. Untuk
penjelasan lebih lanjut mengenai apa saja pin-pin yang digunakan dari
motherboard dapat dilihat pada tabel 5.1.
Tabel 5.26 Penjelasan Konfigurasi Pinout Motherboard Hoverboard
Sumber: (github.com/EFeru/hoverboard-firmware-hack-FOC, 2018)
No Pin motherboard Pin tujuan Deskripsi
1 XT60 VCC 36V Pin daya motherboard
2 XT60 GND GND Pin ground motherboard
3 Button Pin Button Pin Pin tombol power kondisi on
4 Latch Pin Latch Pin Pin tombol power kondisi off
5 Charger Charger Konektor charger baterai
113
Connector Connector
6 Pin daya untuk kutub A pada motor
Phase A LEFT Phase A
kiri
7 Pin daya untuk kutub B pada motor
Phase B LEFT Phase B
kiri
8 Pin daya untuk kutub C pada motor
Phase C LEFT Phase C
kiri
9 HALL A LEFT HALL A Pin data encoder pada motor kiri
10 HALL B LEFT HALL B Pin data encoder pada motor kiri
11 HALL C LEFT HALL C Pin data encoder pada motor kiri
12 GND LEFT GND Pin ground encoder motor kiri
13 VCC LEFT VCC Pin daya encoder motor kiri
14 Pin daya untuk kutub A pada motor
Phase A RIGHT Phase A
kanan
15 Pin daya untuk kutub B pada motor
Phase B RIGHT Phase B
kanan
16 Pin daya untuk kutub C pada motor
Phase C RIGHT Phase C
kanan
17 HALL A RIGHT HALL A Pin data encoder pada motor kanan
18 HALL B RIGHT HALL B Pin data encoder pada motor kanan
19 HALL C RIGHT HALL C Pin data encoder pada motor kanan
20 GND RIGHT GND Pin ground encoder motor kanan
21 VCC RIGHT VCC Pin daya encoder motor kanan
22 Pin USART untuk data yang
TX/USART3 RX terhubung dengan FTDI ke Jetson
Nano
23 Pin USART untuk data yang
PB11/RX/USART3 TX terhubung dengan FTDI ke Jetson
Nano
24 GND GND Pin ground USART3
25 3.3V MCU 3.3V Pin daya STLink untuk flashing
26 SWCLK MCU SWCLK Pin clock STLink untuk flashing
27 GND MCU GND Pin ground STLink untuk flashing
28 Pin data input dan output untuk
SWDIO MCU SWDIO
flashing
114
Jetson Nano menerima catu daya pada power bank dengan tegangan sebesar
5V dan kuat arus sebesar 1A melalui kabel USB to micro USB. Daya ini juga akan
dipergunakan untuk menenagai sensor RPLiDAR dan GY-521 IMU MPU6050.
Wiring dari Jetson Nano ke RPLiDAR dapat dilihat pada gambar 5.11.
115
Sedangkan pada sensor GY-521 menggunakan tegangan sebesar 3.3V yang
terhubung dengan pin Jetson Nano. Sensor GY-521 ini memiliki port dengan
jumlah 8 pin, namun pin yang digunakan hanya berjumlah 4 buah yakni VCC &
Ground, yang memiliki fungsi masukan daya dan pin SCL & SDA, yang berfungsi
sebagai pengirim data dengan protokol komunikasi I2C. Untuk melihat
penjelasan lebih lanjut mengenai pin dari GY-521 dapat dilihat pada tabel 5.3 dan
untuk perangkat GY-521 dapat dilihat pada gambar 5.12.
117
utama dan proses bagian. Proses persiapan awal merupakan proses yang
pertama kali harus dijalankan sebelum memasuki proses utama maupun proses
bagian. Sedangkan proses utama merupakan proses yang mencakup keseluruhan
sistem. Proses utama terdiri dari 2 hal utama yang menjadi pokok penelitian ini,
yakni proses pemetaan dan proses navigasi. Sedangkan proses bagian atau sub
proses merupakan pecahan proses utama atau penjelasan lebih lanjut mengenai
bagian-bagian yang memiliki algoritme lagi di dalam proses utama yang
tujuannya adalah untuk memperjelas beberapa fungsi pada proses tertentu.
E.1.3.1 Perancangan Persiapan Awal Motherboard
118
dilakukan proses flashing. Proses ini dimulai dengan memberikan kabel jumper
pada perangkat STLink yang kemudian dihubungkan dengan 4 buah pin yang ada
di motherboard. Proses ini dijelaskan lebih lanjut pada sub bab implementasi.
Untuk detail mengenai pin ini dapat dilihat pada gambar 5.15.
119
E.1.3.2 Perancangan Persiapan Awal Jetson Nano
120
pose_covariance_diago [0.001, 0.001,
[0.0, 0.0, 0.0, 0.0,
3 nal 1000000.0, 1000000.0,
0.0, 0.0]
1000000.0, 1000.0]
twist_covariance_diago [0.001, 0.001,
[0.0, 0.0, 0.0, 0.0,
4 nal 1000000.0, 1000000.0,
0.0, 0.0]
1000000.0, 1000.0]
5 publish_rate 50 50
wheel_separation_
6 1.0 0.34
multiplier
7 cmd_vel_timeout 0.5 0.5
8 base_frame_id “base_link” “base_footprint”
linear/x/
9 false true
has_velocity_limits
10 linear/x/max_velocity double 1.0
11 linear/x/mix_velocity double -0.5
linear/x/
12 false true
has_acceleration_limits
linear/x/
13 double 0.8
max_acceleration
linear/x/
14 double double
min_acceleration
15 linear/x/has_jerk_limits false false
16 linear/x/max_jerk 0.0 0.0
angular/z/
17 false true
has_velocity_limits
18 angular/z/max_velocity double 3.14
19 angular/z/min_velocity double -3.14
angular/z/
20 false true
has_acceleration_limits
angular/z/
21 double 3.14
max_acceleration
angular/z/
22 double double
min_acceleration
angular/z/
23 false true
has_jerk_limits
121
24 angular/z/max_jerk double 3.14
25 enable_odom_tf true false
26 wheel_separation 0.0 0.32
27 wheel_radius 0.0 0.0825
28 odom_frame_id “/odom” “/odom”
29 publish_cmd false false
allow_multiple_cmd_vel
30 false true
_publisher
velocity_rolling_window
31 10 10
_size
122
di teriminal $ catkin_create_pkg autonomous_mobile_robot_navigation
std_msgs roscpp rospy . Detail mengenai konfigurasi ini akan dijelaskan pada sub
bab implementasi. Pada file package.xlm terdapat beberapa paket dan library
yang akan di butuh kan pada penelitian ini, daftar paket dan library yang
dibutuhkan terdapat pada tabel 5.6.
Tabel 5.32 Daftar Paket Yang Digunakan pada AMR Navigation Package.xml
No Nama Paket Tag
1 amcl <depend> #namaPaket
</depend>
2 actionlib
3 actionlib_msgs
4 geometry_msgs
5 control_msgs
6 message_generation
7 controller_manager
8 gmapping
9 move_base
10 roscpp
11 rospy
12 std_msgs
13 std_srvs
14 tf
15 tf2
16 control_toolbox
17 map_server
18 rosparam_shortcuts
19 hardware_interface
20 laser_filters
21 imu_filter_madgwick
22 rviz_imu_plugin
23 robot_localization
24 dwa_local_planner
25 global_planner
26 twist_mux
123
27 nmea_navsat_driver
28 moveit_ros_planning_interface
Proses berikutnya akan dilanjutkan pada diagram alir pada gambar 5.17.
124
E.1.3.3 Perancangan Program Utama
Perancangan program utama akan mencakup program utama pada penelitian
ini, mulai dari melakukan kalibrasi sensor IMU, pemetaan, dan navigasi robot.
Kalibrasi hanya dilakukan pada sensor IMU karena sensor lainnya seperti
RPLiDAR dan encoder di dalam motor BLDC sudah memiliki nilai raw yang presisi.
Semua alur pada perancangan program utama menjadi diagram alir utama
terhadap sub program lainnya. Diagram alir yang menjelaskan proses dari
program utama dapat dilihat pada gambar 5.18.
125
Gambar 5.66 Diagram Alir Sub Proses Kalibrasi Sensor IMU
Pada diagram alir yang di tunjukkan pada gambar 5.19 menjelaskan bahwa
proses awal melakukan kalibrasi adalah dengan menjalankan perintah pada $
roslaunch mpu6050_driver mpu6050_calibration.launch pada terminal. Setelah
menjalankan perintah tersebut maka terminal akan menjalankan proses kalibrasi
dan menghasilkan output berupa topik baru dengan nama /imu/data dan
/imu_offsets. Lihat nilai dari output tersebut dengan mencetaknya pada terminal
dengan perintah $ rostopic echo /imu_offsets kemudian simpan nilai tersebut
pada text editor. Langkah selanjutnya adalah mengubah file setting dari driver
MPU pada directory mpu6050_driver/config/mpu_setting.yaml. Setelah proses
edit selesai, langkah selanjutnya adalah menjalankan file launcher driver IMU
dengan mengetikkan perintah $ roslaunch mpu6050_driver
126
mpu6050_driver.launch pada terminal. Untuk dapat melihat output yang
dihasilkan dari sensor, jalankan perintah $ rostopic echo /imu pada terminal.
Output yang ditampilkan adalah nilai x,y,z pada akselerometer tidak mendekati 0
m/s, 0 m/s, dan 9.8 m/s maka proses kalibrasi perlu di ulang. Akan tetapi jika
sudah mendekati nilai tersebut maka proses kalibrasi IMU sudah selesai.
E.1.3.4 Perancangan Program Pemetaan
Proses selanjutnya adalah mapping atau pemetaan, proses ini merupakan
sub proses dari program utama, jadi penjelasan lebih lanjut mengenai pemetaan
ini akan di bahas pada sub nomor berikutnya. Proses mapping ini kurang lebih
berguna untuk mendapatkan data “map” pada suatu area di dalam ruangan.
Map ini nantinya akan berguna untuk proses navigasi, hal ini dikarenakan untuk
melakukan navigasi diperlukan proses path planning atau perencanaan jalur.
Sehingga untuk mendapatkan data koordinat tujuan dan melakukan
perencanaan jalur dibutuhkan data peta 2D, agar koordinat dapat di inisialisasi.
Setelah map berhasil dibuat, maka langkah selanjutnya adalah menyimpan map
tersebut ke dalam folder yang sudah disiapkan khusus untuk file-file map.
Perancangan program pemetaan akan mencakup proses pembacaan sensor,
lokalisasi, dan hector mapping. Program pemetaan merupakan salah satu
program utama yang harus dijalankan terlebih dahulu sebelum melakukan
program navigasi. Diagram alir dari perancangan program pemetaan akan
ditunjukkan pada gambar 5.20.
127
Gambar 5.67 Diagram Alir Program Pemetaan
Pada gambar 5.20 merupakan diagram alir program pemetaan dengan proses
yang saling berkaitan satu paket dengan paket lainnya. Diagram ini menjelaskan
128
mengenai node-node yang dibutuhkan dalam proses mapping, seperti
menjalankan semua driver sensor, fusion sensor, lokalisasi, transform frame, dan
parameter-parameter yang digunakan. Semua hal ini dijadikan satu proses besar
yang dinama kan mapping dan perencanaan dari proses-proses ini digabungkan
ke dalam file dengan ekstensi .launch yang diberi nama mapping.launch.
Semua proses ini bermula dari perintah terminal yang di input oleh komputer
server yang terhubung dengan VNC client. Seperti yang sudah dijelaskan pada
bab 2 mengenai ROS dan perintah-perintah yang ada di dalamnya, terdapat
prefix perintah “roslaunch” yang akan sering digunakan pada penelitian ini.
Prefix ini memiliki arti, jalankan sebuah ros system core yang melakukan
launching dengan file yang memiliki ekstensi “. launch” kemudian jalankan
semua perintah-perintah di dalamnya. Jadi isi dari file launch ini adalah
kumpulan perintah untuk menjalankan node-node beserta parameternya. File ini
juga dapat memanggil file launch lainnya sehingga terjadi sinkronisasi karena
tidak perlu memanggil file launch secara berulang-ulang. Setelah kita
menjalankan file launch mapping, maka yang terjadi selanjutnya adalah terminal
Linux akan berperan sebagai aplikasi berbasis konsol yang menampilkan hasil log
berupa sistem mapping. Terminal tidak bisa di terminate atau dihentikan, karena
akan berakibat pada node-node yang sedang dijalankan pada terminal tersebut.
Saat terminal menjalankan file launch, maka hal yang pertama kali dilakukan
adalah melakukan pengecekan driver dan paket yang digunakan. Pengecekan ini
hanya berlaku pada node yang disebutkan di dalam file launch tersebut, apabila
terdapat dependency yang kurang atau ada beberapa paket pendukung node
tersebut yang belum di install maka terminal akan menampilkan pesan error dan
meminta untuk memasang paket tersebut. Selain menampilkan error karena
paket yang belum terpasang, terkadang terminal juga menampilkan pesan
warning jika terdapat kekurangan pada kode program. Selanjutnya jika semua
driver dan paket sudah tersedia di dalam dependency ROS maka langkah
selanjutnya adalah mengirimkan input dari ketiga sensor, yaitu pemindaian laser
oleh RPLiDAR, akselerasi pergerakan robot oleh IMU, dan putaran odometry roda
oleh encoder motor.
Perlu diperhatikan juga bahwa selagi proses ini berlangsung, secara paralel
terminal juga menjalankan aplikasi RViz dan juga menampilkan aplikasi rqt robot
steering. Kedua aplikasi ini merupakan aplikasi pendukung yang memiliki
tugasnya masing-masing. Aplikasi RViz digunakan sebagai visualisasi proses untuk
monitoring hasil dari mapping. Hasil pemosisian robot akan terus di perbaharui
secara simultan, sehingga kita dapat melihat posisi robot pada saat itu .
Sedangkan aplikasi rqt robot steering digunakan menjadi remote control untuk
mengendali robot selama proses mapping terjadi. Aplikasi ini melakukan
subscribe pada topik hoverboard_velocity_controller/cmd_vel yang mana topik
ini akan publish topik geometry/pose untuk menggerakkan motor, sehingga
robot dapat bergerak dan sekaligus memberikan input data sensor odometry
untuk digunakan pada proses selanjutnya
129
Ketika pertama kali dijalankan, setiap komponen akan membuat frame
transformasi pada node masing-masing. Setiap frame tersebut harus saling
terhubung dan terkoordinasi, perancangan yang diinginkan adalah seperti yang
terlihat pada gambar 2.21.
130
Melanjutkan proses sebelumnya yaitu mengirimkan input sensor ke
mikrokomputer, proses ini dilakukan oleh driver pada masing-masing sensor.
Driver ini memiliki library untuk melakukan pembacaan data sensor, pengolahan
data, dan mengirimkan pesan catatan jika terjadi error. Pada input sensor
pemindaian laser, driver RPLiDAR_ros berperan untuk membaca data dari
tembakan laser dan mengubahnya ke dalam data point cloud. Point cloud
merupakan setumpuk data array yang terdiri dari ribuan data per detiknya,
dalam implementasinya point cloud ini berupa data jarak yang berhasil di scan.
Pada umumnya sensor yang menggunakan teknik laser hanya mampu
mengirimkan jarak pada satu titik fokus, namun sensor RPLiDAR memiliki
kemampuan untuk melakukan pemindaian secara 360 derajat. Untuk
memproses data putaran laser tersebut dibutuhkan driver khusus yang sudah
disediakan oleh RoboPeak yang bisa di download langsung pada website atau
repository GitHub. Tabel 5.5 adalah konfigurasi parameter yang terdapat pada
launcher rplidar_ros.
Selagi proses pemindaian laser dilakukan, sistem juga melakukan pembacaan
data akselerasi dari sensor IMU. Sensor ini akan memberikan data berupa
percepatan pada sumbu x, y, dan z. X merupakan sumbu horizontal, jadi nilai
akselerasi sumbu x akan berubah jika robot bergerak secara horizontal seperti
berbelok kiri atau kanan. Sedangkan sumbu Y merupakan sumbu vertikal, jadi
nilai akselerasi dari sumbu y akan berubah jika robot bergerak secara linier
seperti maju atau mundur. Sedangkan nilai Z secara default akan bernilai 9.8 m/s
mengikuti percepatan gravitasi bumi. Kemudian masih di proses paralel yang
sama sistem ROS akan menjalankan node odometry dimana driver hoverboard
akan melakukan pembacaan sensor encoder. Data yang didapatkan adalah
sebuah pose dan orientasi dari roda, jadi perubahan orientasi dari posisi
sebelumnya dapat terlihat langsung. Nilai dari orientasi dan posisi ini dihitung
berdasarkan nilai putaran tiap rodanya yang dikonversi ke dalam radian per
sekon.
Proses selanjutnya mulai menggunakan algoritme yang digunakan pada
penelitian ini. Setelah mendapatkan data dari sensor, sistem pada program
mapping akan menggunakan dua algoritme yakni algoritme Hector SLAM dan
algoritme EKF. Pada data sensor laser yang sudah menjadi data jarak ke dalam
point cloud, langkah selanjutnya adalah memberikan data tersebut ke algoritme
Hector SLAM.
131
E.1.3.5 Perancangan Proses Algoritme Hector SLAM
133
Pada gambar 5.23 dapat dilihat bahwa diagram alir terdiri dari beberapa
proses konfigurasi dan terdapat proses inti berupa estimasi pose 2D. Diagram alir
Hector Mapping dikutip dari jurnal peneliti yang dilakukan oleh (Souliman, 2019).
Dimulai dengan mendapatkan data informasi atau data dari pemindaian laser,
kemudian proses beralir ke konfigurasi Hector Mapping berdasarkan konfigurasi
pada file mapping_default.launch yakni berupa posisi scanning pada frame
/base_link dan posisi odom menjadi frame /odom. Selanjutnya lakukan proses
pengaturan laser value pada parameter laser_z_min_value, laser_z_max_value,
laser_min_dist, laser_max_dist. Setelah konfigurasi dijalankan oleh program
maka selanjutnya adalah menjalankan sub-proses, yaitu diagram alir estimasi
pose 2D yang dapat dilihat pada gambar 5.24.
[ ][ ]
T
∂ S i (ξ ) ∂ Si ( ξ)
H= ∇ M (Si ( ξ) ) ∇ M (S i (ξ) ) (5.1)
∂ξ ∂ξ
Rumus ini akan digunakan untuk melakukan koreksi nilai estimasi pose
menggunakan iterasi. Iterasi ini nantinya akan digunakan sebagai perhitungan
pergerakan robot berdasarkan banyaknya jumlah iterasi yang menghasilkan titik
proyeksi pose robot untuk selanjutnya akan proses akan dikembalikan ke titik
akhir proyek ke peta berdasarkan perkiraan pose. Proses estimasi pose berakhir
di sini yang kemudian akan kembali ke proses di dalam diagram alir pada gambar
5.28.
Sub proses selanjutnya adalah occupancy grid map yang merupakan
tambahan dari diagram alir yang dibuat oleh Aya Souliman. Proses ini akan
memanfaatkan output yang dihasilkan proses estimasi pose 2D. Diagram alir
algoritme occupancy grid diambil dari penelitian Xu, Lichao, dkk (Xu, dkk., 2019).
Berdasarkan gambar 5.30, diagram alir menunjukkan proses dimulai dari
melakukan subscribe topik Pose dan Laser Scan, kemudian lakukan seleksi kondisi
apakah pesan topik tersebut dapat diambil atau tidak. Jika tidak maka lakukan
subscribe topik kembali dan lakukan proses yang sama, namun jika ya maka akan
mendapatkan pesan output Pose dan Laser scan. Proses dilanjutkan dengan
melintasi pose 2D dan pemindaian laser secara berurutan dan akhirnya bisa
memperbaharui peta. Jika pose sudah mencapai titik akhir dari pemindaian laser,
dalam arti laser ditembakkan kemudian bergerak mencapai posisi robot kembali
maka dilakukan proses set dan publish transformasi laser pose, laser scan, dan
grid map. Namun jika tidak maka proses akan dikembalikan ke pelintasan pose
2D dan pemindaian laser secara berurutan untuk nantinya bisa memperbaharui
peta.
Setelah melakukan set dan publish topik, maka akan didapatkan output
berupa pesan laser pose, laser scan, dan grid map. Output ini akan digunakan
kembali ke proses awal yaitu subscribe pose dan laser scan topik sehingga
algoritme akan terus berulang menciptakan proses recursive. Diagram alir proses
ini dapat dilihat pada gambar 5.25.
135
Gambar 5.72 Diagram Alir Sub Proses Occupancy Grid Map
Setelah proses occupancy selesai, maka kita sudah mendapatkan data grid
map yang menjadi output dari proses occupancy grid map. Map ini digunakan
sementara untuk nantinya disimpan dan digunakan pada proses navigasi.
Kembali mengacu pada gambar 5.15, ketika proses mapping di akhiri maka
proses selesai, namun jika belum maka proses akan terus berlanjut hingga
nantinya di terminate paksa melalui terminal.
Hasil akhir perancangan dari diagram alir dari algoritme Hector SLAM berupa
konfigurasi pada file launcher. Jadi untuk mencapai diagram alir tersebut, perlu
dilakukan konfigurasi parameter terlebih dahulu pada paket hector_slam agar
sesuai dengan yang diharapkan. Konfigurasi ini dapat dilihat pada tabel 5.8, tabel
5.9, dan tabel 5.10.
136
Tabel 5.33 Parameter Konfigurasi Paket Hector Mapping
Konfigurasi
No Parameter Default
Penelitianan
1 base_frame base_link base_link
2 map_frame map_link map
3 odom_frame odom odom
4 map_resolution 0.025 5.050
5 map_size 1024 2048
6 map_start_x 0.5 0.5
7 map_start_y 0.5 0.5
map_update_distance_t
8 0.4 0.4
hresh
map_update_angle_thre
9 0.9 0.06
sh
map_pub_period 2.0 2.0
10 map_multi_res_levels 3 2
11 update_factor_free 0.4 0.4
12 update_factor_occupied 0.9 0.9
13 laser_min_dist 0.4 0.4
14 laser_max_dist 30.0 30.0
15 laser_z_min_value -1.0 -1.0
16 laser_z_max_value 1.0 1.0
pub_map_odom_transfo
17 true false
rm
18 output_timing false false
scan_subscriber_queue_
19 5 5
size
pub_map_scanmatch_tr
20 true false
ansform
tf_map_scanmatch_tran
21 scanmatcher_frame scanmathcer_frame
sform_frame_name
22 pub_odometry false true
23 advertise_map_service false true
137
Tabel 5.34 Parameter Konfigurasi Paket Hector Geotiff
No Parameter Default Konfigurasi Penelitian
"$(find
1 map_file_path “.”
hector_geotiff)/maps"
2 map_file_base_name “GeoTiffMap” "hector_slam_map"
3 geotiff_save_period 0.0 0.0
draw_background_
4 false true
checkerboard
5 draw_free_space_grid false true
"hector_geotiff_plugins/
6 plugins “”
TrajectoryMapWriter"
138
Gambar 5.73 Diagram Alir Proses Algoritme Extended Kalman Filter (EKF)
Pada gambar 5.26 dapat dilihat bahwa proses dari algoritme EKF melakukan
proses secara bersamaan dengan asinkron. Dimulai dari melakukan perkiraan
kesalahan asli, perkiraan asli, pengambilan input dari data IMU dan data
odometry. Semua ini dilakukan secara bersamaan sehingga pada proses
perkiraan kesalahan asli didapatkan nilai kesalahan dalam perkiraan dan
kesalahan dalam data di dapatkan dari perkiraan sebelumnya. Untuk proses
perkiraan asli data diambil dari hasil pembaharuan perkiraan yang secara default
pada awal mula proses dimulai perkiraan asli diambil dari nilai perkiraan awal
berupa covariant sensor. Langkah selanjutnya adalah mendapatkan input dari
data sensor IMU dan data odometry melalui topik yang dihasilkan oleh masing-
masing driver, lalu kemudian dilakukan proses pengukuran nilai.
Setelah itu proses berlanjut ke menghitung nilai dengan Kalman Gain untuk
memprediksi posisi dan kesalahan perkiraan dengan input kesalahan dalam
perkiraan dan kesalahan dalam data. Nilai prediksi ini dilanjutkan ke proses
menghitung perkiraan saat ini yang juga mendapatkan input dari perkiraan
sebelumnya. Setelah menghitung perkiraan saat ini, proses dilanjutkan dengan
proses memperbaharui perkiraan yang hasil akhirnya berupa output frame
transformasi EKF dan topik baru berupa /odom_combined yang didapat
berdasarkan posisi odometry dan IMU pada robot. Proses memperbaharui
perkiraan dikembalikan ke proses perkiraan asli sehingga terjadi proses recursive.
139
Setelah melakukan proses algoritme Hector SLAM dan EKF maka dari masing-
masing algoritme akan menghasilkan output. Algoritme hector SLAM
memperbaharui topik /scan sehingga bisa digunakan untuk proses occupancy
grid pada aplikasi RViz, selain itu algoritme ini juga menghasilkan frame
penggabungan transformasi map dengan odometry yang diberi nama
“map_to_odom”. Selain itu juga menghasilkan frame hector_mapping dan
hector_trajectory yang dimanfaatkan untuk membuat map. Sedangkan algoritme
EKF menghasilkan topik baru dengan nama /odom_combined, begitu pula
dengan frame transformasinya dengan nama odom_combined. Semua hasil
lokalisasi yang berupa posisi robot dan transformasinya digunakan untuk
melakukan update posisi terkini yang pada akhirnya dikirimkan ke RViz dan
output topik /map. Dengan gabungan dua algoritme ini akan menghasilkan
transformasi robot yang lebih akurat dan proses mapping akan berjalan dengan
lancar. Output topik /map tadi yang berupa peta dalam bentuk sementara akan
disimpan menjadi output file baru dengan ekstensi .yaml dan .pgm yang nantinya
digunakan pada proses navigasi. Namun hal ini berlaku jika proses map sudah
selesai, jika belum maka proses akan dikembalikan ke algoritme Hector SLAM
hingga semua area sudah di mapping.
Ini adalah keseluruhan dari proses mapping, secara garis besar dapat
diperhatikan kembali pada gambar 5.20. Output dari proses ini yang berupa file
map akan digunakan pada program selanjutnya yaitu navigasi. Pada program
navigasi terdapat pula algoritme EKF dengan proses yang sama persis, maka dari
itu pada sub proses Algoritme EKF di program navigasi tidak akan dijelaskan
karena sudah dijelaskan pada proses mapping. Konfigurasi EKF Localization dapat
dilihat pada dan tabel 5.11.
Tabel 5.36 Parameter Konfigurasi Paket EKF Localization
No Parameter Default Konfigurasi Penelitian
1 output_frame “odom” “odom”
2 base_footprint_frame “base_footprint” “base_footprint”
3 freq 30.0 100.0
4 sensor_timeout 1.0 1.0
5 odom_used true true
6 imu_used true true
7 vo_used true false
8 gps_used false false
9 debug false false
self-diagnose false false
Setelah melakukan konfigurasi EKF, sub program selanjutnya akan membahas
mengenai perancangan navigasi sebagai bentuk lanjutan dari program utama.
140
E.1.3.7 Perancangan Program Navigasi
142
Gambar 5.75 Transformasi Frame Pada Navigasi
Pada gambar 5.28 dapat terlihat bahwa setiap node dengan broadcaster
saling menghubungkan sehingga membuat diagram alir yang sejajar. Untuk
melakukan hal ini diperlukan konfigurasi static transformasi (TF) pada file
launcher di program pemetaan. Terdapat beberapa keterangan seperti
broadcaster yang merupakan node pengirim atau publisher output sebuah TF,
average rate yang merupakan rata-rata pengiriman dalam Hz Flow dimulai dari
node map, node ini didapat dari publisher node hector_mapping. Selanjutnya TF
tersebut dilanjutkan ke odom_combined yang di broadcast oleh algoritme EKF.
Selanjutnya pada input nilai putaran roda akan dibaca oleh driver hoverboard
yang menghasilkan topik baru berupa /odom yang merupakan data posisi roda
dan orientasinya. Terdapat tambahan berupa input dari file map yang disimpan
di folder tertentu dengan nama maps. File ini akan di generate oleh paket map
server dan dikirimkan ke dalam sub proses algoritme AMCL sebagai input
143
awalnya begitu pula dengan data yang didapat dari sensor RPLiDAR
menggunakan topik /scan. Sedangkan data dari sensor IMU dan odometry akan
di kirimkan ke sub proses Fusion Sensor EKF menggunakan topik /imu/data
dan /odom.
E.1.3.8 Perancangan Proses Algoritme Adaptive Monte Carlo Localization
(AMCL)
Proses algoritme AMCL digunakan untuk melakukan koreksi terhadap
lokalisasi robot. AMCL memanfaatkan file map yang sudah dibuat di program
mapping sebelumnya. Detail mengenai algoritme ini dirangkum ke dalam
diagram alir yang dapat dilihat pada gambar 5.29.
Gambar 5.76 Diagram Alir Algoritme Adaptive Monte Carlo Localization (AMCL)
Pada gambar 5.29 dapat dilihat bahwa proses diagram alir terdiri dari
beberapa proses dan seleksi kondisi. Diagram alir ini dikutip dari penelitian yang
dilakukan oleh Gang Peng dan kawan-kawan (Peng, dkk., 2018). Dalam penelitian
tersebut disebutkan bahwa untuk memecahkan masalah selama algoritma AMCL
untuk memperkirakan pose robot sebagai deviasi pusat tertimbang dari kawanan
partikel di lingkungan tidak terstruktur yang kompleks, penelitian ini
menambahkan pencocokan pemindaian yang cocok dengan pemindaian laser
dengan peta. Proses yang terjadi dalam algoritme AMCL adalah kumpulan
partikel (point cloud) yang didapat dari data laser. Kemudian dilakukan simulasi
pergerakan partikel sebagai bentuk pose estimate. Selanjutnya dilakukan
perhitungan nilai skor tiap partikel. Setelah dilakukan perhitungan skor tiap
partikel, dilakukan proses scan matching, proses ini menggunakan rumus matriks
Hessian dan gabungan dari metode Gaussian-Newton iteration untuk melakukan
144
perkiraan menggantikan model regresi non-linier. Detail mengenai proses ini
dapat dilihat pada gambar 5.30.
146
9 recovery_alpha_slow 0.0 0.0
10 recovery_alpha_fast 0.0 0.0
11 initial_pose_x 0.0 0.0
12 initial_pose_y 0.0 0.0
13 initial_pose_a 0.0 0.0
14 initial_cov_xx 0.5*0.5 meters 0.5*0.5 meters
15 initial_cov_yy 0.5*0.5 meters 0.5*0.5 meters
16 initial_cov_aa (π/12)*(π/12) rad (π/12)*(π/12) rad
17 gui_publish_rate -1.0 Hz -1.0 Hz
18 save_pose_rate 0.5 Hz 0.5 Hz
19 use_map_topic false false
20 first_map_only false false
21 selective_resampling false false
22 laser_min_range -1.0 -1.0
23 laser_max_range -1.0 -1.0
24 laser_max_beams 30 30
25 laser_z_hit 0.95 0.95
26 laser_z_short 0.1 0.1
27 laser_z_max 0.05 0.05
28 laser_z_rand 0.05 0.05
29 laser_sigma_hit 0.2 meter 0.2 meter
30 laser_lambda_short 0.1 0.1
31 laser_likelihood_max_dist 2.0 meter 2.0 meter
32 laser_model_type “likelihood_field" “likelihood_field"
33 odom_model_type “diff” “diff-corrected”
34 odom_alpha1 0.2 0.2
35 odom_alpha2 0.2 0.2
36 odom_alpha3 0.2 0.2
37 odom_alpha4 0.2 0.2
38 odom_alpha5 0.2 0.2
39 odom_frame_id “odom” “odom”
40 base_frame_id “base_link” “base_link”
147
41 global_frame_id “map” “map”
42 tf_broadcast true true
148
Gambar 5.78 Diagram Alir Sub Proses Path Planning
Cost map sangat penting karena menjadi variabel halangan untuk proses path
planning, baik itu halangan diam ataupun halangan bergerak. Pada input topik
/scan juga digunakan pada proses Local Cost Map, kurang lebih sama seperti
Global Cost Map bedanya cost map ini digunakan dalam jarak pendek dan
terbaca ketika topik /scan mendeteksi halangan. Kemudian yang terakhir adalah
input dari koordinat tujuan yang berasal dari 2D Nav Goal RViz, input ini
digunakan pada proses Move Base Goal, dimana nilai dari koordinat akan di
publish ke move base goal, sehingga move base akan meminta global path
planning untuk membuatkan jalur terpendek dari posisi robot saat ini menuju
titik koordinat yang di masukkan.
Kemudian dilakukan seleksi kondisi jika koordinat tujuan sudah ditentukan
maka akan memberikan pesan global path planning ke move base, namun jika
149
tidak maka proses akan kembali di ulang ke awal sampai nantinya koordinat
tujuan sudah ditentukan. Ketika koordinat tujuan sudah ditentukan maka akan
mengirimkan pesan global path planning ke move base, sehingga akan
memerintahkan global path planning untuk menentukan jalur terpendek
menggunakan Algoritme Dijkstra. Algoritme Dijkstra mendapatkan 3 input
sekaligus dan mengolahnya ke dalam sub proses Algoritme Dijkstra. Sebagai
tambahan, penggunaan algoritme global dapat diubah dengan mengganti node
global planner di dalam kode paket move base. Penjelasan lebih detail dan
diagram alir mengenai sub proses algoritme Dijkstra dapat dilihat pada gambar
5.32.
150
6 controller_patience 15.0 15.0
7 conservative_reset_dist 3.0 3.0
recovery_behavior_enabl
8 true true
ed
clearing_rotation_allowe
9 true true
d
10 shutdown_costmaps false false
11 oscillation_timeout 0.0 0.0
12 oscillation_distance 0.5 0.5
13 planner_frequency 0.0 0.0
14 max_planning_retries -1 0
151
17 gui_publish_rate -1.0 Hz -1.0 Hz
18 save_pose_rate 0.5 Hz 0.5 Hz
19 use_map_topic false false
20 first_map_only false false
21 selective_resampling false false
22 laser_min_range -1.0 -1.0
23 laser_max_range -1.0 -1.0
24 laser_max_beams 30 30
25 laser_z_hit 0.95 0.95
26 laser_z_short 0.1 0.1
27 laser_z_max 0.05 0.05
28 laser_z_rand 0.05 0.05
29 laser_sigma_hit 0.2 meter 0.2 meter
30 laser_lambda_short 0.1 0.1
31 laser_likelihood_max_dist 2.0 meter 2.0 meter
32 laser_model_type “likelihood_field" “likelihood_field"
33 odom_model_type “diff” “diff-corrected”
34 odom_alpha1 0.2 0.2
35 odom_alpha2 0.2 0.2
36 odom_alpha3 0.2 0.2
37 odom_alpha4 0.2 0.2
38 odom_alpha5 0.2 0.2
39 odom_frame_id “odom” “odom”
40 base_frame_id “base_link” “base_link”
41 global_frame_id “map” “map”
42 tf_broadcast true true
152
E.1.3.11 Perancangan Proses Algoritme Dijkstra
153
dibutuhkan dalam fungsi seperti, variabel open_list, close_list, parents, g_costs,
shortest_path, dan path_found. Lalu terdapat pula inisialisasi fungsi
find_neighbors yang berisikan fungsi untuk melakukan kunjungan ke delapan sisi
tetangga dan inisialisasi variabel array neighbor dan lethal_cost. Tidak lupa untuk
melakukan inisialisasi bahwa nilai free space pada cost map = open_list,
sedangkan obstacle = lethal_cost. Kemudian melakukan inisialisasi pada titik
awal atau node awal berupa indeks awal = parent node dan node awal = g_cost =
0. Selanjutnya semua inisialisasi fungsi dan variabel digabungkan ke dalam fungsi
Dijkstra.
Hal pertama yang dilakukan adalah melakukan looping dengan kondisi, hanya
akan berhenti jika array open_list bernilai kosong. Logika ini digunakan untuk
melakukan pencarian ke seluruh area free space yang ada, jadi selama masih
terdapat nilai pada array open_list maka proses pencarian akan terus berlanjut
hingga target ditemukan. Jika hasilnya true maka program akan mengubah status
node baru menjadi current_node, setelah itu dilakukan seleksi kondisi apakah
current_node merupakan titik koordinat target. Jika true maka status path_found
akan diubah menjadi True dan mengirimkan break untuk menghentikan looping.
Namun jika tidak maka akan dilakukan pencarian ke seluruh tetangga terdekat
dari current_node sebanyak 8 node berdasarkan maksimal sisi yang bisa diraih
dalam 1 node.
Setelah melakukan kunjungan ke node tetangga, maka lakukan seleksi kondisi
untuk memeriksa apakah tetangga sudah pernah dikunjungi. Jika hasilnya true,
maka akan masuk ke proses penambahan jumlah close_list berdasarkan indeks
current_node untuk mencegah mengunjungi node ini lagi dan ubah grid peta
berdasarkan indeks current_node menjadi orange. Jika hasilnya false, maka akan
lakukan proses untuk update nilai g_cost baru dengan menambahkan g_cost
tetangga + 1. Selanjutnya lakukan seleksi kondisi untuk mengetahui apakah
status neighbor atau tetangga adalah open_list, jika hasilnya false maka nilai
g_cost dan parent pada current_node akan tetap atau tidak berubah dan node
akan dimasukkan ke dalam daftar open_list yang kemudian dilanjutkan dengan
proses penambahan array indeks close_list berdasarkan posisi current_node dan
grid peta menjadi orange. Setelah itu proses akan dikembalikan ke open_list lagi
untuk melakukan pengulangan selama masih terdapat data pada open_list.
Namun jika neighbor yang baru merupakan open_list (indeksnya open_list)
maka akan memasuki seleksi kondisi lagi, yakni jika g_cost saat ini kurang dari (<)
g_cost tetangga, maka semua tetangga akan diberikan nilai g_cost yang beru
dengan melakukan update nilai g_cost tetangga = g_cost yang sudah ditambah 1.
Dengan begini tetangga yang baru dikunjungi akan mendapatkan cost+1 dan
parent status dari current_node. Setelah itu proses dilanjutkan dengan
memasukkan tetangga yang sudah di update tadi ke close_list dan ubah grid peta
menjadi orange kemudian proses kembali lagi ke pengulangan open_list. Proses
ini terus berlangsung hingga current_node mencapai titik koordinat tujuan, titik
diketahui karena pada parameter Dijkstra terdapat variabel goal yang berisi letak
koordinat dalam matriks 2 dimensi, yaitu berupa nilai koordinat x dan y. Jika hal
154
ini terjadi maka akan memasuki proses penemuan jalur dengan melakukan
perubahan status pada variabel path_found = True dan fungsi break yang mampu
menghentikan looping atau pengulangan. Perubahan status pada variabel
path_found ditujukan untuk fase rekonstruksi jalur dengan proses backtracking
atau penelusuran jalur secara terbalik dari titik awal menuju titik tujuan
berdasarkan data yang ada di close_list. Jika status path_found == false yang
artinya jalur tidak ditemukan sama sekali, maka akan melakukan skip pada fase
rekonstruksi dan mengembalikan nilai berupa output dengan pesan “path not
found”. Adapun hasil yang didapatkan akan mengembalikan nilai output berupa
variabel shortest_path proses algoritme Dijkstra telah selesai. Navigasi
membutuhkan global planner untuk menentukan jalur, berikut konfigurasi
global_planner.yaml untuk membuat path yang dapat dilihat pada dan tabel 5.15
Tabel 5.40 Parameter Konfigurasi Dijkstra Global Planner
Konfigurasi
No Parameter Default
Penelitian
1 allow_unknown true true
2 default_tolerance 0.0 0.0
3 visualize_potential false false
4 use_dijkstra true true
5 use_quadratic true true
6 use_grid_path false false
7 old_navfn_behavior false false
8 lethal_cost 253 253
9 neutral_cost 50 50
10 cost_factor 3.0 3.0
11 publish_potential true true
12 orientation_mode 0 0
13 orientation_window_size 1 1
14 outline_map true true
15 planner_window_x 0.0 0.0
16 planner_window_y 0.0 0.0
17 default_tolerance 0.0 0.0
18 publish_scale 100 100
planner_costmap_publish
19 0.0 0.0
_frequency
155
E.1.3.12 Perancangan Proses Algoritme Dynamic Local Approach (DWA)
156
bergerak, proses ini menggunakan kisaran dari kecepatan robot maksimum dan
minimumnya menggunakan rumus:
V m ={ ν ∈ [V min , V max ] , ω ∈ [ ω min , ω max ] }. (5.2)
Untuk setiap kecepatan sampel, lakukan simulasi maju dari kondisi robot saat
ini untuk memprediksi apa yang akan terjadi jika kecepatan sampel diterapkan
untuk beberapa waktu (pendek). Setelah melakukan pengambilan sampel
kecepatan, dilakukan proses untuk menghasilkan jalur lintasan. Dilakukan
pemantauan dengan seleksi kondisi, apakah akan terjadi tabrakan dengan
rintangan. Jika hasilnya true, maka diperlukan hasil jalur lintasan yang baru
menggunakan fungsi hasilkan jalur lintasan. Fungsi ini menggunakan fungsi
standar DWA dengan rumus:
G ( ν , ω )=γ × vel ( ν , ω ) +α ×h eading ( ν , ω ) + β × distant ( ν ,ω ) (5.3)
Fungsi ini melakukan perhitungan kemungkinan ke setiap sudut dengan arah
lintasan yang berbeda-beda. Proses ini melakukan evaluasi (skor) setiap lintasan
yang dihasilkan dari simulasi ke depan, menggunakan metrik yang
menggabungkan karakteristik seperti: kedekatan dengan rintangan, kedekatan
dengan tujuan, kedekatan dengan jalur global, dan kecepatan. Ilustrasi mengenai
proses ini dapat dilihat pada gambar 5.35.
157
Penelitian
1 acc_lim_x 2.5 10
2 acc_lim_y 2.5 0
3 acc_lim_th 3.2 3.4
4 max_vel_trans 0.55 1.0
5 min_vel_trans 0.1 0.05
6 max_vel_x 0.55 0.7
7 min_vel_x 0.0 0.2
8 max_vel_y 0.1 0.0
9 min_vel_y -0.1 0.0
10 max_rot_vel 1.0 0.5
11 min_rot_vel 0.4 0.2
12 yaw_goal_tolerance 0.05 0.4
13 xy_goal_tolerance 0.10 0.4
14 latch_xy_goal_tolerance false false
15 sim_time 1.7 1.7
16 sim_granularity 0.025 0.025
17 vx_samples 3 3
18 vy_samples 10 10
19 vth_samples 20 20
20 controller_frequency 20.0 20.0
21 path_distance_bias 32.0 32.0
22 goal_distance_bias 24.0 24.0
23 occdist_scale 0.01 20
24 forward_point_distance 0.325 0.325
25 stop_time_buffer 0.2 0.2
26 scaling_speed 0.25 0.25
27 max_scaling_factor 0.2 0.2
28 publish_cost_grid false false
29 oscillation_reset_dist 0.05 0.25
30 prune_plan true true
31 controller_frequency 0.0 5.0
158
32 recovery_behavior_enabled false true
33 conservative_reset_dist 0.0 0.2
159
komponen sekaligus tempat barang akan ditaruh. Dokumentasi mengenai hasil
pembuatan chassis badan robot dari kayu dapat dilihat pada gambar 5.36.
160
Gambar 5.84 Dokumentasi Pencetakan Desain Dengan 3D Printer
Semua bagian dirancang untuk dicetak pada printer 3D dengan teknologi
FFM/FDM. Volume cetak setidaknya minimal harus berukuran 300mm x 300mm
x 200mm. Gambar 5.37 merupakan gambar mesin 3D print yang digunakan
untuk mencetak bagian mainboard robot. Bahan yang digunakan untuk
mencetak adalah filamen 3D dengan tipe PETG sebanyak 2 kilogram. PETG
memiliki titik leleh reaksi lebih tinggi dari PLA sehingga dapat digunakan di
bawah terik matahari (titik leleh terendah 70-80 derajat Celsius) dan titik leleh
hingga ke bentuk cairan juga cukup tinggi walau tidak setinggi ABS (titik leleh
bentuk cair berada pada 230-240 derajat Celsius. Titik ini digunakan sebagai
acuan minimal panas yang dibutuhkan oleh 3D print untuk mencairkan PETG.
Penggunaan PETG juga ramah lingkungan dan tidak beracun serta aman jika
tertelan (tidak mengandung toxic, murni plastik dan campuran bahan penguat
lainnya akan tetapi tetap tidak boleh dimakan). ABS memiliki sifat beracun dan
berbahaya saat melakukan 3D print tanpa penutup karena menghasilkan gas
buang yang berbahaya jika terhirup. Detail mengenai bagian yang dicetak dapat
dilihat pada tabel 5.17.
Tabel 5.42 Daftar Bagian Yang Dicetak
No Nama bagian Berat Durasi Jumlah
1 Motor lower 800 gram 96 jam 1
2 Motor upper 486 gram 52 jam 1
3 Wheel arch 406 gram 36 jam 2
4 Sensor base 90 gram 8 jam 1
5 Upper cover 80 gram 7 jam 1
6 Motor clamp 25 gram 2 jam 2
7 Motor cover 48 gram 5 jam 1
161
Sebelum melakukan cetak, desain yang sudah dibuat harus di konversi ke file
yang dapat dibaca oleh 3D printer menggunakan aplikasi Creality Slicer. Di dalam
aplikasi Creality Slicer terdapat banyak pengaturan yang dapat diubah
sedemikian rupa mengikuti jenis filamen yang digunakan. Pengaturan yang
digunakan untuk mencetak daftar bagian pada tabel 5.12 menggunakan aturan
sebagai berikut:
0.2 mm Layer Height
0.4 mm Nozzle
4 Bottom and 4 Top Layer
4 Perimeter
18% Infill
Suhu Nozzle 240o C
Suhu Plat/Alas 70o C
Speed printing 100%
Hasil cetak 3D print digabungkan satu sama lainnya menggunakan brass nut.
Lubang brass nut sudah tersedia pada desain 3D dan semua lubang yang ada
harus dipasangi brass nut sebagai dudukan yang mengunci baut. Untuk
memasang brass nut diperlukan tambahan mesin bor listrik dan solder. Brass nut
sering digunakan pada kayu sebagai dudukan dari baut agar tidak merusak
sekaligus mengunci baut. Teknik memasangnya adalah dengan menambahkan
area permukaan lubang dengan mata bor yang ukurannya sebesar lubang, ini
dilakukan agar ketika solder memanaskan brass nut dan dimasukkan ke dalam,
sisa filamen yang terjebak di dalam lubang tidak keluar dari lubang brass nut, hal
ini dapat merusak brass nut karena disusupi oleh filamen. Dokumentasi dari
pemasangan brass nut dapat dilihat pada gambar 5.38.
162
kayu menggunakan baut dan mur lock. Terkait jumlah baut dan mur yang
dibutuhkan dapat dilihat pada tabel 5.18.
Tabel 5.43 Mur, Baut, Dan Sekrup Yang Digunakan
No Nama Jumlah Keterangan
Knurled brass nut M3 - dudukan baut M3 di dalam
1 min. 20
tinggi 4mm bagian 3D
Knurled brass nut M4 - dudukan yang sambung wheel
2 min. 20
tinggi 8mm arch dengan motor lower
mengunci sensor RPLiDAR
3 Cylinder screw M2 x 5 4
dengan bagian sensor_base
mengunci bagian depan mow
4 Cylinder screw M3 x 10 2
upper
mengunci bagian belakang
5 Cylinder screw M3 x 32 2
mow upper
mengunci arch wheel ke motor
6 Cylinder screw M4 x 16 8
lower
mengunci motor lower dengan
7 Cylinder screw M5 x 25 10
chassis kayu
mengunci caster wheel dengan
8 Cylinder screw M5 x 40 8
chassis kayu
mengunci motor hoverboard di
9 Cylinder screw M8 x 30 4
dalam motor lower
mengunci bagian motor upper
10 Bolt Screw M3 x 16 2
ke motor lower sisi depan
mengunci bagian upper cover
11 Bolt Screw M3 x 20 4
dengan motor upper
mengunci bagian motor upper
12 Bolt Screw M3 x 30 1
ke motor lower sisi belakang
mengunci bagian motor upper
13 Bolt Screw M3 x 40 2
ke motor lower sisi belakang
menahan bagian bawah chassis
14 Angle Bracket Clips 3
kayu bagian tengah
mengunci bracket dengan
15 Bolt Screw Stainless 6
chassis kayu
16 Lock Nuts M4 8 menjepit motor clamp
17 Lock Nuts M5 30 menjepit bagian baut M5
163
18 Washers M5 20 alas dari screw dan nuts
164
Gambar 5.88 Implementasi Prototype Sistem Robot Tampak Atas
Hasil akhir dari implementasi sistem adalah sebuah prototype robot
pengantar barang dengan dua roda penggerak dan satu roda statis. Seperti
dalam perancangannya bahwa semua komponen ditelakan di dalam chassis
badan yang terbuat dari kayu. Kemudian bagian depan robot ditambahkan
dudukan untuk menaruh sensor RPLiDAR.
165
Gambar 5.89 Perangkat Hoverboard Yang Digunakan
Pembuatan sistem ini dimulai dengan melakukan percobaan menggunakan
motherboard dengan komputer personal terlebih dahulu tanpa menggunakan
mikro komputer, Jetson Nano. Tujuan dari percobaan ini adalah untuk
memastikan bahwa roda dapat berputar dengan kendali dari output komputer.
Selain memastikan roda dapat berputar, dalam implementasinya proses ini
digunakan untuk memasangkan firmware baru ke dalam motherboard.
166
Seperti yang sudah dijelaskan dalam perancangan perangkat keras sistem,
bahwa sistem mainboard/penggerak robot terdiri dari motherboard dan baterai
yang terhubung dengan komputer menggunakan FTDI mini USB. Hasil akhir dari
implementasi sistem penggerak robot dapat dilihat pada gambar 5.44.
167
baterai 10S2P yang memiliki voltase hingga 42 volt. Penjelasan lebih lanjut
mengenai penyambungan kabel dan port akan dijelaskan pada tabel 5.20.
Tabel 5.45 Pemasangan Kabel Perangkat Keras Sistem Penggerak
Perangkat Keras Pin Tujuan Pin
Phase A Phase A MCU
Phase B Phase B MCU
Phase C Phase C MCU
HALL A HALL A
Motor BLDC Motherboard
HALL B HALL B
HALL C HALL C
GND GND
VCC VCC
PB10/TX/USART3 RX
Motherboard PB11/RX/USART3 FTDI mini USB TX
GND GND
RX
FTDI mini USB TX Jetson Nano Port USB
GND
36 volt VCC XT60 VCC
Baterai Li-Ion Motherboard
GND XT60 GND
Power Bank Port USB Jetson Nano Port Mikro USB
168
Gambar 5.92 Implementasi Sistem Persepsi Robot Dengan Sensor
Pada gambar 5.45 dapat dilihat bahwa sensor RPLiDAR berdiri di atas
dudukan sensor dan tiang penyangga dengan tinggi 50 cm dari lantai yang
terhubung langsung dengan Jetson Nano menggunakan kabel mikro USB dan
adapter USB yang tergantung di tiang penyangga. Sedangkan sensor IMU persis
terletak di tengah robot yang terhubung langsung dengan Jetson Nano
menggunakan kabel jumper. Sensor RPLiDAR menggunakan protokol komunikasi
serial menggunakan UART, sedangkan sensor IMU menggunakan protokol
komunikasi serial menggunakan I2C. Penjelasan lebih lanjut mengenai
penyambungan kabel dan port akan dijelaskan pada tabel 5.21.
Tabel 5.46 Pemasangan Kabel Sistem Sensor
Perangkat Keras Pin Tujuan Pin
GND GND
TX TX
RX RX
RPLiDAR V5 UART TTL Adapter V5
GND GND
MOTOCLT DTR
VMOTO VCC
UART Adapter Mikro USB Jetson Nano Port USB
VCC 3.3V
GND GND
GY 521 IMU Jetson Nano
SCL GPIO (SCL)
SDA GPIO 3 (SDA)
169
E.2.3 Implementasi Perangkat Lunak
Implementasi perangkat lunak merupakan bagian dari merealisasikan
algoritma pada sistem dari bab perancangan perangkat lunak sebelumnya.
Implementasi ini akan meliputi realisasi dari persiapan awal, program utama dan
sub proses dari algoritma yang akan dijelaskan pada sub bab berikut.
E.2.3.1 Implementasi Persiapan Awal Motherboard
Implementasi persiapan awal motherboard ditujukan untuk melakukan
proses flashing firmware yang sudah diubah ke dalam motherboard dengan
menggunakan adapter berupa STLink V2. Urutan untuk melakukan proses ini
sesuai dengan yang sudah dijelaskan sebelumnya pada perancangan perangkat
lunak. Pin firmware pada motherboard dihubungkan terlebih dahulu dengan
STLink menggunakan kabel jumper dengan susunan pin yang diperlihatkan pada
gambar 5.16. Setelah selesai pemasangan kabel, selanjutnya adalah melakukan
koneksi dengan komputer personal via STMCube dengan klik tombol “Connect”
hingga status berubah menjadi “Connected” dan tombol berubah menjadi
“Disconnect” kemudian uncheck value RDP pada tab Option Bytes dan klik apply.
Koneksi berhasil jika pesan yang muncul seperti pada gambar 5.46.
170
Tabel 5.47 Kode Program Konfigurasi Firmware Motherboard Hoverboard
Kode Program
No
hoverboard-firmware-hack-FOC/Inc/config.h
12 #if !defined(PLATFORMIO)
13 //#define VARIANT_ADC
14 #define VARIANT_USART
15 //#define VARIANT_NUNCHUK
16 //#define VARIANT_PPM
17 //#define VARIANT_PWM
18 //#define VARIANT_IBUS
19 //#define VARIANT_HOVERCAR
20 //#define VARIANT_HOVERBOARD
21 //#define VARIANT_TRANSPOTTER
22 //#define VARIANT_SKATEBOARD
23 #endif
... ...
176 #define INACTIVITY_TIMEOUT 30
177 #define BEEPS_BACKWARD 0
178 #define ADC_MARGIN 100
179 #define ADC_PROTECT_TIMEOUT 100
180 #define ADC_PROTECT_THRESH 200
181 //#define AUTO_CALIBRATION_ENA
... ...
310 // ############ VARIANT_USART SETTINGS ############
311 #ifdef VARIANT_USART
312
313 //#define CONTROL_SERIAL_USART2 0
314 //#define FEEDBACK_SERIAL_USART2
315
316 // #define SIDEBOARD_SERIAL_USART2 0
317 // #define CONTROL_SERIAL_USART2 0
318 // #define FEEDBACK_SERIAL_USART2
319
320 // #define SIDEBOARD_SERIAL_USART3 0
321 #define CONTROL_SERIAL_USART3 0
322 #define FEEDBACK_SERIAL_USART3
323
324 // #define DUAL_INPUTS
325 #define PRI_INPUT1 3, -1000, 0, 1000, 0
326 #define PRI_INPUT2 3, -1000, 0, 1000, 0
327 #ifdef DUAL_INPUTS
328 #define FLASH_WRITE_KEY 0x1102
329 /// #define SIDEBOARD_SERIAL_USART2 1
330 /// #define SIDEBOARD_SERIAL_USART3 1
331 #define AUX_INPUT1 3, -1000, 0, 1000, 0
332 #define AUX_INPUT2 3, -1000, 0, 1000, 0
333 #else
334 #define FLASH_WRITE_KEY 0x1002
335 #endif
336
337 // #define SUPPORT_BUTTONS_LEFT
338 // #define SUPPORT_BUTTONS_RIGHT
339 #endif
340 // ############ END OF VARIANT_USART SETTINGS ############
171
Tabel di atas merupakan kode program untuk mengonfigurasi firmware
motherboard hoverboard yang berisikan potongan-potongan baris yang
pentingnya saja. Jumlah baris kode pada file config.h adalah 772, akan tetapi
hanya beberapa baris kode saja yang diubah tetapi mampu mempengaruhi
keseluruhan kode. File config.c merupakan file library menggunakan bahasa
pemrograman C. Di bawah ini penjelasan mengenai kode program konfigurasi
firmware motherboard hoverboard.
1. Baris ke-12, merupakan if preprocessor dengan kondisi jika macro
PLATFORMIO tidak terdefinisi maka kondisi true, jika tidak maka false.
Baris ini bertujuan agar proses flashingdapat menggunakan extensi
PlatformIO, sehingga melakukan upload bisa dilakukan dengan mudah.
2. Baris ke-13 (non aktif/dikomentar), merupakan macro define varian
untuk input ADC. Jika ingin melakukan kontrol menggunakan sensor
potensiometer maka baris ini di aktifkan.
3. Baris ke-14, merupakan macro define varian untuk input menggunakan
serial control USART. Jika ingin melakukan kontrol menggunakan
komputer melalui RX/TX maka baris ini harus di aktifkan. Penelitian ini
menggunakan kontrol dari USART, maka dari itu baris ini di aktifkan
dengan batalkan komentar.
4. Baris ke-15 hingga 22 (non aktif/dikomentar), merupakan macro define
varian untuk input dengan mode-mode lainnya, setiap dari setiap baris
kode memiliki sinyalnya masing-masing namun karena Penelitian ini
menggunakan USART maka kita berfokus pada baris ke 14 saja.
5. Baris ke-23, merupakan akhir atau penutup dari if preprocessor. Jika #if
preprocessor sudah dilakukan maka wajib mengakhirinya menggunakan
#endif.
6. Baris ke-176, merupakan INACTIVITY_TIMEOUT, yaitu ketika motor tidak
bergerak sama define macro sekali setelah motherboard menyala maka
motherboard akan mati. Nilai 30 berarti baru akan shutdown ketika 30
menit tidak bergerak.
7. Baris ke-177, merupakan define macro BEEPS_BACKWARD, yaitu ketika
roda mundur maka akan berbunyi. Nilai 0 berarti false, dan beep tidak
akan berbunyi.
8. Baris ke-178 - 180, merupakan define macro ADC_MARGIN, yaitu min dan
max menggunakan input ADC.
9. Baris ke-179, merupakan define macro ADC_PROTECTED_TIMEOUT, yaitu
timeout yang digunakan untuk proteksi dari kesalahan input ADC.
10. Baris ke-180, merupakan define macro ADC_PROTECT_THRESH, yaitu
threshold yang dibutuhkan untuk proteksi input ADC. ADC perlu ada
proteksi karena nilainya yang cepat dan sensitif untuk berubah.
172
11. Baris ke-181 (non aktif/dikomentar), merupakan define
AUTO_CALIBRATION_ENA, yaitu ketika hoverboard baru menyala maka
akan melakukan auto kalibrasi namun sebelumnya harus menekan
tombol power dengan waktu yang lama. Macro ini tidak dibutuhkan jadi
non aktifkan atau dikomentar saja.
12. Baris ke-310 hingga 340, merupakan konfigurasi untuk menggunakan
USART3 (kabel sensor motherboard kanan) sebagai input RX/TX.
Komentar semua define yang berhubungan dengan USART2 atau
SIDEBOARD, cukup aktifkan baris CONTROL_SERIAL_USART3 0 dan
FEEDBACK_SERIAL_USART3. Masing-masing fungsinya untuk melakukan
kontrol dan menerima feedback, sehingga mampu menerima sinyal
cmd_vel dan membaca topik odometry.
Setelah melakukan konfigurasi file config.h sesuai dengan proses yang ada
pada perancangan perangkat lunak, langkah selanjutnya adalah melakukan
flashing. Namun sebelum melakukan flashing, kita harus mengonfigurasi file
platformio.ini. Batalkan komentar pada baris ke-13 yang berisi default_envs =
VARIANT_USART, hal Ini agar secara otomatis platform io melakukan compile dan
upload pada varian USART. Jika tidak di batalkan komentar, maka semua varian
akan di compile sekaligus. Jika sudah maka langkah selanjutnya adalah compile
keseluruhan firmware dengan klik ikon check pada bagian status bar. Jika sudah
maka hasil compile disimpan pada directory .pio/build/VARIANT_USART. Langkah
selanjutnya adalah melakukan upload file biner dengan klik ikon panah ke kanan
pada status bar, pastikan motherboard masih terkoneksi dengan komputer
personal. Jika sudah maka akan muncul pesan sukses di terminal Visual Studio
Code seperti yang terlihat pada gambar 5.47.
Gambar 5.95 Implementasi Hasil Remote Access Ke Jetson Nano via VNC
Berhasil
Setelah berhasil melakukan remote access ke VNC seperti yang terlihat pada
gambar 5.48, maka langkah selanjutnya adalah konfigurasi port USB dan driver
sensor. Konfigurasi port USB berguna untuk memudahkan penamaan dan
penggunaannya. Sama halnya dengan sistem operasi Windows, di Linux setiap
USB yang memiliki data di dalamnya akan memiliki nama port masing-masing,
yaitu ttyUSB. Namun permasalahannya jika port yang di masukkan lebih dari
174
satu, maka akan menyulitkan proses penelitian karena perlu mengubah kode
launch ketika USB FTDI dengan USB RPLiDAR tertukar. Selain itu jika tidak
memberikan penamaan khusus, maka kita harus terus menuliskan ulang hak
akses setiap port USB baru ditancapkan. Dengan memberikan alias pada setiap
port USB, maka masalah ini dapat diselesaikan dan proses penelitian menjadi
lebih mudah. Berikut ini langkah-langkah melakukan konfigurasi port USB:
1. Pertama hubungkan RPLiDAR dan FTDI pada port USB Jetson Nano. Pada
terminal Jetson Nano periksa apakah perangkat terbaca dengan mengetik
perintah:
$ ls /dev/ttyUSB*
2. Selanjutnya berikan hak akses read, write, dan execute pada kedua port
dengan mengetikan perintah:
$ sudo chmod 666 /dev/ttyUSB*
3. Setelah itu periksa idVender dan idProduct dengan mengetik perintah pada
terminal Jetson Nano kemudian catat output tersebut pada text editor.
$ udevadm info -a -n /dev/ttyUSB0
$ udevadm info -a -n /dev/ttyUSB1
4. Selanjutnya adalah membuat dan mengedit file udev rules dengan mengetik
perintah:
$ sudo gedit /etc/udev/rules.d/10-local.rules
Kemudian tuliskan konfigurasi berikut pada text editor gedit serta sesuaikan
idVendor dan idProduct dengan output yang sudah disimpan tadi.
ACTION=="add", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001",
SYMLINK+="ttyRPLIDAR"
ACTION=="add", ATTRS{idVendor}=="1001", ATTRS{idProduct}=="2002",
SYMLINK+="ttyHOVER"
Fungsi dari konfigurasi di atas adalah untuk menambahkan alias dengan
nama ttyRPLIDAR dan ttyHOVER pada rules udev, sehingga setiap port sudah
tetap pemiliknya tanpa perlu tertukar.
5. Jika sudah simpan file tersebut dan restart Jetson Nano. Setelah Jetson Nano
sudah siap, kita bisa melakukan pemeriksaan pembacaan USB lagi untuk
memeriksa apakah proses alias sudah berjalan dengan lancar dengan
mengetik
$ ls /dev/ttyUSB*
175
Gambar 5.96 Implementasi Hasil Konfigurasi Port USB
Pada gambar 5.49 jika ttyHOVER dan ttyRPLIDAR sudah muncul, artinya
proses konfigurasi port sudah berhasil dan selesai.
Setelah menyelesaikan konfigurasi VNC dan port USB, maka konfigurasi
selanjutnya adalah melakukan perubahan-perubahan kecil pada beberapa file
driver sensor. Namun sebelum itu kita harus melakukan pembuatan workspace
pada Jetson Nano dengan cara membuat baru folder dengan nama “catkin_ws”
di directory /home atau ~. Kemudian dilanjutkan dengan membuat folder dengan
nama “src” di dalam directory /catkin_ws.
177
Tabel 5.49 Kode Program Konfigurasi Launcher Hoverboard
Kode Program
No
hoverboard_driver/hoverboard.launch
1 <launch>
2 <param name="port" type="str" value="/dev/ttyHOVER"/>
3
4 <rosparam file="$(find
hoverboard_driver)/config/hardware.yaml" command="load"/>
5 <rosparam file="$(find
hoverboard_driver)/config/controllers.yaml"
command="load"/>
6 <node name="hoverboard_driver" pkg="hoverboard_driver"
type="hoverboard_driver" output="screen"/>
7 <node name="controller_spawner" pkg="controller_manager"
type="spawner" respawn="false" output="screen"
args="hoverboard_joint_publisher
hoverboard_velocity_controller" />
8
9 </launch>
Tabel di atas merupakan kode program untuk mengonfigurasi launcher
hoverboard. Berikut ini penjelasan mengenai Kode Program Konfigurasi Launcher
Hoverboard.
1. Baris ke-1, merupakan open tag tipe launch file.
2. Baris ke-2, merupakan inisialisasi nilai parameter port = /dev/ttyHOVER.
3. Baris ke-4 dan ke-5, merupakan inisialisasi parameter ros dengan
pengambil nilai parameter yang ada pada file hardware.yaml dan
controllers.yaml.
4. Baris ke-6, merupakan inisialisasi node hoverboard_driver yang diambil
dari paket hoverboard_driver pada sub folder include.
5. Baris ke-7, merupakan inisialisasi node controller_spawner pada paket
controller manager dengan nilai argumen di ambil dari controllers.yaml
berupa hoverboard_join_publisher dan hoverboard_velocity_controller.
Di dalam hoverboard_velocity_controller memanggil node
diff_drive_controller untuk mengendalikan roda.
6. Baris ke-9, merupakan penutup tak tipe launch file.
Proses selanjutnya adalah install driver RPLiDAR ROS ke dalam workspace.
Caranya adalah dengan download file driver rplidar-ros driver pada link GitHub
berikut https://github.com/robopeak/rplidar_ros dan letakkan di dalam file src,
atau bisa dengan mengetikan perintah:
$ git clone https://github.com/robopeak/rplidar_ros
Ubah nama folder tersebut menjadi “rplidar_ros” dan ubah juga file
RPLiDAR.launch pada path “rplidar_ros/launch/rplidar.launch” seperti yang
dapat dilihat pada tabel 5.25. Konfigurasi ini untuk mengubah nilai
“/dev/ttyUSB0” menjadi “/dev/ttyRPLIDAR " seperti nama alias yang sudah
dibuat sebelumnya
178
Tabel 5.50 Kode Program Konfigurasi Launcher RPLiDAR
Kode Program
No
rplidar_ros/launch/rplidar.launch
1 <launch>
2 <node name="rplidarNode" pkg="rplidar_ros"
type="RPLiDARNode" output="screen">
3 <param name="serial_port" type="string"
value="/dev/ttyRPLIDAR"/>
4 <param name="serial_baudrate" type="int"
value="115200"/><!--A1/A2 -->
5 <param name="frame_id" type="string"
value="laser"/>
6 <param name="inverted" type="bool"
value="false"/>
7 <param name="angle_compensate" type="bool"
value="true"/>
8 </node>
9 </launch>
Tabel di atas merupakan kode program untuk mengonfigurasi launcher driver
RPLiDAR. Berikut ini penjelasan mengenai Kode Program Konfigurasi Launcher
RPLiDAR.
1. Baris ke-1, merupakan open tag tipe launch file.
2. Baris ke-2, merupakan inisialisasi node rplidarNode pada paket
rplidar_ros
3. Baris ke-3, merupakan inisialisasi nilai parameter serial port =
/dev/ttyRPLIDAR.
4. Baris ke-4, merupakan inisialisasi parameter serial_baudrate dengan nilai
baud rate sebesar 115200.
5. Baris ke-5, merupakan inisialisasi parameter nama frame pada RPLiDAR,
yaitu “laser”
6. Baris ke-6, merupakan parameter inverted yang artinya jika RPLiDAR
dalam kondisi terbalik/digunakan terbalik, maka nilai inverted harus true.
Namun karena posisi RPLiDAR normal maka dari itu value false
7. Baris ke-7, merupakan parameter angle_compensate untuk
compensation sudut karena prinsip message pemindaian ros dengan
sudut yang ditingkatkan akan tetap.
8. Baris-8 dan ke-9, merupakan tag penutup dari node dan launch
Proses selanjutnya adalah install driver sensor IMU dan melakukan kalibrasi.
Caranya adalah dengan download file driver mpu6050 driver dan i2c driver pada
link GitHub berikut:
https://github.com/Brazilian-Institute-of-Robotics/mpu6050_driver dan
https://github.com/Brazilian-Institute-of-Robotics/i2c_device_ros, letakkan di
dalam file src, atau bisa dengan mengetikan perintah:
$ git clone https://github.com/Brazilian-Institute-of-Robotics/mpu6050_driver
179
$ git clone https://github.com/Brazilian-Institute-of-Robotics/i2c_device_ros
Kemudian ubah file mpu6050_node.cpp pada path “mpu6050_driver/src/
mpu6050_node.cpp” dan ubah baris ke 39 dari "imu/data_raw" menjadi
"imu/data" seperti yang dapat dilihat pada tabel 5.26.
Tabel 5.51 Kode Program Konfigurasi Nama Topik Output IMU
Kode Program
No
mpu6050_driver/src/ mpu6050_node.cpp
38 void MPU6050Node::init() {
39 mpu_data_pub_ =
nh_.advertise<sensor_msgs::Imu>("imu/data", 1);
40
41 this->loadParameters();
42
43 mpu6050_.setAddress(static_cast<uint8_t>(mpu6050_addr_));
44 mpu6050_.initialize(i2c_bus_uri_);
45 mpu6050_.setDLPFMode(static_cast<uint8_t>(4));
46 mpu6050_.setIntDataReadyEnabled(true);
47 this->setMPUOffsets();
48
49 ROS_INFO("MPU6050 Node has started");
50 }
Tabel di atas merupakan kode program untuk mengonfigurasi Nama Topik
Output IMU. Berikut ini penjelasan mengenai Kode Program Konfigurasi Nama
Topik Output IMU.
1. Baris ke-38, merupakan inisialisasi void init() dalam kelas MPU6050Node
2. Baris ke-39, merupakan call function advertise dengan parameter
“imu/data dan nilai 1.
3. Baris ke-41, merupakan call function loadParameters
4. Baris ke-43 hingga ke-50, merupakan inisialisasi objek mpu6050_ seperti
menentukan alamat, inisialisasi alamat i2c, menentukan DLPMode,
inisialisasi fungsi setIntDataReadyEnable bernilai true dan mencetak ke
terminal “MPU6050 Node has started”
Selanjutnya kita akan berpindah pada pemasangan modul atau paket yang
digunakan pada program pemetaan, yaitu Hector SLAM. Untuk mendapatkan
library ini, penulis menggunakan library yang dikembangkan oleh Technical
University of Darmstadt, German. Library ini digabungkan ke dalam paket yang
diberi nama Hector. Paket atau modul ini dapat di download pada link GitHub
berikut: https://github.com/tu-darmstadt-ros-pkg/hector_slam untuk
menghindari perbedaan versi dari yang digunakan pada penelitian ini. Copy
folder hector_slam ke dalam folder src atau bisa juga dengan menggunakan git
clone:
$ git clone https://github.com/tu-darmstadt-ros-pkg/hector_slam
Setelah itu, lakukan perubahan pada beberapa file yang ada di folder
hector_slam terutama file mapping_default.launch pada directory
180
“hector_slam/hector_mapping/launch/mapping_default.launch, dengan kode
yang ada pada tabel 5.27.
Tabel 5.52 Kode Program Launcher Mapping Default
Kode Program
No
hector_slam/hector_mapping/launch/mapping_default.launch
1 <?xml version="1.0"?>
2
3 <launch>
4 <arg name="tf_map_scanmatch_transform_frame_name"
default="scanmatcher_frame"/>
5 <arg name="base_frame" default="base_link"/>
6 <arg name="odom_frame" default="odom_combined"/>
7 <arg name="pub_map_odom_transform" default="false"/>
8 <arg name="scan_subscriber_queue_size" default="5"/>
9 <arg name="scan_topic" default="scan"/>
10 <arg name="map_size" default="2048"/>
11 <!-- New -->
12 <arg name="pub_odometry" default="true"/>
13
14 <node pkg="hector_mapping" type="hector_mapping"
name="hector_odom" output="screen">
15
16 <!-- Frame names -->
17 <param name="map_frame" value="map" />
18 <param name="base_frame" value="$(arg base_frame)" />
19 <param name="odom_frame" value="$(arg odom_frame)" />
20
21 <!-- Tf use -->
22 <param name="use_tf_scan_transformation"
value="true"/>
23 <param name="use_tf_pose_start_estimate"
value="false"/>
24 <param name="pub_map_odom_transform" value="$(arg
pub_map_odom_transform)"/>
25 <!-- New -->
26 <param name="pub_odometry" value="$(arg
pub_odometry)"/>
27
28 <!-- Map size / start point -->
29 <param name="map_resolution" value="0.050"/>
30 <param name="map_size" value="$(arg map_size)"/>
31 <param name="map_start_x" value="0.5"/>
32 <param name="map_start_y" value="0.5" />
33 <param name="map_multi_res_levels" value="2" />
34
35 <!-- Map update parameters -->
36 <param name="update_factor_free" value="0.4"/>
37 <param name="update_factor_occupied" value="0.9" />
38 <param name="map_update_distance_thresh" value="0.4"/>
39 <param name="map_update_angle_thresh" value="0.06" />
40 <param name="laser_z_min_value" value = "-1.0" />
41 <param name="laser_z_max_value" value = "1.0" />
42
43 <!-- Advertising config -->
44 <param name="advertise_map_service" value="true"/>
45 <param name="scan_subscriber_queue_size" value="$(arg
181
scan_subscriber_queue_size)"/>
46 <param name="scan_topic" value="$(arg scan_topic)"/>
<param name="tf_map_scanmatch_transform_frame_name"
47 value="$(arg tf_map_scanmatch_transform_frame_name)" />
</node>
48 </launch>
49
Tabel di atas merupakan kode program untuk mengonfigurasi file mapping
pada hector mapping. Berikut ini penjelasan mengenai Kode Program Launcher
Mapping Default.
1. Baris ke-1 hingga ke-3, merupakan open tag untuk format launch dengan
define xml version dan open tag <launch>
2. Baris ke-4 hingga ke-12, merupakan inisialisasi argumen yang akan
digunakan nantinya pada parameter. Argumen pada launch file persis
seperti sebuah variabel pada bahasa pemrograman, yaitu penyimpanan
sementara yang nilaunya akan digunakan pada baris berikutnya.
Keuntungan menggunakan tag arg atau argumen pada launch file ada
kode yang rapi dan memudahkan jika menginginkan perubahan value
karena tidak perlu mencari setiap parameter pada node atau rosparam.
3. Baris ke-14 hingga ke-50, merupakan inisialisasi node hector_mapping
dengan nilai parameter menggunakan variabel argumen yang sudah
ditentukan sebelumnya.
4. Baris ke-53, merupakan penutup tag launch
Setelah selesai dengan konfigurasi file launcher mapping_default.launch,
proses berlanjut pada konfigurasi file tutorial.launch pada directory
“hector_slam/hector_slam_launch/launch/tutorial.launch”. File ini akan
memanggil file mapping_default.launch yang sebelumnya sudah di konfigurasi,
dan mengaktifkan beberapa node pendukung lainnya seperti geotiff mapping
untuk menyimpan secara sementara file map dan pergerakan robot. Di dalam
geotiff juga memanggil node trajectory_server, namun saat ini kita akan berfokus
pada mengubah file tutorial.launch menjadi file tutorial.launch dengan kode
program yang terdapat pada tabel 5.28.
Tabel 5.53 Kode Program Percobaan Launcher pada Hector SLAM Launch
Kode Program
No
hector_slam/hector_slam_launch/launch/map_tutorial.launch
1 <?xml version="1.0"?>
2
3 <launch>
4
5 <arg name="geotiff_map_file_path" default="$(find
hector_geotiff)/maps"/>
6
7 <param name="/use_sim_time" value="true"/>
8
9 <node pkg="rviz" type="rviz" name="rviz" args="-d $(find
hector_slam_launch)/rviz_cfg/mapping_demo.rviz"/>
10
182
11 <include file="$(find
hector_mapping)/launch/mapping_default.launch"/>
12
13 <include file="$(find
hector_geotiff_launch)/launch/geotiff_mapper.launch">
14 <arg name="trajectory_source_frame_name"
value="scanmatcher_frame"/>
15 <arg name="map_file_path" value="$(arg
geotiff_map_file_path)"/>
16 </include>
17
18 </launch>
Tabel di atas merupakan kode program untuk mengonfigurasi file
tutorial.launch pada hector slam launch. Berikut ini penjelasan mengenai Kode
Program Launcher Map Hector pada AMR Launch.
1. Baris ke-1 hingga ke-3, merupakan open tag untuk format launch dengan
define xml version dan open tag <launch>.
2. Baris ke-5, merupakan argumen dengan nama geotiff_map_file_path
untuk parameter letak map sementara yang dihasilkan oleh hector
mapping.
3. Baris ke-7, merupakan parameter jika menggunakan simulasi atau dunia
3D. Berikan value false jika robot berada di dunia nyata dan true jika
bermain dengan simulasi.
4. Baris ke-9, merupakan node yang digunakan untuk memanggil aplikasi
RViz. Node ini diberikan tambahan argumen berupa file
mapping_demo.rviz yang ada di folder rviz_cgf. File ini berisi parameter
untuk mengaktifkan atau mematikan fitur/topik/frame pada aplikasi RViz.
5. Baris ke-13 hingga ke-16, merupakan pemanggilan file
hector_mapper.launch, namun bedanya pemanggilan file ini ditambahkan
dengan 2 argumen tambahan, yaitu trajectory_source_frame_name
dengan nilai frame = frame hasil hector_mapping dan parameter yang
kedua map_file_path yang berisikan path folder dimana map sementara
disimpan.
6. Baris ke-17-18, merupakan penutup tag launch.
Selesai melakukan konfigurasi pada semua driver sensor berupa library atau
paket algoritme yang dibutuhkan pada penelitian ini, maka langkah selanjutnya
adalah melakukan konfigurasi pada folder utama penyusun sistem robot yang
diberi nama folder “autonomous_mobile_robot_navigation”. Folder ini tidak
didapatkan dari sumber mana pun, jadi pada kali ini penulis akan benar-benar
membuat kode dari awal hingga akhir. Folder
autonomous_mobile_robot_navigation atau yang nanti pada penulisan akan
disingkat dengan AMR Navigation.
Proyek pada folder autonomous mobile robot navigation dibuat dengan
menggunakan perintah create catkin package pada terminal pada folder src.
183
$ catkin_create_pkg autonomous_mobile_robot_navigation std_msgs rospy
roscpp
Maka akan dibuatkan sebuah folder dengan nama tersebut dengan file dan
folder template di dalam, seperti include, package.xml, dan CMakeLists.txt.
Langkah selanjutnya adalah mengubah isi dari file package.xml, tujuannya adalah
untuk mengunduh semua paket yang dibutuhkan pada penelitian ini yang dapat
dilihat pada tabel 5.29.
Tabel 5.54 Kode Program Paket ROS pada package.xml
Kode Program
No
autonomous_mobile_robot_navigation/package.xml
1 <?xml version="1.0"?>
2 <package format="2">
3 <name>autonomous_mobile_robot_navigation</name>
4 <version>0.0.2</version>
5 <description>The AMR Navigation package</description>
6 <maintainer email="bambanggunawan887@gmail.com">Bambang
Gunawan</maintainer>
7
8 <license>BSD</license>
9 <buildtool_depend>catkin</buildtool_depend>
10
11 <depend>amcl</depend>
12 <depend>actionlib</depend>
13 <depend>actionlib_msgs</depend>
14 <depend>geometry_msgs</depend>
15 <depend>control_msgs</depend>
16 <depend>message_generation</depend>
17 <depend>controller_manager</depend>
18 <depend>gmapping</depend>
19 <depend>move_base</depend>
20 <depend>roscpp</depend>
21 <depend>rospy</depend>
22 <depend>std_msgs</depend>
23 <depend>std_srvs</depend>
24 <depend>tf</depend>
25 <depend>tf2</depend>
26 <depend>control_toolbox</depend>
27 <depend>map_server</depend>
28 <depend>rosparam_shortcuts</depend>
29 <depend>hardware_interface</depend>
30 <depend>laser_filters</depend>
31 <depend>imu_filter_madgwick</depend>
32 <depend>rviz_imu_plugin</depend>
33 <depend>robot_localization</depend>
34 <depend>teb_local_planner</depend>
35 <depend>dwa_local_planner</depend>
36 <depend>global_planner</depend>
37 <depend>twist_mux</depend>
38 <depend>nmea_navsat_driver</depend>
39 <depend>moveit_ros_planning_interface</depend>
40 </package>
Tabel di atas merupakan kode program untuk inisialisasi semua paket yang
dibutuhkan. Berikut ini penjelasan mengenai Kode Program.
184
1. Baris ke-1 hingga ke-9, merupakan open tag xml dan beberapa deskripsi
pada file serta deklarasi build tool menggunakan catkin.
2. Baris ke-11 hingga ke-39, merupakan nama-nama paket yang dibutuhkan
pada penelitian ini, dengan menjadikan satu semua paket maka tidak
perlu memasang paket satu persatu.
E.2.3.3 Implementasi Persiapan Awal Jetson Nano (Proses B)
Setelah melakukan konfigurasi-konfigurasi paket, maka langkah selanjutnya
adalah menginisialisasi dan mengunduh semua paket yang dibutuhkan dengan
perintah,
$ rosdep install --from-paths src --ignore-src -r -y
Selanjutnya adalah melakukan build pada file src agar ROS dapat dijalankan
dengan perintah,
$ catkin_make
Setelah menjalankan perintah tersebut, maka terminal akan meminta cmake
untuk melakukan build program pada semua kode sumber yang ada
catkin_ws/src. Semua file ini akan disimpan di folder catkin_ws/build dan
catkin_ws/devel, hasil akhir dari proses compile terlihat pada gambar 5.51.
187
Tabel 5.56 Perbandingan Output Sensor IMU Sebelum Dan Sesudah
Sebelum Kalibrasi Sesudah Kalibrasi
No
ax ay az ax ay az
188
5 <param name="/use_sim_time" value="false"/>
6
7 <!-- Static transformation for TF -->
8 <node pkg="tf" type="static_transform_publisher"
name="base_laser_broadcaster" args="0 0.06 0.02 0 0 0
base_link laser 100" />
<node pkg="tf" type="static_transform_publisher"
9 name="imu_broadcaster" args="0 0.06 0.02 0 0 0 base_link imu
100" />
<node pkg="tf" type="static_transform_publisher"
10 name="dummy_broadcaster" args="0 0 0 0 0 0 base_link dummy
100" />
<node pkg="tf" type="static_transform_publisher"
11 name="caster_broadcaster" args="0 0 0 0 0 0 base_link
caster_wheel 100" />
<node pkg="tf" type="static_transform_publisher"
12 name="base_link_broadcaster" args="0 0 0.09 0 0 0
base_footprint base_link 100" />
58 <include file="$(find
59 hector_geotiff_launch)/launch/geotiff_mapper.launch">
<arg name="trajectory_source_frame_name"
60 value="scanmatcher_frame"/>
<arg name="map_file_path" value="$(arg
61 geotiff_map_file_path)"/>
</include>
62 <!-- Rqt Robot Steering -->
63 <node name="rqt_robot_steering" pkg="rqt_robot_steering"
64 type="rqt_robot_steering">
<remap from="/cmd_vel"
65 to="/hoverboard_velocity_controller/cmd_vel"/>
</node>
66
67 </launch>
68
Tabel di atas merupakan kode program untuk melakukan pemetaan. Berikut
ini penjelasan mengenai kode program tersebut,
1. Baris ke-1 hingga ke-2, merupakan deklarasi penggunaan versi 1.0 xml
dan deklarasi tag pembuka launch file
2. Baris ke-4, merupakan argumen untuk deklarasi penggunaan RViz = true
3. Baris ke-7 hingga ke 12, merupakan inisialisasi node static transformation
untuk mendeklarasikan secara manual TF dari setiap node yang ada.
a. Baris ke-7, posisi TF sensor laser RPLIDAR terhubung (child)
terhadap base_link (parent), agar posisi laser mengikuti
pergerakan badan robot,
190
b. Baris ke-8, posisi TF sensor IMU terhubung (child) terhadap
base_link (parent), agar posisi IMU mengikuti pergerakan badan
robot,
c. Baris ke-9, posisi TF base_link terhubung (child) terhadap
base_footprint (parent) yang merupakan bagian paling dasar
dekat tanah pada robot, agar base_link mengetahui posisi
permukaan,
d. Baris ke-12, posisi TF odom_combined terhubung (child) terhadap
scanmatcher_frame (parent).
4. Baris ke-15, merupakan redefinisi parameter penamaan port USB
hoverboard.
5. Baris ke-18 hingga ke-19, merupakan pemanggilan file launcher dari
driver rplidar_ros dan mpu6050_driver yang masing-masing dapat dilihat
pada tabel 2.25 dan 5.30.
6. Baris ke-22 hingga ke-23, merupakan deklarasi parameter dan argumen
untuk menggunakan model robot yang ada pada file urdf. Kode
keseluruhan paket urdf ini dapat dilihat pada lampiran.
7. Baris ke-26 hingga ke-27, merupakan pendeklarasian dan inisialisasi paket
robot state publisher yang merupakan paket untuk memungkinkan robot
mengirimkan TF untuk setiap komponen di dalamnya.
8. Baris ke-30 hingga ke-31, merupakan deklarasi parameter untuk paket
driver hoverboard berdasarkan file konfigurasi dari hardware.yaml dan
controllers.hoverboard.yaml. Kedua file ini dapat ditemukan pada paket
driver hoverboard yang kemudian di salin ke folder AMR navigation.
Implementasi dari konfigurasi ini dapat dilihat pada tabel 5.
9. Baris ke-32 hingga ke-35, merupakan pemanggilan paket hoverboard
driver menggunakan parameter yang sudah di deklarasikan sebelumnya
pada baris 30 dan 31. Fungsi dari paket ini adalah menjadikan driver
hoverboard sebagai kontrol utama untuk penggerak karena control
spawner menyediakan hard loop real-time (seperti fungsi loop pada
Arduino) untuk mengontrol mekanisme robot. Kontrol yang disediakan
antara lain adalah memuat, menghapus muat, memulai, dan
menghentikan pengontrol. Paket ini menghasilkan topik
“/hoverboard_velocity_controller/".
10. Baris ke-39 hingga ke-41, merupakan pemanggilan node rqt robot
steering untuk menggerakkan robot secara manual dengan
memanfaatkan salah satu fitur rqt. Topik yang di subscribe oleh paket ini
adalah “/cmd_vel” yang merupakan topik utama untuk menggerakkan
robot dan diganti dengan “/hoverboard_velocity_controller/cmd_vel".
11. Baris ke-46, merupakan deklarasi dan inisialisasi paket RViz dengan
parameter RViz berupa nav_config.rviz yang ada pada folder RViz. Dengan
191
mendeklarasikan parameter kita dapat menentukan topik-topik apa yang
mau di munculkan dan topik apa yang tidak.
12. Baris ke-51 hingga ke-64, merupakan deklarasi dan inisialisasi paket
Extended Kalman Filter untuk lokalisasi. Dengan melakukan remap pada
TF odom yang diambil dari "/hoverboard_velocity_controller/odom" dan
remap pada TF imu yang di ambil dari "/imu/data" untuk menginisialisasi
ulang topik dengan TF nya. Kemudian mendeklarasikan parameter-
paramater yang digunakan pada penelitian ini, seperti output_frame =
odom, odom_used = true dan sebagainya seperti yang sudah ada pada
perancangan sebelumnya.
13. Baris ke-69, merupakan penutup dari tag launch.
a. Implementasi Parameter Hoverboard Driver
Implementasi konfigurasi hoverboard driver berisikan file konfigurasi untuk
tiap-tiap parameter yang dipakai pada perencanaan sebelumnya, jika tidak
terdefinisi maka nilai yang dipakai adalah nilai default. Semua kode yang
berhubungan dengan parameter hoverboard driver dapat dilihat pada tabel 5.33,
5.34 dan 5.35.
Tabel 5.58 Kode Program Parameter Hoverboard Driver
(controllers_hoverboard.yaml)
Kode Program
N
autonomous_mobile_robot_navigation/config/
o
controllers_hoverboard.yaml
1 hoverboard_joint_publisher:
2 type: "joint_state_controller/JointStateController"
3 publish_rate: 50
4 left_wheel : "left_wheel"
5 right_wheel : "right_wheel"
6
7 hoverboard_velocity_controller:
8 type : "diff_drive_controller/DiffDriveController"
9 left_wheel : "left_wheel"
10 right_wheel : "right_wheel"
11 pose_covariance_diagonal : [0.001, 0.001, 1000000.0,
1000000.0, 1000000.0, 1000.0]
12 twist_covariance_diagonal: [0.001, 0.001, 1000000.0,
1000000.0, 1000000.0, 1000.0]
13 publish_rate: 50.0 # default: 50
14 # Wheel separation and radius multipliers
15 wheel_separation_multiplier: 1.0 # default: 1.0
16 wheel_radius_multiplier : 1.0 # default: 1.0
17
18 # Velocity commands timeout [s], default 0.5
19 cmd_vel_timeout: 0.5
20
21 # Base frame_id
22 base_frame_id: base_footprint #default: base_link
23
24 # Velocity and acceleration limits
25 # Whenever a min_* is unspecified, default to -max_*
192
26 linear:
27 x:
28 has_velocity_limits : true # default false
29 max_velocity : 1.0 # m/s
30 min_velocity : -0.5 # m/s
31 has_acceleration_limits: true # default false
32 max_acceleration : 0.8 # m/s^2
33 has_jerk_limits : false # default false
34 max_jerk : 0.0 # m/s^3
35 angular:
36 z:
37 has_velocity_limits : true # default false
38 max_velocity : 3.14 # rad/s
39 min_velocity : -3.14 # rad/s
40 has_acceleration_limits: true # default false
41 max_acceleration : 3.14 # rad/s^2
42 has_jerk_limits : true # default false
43 max_jerk : 3.14 # rad/s^3
44
45 enable_odom_tf: false # default true
46 wheel_separation : 0.34
47 wheel_radius : 0.0825
48 odom_frame_id: "/odom" # default: "/odom"
49 publish_cmd: false # default false
50 allow_multiple_cmd_vel_publishers: true
51 velocity_rolling_window_size: 10 # default 10
Tabel di atas merupakan kode program untuk melakukan pemetaan. Berikut
ini penjelasan mengenai kode program tersebut,
1. Baris ke-1 hingga ke-5, merupakan parameter objek dengan nama
hoverboard_joint_publisher.
"joint_state_controller/JointStateController" digunakan sebagai tipe
kontrolnya agar sistem mengenali bahwa hoverboard menggunakan join
pada setiap TF nya, sehingga TF dari setiap komponen robot dapat
bergerak karena saling terhubung. Publish rate dari paket ini adalah 50 hz
dan deklarasi left_wheel dan right_wheel dengan nilai masing-masingnya
karena kendali robot adalah differential drive, sehingga setiap roda
independen antara satu dengan yang lain.
2. Baris ke-7 hingga ke-22, merupakan parameter deklarasi untuk paket
move_base sehingga pose robot dan ukuran roda dapat diketahui.
3. Baris ke-26 hingga ke-43, merupakan parameter untuk deklarasikan
velocity dan acceleration pada gelar linier dan angular.
4. Baris ke-45 hingga ke-51, merupakan parameter deklarasi untuk
transformasi odom.
Tabel 5.59 Kode Program Parameter Hoverboard Driver (hardware.yaml)
Kode Program
No
autonomous_mobile_robot_navigation/config/hardware.yaml
1 amr_oclone:
2 direction: 1
3 hardware_interface:
193
4 loop_hz: 50 # hz
5 joints:
6 - left_wheel
7 - right_wheel
Tabel di atas merupakan kode program untuk melakukan pemetaan. Berikut
ini penjelasan mengenai kode program tersebut,
1. Baris ke-1 hingga ke-7, merupakan parameter objek dengan nama
amr_oclone. Arah atau direction yang di deklarasikan adalah 1 dan
hardware interfacenya kurang lebih sama yaitu left wheel dan right wheel
yang di joint.
Tabel 5.60 Kode Program Parameter Hoverboard Driver (joint_limits.yaml)
Kode Program
No
autonomous_mobile_robot_navigation/config/joint_limits.yaml
1 joint_limits:
2 right_wheel_joint:
3 has_position_limits: false
4 min_position: 0
5 max_position: 0
6 has_velocity_limits: true
7 max_velocity: 2.62
8 min_velocity: -2.62
9 has_acceleration_limits: false
10 max_acceleration: 0.0
11 has_jerk_limits: false
12 max_jerk: 0
13 has_effort_limits: false
14 max_effort: 0
15 min_effort: 0
16
17 left_wheel_joint:
18 has_position_limits: false
19 min_position: 0
20 max_position: 0
21 has_velocity_limits: true
22 max_velocity: 2.62
23 min_velocity: -2.62
24 has_acceleration_limits: false
25 max_acceleration: 0.0
26 has_jerk_limits: false
27 max_jerk: 0
28 has_effort_limits: false
29 max_effort: 0
30 min_effort: 0
Tabel di atas merupakan kode program untuk melakukan pemetaan. Berikut
ini penjelasan mengenai kode program tersebut,
1. Baris ke-1 hingga ke-15, merupakan parameter objek dengan nama
right_wheel_joint. Fungsinya adalah melakukan limitasi pada proses join
dari roda sebelah kanan dengan badan robot sehingga posisi robot dan TF
roda akan berjalan dengan sempurna.
2. Baris ke-17 hingga ke-30, merupakan parameter objek dengan nama
left_wheel_joint. Fungsinya adalah melakukan limitasi pada proses join
194
dari roda sebelah kiri dengan badan robot sehingga posisi robot dan TF
roda akan berjalan dengan sempurna.
E.2.3.6 Implementasi Program Navigasi
Implementasi program navigasi merupakan salah satu dari proses program
utama. Implementasi dari program ini akan utamanya memanfaatkan paket
Move Base, EKF, AMCL, dan Map Server. Program pemetaan terdiri dari file
launcher yang memanggil file launcher lainnya. Implementasi proses launcher
navigasi akan memanggil beberapa file lain dan node dari driver dan paket
navigasi lainnya. Semua kode yang berhubungan dengan pemetaan dapat dilihat
pada tabel 5.36.
Tabel 5.61 Kode Program Navigasi
Kode Program
No
autonomous_mobile_robot_navigation/launch/autonomous_nav.launch
1 <?xml version="1.0"?>
2 <launch>
3 <!-- Desclare launch rviz first -->
4 <arg name="use_rviz" default="true"/>
5
6 <!-- Static transformation for TF -->
7 <node pkg="tf" type="static_transform_publisher"
name="base_laser_broadcaster" args="0 0.06 0.02 0 0 0
base_link laser 100" />
8 <node pkg="tf" type="static_transform_publisher"
name="imu_broadcaster" args="0 0.06 0.02 0 0 0 base_link
imu 100" />
9 <node pkg="tf" type="static_transform_publisher"
name="base_link_broadcaster" args="0 0 0.09 0 0 0
base_footprint base_link 100" />
10 <node pkg="tf" type="static_transform_publisher"
name="dummy_broadcaster" args="0 0 0 0 0 0 base_link dummy
100" />
11
12 <!-- map to odom will be provided by the AMCL -->
13 <node pkg="tf" type="static_transform_publisher"
name="map_to_odom" args="0 0 0 0 0 0 map odom_combined 100"
/>
14
15 <!-- Hoverboard usb port -->
16 <param name="port" type="str" value="/dev/ttyHOVER"/>
17
18 <!-- Run RPLIDAR and IMU driver launch -->
19 <include file="$(find rplidar_ros)/launch/rplidar.launch"
/>
20 <include file="$(find
mpu6050_driver)/launch/mpu6050_driver.launch" />
21
22 <!-- Desclare map file -->
23 <arg name="map_file" default="$(find
mobile_robot_autonomous_navigation)/maps/basemen_g_per4_nic
eeeee.yaml"/>
24
25 <!-- Robot model urdf -->
195
26 <arg name="model" default="$(find
autonomous_mobile_robot_navigation)/urdf/mobile_robot_v2.xa
cro"/>
27 <param name="robot_description" command="$(find
xacro)/xacro $(arg model)" />
28
29 <!-- Robot join state -->
30 <rosparam file="$(find
autonomous_mobile_robot_navigation)/config/joint_limits.yam
l" command="load"/>
31 <node name="robot_state_publisher"
pkg="robot_state_publisher" type="robot_state_publisher"/>
32
33 <!-- Hoverboard Driver Setup Parameter -->
34 <rosparam file="$(find
autonomous_mobile_robot_navigation)/config/hardware.yaml"
command="load"/>
35 <rosparam file="$(find
autonomous_mobile_robot_navigation)/config/controllers_hove
rboard.yaml" command="load"/>
36 <node name="hoverboard_driver" pkg="hoverboard_driver"
type="hoverboard_driver" output="screen">
37 <remap from="/hoverboard_velocity_controller/cmd_vel"
to="/cmd_vel"/>
38 </node>
39 <node name="controller_spawner" pkg="controller_manager"
type="spawner" respawn="false" output="screen"
args="hoverboard_joint_publisher
hoverboard_velocity_controller">
40 </node>
41
42 <!-- Rviz config param declare -->
43 <!-- Subscribe: -->
44 <!-- Publish: -->
45 <node name="rviz" pkg="rviz" type="rviz" args="-d $(find
46 autonomous_mobile_robot_navigation)/rviz/nav_config.rviz"/>
</launch>
97
Tabel di atas merupakan kode program untuk melakukan pemetaan. Berikut
ini penjelasan mengenai kode program tersebut,
1. Baris ke-1 hingga ke-2, merupakan deklarasi penggunaan versi 1.0 xml
dan deklarasi tag pembuka launch file
2. Baris ke-4, merupakan argumen untuk deklarasi penggunaan RViz = true
3. Baris ke-7 hingga ke 12, merupakan inisialisasi node static transformation
untuk mendeklarasikan secara manual TF dari setiap node yang ada.
a. Baris ke-7, posisi TF sensor laser RPLIDAR terhubung (child)
terhadap base_link (parent), agar posisi laser mengikuti
pergerakan badan robot,
b. Baris ke-8, posisi TF sensor IMU terhubung (child) terhadap
base_link (parent), agar posisi IMU mengikuti pergerakan badan
197
robot,
c. Baris ke-9, posisi TF base_link terhubung (child) terhadap
base_footprint (parent) yang merupakan bagian paling dasar
dekat tanah pada robot, agar base_link mengetahui posisi
permukaan,
d. Baris ke-12, posisi TF odom_combined terhubung (child) terhadap
scanmatcher_frame (parent).
4. Baris ke-15, merupakan redefinisi parameter penamaan port USB
hoverboard.
5. Baris ke-18 hingga ke-19, merupakan pemanggilan file launcher dari
driver rplidar_ros dan mpu6050_driver yang masing-masing dapat dilihat
pada tabel 2.25 dan 5.30.
6. Baris ke-22 hingga ke-23, merupakan deklarasi parameter dan argumen
untuk menggunakan model robot yang ada pada file urdf. Kode
keseluruhan paket urdf ini dapat dilihat pada lampiran.
7. Baris ke-26 hingga ke-27, merupakan pendeklarasian dan inisialisasi paket
robot state publisher yang merupakan paket untuk memungkinkan robot
mengirimkan TF untuk setiap komponen di dalamnya.
8. Baris ke-30 hingga ke-31, merupakan deklarasi parameter untuk paket
driver hoverboard berdasarkan file konfigurasi dari hardware.yaml dan
controllers.hoverboard.yaml. Kedua file ini dapat ditemukan pada paket
driver hoverboard yang kemudian di salin ke folder AMR navigation.
Implementasi dari konfigurasi ini dapat dilihat pada tabel 5.
9. Baris ke-32 hingga ke-35, merupakan pemanggilan paket hoverboard
driver menggunakan parameter yang sudah di deklarasikan sebelumnya
pada baris 30 dan 31. Fungsi dari paket ini adalah menjadikan driver
hoverboard sebagai kontrol utama untuk penggerak karena control
spawner menyediakan hard loop real-time (seperti fungsi loop pada
Arduino) untuk mengontrol mekanisme robot. Kontrol yang disediakan
antara lain adalah memuat, menghapus muat, memulai, dan
menghentikan pengontrol. Paket ini menghasilkan topik
“/hoverboard_velocity_controller/".
10. Baris ke-39 hingga ke-41, merupakan pemanggilan node rqt robot
steering untuk menggerakkan robot secara manual dengan
memanfaatkan salah satu fitur rqt. Topik yang di subscribe oleh paket ini
adalah “/cmd_vel” yang merupakan topik utama untuk menggerakkan
robot dan diganti dengan “/hoverboard_velocity_controller/cmd_vel".
11. Baris ke-46, merupakan deklarasi dan inisialisasi paket RViz dengan
parameter RViz berupa nav_config.rviz yang ada pada folder RViz. Dengan
mendeklarasikan parameter kita dapat menentukan topik-topik apa yang
mau di munculkan dan topik apa yang tidak.
198
12. Baris ke-51 hingga ke-64, merupakan deklarasi dan inisialisasi paket
Extended Kalman Filter untuk lokalisasi. Dengan melakukan remap pada
TF odom yang diambil dari "/hoverboard_velocity_controller/odom" dan
remap pada TF imu yang di ambil dari "/imu/data" untuk menginisialisasi
ulang topik dengan TF nya. Kemudian mendeklarasikan parameter-
paramater yang digunakan pada penelitian ini, seperti output_frame =
odom, odom_used = true dan sebagainya seperti yang sudah ada pada
perancangan sebelumnya.
13. Baris ke-67, merupakan pemanggilan file launcher move_base.launch.
Paket ini digunakan sebagai kendali kontrol utama dari robot agar bisa
mencapai target tertentu, tujuannya agar proses mapping selain
menggunakan rqt tetapi juga dapat dikendalikan langsung dengan
memberikan target tujuan.
14. Baris ke-69, merupakan penutup dari tag launch.
b. Implementasi Lokalisasi AMCL
Implementasi launcher AMCL berisikan node dan parameter untuk lokalisasi
dengan AMCL berdasarkan data laser dan odometry. Semua kode yang
berhubungan dengan parameter hoverboard driver dapat dilihat pada tabel 5.37.
Tabel 5.62 Kode Program Lokalisasi AMCL
Kode Program
No
/opt/ros/noetic/share/amcl/example/amcl_diff.launch
1 <?xml version="1.0"?>
2 <launch>
3 <arg name="use_map_topic" default="false"/>
4 <arg name="scan_topic" default="scan" />
5 <node pkg="amcl" type="amcl" name="amcl">
6 <param name="odom_model_type" value="diff-corrected"/>
<param name="use_map_topic" value="$(arg
7 use_map_topic)"/>
8 <!-- Publish scans from best pose at a max of 10 Hz -->
9 <param name="gui_publish_rate" value="10.0"/>
10 <param name="laser_max_beams" value="720"/>
11 <param name="laser_min_range" value="0.1"/>
12 <param name="laser_max_range" value="16.0"/>
13 <param name="min_particles" value="500"/>
14 <param name="max_particles" value="5000"/>
15 <!-- Maximum error between the true distribution and the
estimated distribution. -->
16 <param name="kld_err" value="0.05"/>
17 <param name="kld_z" value="0.99"/>
18 <param name="odom_alpha1" value="0.2"/>
19 <param name="odom_alpha2" value="0.2"/>
20 <!-- translation std dev, m -->
21 <param name="odom_alpha3" value="0.2"/>
22 <param name="odom_alpha4" value="0.2"/>
23 <param name="laser_z_hit" value="0.5"/>
24 <param name="laser_z_short" value="0.05"/>
25 <param name="laser_z_max" value="0.05"/>
26 <param name="laser_z_rand" value="0.5"/>
199
27 <param name="laser_sigma_hit" value="0.2"/>
28 <param name="laser_lambda_short" value="0.1"/>
29 <param name="laser_model_type"
value="likelihood_field"/>
30 <!-- Maximum distance to do obstacle inflation on map,
for use in likelihood_field model. -->
31 <param name="laser_likelihood_max_dist" value="2.0"/>
32 <!-- Translational movement required before performing a
filter update. -->
33 <param name="update_min_d" value="0.1"/>
34 <!--Rotational movement required before performing a
filter update. -->
35 <param name="update_min_a" value="0.314"/>
36 <param name="odom_frame_id" value="odom"/>
37 <param name="base_frame_id" value="base_link"/>
38 <param name="global_frame_id" value="map"/>
39 <!-- Number of filter updates required before
resampling. -->
40 <param name="resample_interval" value="1"/>
41 <!-- Increase tolerance because the computer can get
quite busy -->
42 <param name="transform_tolerance" value="1.0"/>
43 <!-- Exponential decay rate for the slow average weight
filter, used in deciding when to recover by adding random
poses. A good value might be 0.001. -->
44 <param name="recovery_alpha_slow" value="0.0"/>
45 <!--Exponential decay rate for the fast average weight
filter, used in deciding when to recover by adding random
poses. A good value might be 0.1. -->
46 <param name="recovery_alpha_fast" value="0.1"/>
47 <!-- Initial pose mean -->
48 <param name="initial_pose_x" value="0.0" />
49 <param name="initial_pose_y" value="0.0" />
50 <param name="initial_pose_a" value="0.0" />
51 <!-- When set to true, AMCL will subscribe to the map
topic rather than making a service call to receive its
map.-->
52 <param name="receive_map_topic" value="true"/>
53 <!-- When set to true, AMCL will only use the first map
it subscribes to, rather than updating each time a new one
is received. -->
54 <param name="first_map_only" value="false"/>
55 <remap from="scan" to="$(arg scan_topic)"/>
56 </node>
57
58 </launch>
Tabel di atas merupakan kode program untuk melakukan pemetaan. Berikut
ini penjelasan mengenai kode program tersebut,
1. Baris ke-1 hingga ke-5, merupakan parameter objek dengan nama
hoverboard_joint_publisher.
"joint_state_controller/JointStateController" digunakan sebagai tipe
kontrolnya agar sistem mengenali bahwa hoverboard menggunakan join
pada setiap TF nya, sehingga TF dari setiap komponen robot dapat
bergerak karena saling terhubung. Publish rate dari paket ini adalah 50 hz
dan deklarasi left_wheel dan right_wheel dengan nilai masing-masingnya
200
karena kendali robot adalah differential drive, sehingga setiap roda
independen antara satu dengan yang lain.
2. Baris ke-7 hingga ke-22, merupakan parameter deklarasi untuk paket
move_base sehingga pose robot dan ukuran roda dapat diketahui.
3. Baris ke-26 hingga ke-43, merupakan parameter untuk deklarasikan
velocity dan acceleration pada gelar linier dan angular.
4. Baris ke-45 hingga ke-51, merupakan parameter deklarasi untuk
transformasi odom.
c. Implementasi Navigasi Otomatis Dengan Move Base
Implementasi paket launcher move base yang terdiri dari konfigurasi untuk
tiap-tiap parameter yang dipakai pada perencanaan sebelumnya, jika tidak
terdefinisi maka nilai yang dipakai adalah nilai default. Semua kode yang
berhubungan dengan launcher move base dapat dilihat pada tabel 5.33.
Tabel 5.63 Kode Program Move Base
Kode Program
N
autonomous_mobile_robot_navigation/launch/
o
move_base_dijkstra.launch
1 <?xml version="1.0"?>
2 <launch>
3 <!-- Declare topic argument for remap position -->
4 <arg name="scan_topic" default="/scan"/>
5 <arg name="cmd_vel_topic"
default="/hoverboard_velocity_controller/cmd_vel"/>
6 <arg name="odom_topic" default="/odom_combined"/>
7
8 <!-- Call Dijkstra global planners using SrcClient Plugin
-->
9 <arg name="base_global_planner"
default="srv_client_plugin/SrvClientPlugin"/>
10
11 <!-- Move base node -->
12 <node pkg="move_base" type="move_base" respawn="false"
name="move_base" output="screen" default="$(find
autonomous_mobile_robot_navigation)/param/move_base.yaml">
13 <!-- Move base costmap parameter -->
14 <rosparam file="$(find
autonomous_mobile_robot_navigation)/param/costmap_common_2.y
aml" command="load" ns="global_costmap" />
15 <rosparam file="$(find
autonomous_mobile_robot_navigation)/param/costmap_common_2.y
aml" command="load" ns="local_costmap" />
16
17 <!-- Move Base Planner parameter -->
18 <rosparam file="$(find
autonomous_mobile_robot_navigation)/param/move_base.yaml"
command="load" />
19 <rosparam file="$(find
autonomous_mobile_robot_navigation)/param/global_planner.yam
l" command="load" />
20
201
21 <!-- Remap robot position -->
22 <remap from="cmd_vel" to="$(arg cmd_vel_topic)"/>
23 <remap from="odom" to="$(arg odom_topic)"/>
24 <remap from="scan" to="$(arg scan_topic)"/>
25
26 <!-- Override the plugin for the global planner to use
with move_base -->
27 <param name="base_global_planner" value="$(arg
base_global_planner)"/>
28 <param name="base_local_planner" value="$(arg
base_local_planner)"/>
29
30 </node>
31 </launch>
Tabel di atas merupakan kode program untuk melakukan pemetaan. Berikut
ini penjelasan mengenai kode program tersebut,
1. Baris ke-1 hingga ke-5, merupakan parameter objek dengan nama
hoverboard_joint_publisher.
"joint_state_controller/JointStateController" digunakan sebagai tipe
kontrolnya agar sistem mengenali bahwa hoverboard menggunakan join
pada setiap TF nya, sehingga TF dari setiap komponen robot dapat
bergerak karena saling terhubung. Publish rate dari paket ini adalah 50 hz
dan deklarasi left_wheel dan right_wheel dengan nilai masing-masingnya
karena kendali robot adalah differential drive, sehingga setiap roda
independen antara satu dengan yang lain.
2. Baris ke-7 hingga ke-22, merupakan parameter deklarasi untuk paket
move_base sehingga pose robot dan ukuran roda dapat diketahui.
3. Baris ke-26 hingga ke-43, merupakan parameter untuk deklarasikan
velocity dan acceleration pada gelar linier dan angular.
4. Baris ke-45 hingga ke-51, merupakan parameter deklarasi untuk
transformasi odom.
d. Implementasi Parameter Konfigurasi Common Costmap
Implementasi paket launcher move base yang terdiri dari konfigurasi untuk
tiap-tiap parameter yang dipakai pada perencanaan sebelumnya, jika tidak
terdefinisi maka nilai yang dipakai adalah nilai default. Semua kode yang
berhubungan dengan launcher move base dapat dilihat pada tabel 5.33.
Tabel 5.64 Kode Parameter Konfigurasi Common Costmap
Kode Program
N
autonomous_mobile_robot_navigation/param/
o
common_costmap_2.yaml
1 global_costmap:
2 global_costmap:
3 ros__parameters:
footprint: [[-0.12, -0.12], [-0.12, 0.12], [0.12,
4 0.12], [0.12, -0.12]]
footprint_padding: 0.03
202
5 update_frequency: 1.0
6 publish_frequency: 1.0
7 global_frame: map
8 robot_base_frame: base_link
9 use_sim_time: false
10 robot_radius: 0.22
11 resolution: 0.05
12 plugins: ["static_layer", "obstacle_layer",
13 "voxel_layer", "inflation_layer"]
obstacle_layer:
14 plugin: "nav2_costmap_2d::ObstacleLayer"
15 enabled: true
16 observation_sources: scan
17 footprint_clearing_enabled: true
18 max_obstacle_height: 2.0
19 combination_method: 1
20 scan:
21 topic: /scan
22 obstacle_max_range: 2.5
23 obstacle_min_range: 0.0
24 raytrace_max_range: 3.0
25 raytrace_min_range: 0.0
26 max_obstacle_height: 2.0
27 min_obstacle_height: 0.0
28 clearing: true
29 marking: true
30 data_type: "LaserScan"
31 inf_is_valid: false
32 voxel_layer:
33 plugin: "nav2_costmap_2d::VoxelLayer"
34 enabled: true
35 footprint_clearing_enabled: true
36 max_obstacle_height: 2.0
37 publish_voxel_map: true
38 origin_z: 0.0
39 z_resolution: 0.05
40 z_voxels: 16
41 unknown_threshold: 15
42 mark_threshold: 0
43 observation_sources: pointcloud
44 combination_method: 1
45 pointcloud:
46 topic: /depth_image/points
47 max_obstacle_height: 2.0
48 min_obstacle_height: 0.0
49 obstacle_max_range: 2.5
50 obstacle_min_range: 0.0
51 raytrace_max_range: 3.0
52 raytrace_min_range: 0.0
53 clearing: true
54 marking: true
55 data_type: "PointCloud2"
56 static_layer:
57 plugin: "nav2_costmap_2d::StaticLayer"
58 map_subscribe_transient_local: true
59 enabled: true
60 subscribe_to_updates: true
61 transform_tolerance: 0.1
62 inflation_layer:
203
63 plugin: "nav2_costmap_2d::InflationLayer"
64 enabled: true
65 inflation_radius: 0.55
66 cost_scaling_factor: 1.0
67 inflate_unknown: false
68 inflate_around_unknown: true
69 always_send_full_costmap: true
70
71 local_costmap:
72 local_costmap:
73 ros__parameters:
74 update_frequency: 5.0
75 publish_frequency: 2.0
76 global_frame: odom
77 robot_base_frame: base_link
78 use_sim_time: true
79 rolling_window: true
80 width: 20
81 height: 20
82 resolution: 0.05
83 plugins:
84 - {name: obstacles_laser, type:
85 "costmap_2d::ObstacleLayer"}
- {name: inflation_l, type:
86 "costmap_2d::InflationLayer"}
204
Semua kode yang berhubungan dengan Parameter Konfigurasi Move Base dapat
dilihat pada tabel 5.33.
Tabel 5.65 Kode Parameter Konfigurasi Move Base
Kode Program
No
autonomous_mobile_robot_navigation/param/move_base.yaml
1 shutdown_costmaps: false
2 max_planning_retries: 0
3 recovery_behavior_enabled: false
4 controller_frequency: 5.0
5 controller_patience: 3.0
6
7 planner_frequency: 0.0 # 0.5
8 planner_patience: 5.0
9
10 oscillation_timeout: 0.0
11 oscillation_distance: 0.2
12
13 # local planner - default is trajectory rollout
14 base_local_planner: "dwa_local_planner/DWAPlannerROS"
15
16 base_global_planner: "srv_client_plugin/SrvClientPlugin"
Tabel di atas merupakan kode program untuk melakukan pemetaan. Berikut
ini penjelasan mengenai kode program tersebut,
1. Baris ke-1 hingga ke-5, merupakan parameter objek dengan nama
hoverboard_joint_publisher.
"joint_state_controller/JointStateController" digunakan sebagai tipe
kontrolnya agar sistem mengenali bahwa hoverboard menggunakan join
pada setiap TF nya, sehingga TF dari setiap komponen robot dapat
bergerak karena saling terhubung. Publish rate dari paket ini adalah 50 hz
dan deklarasi left_wheel dan right_wheel dengan nilai masing-masingnya
karena kendali robot adalah differential drive, sehingga setiap roda
independen antara satu dengan yang lain.
2. Baris ke-7 hingga ke-22, merupakan parameter deklarasi untuk paket
move_base sehingga pose robot dan ukuran roda dapat diketahui.
3. Baris ke-26 hingga ke-43, merupakan parameter untuk deklarasikan
velocity dan acceleration pada gelar linier dan angular.
4. Baris ke-45 hingga ke-51, merupakan parameter deklarasi untuk
transformasi odom.
f. Implementasi Parameter Konfigurasi Global Planner
Implementasi parameter konfigurasi global planner yang terdiri dari
konfigurasi untuk tiap-tiap parameter yang dipakai pada perencanaan
sebelumnya, jika tidak terdefinisi maka nilai yang dipakai adalah nilai default.
Semua kode yang berhubungan dengan Parameter Konfigurasi Global Planner
dapat dilihat pada tabel 5.33.
205
Tabel 5.66 Kode Parameter Konfigurasi Global Planner
Kode Program
No
autonomous_mobile_robot_navigation/param/global_planner.yaml
1 GlobalPlanner:
2 old_navfn_behavior: false
3 use_quadratic: true
4 use_dijkstra: true
5 use_grid_path: false
6
7 allow_unknown: true
8 planner_window_x: 0.0
9 planner_window_y: 0.0
10 default_tolerance: 0.0
11
12 publish_scale: 100
13 planner_costmap_publish_frequency: 0.0
14
15 lethal_cost: 253
16 neutral_cost: 50
17 cost_factor: 3.0
18 publish_potential: true
Tabel di atas merupakan kode program untuk melakukan pemetaan. Berikut
ini penjelasan mengenai kode program tersebut,
1. Baris ke-1 hingga ke-5, merupakan parameter objek dengan nama
hoverboard_joint_publisher.
"joint_state_controller/JointStateController" digunakan sebagai tipe
kontrolnya agar sistem mengenali bahwa hoverboard menggunakan join
pada setiap TF nya, sehingga TF dari setiap komponen robot dapat
bergerak karena saling terhubung. Publish rate dari paket ini adalah 50 hz
dan deklarasi left_wheel dan right_wheel dengan nilai masing-masingnya
karena kendali robot adalah differential drive, sehingga setiap roda
independen antara satu dengan yang lain.
2. Baris ke-7 hingga ke-22, merupakan parameter deklarasi untuk paket
move_base sehingga pose robot dan ukuran roda dapat diketahui.
3. Baris ke-26 hingga ke-43, merupakan parameter untuk deklarasikan
velocity dan acceleration pada gelar linier dan angular.
4. Baris ke-45 hingga ke-51, merupakan parameter deklarasi untuk
transformasi odom.
g. Implementasi Algoritme Dijkstra
Implementasi algoritme Dijkstra untuk navigasi terdiri dari 2 file utama, yang
pertama adalah file untuk menampung fungsi Dijkstra dan find neighbors, lalu
file kedua adalah file script yang menjadi eksekusi utama program dan
memanggil fungsi Dijkstra di file sebelumnya. Semua kode yang berhubungan
dengan Parameter Konfigurasi Global Planner dapat dilihat pada tabel 5.42.
206
Tabel 5.67 Kode Algoritme Dijkstra
Kode Program
No
path_planning/unit2_pp/script/dijkstra.py
1 #! /usr/bin/env python
2 import rospy
3
4 def find_neighbors(index, width, height, costmap,
orthogonal_step_cost):
5 neighbors = []
6 # length of diagonal = length of one side by the square
root of 2 (1.41421)
7 diagonal_step_cost = orthogonal_step_cost * 1.41421
8 # threshold value used to reject neighbor nodes as they
are considered as obstacles [1-254]
9 lethal_cost = 1
10
11 upper = index - width
12 if upper > 0:
13 if costmap[upper] < lethal_cost:
14 step_cost = orthogonal_step_cost + costmap[upper]/255
15 neighbors.append([upper, step_cost])
16
17 left = index - 1
18 if left % width > 0:
19 if costmap[left] < lethal_cost:
20 step_cost = orthogonal_step_cost + costmap[left]/255
21 neighbors.append([left, step_cost])
22
23 upper_left = index - width - 1
24 if upper_left > 0 and upper_left % width > 0:
25 if costmap[upper_left] < lethal_cost:
26 step_cost = diagonal_step_cost +
costmap[upper_left]/255
27 neighbors.append([index - width - 1, step_cost])
28
29 upper_right = index - width + 1
30 if upper_right > 0 and (upper_right) % width != (width -
1):
31 if costmap[upper_right] < lethal_cost:
32 step_cost = diagonal_step_cost +
costmap[upper_right]/255
33 neighbors.append([upper_right, step_cost])
34
35 right = index + 1
36 if right % width != (width + 1):
37 if costmap[right] < lethal_cost:
38 step_cost = orthogonal_step_cost + costmap[right]/255
39 neighbors.append([right, step_cost])
40
41 lower_left = index + width - 1
42 if lower_left < height * width and lower_left % width !=
0:
43 if costmap[lower_left] < lethal_cost:
44 step_cost = diagonal_step_cost +
costmap[lower_left]/255
45 neighbors.append([lower_left, step_cost])
46
207
47 lower = index + width
48 if lower <= height * width:
49 if costmap[lower] < lethal_cost:
50 step_cost = orthogonal_step_cost + costmap[lower]/255
51 neighbors.append([lower, step_cost])
52
53 lower_right = index + width + 1
54 if (lower_right) <= height * width and lower_right %
width != (width - 1):
55 if costmap[lower_right] < lethal_cost:
56 step_cost = diagonal_step_cost +
costmap[lower_right]/255
57 neighbors.append([lower_right, step_cost])
58
59 return neighbors
60
61
62 def dijkstra(start_index, goal_index, width, height,
costmap, resolution, origin, grid_viz):
63 '''
64 Performs Dijkstra's shortes path algorithm search on a
costmap with a given start and goal node
65 '''
66
67 # create an open_list
68 open_list = []
69
70 # set to hold already processed nodes
71 closed_list = set()
72
73 # dict for mapping children to parent
74 parents = dict()
75
76 # dict for mapping g costs (travel costs) to nodes
77 g_costs = dict()
78
79 # set the start's node g_cost
80 g_costs[start_index] = 0
81
82 # add start node to open list
83 open_list.append([start_index, 0])
84
85 shortest_path = []
86
87 path_found = False
88 rospy.loginfo('Dijkstra: Done with initialization')
89
90 # Main loop, executes as long as there are still nodes
inside open_list
91 while open_list:
92
93 # sort open_list according to the lowest 'g_cost' value
(second element of each sublist)
94 open_list.sort(key = lambda x: x[1])
95
96 # extract the first element (the one with the lowest
'g_cost' value)
97 current_node = open_list.pop(0)[0]
98
208
99 # Close current_node to prevent from visting it again
100 closed_list.add(current_node)
101
102 # Optional: visualize closed nodes
103 grid_viz.set_color(current_node,"pale yellow")
104
105 # If current_node is the goal, exit the main loop
106 if current_node == goal_index:
107 path_found = True
108 break
109
110 # Get neighbors of current_node
111 neighbors = find_neighbors(current_node, width, height,
costmap, resolution)
112
113 # Loop neighbors
114 for neighbor_index, step_cost in neighbors:
115
116 # Check if the neighbor has already been visited
117 if neighbor_index in closed_list:
118 continue
119
120 # calculate g_cost of neighbour considering it is
reached through current_node
121 g_cost = g_costs[current_node] + step_cost
122
123 # Check if the neighbor is in open_list
124 in_open_list = False
125 for idx, element in enumerate(open_list):
126 if element[0] == neighbor_index:
127 in_open_list = True
128 break
129
130 # CASE 1: neighbor already in open_list
131 if in_open_list:
132 if g_cost < g_costs[neighbor_index]:
133 rospy.print("updated")
134 # Update the node's g_cost inside g_costs
135 g_costs[neighbor_index] = g_cost
136 parents[neighbor_index] = current_node
137 # Update the node's g_cost inside open_list
138 open_list[idx] = [neighbor_index, g_cost]
139 rospy.print("neighbor_index = %s",
140 neighbor_index)
rospy.print("g_costs[neighbor_index] = %s",
141 g_costs[neighbor_index])
rospy.print("parents[neighbor_index] = %s",
142 parents[neighbor_index])
143
144 # CASE 2: neighbor not in open_list
145 else:
146 rospy.print("not updated")
147 # Set the node's g_cost inside g_costs
148 g_costs[neighbor_index] = g_cost
149 parents[neighbor_index] = current_node
150 # Add neighbor to open_list
151 open_list.append([neighbor_index, g_cost])
152
153 # Optional: visualize frontier
209
154 grid_viz.set_color(neighbor_index,'orange')
155
rospy.loginfo('Dijkstra: Done traversing nodes in
156 open_list')
157
158 if not path_found:
159 rospy.logwarn('Dijkstra: No path found!')
160 return shortest_path
161
162 # Reconstruct path by working backwards from target
163 if path_found:
164 node = goal_index
165 shortest_path.append(goal_index)
166 while node != start_index:
167 shortest_path.append(node)
168 # get next node
169 node = parents[node]
170 # reverse list
171 shortest_path = shortest_path[::-1]
172 rospy.loginfo('Dijkstra: Done reconstructing path')
173
return shortest_path
Tabel di atas merupakan kode program untuk melakukan pemetaan. Berikut
ini penjelasan mengenai kode program tersebut,
1. Baris ke-1 hingga ke-5, merupakan parameter objek dengan nama
hoverboard_joint_publisher.
"joint_state_controller/JointStateController" digunakan sebagai tipe
kontrolnya agar sistem mengenali bahwa hoverboard menggunakan join
pada setiap TF nya, sehingga TF dari setiap komponen robot dapat
bergerak karena saling terhubung. Publish rate dari paket ini adalah 50 hz
dan deklarasi left_wheel dan right_wheel dengan nilai masing-masingnya
karena kendali robot adalah differential drive, sehingga setiap roda
independen antara satu dengan yang lain.
2. Baris ke-7 hingga ke-22, merupakan parameter deklarasi untuk paket
move_base sehingga pose robot dan ukuran roda dapat diketahui.
3. Baris ke-26 hingga ke-43, merupakan parameter untuk deklarasikan
velocity dan acceleration pada gelar linier dan angular.
4. Baris ke-45 hingga ke-51, merupakan parameter deklarasi untuk
transformasi odom.
Implementasi algoritme Dijkstra untuk navigasi terdiri dari 2 file utama, yang
pertama adalah file untuk menampung fungsi Dijkstra dan find neighbors, lalu
file kedua adalah file script yang menjadi eksekusi utama program dan
memanggil fungsi Dijkstra di file sebelumnya. Semua kode yang berhubungan
dengan Parameter Konfigurasi Global Planner dapat dilihat pada tabel 5.42.
Tabel 5.68 Kode Path Planning Global Dengan Dijkstra
N Kode Program
o path_planning/unit2_pp/script/main.py
210
1 #!/usr/bin/env python
2
3 import rospy
4 from pp_msgs.srv import PathPlanningPlugin,
PathPlanningPluginResponse
5 from geometry_msgs.msg import Twist
6 from gridviz import GridViz
7 from dijkstra import dijkstra
8
9 def make_plan(req):
10 '''
11 Callback function used by the service server to process
12 requests from clients. It returns a msg of type
PathPlanningPluginResponse
13 '''
14 # costmap as 1-D array representation
15 costmap = req.costmap_ros
16 # number of columns in the occupancy grid
17 width = req.width
18 # number of rows in the occupancy grid
19 height = req.height
20 start_index = req.start
21 goal_index = req.goal
22 # side of each grid map square in meters
23 resolution = 0.2
24 # origin of grid map
25 origin = [-7.4, -7.4, 0]
26
27 viz = GridViz(costmap, resolution, origin, start_index,
goal_index, width)
28
29 # time statistics
30 start_time = rospy.Time.now()
31
32 # calculate the shortes path using Dijkstra
33 path = dijkstra(start_index, goal_index, width, height,
costmap, resolution, origin, viz)
34
35 if not path:
36 rospy.logwarn("No path returned by Dijkstra's shortes
path algorithm")
37 path = []
38 else:
39 execution_time = rospy.Time.now() - start_time
40 print("\n")
41 rospy.loginfo('++++++++ Dijkstra execution metrics +++++
+++')
42 rospy.loginfo('Total execution time: %s seconds',
str(execution_time.to_sec()))
43 rospy.loginfo('+++++++++++++++++++++++++++++++++++++++++++
+')
44 print("\n")
45 rospy.loginfo('Dijkstra: Path sent to navigation stack')
46
47 resp = PathPlanningPluginResponse()
48 resp.plan = path
49 return resp
50
51 def clean_shutdown():
211
52 cmd_vel.publish(Twist())
53 rospy.sleep(1)
54
55 if __name__ == '__main__':
56 rospy.init_node('dijkstra_path_planning_service_server',
log_level=rospy.INFO, anonymous=False)
57 make_plan_service =
rospy.Service("/path_planning/SrvClientPlugin/make_plan",
PathPlanningPlugin, make_plan)
58 cmd_vel =
rospy.Publisher('hoverboard_velocity_controller/cmd_vel',
Twist, queue_size=5)
59 rospy.on_shutdown(clean_shutdown)
60
61 while not rospy.core.is_shutdown():
62 rospy.rostime.wallsleep(0.5)
63 rospy.Timer(rospy.Duration(2),
64 rospy.signal_shutdown('Shutting down'), oneshot=True)
Tabel di atas merupakan kode program untuk melakukan pemetaan. Berikut
ini penjelasan mengenai kode program tersebut,
1. Baris ke-1 hingga ke-5, merupakan parameter objek dengan nama
hoverboard_joint_publisher.
"joint_state_controller/JointStateController" digunakan sebagai tipe
kontrolnya agar sistem mengenali bahwa hoverboard menggunakan join
pada setiap TF nya, sehingga TF dari setiap komponen robot dapat
bergerak karena saling terhubung. Publish rate dari paket ini adalah 50 hz
dan deklarasi left_wheel dan right_wheel dengan nilai masing-masingnya
karena kendali robot adalah differential drive, sehingga setiap roda
independen antara satu dengan yang lain.
2. Baris ke-7 hingga ke-22, merupakan parameter deklarasi untuk paket
move_base sehingga pose robot dan ukuran roda dapat diketahui.
3. Baris ke-26 hingga ke-43, merupakan parameter untuk deklarasikan
velocity dan acceleration pada gelar linier dan angular.
4. Baris ke-45 hingga ke-51, merupakan parameter deklarasi untuk
transformasi odom.
.
212
BAB 6 PENGUJIAN
Dalam bab pengujian, penulis akan menunjukkan bagaimana sistem ini dapat
diimplementasikan dengan pengujian untuk menilai apakah sistem yang
dirancang telah sesuai dengan tujuan maupun rumusan masalah yang di ajukan.
Hasil dari pengujian juga digunakan sebagai hasil penarikan kesimpulan pada bab
selanjutnya, berikut merupakan tahapan pengujian pada penelitian ini.
213
6. Mengamati jumlah putaran per cycle selama waktu observasi, yaitu 20
detik dan mengamati nilai odometry yang ditampilkan oleh topic /odom.
7. Melakukan analisis perbandingan dan perhitungan nilai RPM
menggunakan RPM converter dari setiap kecepatan yang di ujikan.
214
10 2 24.39976 233 20 79 237
Tabel 6.70 Hasil Akurasi Pengujian Fungsionalitas Nilai Odometry
215
5. Mengamati hasil data yang diambil dari point cloud laser RPLIDAR untuk
mengetahui kinerja dan ketepatan nilai pada perangkat lunak dengan
jarak sebenarnya.
6. Melakukan analisis perbandingan dan perhitungan data jarak perangkat
lunak rplidar_ros dengan pengukuran jarak sebenarnya dari setiap jarak
yang di ujikan.
Gambar 6.101 Kondisi Lingkungan Sekitar Pada Pengujian Jarak Data RPLIDAR
Tabel 6.71 Pengujian Fungsionalitas RPLIDAR
Uji akurasi jarak sensor RPLIDAR A1
216
2 Terdekat 180 10 180 10.8
3 Tembok 0 76 0 77
4 Tembok 90 65 90 66.3
217
8 Objek 2 0 60 0 61.3
218
6.3.1 Tujuan Pengujian
Atas hasil pengujian yang penulis dapatkan selama melakukan penelitian ini,
maka penulis dapat menarik kesimpulan untuk menjawab rumusan masalah yang
ada. Berikut adalah kesimpulan dari penulis:
219
6.4.4 Analisis Pengujian
Atas hasil pengujian yang penulis dapatkan selama melakukan penelitian ini,
maka penulis dapat menarik kesimpulan untuk menjawab rumusan masalah yang
ada. Berikut adalah kesimpulan dari penulis:
220
6.6.2 Prosedur Pengujian
Atas hasil pengujian yang penulis dapatkan selama melakukan penelitian ini,
maka penulis dapat menarik kesimpulan untuk menjawab rumusan masalah yang
ada. Berikut adalah kesimpulan dari penulis:
221
6.8 Pengujian Manuver Gerak Robot Pada Navigasi Global Algoritme
Dijkstra Dengan Berbagai Konfigurasi Berbeda
Atas hasil pengujian yang penulis dapatkan selama melakukan penelitian ini,
maka penulis dapat menarik kesimpulan untuk menjawab rumusan masalah yang
ada. Berikut adalah kesimpulan dari penulis:
222
6.9.3 Hasil Pengujian
Atas hasil pengujian yang penulis dapatkan selama melakukan penelitian ini,
maka penulis dapat menarik kesimpulan untuk menjawab rumusan masalah yang
ada. Berikut adalah kesimpulan dari penulis:
223
6.11 6.8 Pengujian Waktu Komputasi Pada Navigasi Global
Algoritme Dijkstra Dan Perencanaan Lokal Dynamic Window
Approach Dengan Berbagai Konfigurasi Berbeda
Atas hasil pengujian yang penulis dapatkan selama melakukan penelitian ini,
maka penulis dapat menarik kesimpulan untuk menjawab rumusan masalah yang
ada. Berikut adalah kesimpulan dari penulis:
224
BAB 7 PENUTUP
Dalam bab penutup, penulis akan menyampaikan hasil yang telah penulis
dapatkan selama melakukan penelitian ini. Hasil yang didapatkan berasal dari
data yang telah penulis terima dari pengujian. Adanya hasil tersebut,
memungkinkan penulis untuk menarik kesimpulan atas rumusan masalah yang
sebelumnya diutarakan. Kemudian karena kondisi penelitian ini yang juga
terbatas pada kemampuan maupun waktu yang ada, akan ada saran kedepannya
guna mengembangkan lebih lanjut sistem atau bahkan diterapkan pada kondisi
rill nantinya.
7.1 Kesimpulan
Atas hasil pengujian yang penulis dapatkan selama melakukan penelitian ini,
maka penulis dapat menarik kesimpulan untuk menjawab rumusan masalah yang
ada. Berikut adalah kesimpulan dari penulis:
1. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim
veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
commodo consequat. Duis aute irure dolor in reprehenderit in voluptate
velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat
cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id
est laborum.
2. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim
veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
commodo consequat. Duis aute irure dolor in reprehenderit in voluptate
velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat
cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id
est laborum.
3. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim
veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
commodo consequat. Duis aute irure dolor in reprehenderit in voluptate
velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat
cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id
est laborum.
7.2 Saran
Selama pelaksanaan penelitian ini, terdapat beberapa kekurangan yang
penulis miliki. Sehingga penulis yakin bahwasannya sistem ini dapat
dikembangkan lebih lanjut secara bersama-sama dengan peneliti lainnya di
Indonesia maupun di dunia. Oleh karena itu penulis telah merangkum beberapa
saran yang mungkin dapat dilanjutkan oleh peneliti selanjutnya
225
1. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim
veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
commodo consequat. Duis aute irure dolor in reprehenderit in voluptate
velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat
cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id
est laborum.
2. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim
veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
commodo consequat. Duis aute irure dolor in reprehenderit in voluptate
velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat
cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id
est laborum.
3. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim
veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
commodo consequat. Duis aute irure dolor in reprehenderit in voluptate
velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat
cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id
est laborum.
226
DAFTAR REFERENSI
227
indoor positioning systems based on round trip time-of-flight measurements and
inertial navigation. IPIN 2014 - 2014 International Conference on Indoor
Positioning and Indoor Navigation, hal.457–464.
Holland, J., 2004. Designing Autonomous Mobile Robots. Designing Autonomous
Mobile Robots. Burlington: Elsevier Inc.
Joseph, L., 2018. Robot Operating System for Absolute Beginners. Robot
Operating System for Absolute Beginners. Kerala: Apress.
KBBI, 2016. Kamus Besar Bahasa Indonesia. [daring] Tersedia pada:
<https://kbbi.web.id/robot-2> [Diakses 14 Mar 2022].
Kohlbrecher, S., Meyer, J., Graber, T., Petersen, K., Klingauf, U. dan Von Stryk, O.,
2014. Hector open source modules for autonomous mapping and navigation with
rescue robots. Lecture Notes in Computer Science (including subseries Lecture
Notes in Artificial Intelligence and Lecture Notes in Bioinformatics), 8371 LNAI,
hal.624–631.
Kohlbrecher, S., Von Stryk, O., Meyer, J. dan Klingauf, U., 2011. A flexible and
scalable SLAM system with full 3D motion estimation. In: 9th IEEE International
Symposium on Safety, Security, and Rescue Robotics, SSRR 2011. hal.155–160.
Koumanakos, D.P., 2008. The effect of inventory management on firm
performance. International Journal of Productivity and Performance
Management, 57(5), hal.355–369.
Liu, L.S., Lin, J.F., Yao, J.X., He, D.W., Zheng, J.S., Huang, J. dan Shi, P., 2021. Path
Planning for Smart Car Based on Dijkstra Algorithm and Dynamic Window
Approach. Wireless Communications and Mobile Computing, 2021.
Louhichi, K., Jacquet, F. dan Butault, J.P., 2012. Estimating input allocation from
heterogeneous data sources: A comparison of alternative estimation approaches.
Agricultural Economics Review, .
Manuel, J. dan Ferrão, M., 2018. Study of SLAM algorithms for autonomous
navigation in unstructured environments.
Marin-Plaza, P., Hussein, A., Martin, D. dan De La Escalera, A., 2018. Global and
Local Path Planning Study in a ROS-Based Research Platform for Autonomous
Vehicles. Journal of Advanced Transportation, 2018.
Michelson, R.C., 2017. Autonomous Navigation. Encyclopedia of GIS, hal.100–
100.
Muliady, Sartika, E.M. dan Reynaldo, K., 2015. The Implementation of Hector
SLAM on The Earthquake Victims Finder Robot. Jurnal Teknik dan Ilmu Komputer.
Parcel Perform dan iPrice Group, 2019. Consumers are still not happy with their
e-commerce delivery experience, a new survey by Parcel Perform and iPrice
Group reveals | Mini Me Insights. [daring] Minime Insights. Tersedia pada:
<https://www.minimeinsights.com/2019/06/26/consumers-are-still-not-happy-
with-their-e-commerce-delivery-experience-a-new-survey-by-parcel-perform-
228
and-iprice-group-reveals/> [Diakses 12 Mar 2022].
Peng, G., Zheng, W., Lu, Z., Liao, J., Hu, L., Zhang, G. dan He, D., 2018. An
improved AMCL algorithm based on laser scanning match in a complex and
unstructured environment. Complexity, 2018.
Putra, T.A., Muliady, M. dan Setiadikarunia, D., 2020. Navigasi Indoor Berbasis
Peta pada Robot Beroda dengan Platform Robot Operating System. Jetri : Jurnal
Ilmiah Teknik Elektro, 17(2), hal.121.
Pyo, Y., Cho, H., Jung, R. dan Lim, T., 2017. Robot Programming From The Basic
Concept To Practical Programming and Robot Application. First Edit ed. Seoul,
Republic of Korea: ROBOTIS Co., Ltd.
Ragnerstam, E., 2016. How to calculate forecast accuracy for stocked items with
a lumpy demand-A case study at Alfa Laval. School of Innovation, Design and
Engineering.
Rajendra, A., 2015. Indoor Navigation System. International Journal of Applied
Engineering Research, Volume 10, hal.10515–10524.
Reilly, E.D., 2003. Motherboard. [daring] Encyclopedia of Computer Science.
Tersedia pada: <https://dl.acm.org/doi/10.5555/1074100.1074618> [Diakses 20
Okt 2021].
Richardson, T., Stafford-Fraser, Q., Wood, K.R. dan Hopper, A., 1998. Virtual
network computing. IEEE Internet Computing, 2(1), hal.33–38.
RoboPeak Team, 2014. RPLIDAR Low Cost 360 degree 2D Laser Scanner ( LIDAR )
System Development Kit User Manual. hal.14.
Siegwart, R., Nourbakhsh, I.R. dan Scaramuzza, D., 2004. Introduction to
Autonomous Mobile Robots. Second edi ed. Industrial Robot: An International
Journal, London, England: The MIT Press.
Souliman, A., 2019. Mapping and Localization for Indoor Mobile Robot Based on
RGB-D Camera. (August 2017).
Statista, 2019. E-commerce in Indonesia - statistics & Facts.
Todd, D.J., 1986. Fundamentals of Robot Technology. Fundamentals of Robot
Technology. London: Kogan Page Ltd.
Utomo, E.B., 2015. Autonomous Mobile Robot Berbasis Landmark Menggunakan
Particle Filter Dan Occupancy Grid Maps Untuk Navigasi, Lokalisasi dan Mapping.
hal.1–93.
Wang, H., 2012. Design and implementation of brushless DC motor drive and
control system. In: Procedia Engineering. No longer published by
Elsevier.hal.2219–2224.
Williman, A.O. dan Jelinek, H.J., 1976. Introduction To Lsi Microprocessor
Developments. Computer, 9(6), hal.34–46.
Xu, L., Feng, C., Kamat, V.R. dan Menassa, C.C., 2019. An Occupancy Grid
229
Mapping enhanced visual SLAM for real-time locating applications in indoor GPS-
denied environments. Automation in Construction, 104, hal.230–245.
Zetes, 2021. Autonomous mobile robots (AMR), latest warehouse technology.
[daring] Zetes. Tersedia pada: <https://www.zetes.com/en/warehouse-
solutions/autonomous-mobile-robots> [Diakses 16 Des 2021].
Zhang, X., Lai, J., Xu, D., Li, H. dan Fu, M., 2020. 2D Lidar-Based SLAM and Path
Planning for Indoor Rescue Using Mobile Robots. Journal of Advanced
Transportation, 2020.
230
LAMPIRAN A PERSYARATAN FISIK DAN TATA LETAK
A.1 Kertas
Kertas yang digunakan adalah HVS 70 mg berukuran A4. Apabila terdapat
gambar-gambar yang menggunakan kertas berukuran lebih besar dari A4,
hendaknya dilipat sesuai dengan aturan yang berlaku. Pengetikan hanya
dilakukan pada satu muka kertas, tidak bolak balik.
A.2 Margin
Batas pengetikan naskah adalah sebagai berikut :
A.4 Spasi
Jarak standar antar baris dalam badan teks adalah satu spasi. Jarak antar
paragraf, antara judul bab dan judul subbab, antara judul subbab dan badan
teks, dan seterusnya, dapat dilihat pada masing-masing style yang digunakan dan
tersedia dalam template untuk skripsi ini.
231
LAMPIRAN B PERSYARATAN FISIK DAN TATA LETAK
B.1 Margin
Batas pengetikan naskah adalah sebagai berikut :
B.3 Spasi
Jarak standar antar baris dalam badan teks adalah satu spasi. Jarak antar
paragraf, antara judul bab dan judul subbab, antara judul subbab dan badan
teks, dan seterusnya, dapat dilihat pada masing-masing style yang digunakan dan
tersedia dalam template untuk skripsi ini.
232
LAMPIRAN C PERSYARATAN FISIK DAN TATA LETAK
C.1 Margin
Batas pengetikan naskah adalah sebagai berikut :
C.3 Spasi
Jarak standar antar baris dalam badan teks adalah satu spasi. Jarak antar
paragraf, antara judul bab dan judul subbab, antara judul subbab dan badan
teks, dan seterusnya, dapat dilihat pada masing-masing style yang digunakan dan
tersedia dalam template untuk skripsi ini.
233
LAMPIRAN D PERSYARATAN FISIK DAN TATA LETAK
D.1 Margin
Batas pengetikan naskah adalah sebagai berikut :
D.3 Spasi
Jarak standar antar baris dalam badan teks adalah satu spasi. Jarak antar
paragraf, antara judul bab dan judul subbab, antara judul subbab dan badan
teks, dan seterusnya, dapat dilihat pada masing-masing style yang digunakan dan
tersedia dalam template untuk skripsi ini.
234
LAMPIRAN E PERSYARATAN FISIK DAN TATA LETAK
E.1 Margin
Batas pengetikan naskah adalah sebagai berikut :
E.3 Spasi
Jarak standar antar baris dalam badan teks adalah satu spasi. Jarak antar
paragraf, antara judul bab dan judul subbab, antara judul subbab dan badan
teks, dan seterusnya, dapat dilihat pada masing-masing style yang digunakan dan
tersedia dalam template untuk skripsi ini.
235