Membangun Node Subscriber Menggunakan C++

Tutorial Robot Operating System (Bagian 4)

0 114

Sebelumnya,  embeddednesia telah membahas mengenai bagaimana membuat Node pada ROS yang berfungsi sebagai Publisher. Pada tulisan kali ini,  embeddednesia akan melanjutkan membuat program Node yang berfungsi sebagai Subscriber dari Node yang telah dipublish oleh node publisher dari program yang sebelumnya pernah dibahas.

Jika anda belum mengikuti tulisan sebelumnya tentang bagaimana membuat node publisher pada ROS, disarankan untuk membaca terlebih dahulu tulisan sebelumnya sebagai pondasi sebelum menginjak ke bahasan ini.

Hal pertama yang perlu diketahui sebelum menulis program untuk mensubscribe sebuah topic adalah, anda harus mengetahui nama topic yang ingin disubscribe, beserta jenis tipe data pada message-nya. Untuk melihat topic yang sedang dipublish pada suatu  environment ROS, gunakan perintah rostopic list

rostopic list
/chatter
/rosout
/rosout_agg

Dalam tutorial ini, topic yang ingin disubscribe adalah /chatter . Untuk mengetahui lebih rinci tentang topic /chatter gunakan perintah rostopic info [nama topic]

rostopic info /chatter
Type: std_msgs/String
Publishers:
* /my_talker (http://ROS-16:46041/)
Subscribers: None

Dari informasi tersebut, diketahui bahwa topic chatter memiliki message yang berjenis std_msgs/String. Oke, mari dibuat programnya, buka text editor pada workspace di package tutorial_ros pada tutorial sebelumnya, buat file bernama listener.cpp





Program tersebut terdiri dar dua bagian besar, fungsi main yang merupakan titik awal eksekusi program, dan fungsi callback yang diberi nama chatterCallback. fungsi callback ini akan dipanggil secara internal apabila message diterima dari topic yang ingin disubscribe.

Perintah subscribe diberikan oleh fungsi subscribe di nomer 11, fungsi ini memiliki 3 argumen. Argumen pertama, diisi oleh nama topic yang ingin disubscribe, argumen kedua adalah antrian message yang bisa dibuffer oleh program, sedangkan yang ketiga adalah nama fungsi callback yang ingin dipanggil apabila satu message baru berhasil diterima.

Fungsi subscriber pada baris 11 akan memberikan return object ros::Subscriber yang mesti ditampung hingga dilakukan unsubscribe. ketika object tersebut didestruct maka node akan otomatis me-subscribe topic. Sedangkan fungsi ros::spin(), berlaku seperti superloop yang akan melakukan listening dan mentrigger fungsi callback secepat mungkin begitu sebuah message diterima.

Sama seperti di tulisan sebelumnya, untuk mengcompile, menjadikan source code menjadi binary. Ubah CMakelist.xml, tambahkan 3 baris sebagai berikut





Gunakan perintah catkin_make, untuk meng-compile program. 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_listener

Jika tidak ada error, maka proses build berjalan sukses, jalankan program dengan menggunakan perintah rosrun. Sebelumnya, pastikan  master ros (roscore) dan node simple_publisher telah running sebelum  node simple_listener dijalankan, masing – masih di jendela terminal yang terpisah

roscore
rosrun tutorial_ros simple_talker
rosrun tutorial_ros simple_listener

Perhatikan pada jendela terminal simple_listener menampilkan data yang dikirim pada jendela terminal simple_publisher

rosrun tutorial_ros simple_listener
[ INFO] [1517350009.193051310]: I heard: [Hi, this is my_talker 104]
[ INFO] [1517350009.292889810]: I heard: [Hi, this is my_talker 105]
[ INFO] [1517350009.392951414]: I heard: [Hi, this is my_talker 106]
[ INFO] [1517350009.492990666]: I heard: [Hi, this is my_talker 107]
[ INFO] [1517350009.592750328]: I heard: [Hi, this is my_talker 108]
[ INFO] [1517350009.692884766]: I heard: [Hi, this is my_talker 109]

Untuk menampilkan info dari node listener, gunakan rosnode info nama_node

rosnode info /listener
--------------------------------------------------------------------------------
Node [/listener]
Publications:
* /rosout [rosgraph_msgs/Log]
Subscriptions:
* /chatter [std_msgs/String]
Services:
* /listener/set_logger_level
* /listener/get_loggers
contacting node http://ROS-16:33887/ …
Pid: 5022
Connections:
* topic: /rosout
* to: /rosout
* direction: outbound
* transport: TCPROS
* topic: /chatter
* to: /my_talker (http://ROS-16:36681/)
* direction: inbound
* transport: TCPROS

 

Sedangkan untuk melihat visualisasi yang terjadi pada masing – masing node, gunakan rqt_graph.

ros-1

Dari gambar dapat diketahui bahwa node my_talker mempublish topic bernama /chatter dan disubscribe oleh node /listener (perhatikan arah tanda panah).

%d blogger menyukai ini: