ROS Trolley Robot. Bagian 3. Mempercepat, mengganti kamera, memperbaiki gaya berjalan

Posting dalam seri:
8. Kami mengontrol dari ponsel-ROS Control, GPS-node
7. Lokalisasi robot: gmapping, AMCL, titik referensi pada peta kamar
6. Odometri dengan enkoder roda, peta ruang, lidar
5. Kami bekerja di rviz dan gazebo: xacro, sensor baru.
4. Buat simulasi robot menggunakan editor rviz dan gazebo.
3. Akselerasi, ganti kamera, perbaiki gaya berjalan
2. Perangkat Lunak
1. Besi

Terakhir kali , bekerja dengan OpenCV dan ROS (sistem operasi robot), menggunakan semua kekuatan raspberry pi 3b +, kami berhasil naik sepanjang garis, melihat senyum di wajah orang-orang, moncong sedih kucing dan bahkan pergi menemui mereka.

Namun seiring dengan langkah pertama yang menggembirakan dalam bidang robotika ini, saya harus menghadapi sejumlah tugas kecil: raspberry pi lambat, agak jauh dari kamera, yang mengenali wajah, bergeser ke samping saat mengemudi, dan lainnya. Cara mengatasinya, termasuk membuka cakrawala kecil baru dalam pengembangan ROS, akan dijelaskan nanti.

1. Dengan menjalankan semua node (skrip dalam ROS) dari proyek yang dirakit sebelumnya, dan mulai bekerja dengan kaskade Haar, dengan cepat menjadi jelas bahwa kinerja komputer papan tunggal untuk tugas-tugas tersebut masih lemah. Terlepas dari kenyataan bahwa beban prosesor tidak memuncak dan bervariasi dalam 80%, robot berpikir untuk waktu yang lama ketika dia melihat wajah seseorang atau wajah kucing, yang harus dia ikuti.

Hal yang paling menyedihkan adalah bahwa setelah wajah atau wajah keluar dari bidang pandang kamera, robot mulai bergerak, "berpikir" bahwa benda itu menuju ke objek. Secara umum, seperti pada M.Yu. Lermontov:
"Orang buangan lama berkeliaran
Di gurun dunia tanpa tempat berlindung ... ".
Upaya pertama untuk memperbaiki situasi adalah sebagai berikut:
- pada simpul peluncuran kamera (pada raspberry pi) ukuran gambar yang diambil berkurang dari 640x480 60fps menjadi 320x240 15 fps.

cd /home/pi/rosbots_catkin_ws/src/rosbots_driver/scripts/rosbots_driver nano pi_camera_driver.py 

Ini memberikan peningkatan produktivitas tertentu, tetapi gambaran secara keseluruhan masih jauh dari ideal.

Selanjutnya, dalam skrip untuk mulai mengikuti wajah seseorang (follow_face.py) atau kucing (follow_cat2.py), kesimpulan pada layar gambar pembuka sendiri dikomentari. Itu semua cv.imshow. Sekarang, ketika memulai perjalanan, tidak mungkin secara visual mengamati apakah robot melihat gambar yang bergerak atau tidak. Yah, aku harus mengorbankan kejelasannya.
Juga, info-output ROS itu sendiri dalam skrip dikomentari: # rospy.loginfo.
Ini sedikit mengurangi beban dan meningkatkan kecepatan kerja.
Tapi ... itu perlu untuk menemukan sesuatu yang lain.

2. Selain itu, robot itu sangat rabun. Mengikuti pengalaman dan rekomendasi kami sebelumnya di bidang ini, kamera mata ikan digunakan:



Kamera ini memberikan sudut pandang yang cukup lebar dan memungkinkan Anda menangkap bagian penting dari ruangan.

Namun, ternyata, hasilnya di bidang kualitas pengenalan wajah tidak mengesankan ... Mckayla tidak terkesan ... Karena sudut pandang yang sama lebar yang digunakan kamera, secara bersamaan mengubah objek yang dikenali itu sendiri. Karena alasan ini, kaskade Haar yang digunakan tidak berfungsi dengan baik. Pencahayaan juga memiliki efek yang signifikan, ketika diarsir, kualitasnya semakin turun.

3. Dan di atas itu, robot tidak memiliki kecepatan sudut untuk tikungan yang jelas, dan bahkan di ambang pintu (bukan yang perlu disilangkan) dan karpet, itu benar-benar macet. Di sini, lada menambahkan perbedaan kekuatan motor "kekuatan yang sama", yang hampir tidak pernah sama, bahkan setelah meninggalkan batch yang sama. Karena itu, robot melayang ke kiri.

