Robotika · pelajaran 4
ROS 2: node, topik, dan pesan
Kenapa dipecah-pecah?
Program robot sungguhan sangat besar: membaca kamera, merencanakan langkah, mengatur servo, menampilkan visualisasi. ROS (Robot Operating System) memecahnya menjadi node: program kecil yang masing-masing mengerjakan satu hal. Node tidak saling memanggil langsung. Mereka mengirim pesan lewat topik, seperti kanal bernama.
- Node yang mengirim disebut publisher, yang mendengarkan disebut subscriber.
- Satu topik bisa punya banyak publisher dan banyak subscriber. Pengirim tidak perlu tahu siapa yang mendengarkan.
- Setiap topik punya tipe pesan. Contohnya
/cmd_velbertipegeometry_msgs/msg/Twist.
Buka tab Graf ROS (mirip rqt_graph). Kotak = node, pil = topik, garis = aliran pesan. Tekan W dan lihat jalurnya menyala.
| node | tugas |
|---|---|
/teleop_keyboard | tombol → /cmd_vel |
/op3_walking | /cmd_vel → rencana langkah → sudut 20 sendi di /op3/joint_goals |
/op3_manager | satu-satunya yang bicara ke bus servo; menerbitkan /joint_states |
/camera | gambar kamera kepala di /camera/image_raw |
/ball_detector | gambar → posisi bola di /ball |
/image_view | menampilkan gambar kamera (kotak di pojok 3D) |
/mqtt_bridge | jembatan ke dunia MQTT (pelajaran berikutnya) |
/rviz2 | visualisasi |
Mendengarkan
ros2 node list
ros2 topic list -t
ros2 topic info /cmd_vel
ros2 interface show geometry_msgs/msg/Twist
ros2 topic echo /cmd_vel
ros2 topic hz /joint_states
Twist berisi dua vektor: linear (m/s) dan angular (rad/s). Untuk robot berjalan, yang dipakai linear.x (maju), linear.y (geser), dan angular.z (belok). Saat echo berjalan, lihat Graf ROS: terminalmu muncul sebagai node subscriber baru!
Berbicara
ros2 topic pub -r 10 /cmd_vel geometry_msgs/msg/Twist '{linear: {x: 0.12}, angular: {z: 0.3}}'
Robot berjalan melingkar. Tekan Ctrl+C untuk berhenti mengirim. Robot berhenti sekitar 1,5 detik kemudian, karena op3_walking punya watchdog: kalau perintah berhenti datang (koneksi putus, program crash), robot tidak boleh terus berjalan.
Hal yang perlu diperhatikan:
- Coba
--oncesebagai ganti-r 10. Kenapa robot hanya melangkah sebentar? - Kirim lewat terminal sambil menekan W. Sekarang ada dua publisher di
/cmd_vel, dan yang terakhir mengirim yang menang. Robot sungguhan memakai multiplexer (twist_mux) untuk memberi prioritas. - Coba tipe yang salah:
ros2 topic pub /cmd_vel std_msgs/msg/String "data: maju". ROS menolaknya, karena tipe adalah kontrak antar-node.
Layanan (service)
Topik itu satu arah, seperti siaran. Layanan itu tanya-jawab: kirim permintaan, tunggu balasan.
ros2 service list
ros2 service call /op3/reset std_srvs/srv/Trigger
ros2 topic pub --once /op3/motion std_msgs/msg/String 'data: kick_right'
Catatan
Di OP3 asli, modul jalan berjalan di dalam op3_manager (robotis_framework) supaya lebih cepat; di sini ia dipisah menjadi node sendiri agar alirannya terlihat. Graf, perintah, dan tipe pesannya sama dengan ROS 2 sungguhan, tapi semuanya disimulasikan di browser.
Misi
Gerakkan OP3 sejauh 0,5 m hanya dengan ros2 topic pub dari terminal.
Selanjutnya: MQTT: robot di internet · Semua pelajaran