Membuat Node Publisher Menggunakan C++

Tutorial Robot Operating System (Bagian 3)

0 353

Pada bagian sebelumnya, embeddednesia telah sedikit mengulas mengenai gambaran fungsi publisher dan subscriber yang ada pada ROS dari contoh aplikasi simulator turtlesim.

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,

  1. Membuat Node Publisher
  2. 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

  1. std_msgs (tipe message ros yang nanti digunakan sebagai topic)
  2. rospy (ros client, library diperlukan jika ingin membangun node menggunakan python)
  3. roscpp  (ros client, library yang diperlukan jika ingin membangun node menggunakan c++)

catkin_create_pkg tutorial_ros2 std_msgs rospy roscpp
Created file tutorial_ros2/package.xml
Created file tutorial_ros2/CMakeLists.txt
Created folder tutorial_ros2/include/tutorial_ros2
Created folder tutorial_ros2/src
Successfully created files in /home/robot/kinetic_workspace/src/tutorial_ros/tutorial_ros2. Please adjust the values in package.xml.

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

VirtualBox_ROS-16.04VM_26_12_2017_11_30_56

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

  1. Menginisialisasi sistem ROS dengan ros::init dan construct dengan ros::NodeHandle
  2. Advertise dengan fungsi advertise
  3. 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

catkin_make
Base path: /home/robot/kinetic_workspace
Source space: /home/robot/kinetic_workspace/src
Build space: /home/robot/kinetic_workspace/build
Devel space: /home/robot/kinetic_workspace/devel
Install space: /home/robot/kinetic_workspace/install
Running command: “make cmake_check_build_system” in “/home/robot/kinetic_workspace/build”
Running command: “make -j1 -l1” in “/home/robot/kinetic_workspace/build”
[100%] Built target simple_talker

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.

rosrun tutorial_ros simple_talker
[ INFO] [1514262783.711070537]: Hi, this is my_talker 0
[ INFO] [1514262783.811136895]: Hi, this is my_talker 1
[ INFO] [1514262783.911086725]: Hi, this is my_talker 2
[ INFO] [1514262784.011079764]: Hi, this is my_talker 3
[ INFO] [1514262784.111078253]: Hi, this is my_talker 4
[ INFO] [1514262784.211088402]: Hi, this is my_talker 5
[ INFO] [1514262784.311075562]: Hi, this is my_talker 6
[ INFO] [1514262784.411080863]: Hi, this is my_talker 7
[ INFO] [1514262784.511087133]: Hi, this is my_talker 8
[ INFO] [1514262784.611057449]: Hi, this is my_talker 9

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

rosnode list
/my_talker
/rosout
/rqt_gui_py_node_10180
rosnode info /my_talker
--------------------------------------------------------------------------------
Node [/my_talker]
Publications:
* /chatter [std_msgs/String]
* /rosout [rosgraph_msgs/Log]
Subscriptions: None
Services:
* /my_talker/set_logger_level
* /my_talker/get_loggers
contacting node http://ROS-16:34191/ …
Pid: 10119
Connections:
* topic: /rosout
* to: /rosout
* direction: outbound
* transport: TCPROS

Pada tulisan berikutnya, embeddednesia akan melanjutkan tutorial dengan membangun program node subscriber yang berfungsi men-subscribe topic chatter yang telah dibuat pada sesi ini.

%d blogger menyukai ini: