Selama beberapa tahun terakhir, kami telah menyaksikan pengenalan teknologi kecerdasan buatan dalam kehidupan kita sehari-hari - dari penyedot debu robot hingga pesawat tak berawak. Semuanya, dikendalikan oleh kecerdasan buatan, sudah lumrah bagi kita. Namun terlepas dari ini, proses pengembangan, dari desain hingga implementasi, membutuhkan waktu bertahun-tahun dan tidak murah. Selain itu, algoritma pembelajaran mesin membutuhkan data besar dan tidak ada jaminan bahwa semuanya akan berhasil dalam jangka panjang.
Cepat atau lambat, setiap pengembang sampai pada kesimpulan bahwa sebelum membuat robot nyata, Anda perlu menguji konsep dalam simulasi, men-debug semua sistem dan, pada akhirnya, memahami apakah jalur pengembangan telah dipilih.
Andrew Howard memiliki pemikiran yang sama ketika ia, bersama muridnya Nathon Koenig, mulai pada tahun 2002 mengembangkan simulator 3D Gazebo di University of Southern California. Konsep simulator presisi tinggi muncul karena kebutuhan untuk menguji robot dalam berbagai kondisi luar ruangan yang sulit. Pada tahap pertama pengembangan, pendekatan ini menghemat waktu dan uang untuk pembelian peralatan yang diperlukan.
Dalam seri artikel ini, saya ingin berbagi pengalaman saya dalam mensimulasikan dan melatih kendaraan tak berawak dengan hanya satu kamera biasa sebagai sensor.

