Tutorial Robot Operating System (Bagian 3) : Membuat Node Publisher Menggunakan C++
Sekarang tinggalkan si kura – kura, dan mari membangun program ROS sendiri. Pada sesi kali ini embeddednesia akan membahas bagaimana membuat program sederhana yang berfungsi publisher dan subscriber sebuah topic.
Karena cukup panjangnya bahasan ini, maka embeddednesia membaginya menjadi dua judul terpisah yaitu,
- Membuat Node Publisher
- Membuat Node Subscriber (coming soon)
Dalam tutorial ini embeddednesia menggunakan Sistem Operasi Ubuntu 16.04 LTS dan ROS Kinetic Kame. Script editor yang membuat program, digunakan Visual Studio Code. Namun anda bebas menggunakan script editor sesuai yang anda sukai.
Tutorial ini juga dibuat dalam versi video yang telah diupload di Youtube. Jangan lupa like dan subscribe serta gunakan kolom komentar untuk memberikan komentar, saran dan pertanyaan.
ROS adalah framework robotik yang bersifat netral, dalam artian tidak terikat kepada salah satu bahasa pemrograman. Node akan tetap bisa saling berkomunikasi node yang lain meskipun dibangun dengan bahasa pemrogaman yang berbeda. Hal ini memberikan kebebasan kepada seorang software developer untuk memilih bahasa pemrograman yang akan digunakan.
Package ROS
Semua program ROS diorganisasikan ke dalam package – package. Misalkan, seperti yang sudah pernah dibahas sebelumnya, turtlesim_node dan turtle_teleop_key berada dalam satu package turtlesim. Karena itu sebelum node dibuat, terlebih dahulu harus disiapkan package yang menampungnya.
Ada dua jenis pacakge untuk ROS. Menggunakan rosbuild dan catkin. Namun penggunaan rosbuild telah deprecated dan digantikan oleh catkin, membuat package baru di dalam catkin digunakan perintah sebagai berikut
catkin_create_pkg [nama_package] [dependensi_1] [dependensi_2 dst]
Dalam sesi kali ini dibuat package bernama tutorial_ros dengan dependensi
- std_msgs (tipe message ros yang nanti digunakan sebagai topic)
- rospy (ros client, library diperlukan jika ingin membangun node menggunakan python)
- roscpp (ros client, library yang diperlukan jika ingin membangun node menggunakan c++)
Sebuah package ROS memiliki struktur file dan direktori seperti sebagai berikut
- Include/package_name/ : Direktori yang berisi header library yang dibutuhkan
- msg/ : berisi deskripsi message kustom
- scripts/ : tempat developer menempatkan script yang bisa dieksekusi seperti Bash, Python ataupun bahasa scripting yang lain
- src/ : Direktori dimana disimpan berkas kode sumber dari program.
- srv/ : Direktori tipe service
- txt : File deskripsi CMake
- xml: Package manifest
Karena dalam tutorial ini digunakan bahasa pemrograman C++, maka source program akan disimpan pada subdirektori src. Jalankan aplikasi script editor, dan buat file baru bernama simple_talker.cpp

Tuliskan program seperti berikut :
Pembahasan lebih rinci dari program tersebut tidak akan dibahas dalam tulisan ini, anda mempelajarinya melalui dokumentasi ROS yang berada di alamat ROS.org. Namun secara umum, program tersebut
- Menginisialisasi sistem ROS dengan ros::init dan construct dengan ros::NodeHandle
- Advertise dengan fungsi advertise
- Mempublikasikan message di dalam blok superloop while. dengan menggunakan fungsi publish
Berikutnya ubah CMakelist.xml, tambahkan 3 baris sebagai berikut
Setelah semuanya beres, kini saatnya membuat binary dari source code program yang telah dibuat. Compile program menggunakan perintah catkin_make. Jangan lupa untuk selalu berada posisi root workspace ketika akan melakukan compile program
Jika tidak ada error maka proses build berjalan sukses, jalankan program dengan menggunakan perintah rosrun. Pastikan selalu bahwa master ros (roscore) telah running sebelum node apapun dijalankan.
Yeay, sekarang kita telah bisa membuat aplikasi pertama di ROS. Kita bisa memeriksanya menggunakan rosnode list dan rosnode info untuk mengetahui lebih rinci tentang node yang baru saja dibuat
Pada tulisan berikutnya, embeddednesia akan melanjutkan tutorial dengan membangun program node subscriber yang berfungsi men-subscribe topic chatter yang telah dibuat pada sesi ini.
