BAB V HASIL DAN PEMBAHASAN
5.5 Komunikasi Perangkat Marvelmind Menggunakan ROS
from geometry_msgs.msg import Twist def pose_callback(pose: Pose):
cmd = Twist()
if pose.x > 9.0 or pose.x < 2.0 or pose.y > 9.0 or pose.y < 2.0:
cmd.linear.x = 1.0 cmd.angular.z = 1.4 else:
cmd.linear.x = 5.0 cmd.angular.z = 0.0 pub.publish(cmd)
if __name__=='__main__':
rospy.init_node("turtle_controller")
pub = rospy.Publisher("/turtle1/cmd_vel", Twist, queue_size=10)
sub = rospy.Subscriber("/turtle1/pose", Pose, callback=pose_callback) rospy.loginfo("Node has been started.")
rospy.spin()
Kode Program Node Pose Subscriber
#!/usr/bin/env python3 import rospy
from turtlesim.msg import Pose
def pose_callback(msg: Pose):
rospy.loginfo("(" + str(msg.x) + "," + str(msg.y) +")")
if __name__ == '__main__':
rospy.init_node("turtle_pose_subscriber")
sub = rospy.Subscriber("/turtle1/pose", Pose, callback=pose_callback) rospy.loginfo("Node has been started.")
rospy.spin()
Pada program turtle controller dapat dilihat bahwa node tersebut publisher untuk turtle/cmd/veld an subscriber untuk turtle/pose. Turtle controller mempublish instruksi untuk pergerakan dari turtle node. Instruksi yang dipublish yaitu cmd_linier dan cmd_angular dari turtle node.
ROS. Setelah melakukan konfigurasi Indoor GPS di windows selanjutnya adalah menjalankan ROS Marvelmind pada raspberry untuk menerima data lokasi dari mobile beacon (hedgehog) dengan menghubungkan mobile beacon ke raspberry menggunakan kabel USB Indoor GPS.
Sebelum menjalankan Marvelmind ROS, terlebih dahulu menjalankan ROS server pada terminal berbeda dengan perintah roscore.
Gambar 5.23 Menjalankan ROS Server
Roscore berperan sebagai pusat koordinasi utama yang memfasilitasi komunikasi antara node-node ROS, memungkinkan mereka untuk menemukan satu sama lain, berbagi parameter, dan bertukar data. Selain itu, roscore juga mengelola logging dalam ROS, memungkinkan pencatatan pesan dan data penting yang dihasilkan oleh node-node ROS untuk pengawasan dan analisis. Dengan demikian, roscore membentuk fondasi esensial untuk interaksi dan koordinasi yang efisien dalam ekosistem ROS. Selanjutnya adalah menjalakan node hedge_rcv_bin dari paket ROS Marvelmind untuk menerima data dari mobile beacon seperti yang ditampilkan pada gambar 5.24. Perangkat terhubung ke port /dev/ttyACM1 dengan memeriksa dengan instruksi ls /dev/ttyACM*.
Gambar 5.24 Menjalankan ROS Marvelmind
Setelah paket Indoor GPS telah berhasil dijalankan maka akan muncul beberapa topik yang berisi informasi mengenai data dari mobile beacon. Data dari masing-masing topik ini yang digunakan untuk memberikan instruksi lebih lanjut yang dikirim lewat komunikasi serial ke Arduino. Untuk mengetahui topik-topik yang muncul setelah menjalankan paket Indoor GPS dengan menjalankan instruksi rostopic list pada terminal terpisah sehingga akan muncul informasi mengenai topik-topik dari Indoor GPS seperti yang ditampilkan pada gambar 5.25.
Gambar 5.25 Topik List dari Paket Indoor GPS
Informasi dari setiap topik dapat dilihat pada tabel 5.1.Dari setiap topik, pada penelitian ini topik yang digunakan adalah /hedge_pos_ang. Topik /hedge_pos_ang memiliki informasi yang yang cukup lengkap mengenai data lokasi dari mobile beacon.
Topic Message field Type Description
hedge_pos_ang address uint8 Address of mobile beacon
timestamp_ms uint32 Timestamp of location, milliseconds x_m float64 X coordinate, meters
y_m float64 Y coordinate, meters z_m float64 Z coordinate, meters flags uint8 flags of location
angle float64 Orientation angle of paired beacons, degrees
beacon_pos_a address uint8 Address of stationary beacon
x_m float64 X coordinate, meters
y_m float64 Y coordinate, meters
z_m float64 Z coordinate, meters
beacon_distance address_hedge uint8 Address of mobile beacon address_beacon uint8 Address of stationary beacon
distance_m float64 Raw distance from mobile to stationary
beacon, meters
hedge_imu_fusion timestamp_ms int64 Timestamp of IMU fusion data, milliseconds
x_m float64
(X,Y,Z) coordinates of mobile beacon by IMU fusion. meters.
y_m float64
z_m float64
qw float64 Orientation quaternion of mobile beacon (qw,qx,qy,qz).
Normalized (qw2+qx2+qy2+qz2=1)
qx float64
qy float64
qz float64
vx float64 (vx, vy, vz) – speed vector of mobile beacon calculated by IMU fusion, meters/s
vy float64
vz float64
ax float64 (ax, ay, az) – acceleration of mobile beacon meters/s2
ay float64
az float64
hedge_imu_raw timestamp_ms int64 Timestamp of raw IMU data, milliseconds acc_x int16 (acc_x, acc_y, acc_z) – raw accelerometer
data, 1 mg/LSB
acc_y int16
acc_z int16
gyro_x int16 (gyro_x, gyro_y, gyro_z) – raw gyroscope data, 0.0175 dps/LSB
gyro_y int16
gyro_z int16
compass_x int16 (compass_x, compass_y, compass_z) – raw compass data (only for HW4.9 beacons).
X,Y: 1100 LSB/Gauss Z: 980 LSB/Gauss compass_y int16
compass_z int16
hedge_quality address uint8 Address of the mobile beacon beacon quality_percents uint8 Quality of location, percents
hedge_telemetry battery_voltage float64 Battery voltage of the mobile beacon, volts rssi_dbm int8 RSSI (radio signal strength), dBm marvelmind_w
aypoint
total_items uint8 Total number of waypoint program items (N)
item_index uint8 Index of this waypoint item (0…N-1) movement
_type uint8 Type of action (6 = move to specified point)
param1 int16 Parameter 1 (depends from movement_type)
X coordinate of waypoint, cm if type= 6
param2 int16 Parameter 2 (depends from movement_type)
Y coordinate of waypoint, cm if type= 6
param3 int16 Parameter 3 (depends from movement_type)
Z coordinate of waypoint, cm if type=
6 Tabel 5.1 Informasi dari Setiap Topic
Dari Tabel 5.1 dapat dilihat informasi dari setiap topil, pada topik hedge_pos_ang berisi informasi dari mobile beacon yang terhubung ke raspberry yaitu address dan koordinat x, y dan z dari mobile beacon. Dengan menjalankan topik ini maka kita akan memperoleh informasi yang lengkap dari mobile beacon untuk melakukan navigasi kendaraan. Selanjutnya adalah menjalankan topik hedge_pos_ang sehingga ditampilkan informasi dari beacon pada raspberry.
Dengan menjalankan topik hedge_pos_ang akan menampilkan data seperti gambar 5.26
Gambar 5.26 Data yang diperoleh dari Topik Hedge_Pos_Ang
Nilai pertama yang terdapat dalam tanda kurung siku merupakan stempel waktu ROS, yang digunakan untuk mengidentifikasi waktu pengambilan data. Berikutnya adalah stempel waktu hedgehog dalam milidetik, yang mencatat waktu saat data tersebut dihasilkan oleh perangkat hedgehog. Selanjutnya, ada informasi mengenai interval waktu antara sampel posisi, yang diukur dalam milidetik, yang memberikan informasi tentang seberapa sering data posisi diperbarui.
Selain itu, terdapat koordinat X, Y, Z dalam meter, yang memberikan lokasi spesifik dari beacon dinamis. Terakhir, ada byte yang mengandung flag atau informasi tambahan yang terkait dengan data tersebut.Selain itu, node ini juga berfungsi sebagai publisher dan mengirimkan data ke topik visualization_marker. Ini memungkinkan untuk melihat posisi dalam perangkat lunak ROS standar 'rviz'. Untuk melakukannya, jalankan 'rviz' di terminal yang berbeda seperti yang ditunjukkan dalam tangkapan layar. Kemudian, tampilan GUI seperti yang ditampilkan pada gambar 5.27 akan muncul. Untuk melihat hedgehog, pastikan bahwa parameter fixed frame memiliki nilai my_frame, dan marker visualization marker terhubung.
Gambar 5.27 Tampilan posisi pada visualization marker