Halo semuanya. Saya seorang Master of Science (Ilmu Komputer, MS) dalam Informatika Terapan di Universitas Berlin Sains Terapan (HTW-Berlin).
Sebagai bagian dari kursus saya, saya bekerja pada metode untuk melatih robot otonom dalam lingkungan simulasi menggunakan ROS [1], Gazebo [2] dan OpenAI Gym [3]. Pekerjaan kursus ini dibagi menjadi dua bagian.
Bagian pertama dikhususkan untuk pengembangan kerangka kerja yang akan menyederhanakan pengujian algoritma Penguatan Pembelajaran (pelatihan dengan penguatan) pada berbagai robot otonom di dalam simulasi Gazebo.
Pada bagian kedua, saya akan berkonsentrasi pada implementasi algoritma untuk mengemudi mandiri. Saya akan mengerjakan ini untuk semester berikutnya, jadi ini dan artikel selanjutnya akan fokus terutama pada penerapan lingkungan OpenAI Gym untuk Gazebo. Reinforcement Learning (RL) itu sendiri akan terpengaruh secara dangkal.
Kode proyek lengkap dapat ditemukan di
sini .
Persyaratan sistem
- Ubuntu 18.04 atau Windows WSL Ubuntu 18.04
- Python 2.7
- pip
- Tenserflow CPU atau GPU
Kami akan menggunakan versi ROS dari Melodic. Versi ini memiliki beberapa keterbatasan dan yang paling penting adalah Ubuntu 18 (juga memungkinkan untuk menginstal ROS pada Windows WSL dan pada Ubuntu Headless, tetapi lebih pada waktu lain). Selain itu, ROS masih tidak mendukung Python 3.
Bagian Satu: Pendahuluan
Di bagian uji coba ini, saya akan secara singkat berbicara tentang teknologi yang akan digunakan untuk menciptakan lingkungan. Saya juga akan menjelaskan proses instalasi dan pada akhirnya kami akan meluncurkan simulasi lengkap, yang dapat dikontrol melalui API Gym.
ROS: "jangan menemukan kembali roda"
Robot Operating System (ROS) adalah kerangka kerja untuk pemrograman robot. ROS adalah "lem perangkat lunak" yang memungkinkan pengembang untuk fokus pada tugas spesifik mereka. Meskipun ROS bukan sistem operasi, ROS menyediakan layanan seperti abstraksi perangkat keras, manajemen perangkat tingkat rendah, menerapkan fungsi yang biasa digunakan, menyampaikan pesan antar proses, dan mengelola paket (plugins).
ROS dirancang sebagai sistem yang digabungkan secara longgar di mana suatu proses yang disebut simpul harus bertanggung jawab atas satu tugas. Node berkomunikasi satu sama lain menggunakan pesan yang melewati saluran logis yang disebut topik. Setiap node dapat mengirim atau menerima data dari node lain menggunakan pola publish - subscribe
Untuk ROS, driver telah diterapkan yang memungkinkan bekerja dalam satu cara dengan banyak perangkat, seperti pengontrol, GPS, kamera, pengukur jarak laser, dll.
Maka, instal ROS Melodic (
instruksi lengkap )
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116 sudo apt update sudo apt install ros-melodic-desktop-full sudo rosdep init rosdep update echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc source /opt/ros/melodic/setup.bash
Untuk beberapa alasan, paket instalasi lengkap tidak termasuk beberapa paket yang diperlukan. Instal secara terpisah:
sudo apt install ros-melodic-ackermann-msgs sudo apt install ros-melodic-effort-controllers sudo apt install ros-melodic-joy sudo apt install ros-melodic-tf2-sensor-msgs
Kami tidak akan membahasnya secara rinci. Mereka diperlukan untuk mengendalikan robot kami, yang akan dibahas nanti.
Gazebo
Gazebo adalah simulator 3D dinamis open-source yang dikembangkan oleh
Open Source Robotic Foundation dan berinteraksi cukup dekat dengan ROS. Gazebo memungkinkan Anda untuk mensimulasikan robot secara akurat dan efisien baik dalam kondisi indoor maupun outdoor yang sulit.
Simulator terdiri dari server
gzserver , yang terlibat dalam menghitung fisika, tabrakan, dan sensor simulasi. Klien dapat terhubung ke server, misalnya
gzclient (untuk desktop) dan
gzweb (untuk browser). Merekalah yang membuat model.
Semua ini memungkinkan untuk menguji sistem robot yang kompleks di ruang virtual lebih cepat dan tanpa risiko merusak robot nyata yang mahal.
Gazebo termasuk dalam paket instalasi ROS lengkap, jadi Anda tidak perlu menginstal apa pun. Untuk konfigurasi tanpa kepala,
gzweb diperlukan. Saya akan berbicara tentang dia di bagian berikut.
OpenAI Gym
OpenAI adalah perusahaan riset kecerdasan buatan nirlaba yang didirikan bersama oleh Ilon Max.
OpenAI Gym adalah perpustakaan Python yang menyediakan API untuk mengembangkan dan membandingkan algoritma RL dengan sejumlah besar lingkungan virtual dan API umum. Gym sudah memiliki banyak lingkungan siap pakai, termasuk untuk game Atari.
openai_ros
Proyek saya didasarkan pada paket
openai_ros . Paket ini mengimplementasikan arsitektur yang diusulkan oleh tim
The Construct . Construct guys telah mengembangkan kerangka kerja umum yang mengimplementasikan API yang diperlukan untuk mengelola simulasi dan menjelaskan API untuk mengintegrasikan Gazebo ke dalam Gym, yang membutuhkan implementasi minimal. Struktur yang diusulkan terdiri dari tiga lapisan logis (Anda benar-benar dapat menggunakan nomor apa saja), yang terendah darinya adalah "lem" lain yang menghubungkan Gym API dengan Gazebo. Lebih lanjut tentang ini di bagian selanjutnya, ketika kita akan menguraikan kode.
Menyatukan semuanya
Pertama kita perlu membuat direktori kerja untuk catkin.
catkin adalah sistem otomasi build seperti CMake, yang disertakan secara default dalam paket instalasi ROS:
cd ~ mkdir catkin_ws cd catkin_ws/ mkdir src cd src/
dan mengkloning paket ROS yang diperlukan.
Mit balap mobil
Kami membutuhkan model robot yang dikembangkan oleh MIT dengan semua sensor.
git clone https://github.com/mit-racecar/racecar.git git clone https://github.com/mit-racecar/racecar-simulator.git
openai_ros
git clone https://bitbucket.org/theconstructcore/openai_ros.git
neuroracer
Sebenarnya proyek itu sendiri
git clone https://github.com/karray/neuroracer.git
Selanjutnya, Anda perlu mengkompilasi semua paket ini
cd ~/catkin_ws catkin_make
Anda juga perlu menginstal semua pustaka python yang diperlukan.
pip install -U numpy tensorflow gym keras
Menjalankan simulasi
Untuk menjalankan paket ROS, pertama-tama kita perlu memuat ke sesi terminal saat ini semua paket ROS yang kita kompilasi:
source ~/catkin_ws/devel/setup.bash
Sekarang kita dapat menjalankan simulasi robot Racecar:
roslaunch racecar_gazebo racecar_tunnel.launch
Perintah ini akan meluncurkan server master ROS, server Gazebo beserta UI-nya (di desktop), memuat robot dan dunia untuknya.
Tangkapan layar:
Dan hal yang sama di terminal kedua untuk algoritma RL kami:
source ~/catkin_ws/devel/setup.bash roslaunch neuroracer_gym_rl qlearning.launch
Tim ini akan meluncurkan paket
neuroracer_gym_rl kami, yang mengimplementasikan algoritma Q-Learning sederhana di lingkungan Gym kami. Kami akan menganalisisnya di bagian selanjutnya.
Mereka yang tidak sabar dapat menemukan kode sumber di
sini . Ke depan, saya akan mengatakan bahwa setelah beberapa hari pelatihan di server dengan kartu RAM GeForce GTX 1080 Ti 11GB, algoritma sederhana ini benar-benar tidak mempelajari apa pun. Pada bagian selanjutnya saya akan mencantumkan alasan yang mungkin, tetapi sekarang Anda dapat melakukan percobaan dengan implementasi Anda.
Kesimpulan
Jadi, kami memiliki simulasi yang berfungsi penuh dari mobil otonom dan template algoritma RL yang sudah jadi. Pada bagian selanjutnya, kita akan menganalisis openai_ros lebih terinci dan membahas sensor yang dipasang pada robot, setelah itu saya akan menunjukkan bagaimana menerapkan algoritma saya dan masalah apa yang mungkin timbul selama pelatihan.
PS: Ini pengalaman pertama saya menulis artikel. Karena itu, jangan ragu untuk menulis jika Anda menemukan kesalahan atau Anda memiliki ide, atau kritik yang membangun. Saya akan mencoba untuk mempertimbangkan ini di bagian berikut.
Referensi
[1] (M. Quigley, K. Conley, B. Gerkey, J. Faust, T. Foote, J. Leibs, R. Wheeler, dan AY Ng. Ros: sistem operasi robot open-source. Dalam lokakarya ICRA tentang perangkat lunak sumber terbuka, volume 3, halaman 5. Kobe, Jepang, 2009.
[2] NP Koenig dan A. Howard. Desain dan gunakan paradigma untuk gazebo, simulator multi-robot open-source.
Dalam IROS, volume 4, halaman 2149–2154 . Citeseer, 2004.
[3] LPJSJSJTWZ Greg Brockman, Vicki Cheung. Openai gym, 2016,
arXiv: 1606.01540