Selamat datang di sonoku.com

Membuat ROS publisher menggunakan rospy dan python di Raspberry Pi

Pada tutorial ini Raspberry Pi (Raspi) disetup sebagai master dan PC/Laptop sebagai slave. Pada Raspbery Pi di-install ROS Melodic demikian juga PC/Laptop dengan OS Ubuntu di-install ROS Melodic. Kedua mesin ini saling terkoneksi via internet tethering dari handphone. Anda bisa mengkoneksikan keduanya melalui perangkat lain, misal modem atau router wifi di rumah.

Tutirual ini menggunakan package rospy dan std_msg  yang biasanya sudah ada pada saat kita menginstall ROS.

Untuk membuat Raspi menjadi master lakukan langkah berikut:

1. Cari IP dari Raspi dengan perintah ifconfig

2. Edit file ~/.bashrc, dengan perintah

$ sudo nano ~/.bashrc

kemudian tambahkan parameter ROS_IP dan ROS_MASTER_URI, berikutnya simpan

export ROS_IP="192.168.80.168"
export ROS_MASTER_URI="http://192.168.80.168:11311

Menjadikan PC/Laptop sebagai slave:

1. Cari IP dari Laptop dengan perintah ifconfig

2. Edit file ~/.bashrc, dengan perintah

$ sudo nano ~/.bashrc

kemudian tambahkan parameter ROS_IP dan ROS_MASTER_URI, berikutnya simpan

export ROS_IP="192.168.80.19"
export ROS_MASTER_URI="http://192.168.80.168:11311
Kode Program Publisher

Kita tambahkan node publisher di Raspi yang bertugas mempublikasi messages berupa nilai string. Kode program ditulis menggunakan python di Raspi.

Pertama buat folder di catkin_ws/src, misal namanya ‘test_pub’

$ cd ~catkin_ws/src/
$ mkdir test_pub

Kemudian buat file python “pub1.py” menggunakan IDE yang anda sukai letakkan pada folder test_pub yang baru saja dibuat. Kode programnya sebagai berikut:

#!/usr/bin/env python3

import rospy
from std_msgs.msg import String

def publisher():
    pub = rospy.Publisher('string_publish', String, queue_size=10)
    rospy.init_node('coba_publisher')

    rate = rospy.Rate(1)
    msg_to_publish = String()

    counter = 0
    while not rospy.is_shutdown():
        string_to_publish = "Publishing %d" % counter
        counter += 1

        msg_to_publish.data = string_to_publish
        pub.publish(msg_to_publish)

        rospy.loginfo(string_to_publish)
        rospy.sleep(0)


if __name__ == "__main__":
    try:
        publisher()
    except rospy.ROSInterruptException:
        pass
Menjalankan Publisher

Setelah selesai set file pub1.py agar dapat dieksekusi dengan perintah:

$ chmod +x pub1.py

Berikutnya build workspace dengan perintah:

$ cd ~/catkin_ws
$ catkin_make

Kita bisa coba untuk jalankan publishernya kemudian dimonitoring (subscribe) isi messagesnya oleh slave (laptop). Pertama jalankan roscore di Raspi,

$ roscore

Kemudian jalankan perintah rosrun untuk mulai

$ rosrun test_pub pub1.py

Dengan demikian master akan mempublikasikan semua nilai string seperti yang ditunjukkan pada gambar berikut:

Memantau topic dari master

Kemudian pada slave (laptop) kita bisa monitor messages yang di-publish oleh master. Namun sebelumnya pastikan bahwa slave sudah dapat membaca topic yang sedang dipublish dengan perintah $ rostopic list . Hasil perintah ini akan menampilkan beberapa topic yang sedang dipublish, untuk kasus kita nama topicnya adalah “/string_publish”. Untuk menampilkan isi dari messages yang dipublish kita bisa gunakan perintah

$ rostopic echo /string_publish

Hasilnya terminal akan menampilkan pesan seperti yang dipublish oleh master (Raspi) seperti  tampak pada gambar berikut:

Dengan demikian dapat disimpulkan antara master (Raspi) dapat mempublish sebuah topic dan slave (laptop) dapat subscribe topic tersebut dan menampilkan pesan (messages) pada topic yang sedang disubcribe. Kita dapat membuat kode program untuk membaca pesan dari publisher menggunakan pyhton. Kita juga dapat mengembangkan prinsip dasar ini misalnya untuk publish sebuah nilai pembacaan sensor suhu atau kelembaban untuk kemudian ditampilkan hasilnya di komputer slave.