Selamat datang di JetBot, robot pintar nyata yang ditenagai oleh Jetson Nano. Dengan mata
yang cerdas (kamera depan), pengenalan wajah, pelacakan objek, mengikuti garis otomatis, dan
menghindari tabrakan dapat dengan mudah dicapai. Itu juga dilengkapi dengan kode node ROS,
yang memudahkan untuk memulai dengan ROS open source (Robot Operating System), dan untuk
mempelajari kerangka kerja sistem dan konsep ROS. Dalam notebook Jupyter sudah mencakup
konsep dasar robotika seperti kontrol motor terprogram, hingga topik yang lebih canggih seperti
melatih AI khusus untuk menghindari tabrakan. Apa yang akan Anda pelajari tidak terbatas pada
JetBot. Anda akan mempelajari konsep yang terkait dengan pengumpulan dan pelatihan data
jaringan saraf yang meluas sejauh imajinasi Anda.
1. Perintah Dasar Linux
Ketika mengoperasikan OS Linux, kita harus menggunakan shell, yaitu interface yang
menyediakan akses ke layanan sistem operasi. Sebagian besar distribusi Linux menggunakan
antarmuka pengguna grafis atau graphic user interface (GUI) sebagai shell-nya, terutama untuk
memberikan kemudahan penggunaan bagi para user. Dengan demikian, penggunaan command-line
interface (CLI) sangat disarankan karena lebih powerful dan efektif. Task atau tugas yang
membutuhkan proses dengan banyak langkah melalui GUI dapat dilakukan hanya dalam waktu
sekian detik dengan mengetikkan command atau perintah ke CLI. Sebelum menjabarkan perintah
dasar sistem operasi Linux, kita harus membuka baris perintah (command line) terlebih dulu di
jupyterlab akan terlihat tampilan seperti ini.
1. pwd command
Perintah dasar Linux pwd berfungsi untuk mencari path dari direktori (folder) yang kita
gunakan saat ini. Perintah ini akan mengembalikan path yang absolut (penuh), yang pada dasarnya
merupakan path semua direktori yang diawali dengan garis miring depan /. Contoh dari path absolut
adalah /home/username.
2 cd command
Untuk menjelajahi file dan direktori Linux, gunakan perintah cd. Perintah Linux ini
memerlukan path penuh atau nama direktori, tergantung pada direktori yang Anda gunakan saat ini.
Misalkan saat ini Anda sedang berada di /home/username/Documents dan ingin membuka Photos,
subdirektori dari Documents. Untuk melakukannya, Anda hanya perlu mengetikkan command ini:
cd Photos. Contoh lainnya, ketika Anda ingin beralih ke direktori yang sepenuhnya baru, misalnya,
/home/username/Movies. Dalam contoh ini, ketik cd yang diikuti dengan path absolut direktori: cd
/home/username/Movies. Berikut beberapa jalan pintas (shortcut) untuk memudahkan navigasi:
• cd .. (dengan dua tanda titik) untuk memindahkan satu direktori ke atas.
• cd jika ingin langsung membuka folder home.
• cd- (dengan tanda penghubung) untuk berpindah ke direktori sebelumnya.
Satu hal yang perlu diperhatikan, shell Linux sangat sensitif. Jadi, Anda harus mengetikkan
nama direktori dengan benar dan tepat.
3. ls command
ls merupakan perintah dasar pada Linux yang digunakan untuk melihat konten atau isi
direktori. Secara default, command ini akan menampilkan isi dari direktori yang Anda gunakan saat
ini. Jika ingin melihat isi direktori lain, ketik ls, disusul dengan path direktori. Contoh, ketik ls
/home/username/Documents untuk melihat isi Documents. Berikut beberapa variasi yang bisa
dikombinasikan dengan perintah dasar Linux ls:
• ls -R akan membuat daftar semua file yang ada di sub-direktori.
• ls -a akan menampilkan file yang tersembunyi.
• ls -al akan membuat daftar file dan direktori yang memuat informasi mendetail, seperti
permission (hak akses), ukuran (size), pemilik (owner), dll.
4. cat command
cat akronim dari concatenate adalah salah satu perintah dasar sistem operasi Linux yang
sering digunakan. Perintah ini berfungsi untuk membuat daftar konten atau isi file pada standard
output (sdout). Untuk menjalankan command ini, ketik cat yang kemudian diikuti dengan nama dan
ekstensi file. Sebagai contoh: cat file.txt. Berikut beberapa cara untuk menggunakan perintah cat:
• cat > filename untuk membuat file baru.
• cat filename1 filename2>filename3 untuk menggabungkan dua file (1 dan 2) dan
menyimpan outputnya di file baru (3).
• cat filename | tr a-z A-Z >output.txt untuk mengonversi file ke penggunaan huruf besar atau
huruf kecil.
•
5. mkdir command
mkdir berfungsi sebagai cara untuk membuat direktori baru, Anda bisa menggunakan
perintah dasar Linux mkdir. Sebagai contoh, jika Anda mengetik mkdir Music, direktori baru yang
muncul disebut Music. Berikut beberapa command mkdir tambahan:
• Untuk membuat direktori baru di dalam direktori lain, gunakan command dasar Linux mkdir
Music/Newfile.
• Gunakan opsi p (parents) untuk membuat direktori di antara dua direktori yang sudah ada.
Misalnya, mkdir -p Music/2020/Newfile untuk membuat file baru “2020”.
6. rmdir command
Jika ingin menghapus direktori, gunakan perintah rmdir. Namun, rmdir hanya boleh
digunakan untuk menghapus direktori kosong.
7. rm command
rm adalah perintah dasar pada Linux yang berfungsi untuk menghapus direktori beserta
isinya. Jika hanya ingin menghapus direktorinya saja – alternatif command selain rmdir – gunakan
rm -r.
Catatan: Saat menggunakan command ini, Anda harus berhati-hati dan cek kembali direktori
di mana Anda berada saat ini. Sekali command rm dijalankan, maka semuanya akan
terhapus dan tidak bisa dikembalikan.
9. grep command
Perintah dasar Linux lain yang sangat berguna untuk menyelesaikan task harian adalah grep.
Dengan command ini, Anda bisa melakukan pencarian di semua teks di dalam file yang diberikan.
Sebagai contoh, ketik grep blue notepad.txt untuk mencari kata blue di file notepad. Baris yang
memuat kata yang dicari akan ditampilkan sepenuhnya.
Kesimpulan
Perintah dasar Linux membantu user atau penggunanya untuk menjalankan task dengan
mudah dan efektif. Memang bukan hal yang mudah untuk mengingat semua perintah Linux di atas.
Namun, semuanya akan teratasi bila Anda terus berlatih dan berlatih.
2. Python Dasar
1. Pendahuluan
Python adalah bahasa pemrograman interpretatif multiguna. Tidak seperti bahasa lain yang
sulit dibaca dan dipahami, python lebih kepada keterbacaan kode untuk memudahkan pemahaman
sintaks. Hal ini membuat Python sangat mudah dipelajari baik untuk pemula maupun yang sudah
menguasai bahasa pemrograman lain. Bahasa ini pertama kali muncul pada tahun 1991, dirancang
oleh seseorang bernama Guido van Rossum. Hingga saat ini Python masih terus dikembangkan oleh
Python Software Foundation. Bahasa Python mendukung hampir semua sistem operasi, bahkan
untuk sistem operasi Linux, hampir semua distro sudah menyertakan Python di dalamnya.
2. Print() Function
print() dapat digunakan untuk menampilkan ke dalam console. pada sistem operasi yang kita
gunakan adalah ubuntu 18.04 dimana mengunakan console yang dikenal dengan sebutan Terminal.
Untuk menggunakan fungsi print(), kita akan gunakan pada contoh kali ini bersama dengan tipe
data Strings Strings Adalah salah satu tipe data yang berarti text atau tulisan. beberapa jenis tipe
data yang lain seperti : Integer, Boolean, Float, Double, Constant, dll. sebuah tipe data string,
memiliki ciri-ciri sebuah kata atau kalimat yang di awali dan di akhiri dengan tanda petik baik itu
petik satu '...' maupun petik dua "..."
2.1 Penerapan
kedua bentuk string di atas tidak menghasilkan output yang berbeda antara menggunakan dua petik
atau satu petik ' atau ''
2.2 Escape Character
Escape character adalah karakter yang di awali dengan tanda \ (baca: backslash), dimana
untuk masing-masing escape character memiliki makna sendiri-sendiri. Misalnya kita ingin menulis
sebuah kalimat yang di dalamnya terdapat kata yang menggunakan tanda apostrof ('), seperti:
Jum’at, AlQur’an, dll.
Terjadi kesalahan berupa invalid syntax dengan pointer menunjuk pada huruf t. Kita dapat
memperbaiki kesalah ini dengan mengganti satu petik ' yang mengapit kalimat tersebut dengan dua
petik ".
Namun, ini bukan penyelesaian dengan menggunakan escape character, karena bahasan kita
adalah escape character maka kita akan menggunakan cara yang sesuai dengan topik ini. Seperti ini
cara memperbikinya.
Yaitu dengan menambahkan tanda \ tepat sebelum tanda ', sehingga menjadi seperti ini \'.
Dapat diartikan bahwa tanda \ akan membuat tanda ' yang seharusnya merupakan sintaks untuk
membuka dan menutup sebuah string, menjadi terabaikan dan hanya akan ditampilkan berupa '.
3.2 Pengurangan
Untuk dapat melakukan operasi matematika berupa pengurangan, kamu dapat
menggunakan tanda -.
3.3 Perkalian
Untuk dapat melakukan operasi matamatika berupa perkalian, kamu dapat
menggunakan tanda *.
3.4 Pembagian
Untuk dapat melakukan operasi matematika berupa pembagian, kamu dapat
menggunakan tanda /. Hasil keluaran (output) dari operasi pembagian berupa tipe
data float.
3.5 Pemangkatan
Untuk dapat melakukan operasi matematika berupa pemangkatan atau exponen
dalam aljabar, kamu dapat menggunakan tanda **.
3.6 Akar Kuadrat
Untuk dapat melakukan operasi matematika berupa akar kuadrat (square root), terlebih
dahulu kamu harus melakukan import terhadap module bernama math. Kemudian, cara
menggunakannya dengan memasukkan nilai yang akan di akar kuadratkan ke dalam tanda kurung
math.sqrt(...).
3.7 Latihan
buat dengan bahasa pemograman python
1. Oji memiliki 550 kelereng lalu dia bermain bersama Pila lalu kalah sebanyak 350 kelereng.
Kemudian dia membeli lagi kelereng sebanyak 250. Jadi jumlah kelereng milik Oji sekarang
adalah
2. Rian pergi ke toko alat tulis untuk membeli bolpoin. Harga 1 buah bolpoin Rp 1.750. Jika
Rian membeli 1 lusin bolpoin dan Ia membayar 5 lembar uang lima ribuan. Berapa uang
kembalian yang Rian terima?
4. Variabel dan Tipe Data
Hampir di setiap program Python akan menggunakan variable. Variable dapat diibaratkan
sebuah ember yang digunakan untuk menampung data. Variable dalam Python dapat menampun
bermacam-macam data. Data yang ditampung dapat berupa string, integer, float, boolean, array,
function, dan mungkin masih banyak lagi. Variable membantu program dapat lebih dinamis dan
dapat membantu programmer mereferensikan sebuah nilai yang panjang di dalam sebuah wadah,
ketimbang harus mengetik nilai yang panjang berulang kali.
Variable dapat dibuat dengan nama apapun kecuali nama yang sama dengan nama sintaks
dan function pada 'Python'. Hal ini dapat menyebabkan sebuah konflik. Variable juga tidak dapat
ditulis dengan awalan angka dan simbol, kecuali simbol '_' (baca: underscore). Sebagai contoh,
kamu tidak dapat memberikan nama sebuah variable dengan nama 'print' karena akan terjadi konflik
dengan print() function.
Apabila ini dilakukan, maka hasil dari print('Ini tidak dapat dilakukan !') tetap akan tampil
pada console. Namun, saat kita akan memanggil atau menggunakan variable yang bernama print
akan terjadi kegagalan.
4.1 Variable dengan
a. Nilai String
Nah sekarang yang benernya. Kita sudah mempelajari print() function pada materi pertama.
Sekarang, Yuk! Kita coba kombinasikan print() function dengan variable.
Devika Marina bukan merupakan tipe data yang tepat. Apabila kamu bermaksud membuat Devika
Marina menjadi sebuah string, maka kamu harus menuliskannya dengan mengawali dan mengakhiri
dengan tanda petik ('...' atau "...").
Atau, kamu dapat menerapkan concatenation yang sudah kita pelajari pada materi pertama.
b. Integer atau Float
Selain bernilai string, variable juga dapat bernilai integer maupun float
c. Boolean
Variable dapat pula bertipe data boolean, yaitu True atau False. Penulisan nilai boolean harus di
awali dengan huruf besar.
Pada contoh di atas, menggunakan contoh pemanggilan isi dari variable tuple dengan menggunakan
urutan dari indeksnya. [0] dibaca indeks ke nol. Indeks pada bahasa pemrograman Python dimulai
dari 0, selanjutnya diikuti 1, 2, 3, 4, 5, dst…
Kamu dapat menuliskan sebuah variable tuple dengan mengawali dengan tanda kurung ( dan
menutupnya dengan ). Seperti ini (..., ..., ...). Namun, tidak menggunakan tanda kurung (...) juga
tidak masalah. Seperti ini ..., ..., ... Sehingga secara default, apabila kamu mendeklarasikan sebuah
variable yang memiliki banyak nilai dan dipisahkan dengan tanda koma, maka Python akan
mengenalinya sebagai variable dengan tipe data tuple.
b. Python Lists
Selanjutnya kita memiliki variable yang lebih populer dibandingkan tuple, yaitu Python list. List
adalah variable struktur data yang berisi / bernilai bermacam-macam data / tipe data yang
dipisahkan dengan tanda koma , yang membuatnya mirip dengan tuple. Namun, yang
membedakannya denga tuple adalah kita mendeklarasikan sebuah variable bertipe data list dengan
mengapit data tersebut menggunakan tanda kurung kotak [..., ..., ...].
c. Python list
ini tidak bersifat immutable sehingga memungkinkan kita untuk dapat memodifikasinya,
seperti: append, extend, insert, count, remove, reverse, sort, dll. Nanti akan ada pembahasan
tersendiri untuk modifikasi Python list.
d. Dictionary
Python Dictionary adalah sebuah variable struktur data yang hampir mirip dengan array.
Dictionary kalo diartikan secara bahasa akan bermakna kamus. Ya! Persis selayaknya kamus, yang
isinya terdapat kata kunci dan setiap kata kunci memiliki arti yang dapat lebih dari satu arti.
Dictionary tidak diurutkan berdasarkan sesuatu. Karakteristik yang khas dari Python dictionary
adalah memiliki kunci dan nilai (kunci:nilai). Setiap kunci berbentuk unik dan hanya satu.
Sedangkan nilainya dapat mengandung lebih dari satu data / tipe data, baik dalam bentuk tipe data
apapun seperti: string, integer, float, tuple, list, bahkan dictionary juga. Untuk mendeklarasikan
sebuah variable dengan tipe struktur data dictionary, kita perlu mengawalinya dengan menggunakan
tanda kurung kurawal{ dan menutupnya dengan }
Apabila kita ingin mengetahui berapakah nomor punggung dari Davy, maka kita cukup memanggil
kuncinya saja.
Perlu diperhatikan, pemanggilan kunci berupa string, haruslah sama persis dengan kunci
yang sudah di deklarasikan di dalam variable dictionary. Namanya saja kunci, kalo kuncinya tidak
sama, maka pintu tidak akan dapat dibuka. Selain kunci yang berbentuk string, kunci dapat pula
berupa integer.
4.3 Variable yang Mengandung
Proses Variable tidak melulu mengandung nilai-nilai. Variable juga dapat kita manfaatkan
untuk menyimpan proses.
5. Perulangan while
Kamu pernah merasa jenuh untuk melakukan pekerjaan yang berulang-ulang ? Untungnya
dalam bahasa pemrograman kita dapat membuat proses perulangan itu berjalan secara otomatis.
Pada dasarnya, kita hanya perlu mengatur dan menentukan kapan perulangan itu dimulai dan kapan
harus berhenti berulang, bahkan kita bisa menentukan pola perulangannya Misalnya kita ingin
menampilkan nama-nama pemain basket yang ada di dalam tim inti.
Ini adalah cara menampilkan isi dari variable Python list dengan cara manual. Dapat kita lihat
bersama, bahwa kita melakukan print() function sebanyak lima kali. Dalam bahasa pemrograman
Python, teradapat dua cara perulangan (loop) yang dapat kita gunakan untuk menyelesaikan
masalah mengenai perulangan. while dan for. Kedua-duanya memiliki tujuan akhir yang sama,
yaitu untuk menyelesaikan masalah perulangan. Keduanya juga dapat dipakai secara bergantian.
Tergantung pada preferensi masing-masing dari programmer atau efisiensi. Pada umumnya for loop
selalu lebih efisien dibandingkan dengan while loop, namun tidak selalu. Pada topik ini, kita akan
terlebih dahulu membahas mengenai while loop. Ide dari while loop adalah, ketika sesuatu kondisi
sesuai dengan fakta yang ada, lakukan sesuatu sesuai dengan yang telah ditentukan.
5.1 Bongkar Kode
Nah, ini adalah dua buah pernyataan yang ada di dalam blok while loop pada baris kedua.
Pada baris sebelumnya sudah menghasilkan kondisi yang bernilai True, maka kedua baris ini akan
di jalankan secara berurutan dimulai dari atas.
> print('Umur Balita =',umurBalita)
Teman-teman pasti sudah paham baris ini digunakan untuk apa dan akan menghasilkan output
seperti apa. Ya, print() digunakan untuk menampilkan output ke dalam console. Kemudian,
pernyataan kedua,
> umurBalita += 1
Ini adalah bentuk pendeklarasian variable yang mengandung proses di dalamnya. Seperti yang
sudah disinggung pada materi tentang variable pada post sebelumnya. Bentuk operasi penjumlahan
seperti di atas, dapat kita uraikan menjadi bentuk seperti ini.
> umurBalita = umurBalita + 1
Pada awal dari kode, variabel umurBalita sudah di deklarasikan bernilai 1. Yang berarti variable ini
adalah variable dengna tipe data integer. Sehingga dapat kita baca seperti ini.
>1=1+1
Maka setelah melewati pernyataan ini, variabel umurBalita akan berubah nilainya, dari semula
bernilai 1, akan berubah menjadi 2. Kemudian, setelah semua pernyataan yang ada di dalam blok
kode while loop telah habis di baca oleh Python interpreter, maka pembacaan akan di mulai
kembali ke baris yang menyatakan perulangan, yaitu baris yang mengandung sintaks while loop.
Pada saat ini, variable umurBalita sudah berubah nilainya menjadi 2. Kemudian, akan dibandingkan
dengan kondisi yang telah ditentukan, `murBalita <= 5, hasil dari perbandingna ini adalah True,
maka pernyataan di dalam blok kode while loop akan di jalankan persis sama seperti sebelumnya.
Proses yang berulang ini akan berhenti sampai, kondisi yang sudah ditentukan oleh while loop
mendapatkan nilai False. Yaitu, dimana variable `umurBalita` sudah mencapai nilai 6. Maka tahap
ini, kondisi akan bernilai False. Apabila telah mencapai kondisi yang salah, maka pernyataan di
dalam blok kode while loop, tidak akan dijalankan. Untuk memudahkan kita melihat apa yang
dilakukan oleh Python interpreter dalam melakukan proses perulangan, mungkin kita bisa buatkan
tabel perulangannya.
5.2 Contoh kasus lain
While loop juga akan dapat membantu dalam kasus-kasus seperti ini, misalkan, kalian memiliki
sebuah alat, robot, atau mesin yang dapat mendeteksi sesuatu, misalkan hujan. while True: do
something ode di atas akan menghasilkan perulangan tanpa batas (infinite loop). Kalo kamu
terjebak dalam kondisi seperti ini di console, kamu dapat menghentikan proses perulangan ini
dengan menekan kombinasi tombol Ctrl + C. Kita juga dapat mengatur kapan perulangan harus
dimulai, berhenti, dan bagaimana cara berulangnya. Saya akan mengambil contoh kode perulangan
umur balita di atas.
6. Perulangan for
Setelah sebelumnya kita membahas perulangan menggunakan while (while loop),
perulangan selanjutnya yang akan kita bahas adalah perulangan menggunakan for (for loop). Prinsip
dari pengulangan menggunakan for loop adalah perulangan yang berdasarkan sesuatu.
> for setiapHal in halIni: # kondisi
> jalankan PernyataanIni # pernyataan
Misalkan, di dalam sebuah tim basket terdapat 5 anggota. Kita akan memberikan setiap anggotanya
botol air. Kira-kira bentuk kodenya akan seperti ini.
Terdapat contoh lain dari penggunaan for loop yang pernah saya temui. Seperti ini. Misalkan, kita
ingin membuat perualngan sebanyak 10 kali, sambil menampilkan output dari urutan perulangan
yang sudah terjadi ke dalam console.
range() adalah sebuah built-in function dalam Python yang berguna untuk menghasilkan
sebuah object dalam tipe data integer yang berurutan dari start sampai stop dengan step tertentu.
Rumus dari fungsi range adalah,
> range(start, stop, step)
Dapat kita lihat bahwa fungsi range() memiliki 3 buah parameter. Parameter adalah syarat yang
diperlukan oleh sebuah fungsi agar dapat melakukan tugasnya. Pembahasan lebih lanjut mengenai
parameter akan kita bahas pada materi yang lain. Secara default, range() memiliki nilai parameter
start = 0. Dan memiliki minimal 1 parameter yang harus kita penuhi. Hal ini membuat kita dapat
menuliskan fungsi range() seperti ini.
Artinya, range(start=0, stop=4, step=0). Sehingga akan menghasilkan output berupa. Atau,
Misalkan kita ingin menghitung berapakah total hasil penjumlahan yang ada pada sebuah list.
7. Pernyataan Bersyarat (Conditional statement Python)
Merupakan aliran yang mengontrol kode program Python berdasarkan pengujian pernyataan
bersyarat. Seperti bahasa pemrograman lainnya, conditional statement (pernyataan bersyarat)
merupakan salah satu control flow (aliran kontrol) di bahasa pemrograman Python. Pernyataan
bersyarat dapat berisi fungsi, operator matematika dan operator logika. Syntax yang digunakan
untuk membuat control flow berupa conditional statement di Python adalah if, elif, dan else.
Syntax if, elif, dan else merupakan syntax yang digunakan untuk membuat conditional statement di
bahasa pemrograman Python.
1. Conditional statement dimulai dari pertama, saat ada pernyataan yang terpenuhi maka
perintahnya pernyataan akan dijalankan dan conditional statemen dihentikan
2. Conditional expression dimulai dengan syntax if
3. Conditional expression adalah pernyataan bersyarat yang diujikan yang dapat berisi operator
matematika, fungsi, dan logika.
4. Setiap conditional expression diakhiri tanda colon :
5. Setiap conditional expression mempunyai kode perintah dalam penulisan indentasi
6. Conditional_expression_1 merupakan pernyataan bersyarat pertama dengan perintah
command_1
7. Conditional expression kedua dan seterusnya dimulai dengan syntax elif
8. Conditional_expression_2 merupakan pernyataan bersyarat kedua dengan perintah
command_2
9. Conditional_expression_3 merupakan pernyataan bersyarat ketiga dengan perintah
command_3
10. Kondisi alternatif ditulis diakhiri dengan syntax else:
11. alternative_command merupakan perintah alternatif, digunakan saat semua kondisi bersyarat
tidak terpenuhi
7.1 Conditional Statement pada Python
a. if (Tunggal)
Misalnya dibuat program Python yang dapat mengetahui suatu bilangan yang dimasukkan
pengguna bernilai nol.
blok kode program di dalam python didefinisikan dengan indentasi Contoh sebuah fungsi sederhana
dengan nama halo_dunia():
Fungsi di atas, jika dipanggil, akan mengeksekusi perintah print() yang ada di dalamnya.
Bagaimana cara memanggil fungsi yang telah kita definisikan? Sederhana. Cukup ketik nama
fungsinya, ditambah dengan tanda kurung () seperti berikut:
Tapi jika kita memanggilnya dengan parameter tidak lengkap, justru kita akan mendapatkan error:
Pada fungsi tersebut, kita telah mengatur nilai default untuk parameter derajat. Sehingga sekarang
kita memiliki dua buah parameter. Kita coba panggil dengan 2 parameter seperti ini:
Kenapa demikian? Padahal kita inginnya hanya mengisi 2 parameter saja: Satu untuk parameter
daerah Dan yang kedua untuk parameter satuan Tapi di sini malah terisi adalah parameter derajat.
Untuk mengatasi hal ini, kita bisa mendefinisikan nama argumen/parameter yang akan kita isi.
Dengan mendefinisikan nama argumen yang kita passing, kita sekarang bisa memanggilnya bahkan
secara tidak berurutan sekalipun:
8.5 Ruang Lingkup (dan Siklus Hidup) Variabel Pada Fungsi
Variabel memiliki ruang lingkup dan siklus hidup. Secara umum, terdapat dua ruang lingkup
variabel pada python: Variabel global Dan variabel lokal Variable global adalah variabel yang bisa
dipanggil dari manapun dari satu file python. Sedangkan variable lokal adalah variabel yang hanya
hidup di dalam satu blok kode tertentu (seperti di dalam fungsi, seperti kasus kita pada pertemuan
ini). Perhatikan contoh berikut:
Pada kode di atas, variabel kota yang ada di dalam fungsi, adalah variabel kota yang sama dengan
yang ada di luar fungsi. Tapi, coba kita ubah kode programnya:
baris kode diatas adalah perintah untuk mengimpor kode library Robot yang terdapat dalam modul
jetbot. Sekarang setelah kita mengimpor kelas Robot, kita dapat menginisialisasi kelas instance
sebagai berikut.
Sekarang kita telah membuat inisialisasi Robot yang kita beri nama "robot", kita dapat
menggunakan inisialisasi ini untuk mengontrol robot. Untuk membuat robot berputar berlawanan
arah jarum jam pada 10% dari kecepatan maksimumnya, kita dapat memanggil dengan kode
sebagai berikut:
PERINGATAN: Perintah selanjutnya ini akan membuat robot bergerak!
Keren, Anda akan melihat robot berputar berlawanan arah jarum jam dan juga searah jarum jam
dengan perintah right. kecepatan diatur dalam persen dengan mengganti inisialisasi dari speed
dalam desimal dari 0 - 1 (0.3) Sekarang, untuk menghentikan robot kita dapat memanggil metode
stop.
Mungkin kita hanya ingin menjalankan robot untuk jangka waktu tertentu. Untuk itu, kita dapat
menggunakan paket time Python.
Paket ini mendefinisikan fungsi sleep, yang menyebabkan eksekusi kode diblokir selama beberapa
detik tertentu sebelum menjalankan perintah berikutnya. Coba cara berikut agar robot belok kiri
hanya setengah detik.
Kita akan melihat robot berbelok ke kiri sebentar lalu berbelok kekanan dengan menambah
kecepatan menjadi 0.2 dan kemudian berhenti. Kenapa kita tidak menuliskan perintah speed= di
dalam metode left / right ? Python memungkinkan kita untuk mengatur parameter fungsi dengan
nama , atau urutan di mana didefinisikan (tanpa menentukan nama). Robot() juga memiliki metode
forward, dan backwards
berikut merupakan coding jetbot melakukan putaran berlawanan arah jarum jam hingga kembali ke
titik semula, dengan kecepatan 0,1
1.1 Latihan
kembangkanlah kode di atas dengan menggunakan perulangan for pada python sehingga dapat
melakukan perputaran sebanyak 3 kali
2. Kontrol Gerakan
Pada bagian sebelumnya kita melihat bagaimana kita dapat mengontrol robot menggunakan
perintah seperti kiri, kanan, maju, dan mundur. Tetapi bagaimana jika kita ingin mengatur kecepatan
masing-masing motor satu per satu? Nah, ada dua cara sehingga kita bisa melakukannya Cara
pertama adalah memanggil metode set_motors. Misalnya, untuk berbelok ke kiri selama satu detik
kita bisa mengatur motor kiri menjadi 30% dan motor kanan menjadi 60% seperti berikut.
Kita akan melihat robot bergerak dengan cara yang sama persis!
kita akan melihat bilah geser merespons perintah motor! Jika kita ingin menghapus koneksi ini, kita
dapat memanggil metode unlink dari setiap link.
Tetapi bagaimana jika kita tidak menginginkan tautan dua arah, katakanlah kita hanya ingin
menggunakan penggeser untuk menampilkan nilai motor, tetapi tidak mengontrolnya. Untuk itu kita
bisa menggunakan fungsi dlink. Input kiri adalah source dan input kanan adalah target
Sekarang coba pindahkan slider. kita akan melihat bahwa robot tidak merespons. Tetapi ketika
mengatur motor menggunakan metode yang berbeda, slider akan memperbarui dan menampilkan
nilainya!
Kita akan melihat satu set kontrol robot ditampilkan di atas! Tapi sekarang tombol ini tidak akan
melakukan apa-apa (tidak berfungsi). Untuk melakukannya, kita perlu membuat beberapa fungsi
yang akan kita lampirkan ke event on_click tombol.
Sekarang setelah kita mendefinisikan fungsinya, mari kita lampirkan ke event on-click dari setiap
tombol
Sekarang ketika Kita mengklik setiap tombol, Anda akan melihat robot bergerak!
2.3 Heartbeat Killswitch
Di sini kami menunjukkan cara menghubungkan 'Heartbeat' untuk menghentikan robot agar tidak
bergerak. Ini adalah cara sederhana untuk mendeteksi apakah koneksi robot masih hidup. Kita dapat
menurunkan penggeser di bawah untuk mengurangi periode dalam detik Heartbeat. Jika komunikasi
bolak-balik antara browser tidak dapat dilakukan dalam dua Heartbeat, atribut 'status' dari Heartbeat
akan disetel mati. Segera setelah koneksi dipulihkan, atribut status akan kembali ke hidup.
1. pengontrol gamepad
Dalam contoh ini kita akan mengontrol Jetbot dari jarak jauh dengan pengontrol gamepad yang
terhubung ke mesin browser web kita. membuuat pengontrol gamepad Hal pertama yang ingin kita
lakukan adalah membuat instance dari widget Controller, yang akan kita gunakan untuk
menggerakkan robot. Widget Controller mengambil parameter index, yang menentukan nomor
pengontrol. Ini berguna jika Kita memiliki beberapa pengontrol yang terpasang, atau beberapa
gamepad muncul sebagai beberapa pengontrol. Untuk menentukan indeks pengontrol yang kita
gunakan,
1. Kunjungi [http://html5gamepad.com](http://html5gamepad.com).
Selanjutnya, kita akan membuat dan menampilkan controller kita menggunakan index.
2. Kamera
Sebelumnya kita akan memanggil kode gamepad untuk menghubungkan dengan controller
Pertama, mari kita tampilkan widget Image yang akan kita gunakan untuk menampilkan umpan
kamera langsung kita. Kita akan mengatur height dan width menjadi hanya 300 piksel sehingga
tidak memakan terlalu banyak ruang.
FYI: Tinggi dan lebar hanya mempengaruhi rendering di sisi browser, bukan resolusi
gambar asli sebelum transportasi jaringan dari robot ke browser.
b. Membuat instance kamera
Nah, saat ini belum ada gambar yang ditampilkan, karena kita belum menetapkan nilainya. Kita
dapat melakukannya dengan membuat kelas Camera dan melampirkan atribut value kamera ke
atribut value dari gambar. Pertama, mari kita buat instance kamera, kita panggil metode instance
yang akan membuat kamera baru jika belum dibuat. Jika dulu sudah ada, cara ini akan
mengembalikan kamera yang ada.
Kelas kamera kita saat ini hanya menghasilkan nilai dalam format BGR8 (biru, hijau, merah, 8bit),
sedangkan widget gambar kita menerima nilai dalam format JPEG terkompresi. Untuk
menghubungkan kamera ke gambar, kita perlu memasukkan fungsi bgr8_to_jpeg
untuk memudahkan kita akan membagi jupyter lab seperti gambar berikut
dengan kode di atas kita telah berhasil menghubungkan gamepad dengan motor dan kamera
d. Simpan foto dengan tombol gamepad
Sekarang, Kita ingin dapat menyimpan beberapa gambar dari robot. Mari kita buat perintah tombol
B (indeks 1) menyimpan snapshot dari gambar langsung saat ini. Kita akan menyimpan gambar di
direktori foto/, dengan nama yang unik menggunakan paket python uuid menggunakan pengenal
uuid1.
Sebelum menutup notebook ini dan mematikan kernel Python untuk notebook, pastikan menutup
koneksi kamera dengan benar sehingga dapat menggunakan kamera di notebook lain.
1. Pengumpulan Data (Dataset)
Jika kita menjalankan program gerak dasar, kita menikmati betapa mudahnya membuat Jetbot
bergerak! Itu sangat keren! Tapi yang lebih keren lagi, membuat JetBot bergerak sendiri! Ini adalah
tugas yang sangat sulit, yang memiliki banyak pendekatan, tetapi seluruh masalah biasanya dipecah
menjadi sub masalah yang lebih mudah. Dapat dikatakan bahwa salah satu sub masalah yang paling
penting untuk dipecahkan, adalah masalah mencegah robot memasuki situasi berbahaya! kita
menyebutnya penghindaran tabrakan.
Dalam materi kali ini, kita akan mencoba memecahkan masalah menggunakan pembelajaran
mendalam atau yang biasa disebut Deep Learning dan satu sensor yang sangat serbaguna: kamera.
kita akan melihat bagaimana dengan jaringan saraf (Neural Network), kamera, dan NVIDIA Jetson
Nano, kami dapat mengajari robot perilaku yang sangat berguna! Pendekatan yang kita ambil untuk
menghindari tabrakan adalah dengan membuat safety bubble virtual di sekitar robot. Dalam
pengaman ini, robot dapat berputar dalam lingkaran tanpa menabrak benda apa pun (atau situasi
berbahaya lainnya seperti jatuh dari jalur). Tentu saja, robot dibatasi oleh apa yang ada di bidang
penglihatannya, dan kita tidak dapat mencegah objek ditempatkan di belakang robot, dll.
Tetapi kita dapat mencegah robot memasuki skenario yang kita buat. Cara yang akan kita lakukan
ini sangat sederhana: Pertama, kita akan menempatkan robot secara manual dalam skenario yang
akan kita buat di mana safety bubble dilanggar, dan memberi label skenario ini blocked. kita akan
menyimpan cuplikan (gambar) dari apa yang dilihat robot bersama dengan label ini. Kedua, kita
akan menempatkan robot secara manual dalam skenario yang aman untuk bergerak maju sedikit,
dan memberi label skenario ini free. Demikian juga, kami menyimpan snapshot bersama dengan
label ini. Itu saja yang akan kita lakukan dalam materi kali ini; pengumpulan data. Setelah kita
memiliki banyak gambar dan label, kami akan mengunggah data ini ke mesin berkemampuan GPU
tempat kami akan melatih jaringan saraf untuk memprediksi.
CATATAN PENTING: Saat JetBot berputar di tempatnya, ia sebenarnya berputar di sekitar
pusat di antara kedua roda, bukan di tengah sasis robot itu sendiri. Ini adalah detail penting
yang perlu diingat ketika kita mencoba memperkirakan apakah safety bubble robot dilanggar
atau tidak. Tapi jangan khawatir, tidak harus tepat. Jika ragu, lebih baik bersandar pada sisi
yang berhati-hati. Kita ingin memastikan JetBot tidak memasuki skenario yang tidak dapat
dihindari dengan memutar di tempatnya.
a. Menampilkan kamera secara langsung
Jadi mari kita mulai. Pertama, mari kita inisialisasi dan menampilkan kamera kita seperti yang kita
lakukan pada materi teleoperasi. Jaringan saraf kita mengambil gambar 224x224 piksel sebagai
masukan. kita akan mengatur kamera ke ukuran itu untuk meminimalkan ukuran file dari kumpulan
data. Dalam beberapa skenario, mungkin lebih baik untuk mengumpulkan data dalam ukuran
gambar yang lebih besar dan menurunkan skala ke ukuran yang diinginkan nanti.
Luar biasa, selanjutnya mari kita buat beberapa direktori tempat kita akan menyimpan semua data
kita. kita akan membuat folder dataset yang akan berisi dua sub-folder free dan blocked, di mana
kita akan menempatkan gambar untuk setiap skenario.
Jika kira me-refresh browser file Jupyter di sebelah kiri, Anda sekarang akan melihat direktori
tersebut muncul. Selanjutnya, mari kita buat dan tampilkan beberapa tombol yang akan kita
gunakan untuk menyimpan snapshot untuk setiap label kelas. Kita juga akan menambahkan
beberapa kotak teks yang akan menampilkan berapa banyak gambar dari setiap kategori yang telah
kami kumpulkan sejauh ini. Ini berguna karena kami ingin membuat tentu saja kita mengumpulkan
gambar free sebanyak gambar bloked. Ini juga membantu untuk mengetahui berapa banyak gambar
yang telah kami kumpulkan secara keseluruhan.
Saat ini, tombol-tombol ini tidak akan melakukan apa-apa. Kita harus melampirkan fungsi untuk
menyimpan gambar untuk setiap kategori ke fungsi on_click tombol. lalu kita akan menyimpan
nilainya widget Image, sudah dalam format JPEG terkompresi! Untuk memastikan kita tidak
mengulangi nama file yang sama (bahkan di mesin yang berbeda!), kami akan menggunakan paket
uuid dalam python, yang mendefinisikan metode uuid1 untuk menghasilkan pengenal unik.
Pengidentifikasi unik ini dihasilkan dari informasi seperti waktu saat ini dan alamat mesin.
Sekarang tombol di atas akan menyimpan gambar ke direktori free dan blocked. Kita dapat
menggunakan browser file Jupyter Lab untuk melihat file-file ini! Sekarang lanjutkan dan
kumpulkan beberapa data
1. Tempatkan robot dalam skenario di mana robot diblokir dan tekan tambahkan yang di
bloked
2. Tempatkan robot dalam skenario gratis dan tekan menambahkan free
3. Ulangi 1, 2
PENGINGAT: Kita dapat memindahkan widget ke jendela baru dengan mengklik kanan sel
dan mengklik Buat Tampilan Baru untuk Output. Atau, Kita bisa menampilkannya kembali
bersama-sama seperti yang akan kita lakukan di bawah ini
Berikut adalah beberapa tip untuk mengambil data
1. Coba orientasi yang berbeda
2. Coba pencahayaan yang berbeda
3. Cobalah berbagai jenis objek/tabrakan; dinding, tepian, benda
4. Coba lantai / benda bertekstur yang berbeda; bermotif, halus, kaca, dll.
Pada akhirnya, semakin banyak data yang kita miliki tentang skenario yang akan dihadapi robot di
dunia nyata, semakin baik perilaku menghindari tabrakan kita. Ini penting untuk mendapatkan
bervariasi data (seperti yang dijelaskan oleh tip di atas) dan bukan hanya banyak data, tetapi Anda
mungkin memerlukan setidaknya 100 gambar dari setiap kelas Tapi jangan khawatir, itu berjalan
cukup cepat begitu kita mulai
2. Train Model (ResNet18)
Kali ini kita akan melakukan training data foto yang telah kita ambil sebelumna.dengan kita akan
melatih pengklasifikasi gambar untuk mendeteksi dua kelas free dan bloked, yang akan kita
gunakan untuk menghindari tabrakan. Untuk ini, kita akan menggunakan lirary deep learning yang
populer yaitu PyTorch
Model resnet18 awalnya dilatih untuk kumpulan data yang memiliki 1000 label kelas, tetapi
kumpulan data kita hanya memiliki dua label kelas! Kita akan mengganti lapisan terakhir dengan
lapisan baru yang tidak terlatih yang hanya memiliki dua keluaran.
Selanjutnya, muat trained weights dari file best_model_resnet18.pth yang Anda unggah
Saat ini, model weights yang terletak di memori CPU. Kita akan mengeksekusi kode di bawah ini
untuk ditransfer ke perangkat GPU.
Kita juga akan membuat instance robot yang diperlukan untuk menggerakkan motor.
Selanjutnya, kita akan membuat fungsi yang akan dipanggil setiap kali nilai kamera berubah.
Fungsi ini akan melakukan langkah-langkah berikut:
1. Pre-trained gambar kamera
2. Jalankan jaringan saraf
3. Sementara output jaringan saraf menunjukkan bahwa apakah kita berhenti, kita akan belok
kiri, jika tidak kita maju.
Keren! Kita telah membuat fungsi eksekusi jaringan saraf (Neural Network), tetapi sekarang Kita
perlu melampirkannya ke kamera untuk diproses. dengan melakukannya fungsi observe.
PERINGATAN: Kode ini dapat memindahkan robot!! Sesuaikan penggeser kecepatan yang
telah kita tentukan sebelumnya untuk mengontrol kecepatan robot dasar. bergerak cepat, jadi
mulailah dengan lambat, dan tingkatkan nilainya secara bertahap.
Luar biasa! Jika Kita ingin menghentikan perilaku ini, Kita dapat melepaskan panggilan balik
(callback) dengan menjalankan kode di bawah ini.
Mungkin Kita ingin robot berjalan tanpa streaming video ke browser. kita dapat memutuskan tautan
kamera seperti di bawah ini.
Sekali lagi, mari kita tutup koneksi kamera dengan benar agar kamera dapat digunakan di notebook
lain.