Bagaimana kami membuat robot WebRTC sederhana di rumah

Konsep

Pernahkah Anda mengalami hal seperti itu sehingga setelah keluar rumah Anda tidak ingat apakah Anda mematikan setrika? Saat mendiskusikan kasus lain dengan seorang teman, muncul ide komik untuk membuat robot untuk memeriksa pekerjaan rumah tangga secara visual dari jarak jauh. Dan secara umum saya ingin membuat robot "mata-mata" yang dikendalikan oleh kamera dari smartphone di lutut saya. Ide ini telah kami tanam untuk waktu yang lama, tetapi kami baru mendapatkannya sekarang. Dan kami segera pergi ke bar terdekat untuk berdiskusi. Sebenarnya, tidak sepenuhnya benar menyebutnya robot. Sebaliknya, ini adalah platform yang didorong sendiri dengan kontrol telemetri melalui Internet. Tapi artikel tersebut akan menggunakan istilah "robot" karena lebih familiar. 





Teknologi WebRTC sangat cocok untuk kami, karena sangat mudah untuk mengatur transfer saluran video, audio dan data antara dua rekan dengan penundaan sinyal minimum. Dan kami tidak memiliki pengalaman dengan teknologi ini, jadi kami sangat ingin mencobanya.





Diagram yang disederhanakan dari seluruh sistem ditunjukkan pada gambar. Pengguna - operator dan robot - Raspberry PI masing-masing memasuki halaman web mereka sendiri, terhubung ke server sinyal, setelah itu sesi WebRTC dibuat di antara mereka di mana aliran video dari robot dikirim ke pengguna, dan sinyal kontrol dikirim ke robot. Selanjutnya, robot mengirimkan sinyal kontrol ke host lokalnya, di mana layanan lain memprosesnya dan mengeluarkannya ke GPIO untuk mengontrol motor. Segalanya tampak sederhana. Inilah yang kami dapatkan pada tahap ini:  





Selanjutnya, kita akan membahas semua ini secara lebih rinci.





Komponen

, . , . , .





Raspberry Pi (3b 4), , OS Raspbian. , OpenCV, .. , .





()

- ( ), FPS . Logitech QuickCam Connect Logitech C270 12$. Raspicam, . 





β€” β€” , -, . . , :





  1. , .









, . . 





Raspberry Pi . 3.7 DC-DC MT3608, , β€œβ€. - . Samsung. , . power- Xiaomi , - . Raspbery Pi4.





L9110, DC-DC , L293N. , . .





, "", -.   β€œβ€ 1$. Power- , . , Raspberry Pi.  . , . , . -. - power-. 





, , . . JavaScript Python. . , .





NodeJS . :





  • , .





  • , .. -.





  β€œβ€ . . . , .  .





SignalEmitter. . id - , isControl - . signalServer - uri . .  





const se = new SignalEmitter({
	id: searchParams.get('id'),
	isControl: false,
	signalServer: config.signalServer
});
      
      



WebRTC

RTC. - options SignalEmitter, . isControl - . platformSocket - uri localhost' .





const webrtc = new RTC({
	isControl: false,
	platformSocket: config.platformSocket}, 
se);
      
      



Vue.js, . /public. :





Selenium

, Selenium WebDriver + geckodriver headless . , robot-signal-server/selenium/index.js. , . , . /etc/network/if-up.d/ .





Python. - websocket , GPIO. , : [0…+-1, 0…+-1] JSON. .. , , -1 +1 0.01. , - . (. GItHub )





, . production- - , . , . .





3/4/5G , . :












All Articles