Lokalisasi dan navigasi di ROS menggunakan rtabmap

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 

gambar

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

gambar

gambar

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

gambar

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:

gambar

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.

gambar

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

gambar

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:

gambar

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:

gambar

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

gambar

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

gambar

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

gambar

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:

gambar

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!

Source: https://habr.com/ru/post/id406615/


All Articles