Selamat siang, para pembaca yang budiman. Dalam
artikel terakhir saya, saya berbicara tentang dua algoritma SLAM yang dirancang untuk kamera kedalaman: rtabmap dan RGBD-SLAM. Kemudian kami mencoba hanya membangun peta area. Pada artikel ini saya akan berbicara tentang kemungkinan pelokalan dan navigasi robot menggunakan algoritma rtabmap. Yang tertarik, silakan, di bawah kucing.
Lokalisasi di rtabmap dengan visualisasi di rviz
Untuk memulainya, jika master ROS tidak berjalan, kemudian jalankan:
roscore
Jalankan driver untuk kamera:
roslaunch freenect_launch freenect.launch depth_registration:=true
Jalankan rtabmap untuk membangun peta dengan visualisasi di rviz dan menghapus peta lama:
roslaunch rtabmap_ros rtabmap.launch rtabmap_args:="--delete_db_on_start" rtabmapviz:=false rviz:=true
Ketika prosedur pembuatan peta selesai, kami keluar dari program menggunakan Ctrl + C untuk menyimpan peta dan memulai ulang rtabmap dalam mode lokalisasi:
roslaunch rtabmap_ros rtabmap.launch localization:=true rtabmapviz:=false rviz:=true

Untuk menampilkan peta di rviz, Anda perlu mengklik tanda centang di item Unduh Peta pada tampilan MapCloud:


Pindahkan kamera ke tempat robot berada di peta di rviz. Setelah itu, transformasi antara sistem koordinat / peta → / odom akan dipublikasikan.

Pembuatan peta dan navigasi menggunakan rtabmap menggunakan Turtlebot sebagai contoh
Pembuatan peta dan lokalisasi robot menggunakan metode rtabmap dapat dicoba pada simulator robot Turtlebot. Rtabmap memiliki paket khusus untuk ini. Untuk informasi tambahan, saya memberikan tautan ke
sumber materi. Pertama, instal paket yang diperlukan:
sudo apt-get install ros-<ros_version>-turtlebot-bringup ros-<ros_version>-turtlebot-navigation ros-<ros_version>-rtabmap-ros
Secara default, driver OpenNI2 digunakan, yang ditentukan dalam file 3dsensor.launch (TURTLEBOT_3D_SENSOR = asus_xtion_pro). Dalam percobaan saya, saya menggunakan kamera Microsoft Kinect. Mari kita instal driver untuk itu dalam variabel TURTLEBOT_3D_SENSOR:
echo 'export TURTLEBOT_3D_SENSOR=kinect' >> ~/.bashrc source ~/.bashrc
Kami sekarang akan mulai membangun peta menggunakan paket khusus untuk simulator Turtlebot di rtabmap_ros:
roslaunch turtlebot_bringup minimal.launch roslaunch rtabmap_ros demo_turtlebot_mapping.launch args:="--delete_db_on_start" rgbd_odometry:=true roslaunch rtabmap_ros demo_turtlebot_rviz.launch
Kita akan melihat di jendela rviz:

Dan sekarang dengan awan titik-titik dari kamera Kinect:

Anda akan melihat peta dua dimensi, peta tiga dimensi, dan beberapa lagi keluaran topik yang diperlukan untuk navigasi. Selain itu, tampilan rviz standar dan tambahan khusus untuk rtabmap (Peta Lokal, Peta Global, Rtabmap Cloud) ditampilkan di panel tampilan di sebelah kiri.

Mari kita gerakkan kamera di luar angkasa dan setelah beberapa saat kita akan melihat:

Secara default, rtabmap menggunakan database yang sama setiap kali demo_turtlebot_rviz.launch dijalankan. Untuk menghapus peta yang lama dan mulai membangun peta lagi (dari awal yang bersih), Anda dapat menghapus secara manual database yang disimpan dalam file ~ / .ros / rtabmap.db, atau jalankan demo_turtlebot_rviz.launch dengan argumen argumen: = "- delete_db_on_start".
Jalankan pembangunan peta tanpa menghapus basis data:
roslaunch rtabmap_ros demo_turtlebot_mapping.launch
Setelah membangun peta, hasilnya akan terlihat seperti ini:

Lokalisasi dengan Turtlebot
Sekarang kita memiliki peta yang disimpan dalam database di file ~ / .ros / rtabmap.db. Mulai kembali demo_turtlebot_mapping.launch dalam mode pelokalan dengan lokalisasi: = true:
roslaunch rtabmap_ros demo_turtlebot_mapping.launch rgbd_odometry:=true localization:=true
Kita akan melihat gambar berikut:

Pindahkan Kinect ke samping. Robot akan menentukan lokasi barunya begitu mendeteksi loop (penutupan loop):

Deteksi loop yang berhasil akan memakan waktu, jadi bersabarlah.
Ini bekerja sangat cepat:
Navigasi mandiri dengan Turtlebot
Sekarang setelah peta dibuat, Anda dapat mencoba navigasi offline pada peta yang diketahui menggunakan tumpukan Navigasi. Untuk melakukan ini, cukup tunjukkan untuk robot target saat ini di peta di rviz, ke arah mana robot harus bergerak dalam mode offline. Segala sesuatu yang lain akan diurus oleh tumpukan Navigasi. Untuk memulai, cukup klik tombol Goal 2D di rviz

dan tunjukkan tujuannya dengan mengklik di tempat sewenang-wenang di peta

Tambahkan tampilan Pose dengan memilih topik "/ move_base / current_goal" untuknya dan tampilan Path dengan memilih topik "/ move_base / NavfnROS / plan". Anda akan melihat jalur yang direncanakan (garis hijau di peta) dan target yang ditetapkan, ditandai dengan panah merah:

Paket move_base bertanggung jawab untuk mengendalikan robot menuju target. Ini akan menerbitkan perintah gerak seperti geometry_msgs / Twist ke topik / mobile_base / commands / velocity:
rostopic echo /mobile_base/commands/velocity
Informasi tambahan tentang bekerja dengan tumpukan Navigasi dapat ditemukan dalam
tutorial di halaman turtlebot_navigation resmi. Ada juga
tutorial untuk menggunakan rtabmap di robot Anda sendiri.
Jadi, kali ini kami dapat melokalkan robot pada peta yang dibuat sebelumnya dan belajar cara menetapkan tujuan untuk robot sehingga dapat bergerak ke arah itu secara offline. Semoga sukses dalam eksperimen dan sampai jumpa lagi!