Meningkatkan "kinerja."


Nah, dengan kinerja, situasinya mulai membaik ketika keuntungan utama ROS sebagai suatu sistem datang untuk menyelamatkan, yaitu: kemampuan untuk mendistribusikan beban pada mesin yang berbeda.

Artinya, sudah cukup untuk menjalankan node gerak, kamera dan master node pada raspberry itu sendiri, dan lainnya, node yang sarat muatan dapat diletakkan di pundak sistem yang lebih kuat.
Misalnya, menginstal ROS di laptop atau menggunakan mesin virtual.

Dalam situasi ini, opsi kedua dipilih.

Agar tidak menjelaskan cara menginstal Ubuntu, ROS pada mesin virtual, kami menggunakan frase tangkapan dari Winnie Jones " kita membutuhkan sukarelawan tak bernyawa ." Kami menyiapkannya ... - mesin virtual dengan semua isian dapat diunduh di sini .

Parameter dari mesin virtual yang diusulkan untuk digunakan adalah sebagai berikut:



Dipahami bahwa Anda menggunakan (menjalankan) di VMware workstation.
Kata sandi: raspberry

Sekarang Anda dapat mengevaluasi kinerjanya saat mencerna kaskade Haar pada zat besi, lebih kuat daripada pi raspberry!

Untuk memulai sistem ROS, sekarang dibagi menjadi 2 bagian, Anda perlu menentukan mesin virtual tempat master node bekerja (dan itu dimulai pada raspberry segera setelah sistem dinyalakan).

Untuk melakukan ini, edit bashrc di mesin virtual:

 sudo nano ~/.bashrc 

Pada baris di bagian paling akhir file, tentukan alamat ip:

 export ROS_MASTER_URI=http://192.168.1.120:11311 export ROS_HOSTNAME=192.168.1.114 

IP pertama adalah alamat pi raspberry, ip kedua adalah alamat mesin virtual.
* Mesin virtual dan raspberry harus berada di jaringan lokal yang sama.

Pada raspberry, bashrc yang sama akan berbeda:

 <source lang="bash">export ROS_MASTER_URI=http://192.168.1.120:11311 export ROS_HOSTNAME=192.168.1.120 

Dua alamat ip pada pertandingan raspberry.
* Jangan lupa untuk reboot setelah mengubah bashrc.

Bagaimana cara memulai sistem ROS terdistribusi?


Ada dua terminal di raspberry.

Dalam gerakan 1:

 rosrun rosbots_driver part2_cmr.py 

Di kamera 2 raspberry:

 sudo modprobe bcm2835-v4l2 roslaunch usb_cam usb_cam-test.launch 

Secara total, 2 node akan berfungsi pada raspberry: satu sedang menunggu perintah untuk bergerak, yang kedua mengirimkan video dari kamera ke jaringan.

Untuk terhubung ke master dan mengendalikan robot dari keyboard, sekarang di mesin virtual Anda perlu menjalankan:

 rosrun teleop_twist_keyboard teleop_twist_keyboard.py /cmd_vel:=/part2_cmr/cmd_vel 

Dengan cara yang sama, alih-alih mengelola dari mesin virtual, Anda dapat menjalankan simpul - mengikuti wajah seseorang:

 cd /home/pi/rosbots_setup_tools/rpi_setup python follow_face.py 

Sekarang sedikit statistik kering tentang apa hasilnya dengan kamera raspberry pi fish-eye di berbagai pengaturan gambar yang diambil dari kamera.

320x240, 30fps:
Wajah manusia. 80-100 cm. Pengaruh pencahayaan, praktis tidak melihat dalam bayangan. Lebih baik mengarahkan lampu ke wajah untuk perbaikan. Senyum, dengan senyuman, mengenali wajah lebih cepat.
Wajah kucing pada lembar A4. 15-30 cm.

Pada 800x600 dan 60fps - wajah terlihat pada jarak 2-3 m.

Pada 1280x720 dan 60fps - wajah melihat pada jarak 3-4 m. Tapi ada positif palsu - ia melihat jam dinding sebagai wajah, dll

Seekor kucing pada A4 mengenali dengan penundaan 1-2 detik, jarak 1-1,5 m.
Mesin virtual memuat 77-88%.

Seperti yang Anda lihat, ketika jendela gambar yang diambil dari kamera diperbesar, beban pada mesin virtual dan jarak di mana robot melihat objek meningkat. Beban pada raspberry meningkat, tetapi tidak signifikan. Kecepatan pengenalan dibandingkan dengan operasi semua node hanya pada raspberry telah meningkat secara signifikan.

Obati miopia


Statistik di atas menunjukkan bahwa untuk meningkatkan penglihatan, perlu untuk meningkatkan resolusi dan fps kamera, membayar kinerja mesin virtual. Namun, bahkan pada 1280x720 dan 60fps, jarak ke objek tidak terlalu besar.

Solusi untuk masalah ini datang secara tak terduga.

Seperti yang Anda ketahui, seluruh jajaran kamera tersedia untuk raspberry. Dan untuk kasus kami salah satunya sempurna, yaitu:



Hasilnya adalah sebagai berikut:

Dengan pencahayaan buatan di ruangan itu ia melihat wajahnya pada jarak 7-8 m! Bahkan tidak perlu tersenyum)
800x600 dan 60fps - unduh. mesin virtual - 70-80%, raspberry - 21% (hanya ada simpul gerakan dan mulai menyiarkan kamera).
Seekor kucing pada A4 mengenali dengan penundaan 1-2 detik, jarak 2-2,3 m.
Seperti yang Anda lihat, kucing menderita lagi, yang ditentukan pada jarak yang lebih pendek. Tapi di sini alasannya kemungkinan besar dalam pengaturan kaskade Haar, dan bukan kamera.
* Kamera ini, biasanya, dilengkapi dengan telinga IR. Tidak perlu menggunakannya di siang hari:



Dengan demikian, kamera untuk raspberry pi, berbeda dari mata ikan, menunjukkan hasil terbaik ketika bekerja dengan objek, bahkan dalam pencahayaan buatan berkualitas rendah. Namun, untuk meningkatkan jarak dari kamera, saya harus membayar dengan sudut pandang dan ini harus diperhitungkan.

Sekarang tentang peningkatan sasis dan pembongkaran robot ke samping


Seperti disebutkan di atas, praktis tidak ada mesin kembar, dan robot ditakdirkan untuk berkendara ke kanan atau ke kiri, tergantung pada bagaimana motor ternyata lebih kuat, semua hal lain dianggap sama.

Biasanya perbedaan dalam pergerakan disamakan menggunakan encoders, karena mereka baik dalam proyek kami. Tentang cara kerjanya, ada film yang bagus.

Namun, di sini Anda dapat menyederhanakan semuanya dan melakukan sedikit trik dengan mengoreksi hanya script untuk mengikuti wajah seseorang (follow_face.py) atau kucing (follow_cat2.py) di mesin virtual.

Kami tertarik pada baris berikut:

 #-0.013 - because right wheel is faster twist_msg.linear.x = 0.1 twist_msg.angular.z = -0.013 elif self.face_found["x"] < 0.0: # To the left cur_dir = "left" twist_msg.linear.x = 0.1 twist_msg.angular.z = 0.016 else: # To the right cur_dir = "right" twist_msg.linear.x = 0.1 twist_msg.angular.z = -0.016 

Bergantung pada di mana dan seberapa banyak pukulan robot, Anda perlu menyesuaikan nilai untuk z. Dalam kode di atas, nilai-nilai dipilih saat menyalakan driver motor 12V.

Dimungkinkan untuk meningkatkan karakteristik berlari dari robot (kecepatan dan kemampuan manuver) dengan menerapkan ke pengemudi mesin, yang digunakan dalam proyek (L9110s) bukannya 8 V - 12V. Tetapi lebih baik tidak melakukan ini tanpa memasang stabilisator daya atau setidaknya kapasitor, karena Chip H-bridge L9110 terbakar dengan baik, ternyata. Mungkin ini membuat mereka sangat murah. Namun demikian, robot menggerakkan 12 V cukup cepat dan sembrono.

Alih-alih sebuah kesimpulan


Nah, sekarang karena robot tidak lagi terhanyut dan visinya telah membaik, Anda bisa bermain petak umpet dengannya, misalnya. Atau memaksakan sesuatu untuk dibawa dari ujung ruangan. Tentu saja, berbalik menghadapnya, seperti seseorang.


Untuk dilanjutkan.

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


All Articles