Robotika · pelajaran 11
Odometri: menebak posisi dari putaran roda
Menjumlahkan langkah kecil
Setiap 20 ms, turtlebot3_node membaca posisi kedua roda (encoder) lewat bus. Dari selisihnya dengan bacaan sebelumnya:
Langkah kecil itu dijumlahkan menjadi posisi (x, y) dan arah ψ, lalu dikirim sebagai nav_msgs/msg/Odometry di /odom:
ros2 topic echo /odom
Posisi ada di pose.pose.position, sedangkan arahnya di pose.pose.orientation sebagai quaternion (x, y, z, w). Untuk putaran di bidang datar, ψ = 2·atan2(z, w). Di Python: minros.yaw(msg.pose.pose.orientation). Odometri dimulai dari (0, 0) di titik robot dinyalakan.
Kenapa melenceng?
Odometri tidak pernah melihat dunia. Ia percaya bahwa roda berjari-jari tepat 3,3 cm, berjarak tepat 16 cm, dan tidak pernah selip. Kenyataannya:
- roda kanan sedikit lebih besar (+0,6%), dan jarak rodanya sedikit beda;
- ban sedikit selip setiap saat;
- saat menabrak, roda tetap berputar tetapi robot diam, sehingga odometri mengira robot terus maju.
Kesalahan kecil di arah paling berbahaya: salah 2° setelah 3 m berarti meleset 10 cm ke samping, dan terus membesar.
Nyalakan Jejak di Tampilan: hijau = jalan sebenarnya, oranye = menurut odometri. Kotak 🧭 Odometri menunjukkan selisihnya.
IMU: giroskop untuk arah
Papan OpenCR punya IMU. Giroskopnya mengukur kecepatan putar langsung, tanpa tergantung roda. turtlebot3_node bisa memakainya untuk arah (/imu → angular_velocity.z). Centang arah dari giroskop IMU, lalu putar-putar robot. Selisih arah kini jauh lebih kecil. Giroskop juga tidak sempurna: ia punya bias kecil yang perlahan terjumlah.
Misi
Jalan minimal 3 m ke mana saja, lalu kembali dan berhenti dalam 15 cm dari titik awal (pakai jejak hijau sebagai panduan). Setelah itu, lihat tab Peta: titik oranye (odometri) ada di mana?
Coba juga skrip Persegi dengan /odom: robot berhenti saat odometri bilang ia sudah kembali. Apakah ia benar-benar kembali?
Selanjutnya: Menghindari rintangan dengan Python · Semua pelajaran