Untuk memulai, video youtube untuk inspirasi:
Peringatan: proyek dalam video hanyalah contoh yang dapat dilakukan sesuai dengan tutorial dalam artikel tentang penglihatan stereo dan "putaran kepala". Tank dengan remote xbox tidak termasuk.
Terlepas dari kejelasannya, kisah yang tidak lengkap dari penulis proyek pada video dan ketersediaan tautan, segera untuk mengetahui bagaimana semuanya bekerja tidaklah mudah. Jika Anda ingin mengumpulkan sesuatu yang serupa dan dalam format yang jauh lebih nyaman, disarankan untuk membacanya.
* Saya akan segera melakukan reservasi, orang yang ada di video dengan YouTube tidak terbiasa dengan saya, saya tidak mengirimkan data rahasia apa pun, seperti apa proyeknya sekarang, saya tidak tahu.
** Kami tidak akan mengontrol pergerakan robot pada raspberry di permukaan melalui remote control dari xbox, ini dapat ditangani secara mandiri.
*** Tolong jangan membuang sepatu kulit pohon, karena proyek ini masih dalam pengembangan.
Jadi, kami tertarik pada dua hal:
- cara mendapatkan gambar stereo di telepon dengan helm;
- cara mengontrol servos dengan memutar kepala.
Konsep yang digunakan dalam video, jika dirangkum, terlihat seperti ini:
- 2 raspberry pi mengirim stream video ke jaringan dari kamera mereka melalui layanan webrtc;
- telepon (di helm) menerima stream dalam 2 aplikasi yang identik pada ponsel - aplikasi apung.
- pada saat yang sama, ponsel mengontrol server yang terhubung ke raspberry.
Semuanya sederhana. Tapi diablo, seperti yang Anda tahu, ada dalam rincian dan ketidaknyamanan, yaitu:
- Anda perlu menjalankan 2 raspberry, memantau pengaturan 2 kamera, power raspberry * 2.
- aplikasi mengambang terus geser di telepon, Anda harus menyelaraskan gambar di layar.
- ...
Karena itu, kami akan mentransfer ke stereopi, untungnya, itu muncul di toko-toko Rusia (saya harap itu tidak akan hilang setelah posting ini):
Stereopi adalah pengembangan rekan senegaranya, yang kini secara aktif menaklukkan pasar.
Pesonanya mengikuti dari namanya - Anda dapat menghubungkan 2 kamera pi raspberry pi CSI secara bersamaan. Pada saat yang sama, semua ini bekerja berdasarkan satu Modul Komputasi raspberry pi. Sayangnya, modul itu sendiri tidak termasuk;
Tentang stereopi ada artikel tentang Habré.
Dari sana kita akan membutuhkan 2 stream video dan kontrol server melalui GPIO.
Sebagai basis untuk stereopi kita akan menggunakan Raspberry Pi Compute Module 3+.
Persiapan Stereopi
Setelah merakit stereopi (masukkan modul komputasi ke dalam stereopi, kamera), isi perangkat lunak.
Kami menggunakan gambar yang sudah jadi untuk modul menghitung raspberry pi - Raspbian (stretch). Ini tersedia di stereopi.com - Gambar
Peregangan OpenCV Raspbian, Google DriveIsi dengan raspberry.
Jika ada kesulitan dengan pengisian, yang lain pergi ke
wiki stereopi .
Menginstal webrtc.
Instal perangkat lunak webrtc pada stereopi. Sebagian bahan instalasi diambil dari halaman ini:
Instalasi untuk ARM (Raspberry Pi)
Kami akan menghindari komentar yang tidak perlu yang sudah ada di halaman di atas dan cukup menginstal semua yang diperlukan.
curl http://www.linux-projects.org/listing/uv4l_repo/lpkey.asc | sudo apt-key add - sudo nano /etc/apt/sources.list deb http://www.linux-projects.org/listing/uv4l_repo/raspbian/stretch stretch main sudo apt-get update sudo apt-get install uv4l uv4l-raspicam sudo apt-get install uv4l-raspicam-extras sudo raspi-config Anvanced Options Memory Split 256 enter sudo apt-get install uv4l-server uv4l-uvc uv4l-xscreen uv4l-mjpegstream uv4l-dummy uv4l-raspidisp sudo apt-get install uv4l-webrtc sudo apt-get install uv4l-demos sudo apt-get install uv4l-xmpp-bridge sudo apt-get install uv4l-raspidisp-extras
Sekarang Anda perlu (dalam petunjuknya) untuk membuat kunci ssl, karena Chrome tidak dapat menampilkan video melalui koneksi http (hanya melalui https):
openssl genrsa -out selfsign.key 2048 && openssl req -new -x509 -key selfsign.key -out selfsign.crt -sha256
* ketika menghasilkan kunci, pertanyaan akan ditanyakan tentang perusahaan, wilayah, dll. - Anda dapat menjawabnya secara sewenang-wenang.
Kunci yang dihasilkan (selfsign.key dan selfsign.crt akan muncul di folder saat ini) harus dimasukkan ke dalam folder:
/etc/ssl/private/
Semua pengaturan webrtc disimpan dalam 2 file:
/etc/uv4l/uv4l-raspicam.conf /etc/uv4l/uv4l-raspidisp.conf
Agar tidak bosan mendaftar item dalam file yang perlu dihapus komentar atau
untuk memperbaikinya, timpa file pengaturan dengan uv4l-raspicam.conf dan uv4l-raspidisp.conf Anda.
Reboot raspberry dan masuk ke ip raspberry menggunakan chrome:
https://192.168.1.100:8080
WebRTC adalah penggemar penuh kemungkinan, tetapi kami akan membatasi diri pada satu hal - kami akan pergi ke tab webrtc:
Sekarang periksa apakah video berfungsi dengan stereopi.
Tekan tombol "Panggil" di bagian bawah halaman web di telepon.
Video dari kamera stereo akan muncul.
Klik tombol "Layar Penuh" di bawah jendela dengan gambar dari kamera web:
* Jangan memuat ulang halaman di ponsel! Jika ini masih terjadi, Anda harus mematikan proses di raspberry:
sudo killall uv4l
Dan restart layanan di atasnya:
sudo service uv4l_raspidisp restart sudo service uv4l_raspicam restart
Kemudian lagi, pada halaman di browser
ponsel, klik "Panggil".
** Panggilan tidak akan berfungsi jika tidak ada kamera yang terhubung ke raspberry.
Kami akan berurusan dengan servos.
Untuk mengelola servos di raspberry dari telepon, Anda memerlukan kode yang akan berjalan di raspberry dan tindakan di telepon.
Tapi pertama-tama, mari kita putuskan servos. Video YouTube menggunakan servos yang terhubung langsung ke gpio raspberry. Karena servos berdaya rendah, Anda mungkin dapat menggantung 2 servos di gpio raspberry. Trik ini dapat dengan mudah dilakukan pada server sg-90. Mereka tidak menuntut nutrisi, tetapi juga tidak terlalu baik untuk beban. Pada prinsipnya, mereka harus cukup menahan suspensi dengan dua kamera dari stereopi. Gimbal itu sendiri dapat dibeli di aliexpress yang sama, untuk pencarian "pan-tilt". Namun, servos ini juga memiliki minus yang serius - mereka "gemetar ketakutan." Efek inilah yang diamati oleh penulis video YouTube. Mengapa ini terjadi dan apa yang harus dilakukan dengannya tidak akan dipertimbangkan di sini.
Dalam kasus kami, mg-996n servos dan sendi robot digunakan, yang saya harap tidak akan dibutuhkan dalam waktu dekat.
* Mg-996N tidak "bergetar".
Stereopi memiliki tata letak gpio yang mirip dengan standar pada
raspberry 3 .
Oleh karena itu, kabel sinyal dari servos akan menuju gpio, dan lebih baik untuk mengambil 5V bukan dari raspberry, tetapi dari samping, gabungkan GND serv dengan GND raspberry dan GND dari sumber eksternal.
Sekarang yang paling penting adalah perangkat lunak
Pada raspberry kita membutuhkan iblis, tetapi bukan Lermontov, tetapi pigpio. Anda tidak perlu mengambil langkah-langkah khusus untuk mengonfigurasinya, hal utama adalah mengetahui bahwa itu tergantung pada port 8888 dan Anda harus terlebih dahulu menjalankannya:
sudo systemctl start pigpiod.service
Selanjutnya, buat file yang akan mengelola server, menerima data dari soket, yang dibuatnya sendiri:
datachannel_server_tele.py Komentar dibiarkan dalam teks untuk memahami dari mana kode itu berasal dan apa lagi yang bisa diperbaiki.
Arti umum kode adalah sebagai berikut:
- pada awalnya, servos diatur ke posisi tengah.
- Ada 3 pin (gpio) di mana kabel sinyal servos tergantung. Dalam kasus kami, 2 pin (penangguhan 2 servos).
- gpio dikendalikan dengan menerapkan sinyal dalam rentang PWM dari 1000 hingga 2000.
- sebuah garis tiba dari telepon, yang diurai oleh json (Anda dapat melakukan sesuatu yang lain), maka nilai x dan y diambil darinya. Selanjutnya, nilai-nilai ini diterjemahkan ke dalam nilai PWM untuk memutar servos.
* Masalahnya adalah x mengambil nilai dari 0 hingga 360 (telepon berputar pada sumbunya), seperti y. Dan nilai-nilai ini harus terikat ke PWM, yang mengambil nilai dari 1000 hingga 2000. Kode ini menggunakan rumus pitchPW = key1 * 5 + 500. 500 adalah nilai servo PWM minimum (meskipun asumsi adalah 1000 dalam kode). Dan perkalian dengan 5 adalah bersyarat. Poin ini perlu ditingkatkan, karena pada x = 360, nilai PWM berkali-kali lebih tinggi dari maksimum. Servo dilindungi dari melebihi sudut rotasi maksimum untuk menghindari kerusakan, tetapi ini tidak terlalu menyenangkan.
Jalankan kode di terminal raspberry:
sudo python3 datachannel_server_tele.py
Kami akan mengaktifkan GPS di telepon (setiap telepon memiliki ikon yang sesuai dalam pengaturan) dan membahas ip raspberry.
https://192.168.1.100:8080/stream/webrtc
Klik "Panggil." Setelah koneksi terjalin, pada ponsel di browser pada halaman, periksa "kirim sudut orientasi perangkat alpha, beta, gamma".
Nilai x akan pergi ke terminal dengan skrip. Dan, jika Anda memutar ponsel, mereka akan berubah.
Servo juga akan bergerak.
* Saat ini salah satunya (yang kedua dikomentari).
Bonus bagus dari webrtc juga memberi Anda kesempatan :
- buat kemiripan telebridge antara ponsel dan raspberry (teman bicara Anda akan banyak sekali),
- menyiarkan suara di kedua arah (tidak diuji, tetapi diperhitungkan dalam pengaturan),
- Streaming ke halaman web, youtube dalam 3d.
- buat panggilan konferensi dari beberapa teman (jitsi meet).
- ubah pengaturan kamera dengan cepat melalui antarmuka web (mengapa rotate! &? tidak berfungsi).
Sekarang tentang yang menyedihkan.
1. Shalturit dengan menghubungkan dua kamera berbeda dengan mata ikan pada penguasa sekolah tidak bekerja. Ternyata ikan memiliki mata yang berbeda. Kami membutuhkan jenis kamera yang sama:

2. Tidak dimungkinkan untuk memperluas gambar dari kamera stereo melalui pengaturan antarmuka web webrtc. Sementara fotonya sempit, seperti celana Prancis.

3. Servo MG996N terbatas pada -180 sudut rotasi. Bahkan - 160. Mungkin seseorang akan menyarankan dengan 360, tetapi tanpa rotasi terus menerus.
4. Perangkat lunak membutuhkan penggilingan.
5. Panggilan kadang jatuh, Anda harus menyambung kembali.
Aplikasi: