Saya sudah menulis sebelumnya tentang menginstal rosserial_arduino untuk interaksi mikrokontroler Arduino dengan platform robot ROS di artikel sebelumnya. rosserial_arduino adalah paket tumpukan rosserial yang dirancang untuk platform ROS dan “mengubah” papan Arduino menjadi simpul ROS mandiri yang dengannya komponen sistem lainnya dapat berinteraksi. Saat menggunakan Arduino untuk proyek robot, ada satu batasan signifikan: Arduino tidak dapat digunakan sebagai simpul komputasi penuh yang dapat menangani semua operasi yang diperlukan untuk berfungsinya robot secara normal. Misalnya, Anda tidak dapat menjalankan skrip OpenCV di atasnya untuk tugas visi komputer. Pada artikel ini saya ingin berbicara tentang pengalaman saya menginstal sistem ROS dan menghubungkan Arduino ke komputer mikro Raspberry Pi menggunakan paket rosserial_arduino yang sudah akrab.
Motivasi
Setelah berkenalan dengan platform rosserial_arduino, saya punya pertanyaan: bisakah saya entah bagaimana menggunakan Arduino bersama dengan komputer mikro yang lebih kuat sedemikian rupa untuk membuat robot lebih mandiri dari laptop.Lalu saya punya ide untuk mencoba ROS pada komputer mikro Raspberry Pi. Raspberry Pi adalah komputer mini yang berdiri sendiri di papan tulis. Ini memiliki chip CPU, chip grafis, slot kartu SD, input Ethernet, beberapa antarmuka USB dan output video HDMI untuk menghubungkan monitor. Anda dapat menghubungkan mouse, keyboard, dan HDD eksternal ke input USB.Kombinasi Raspberry Pi dan Arduino sangat menjanjikan dan telah berulang kali digunakan dalam proyek robot.Raspberry Pi juga memungkinkan Anda untuk menghubungkan kamera (webcam atau kamera RPi Board khusus). Sebuah robot beroda sederhana di papan Arduino Uno yang dimodifikasi jatuh ke tangan saya setahun yang lalu. Baru saja, di tangan saya adalah Raspberry Pi Model B.
Menginstal OS di Raspberry Pi
Pertama, Anda perlu menginstal distribusi Linux di "raspberry". Cara termudah untuk melakukan ini adalah dengan manajer instalasi OS NOOBS. Cara melakukan ini dapat dibaca dalam manual ini di portal Raspberry Pi resmi .Saya memilih untuk menginstal Raspbian, distribusi Debian yang dimodifikasi yang dirancang khusus untuk Raspberry.Catatan: saat menghubungkan monitor, seringkali ada masalah dengan menampilkan gambar, khususnya, ini terjadi pada monitor lama yang tidak memiliki input HDMI. Di sini file config.txt datang ke bantuan kami - file konfigurasi Raspberry untuk pengaturan monitor. Dalam beberapa kasus, ini sudah ada dalam arsip gambar sistem (Raspbian), dalam kasus NOOBS perlu dibuat di root kartu SD.Masukkan baris berikut ke dalam file:
hdmi_safe=1
hdmi_force_hotplug=1
config_hdmi_boost=4
Dalam hal ini, garis-garis penting adalah:hdmi_safe=1
…
hdmi_force_hotplug=1
…
config_hdmi_boost=4
Dalam kasus saya, pengaturan ini memungkinkan untuk mendapatkan gambar yang benar pada monitor dengan input VGA.Konfigurasikan Akses Jarak Jauh ke Raspberry Pi
Anda dapat terhubung ke papan Raspberry Pi melalui jaringan melalui SSH. Untuk melakukan ini, Raspberry Pi harus terhubung ke jaringan baik melalui kabel Ethernet (ada input khusus di papan untuk ini) atau melalui adaptor Wi-Fi yang terhubung ke port USB. Ketika Anda menghubungkan kabel Ethernet, Raspberry secara otomatis menerima alamat IP pada jaringan dan segera tersedia.Jika Anda menggunakan adaptor, Anda perlu melakukan sejumlah prosedur sederhana.Saya menggunakan adaptor TPLINK Wi-Fi berikut:
Sambungkan adaptor ke port USB dan periksa apakah perangkat di sistem terdeteksi oleh perintah$ iwconfig
Sekarang kami memindai ruang untuk mencari jaringan nirkabel yang tersedia:$ sudo iwlist wlan0 scan
Bidang ESSID dalam output perintah menunjukkan nama titik akses.Sekarang sambungkan ke titik akses untuk enkripsi WPA menggunakan utilitas wpa_supplicant.Dengan menggunakan utilitas wpa_passphrase, yang merupakan bagian dari paket wpa_supplicant, kami membuat kata sandi berdasarkan kunci akses:$ wpa_passphrase <hotspot_name> <hotspot_access_key>
di mana hotspot_name dan hotspot_access_key masing-masing adalah nama titik akses dan kunci akses.Utilitas mengembalikan string psk yang dihasilkan.Selanjutnya, seluruh blok jaringan, yang berisi ssid jaringan dan baris psk, dimasukkan di akhir file konfigurasi /etc/wpa_supplicant/wpa_supplicant.conf dan disimpan. Akhirnya, kami reboot Raspberry Pi kami dan memeriksa koneksi jaringan.Untuk terhubung melalui SSH di terminal di komputer, Anda perlu menjalankan perintah:$ ssh pi@<raspi_ip>
di mana <raspi_ip> adalah alamat IP raspberry, yang dapat dikenali oleh perintah ifconfig yang dieksekusi langsung di terminal raspberry.Untuk terhubung melalui SSH dengan kemampuan menjalankan aplikasi grafis, gunakan perintah:$ ssh -X pi@<raspi_ip>
Anda dapat terhubung ke "Malinka" dalam mode desktop jarak jauh menggunakan program Virtual Network Computing (VNC). Manajemen dilakukan dengan mengirimkan penekanan tombol pada gerakan keyboard dan mouse dari satu komputer ke komputer lainnya dan menyampaikan isi layar melalui jaringan komputer. Sistem VNC adalah platform independen.Pertama, instal server VNC pada Raspberry Pi menggunakan perintah di terminal:$ sudo apt-get install tightvncserver
Setelah instalasi selesai, jalankan perintah:$ vncserver :1 -geometry 1280x800 -depth 16
Perintah ini akan memulai server VNC. Dalam hal ini, ini berarti bahwa sesi-X virtual sedang berjalan (presentasi virtual dari desktop Raspberry Pi). Sekarang, setelah memulai klien VNC dan menghubungkannya, Anda akan terhubung ke desktop virtual ini.Parameter: 1 menentukan nomor port tempat proses VNC akan berjalan. Parameter geometri menentukan resolusi (dalam hal ini, ukuran) dari virtual desktop. Parameter kedalaman menentukan kedalaman warna tampilan desktop dalam bit (8, 16 dan 24, standarnya adalah 16).Pada permulaan pertama, server VNC akan meminta Anda untuk memasukkan kata sandi, yang akan diminta saat menyambungkan ke desktop jarak jauh.Sekarang instal klien VNC di komputer desktop:$ sudo apt-get install xtightvncviewer
Kami siap terhubung ke desktop jarak jauh "Malinka":$ vncviewer <raspi_ip>:1
dan masukkan kata sandi.Sebuah jendela terbuka dengan gambar desktop yang mirip dengan ini:
Perlu dicatat bahwa setiap kali Anda me-reboot raspberry, server VNC perlu di-restart.Hubungkan Arduino ke Raspberry Pi
Arduino dapat dihubungkan ke Raspberry Pi semudah ke komputer biasa. Untuk memulai, instal Arduino IDE pada Raspberry Pi:$ sudo apt-get update
$ sudo apt-get install arduino
Luncurkan perintah Arduino IDE:$ arduino
Arduino IDE terhubung ke Raspberry Pi melalui kabel pemrograman USB-nya. Koneksi semacam itu mengharuskan konsol serial terputus. Secara default, Raspberry Pi mengkonfigurasi port serial (GPIO14-GPIO15) untuk memberikan informasi boot. Ini juga memungkinkan Anda untuk masuk ke Raspberry Pi Anda melalui perangkat yang terhubung. Untuk dapat memprogram Arduino, Anda harus menonaktifkan opsi ini secara default.Untuk menonaktifkan otorisasi, edit file sistem inittab:$ sudo nano /etc/inittab
Temukan garis:T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
berkomentar:
Setelah itu, simpan dan tutup file tersebut.Saat boot, Raspberry Pi mengirim pesan debug ke port serial. Ini mungkin berguna dalam beberapa kasus, tetapi sekarang kita perlu menonaktifkan fungsi ini. Untuk melakukan ini, edit file sistem cmdline.txt:$ sudo nano /boot/cmdline.txt
Temukan garis:dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
dan hapus blok parameter konsol untuk mendapatkan garis seperti ini:dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
Simpan dan tutup file.Agar perubahan diterapkan oleh sistem, Anda harus memulai ulang Raspberry Pi:$ sudo reboot
Sekarang Anda dapat menghubungkan papan Arduino ke port USB pada Raspberry Pi, mengkonfigurasi IDE Arduino untuk model papan Arduino Anda dan mengunggah sketsa ke sana.Pengaturan ROS dan rosserial_arduino
Saya memilih untuk menginstal ROS Indigo. Petunjuk pemasangan ROS Indigo dijelaskan secara rinci di halaman resmi .Saya merekomendasikan untuk menginstal opsi instalasi ROS-Comm. Dari pengalaman saya sendiri, saya dapat mengatakan bahwa menginstal opsi Desktop dapat memakan waktu yang sangat lama dari urutan siang hari.Setelah menginstal ROS dan menyelesaikan semua dependensi dengan utilitas rosdep, kami cukup mengompilasi catkin_workspace:$ catkin_make
$ catkin_make install
Menjalankan sketsa rosserial_arduino di Raspberry Pi
Sekarang kita telah menginstal rosserial_arduino dan kita dapat menjalankannya:$ roslaunch rosserial_python serial_node.py /de/ttyACM0
Saat memulai server rosserial, kesalahan dapat terjadi: tidak ada modul bernama diagnostic_msgs.msg.Untuk mengatasi masalah, Anda perlu mengunduh dari repositori ROS resmi sumber pesan ROS - common_msgs yang tidak ada dalam instalasi, dan memuatnya ke folder paket umum di folder ruang kerja, lalu kompilasi ROS:$ catkin_make install
Komentar! Saat memuat sketsa ke dalam Arduino IDE, kesalahan "fatal fatal: string: Tidak ada kesalahan kompilasi file atau direktori seperti itu" dapat terjadi. Ini berarti bahwa kita memiliki tipe pesan ROS di ros_lib, tetapi mereka juga harus dikompilasi ke dalam tipe yang sesuai untuk Arduino. Anda perlu mengompilasinya dengan cara ini:$ cd <sketchbook>/libraries
$ rm -rf ros_lib
$ rosrun rosserial_python make_libraries.py .
Sekarang Anda dapat bekerja dengan rosserial_arduino di Raspberry Pi dengan cara yang sama seperti di komputer biasa: membuat node, berlangganan topik, menerbitkan topik, dll.Anda dapat menghubungkan kamera RPi Board ke Raspberry Pi dan menggunakan paket cv_bridge ROS (antarmuka ROS untuk berinteraksi dengan OpenCV, uraian dapat ditemukan di sini ) untuk melakukan tugas visi komputer.Omong-omong, robot saya bersenjata lengkap:

Kesimpulan
Saya harap artikel ini akan menjadi masukan yang baik bagi Anda untuk mulai bekerja dengan ROS pada Raspberry Pi dan Anda akan memiliki ide Anda sendiri untuk menggunakan Raspberry Pi bersama dengan Arduino atau mikrokontroler lain dari jenis ini. Saya berharap Anda beruntung dalam eksperimen dan proyek Anda dan saya harap saya akan segera membagikan gagasan baru saya di artikel berikut!PS: Beberapa instruksi diambil dari buku oleh V. Petin, “Elektronik. Mikrokomputer Raspberry Pi. Panduan Praktis. "