Wie wir zu Hause einen einfachen WebRTC-Roboter gebaut haben

Konzept

Hatten Sie jemals so etwas, dass Sie sich nach dem Verlassen des Hauses nicht mehr daran erinnern, ob Sie das Bügeleisen ausgeschaltet haben? Als ein anderer solcher Fall mit einem Freund besprochen wurde, schien eine Comic-Idee einen Roboter für die visuelle Fernprüfung von Hausarbeiten zu machen. Und im Allgemeinen wollte ich einen „Spionageroboter“ bauen, der von einer Kamera über ein Smartphone auf meinen Knien gesteuert wird. Wir haben diese Idee schon lange entwickelt, aber wir sind erst jetzt herumgekommen. Und wir gingen sofort zur nächsten Bar zur Diskussion. Es ist nicht ganz richtig, es einen Roboter zu nennen. Es handelt sich vielmehr um eine selbstfahrende Plattform mit Telemetriesteuerung über das Internet. In dem Artikel wird der Begriff "Roboter" jedoch nur verwendet, weil er vertrauter ist. 





Die WebRTC-Technologie passte perfekt zu uns, da die Übertragung von Video-, Audio- und Datenkanälen zwischen zwei Peers mit einer minimalen Signalverzögerung recht einfach zu organisieren ist. Und wir hatten keine Erfahrung mit dieser Technologie, deshalb wollten wir sie unbedingt ausprobieren.





Ein vereinfachtes Diagramm des gesamten Systems ist in der Abbildung dargestellt. Benutzer - Bediener und Roboter - Raspberry PI rufen jeweils ihre eigene Webseite auf, stellen eine Verbindung zum Signalserver her. Anschließend wird eine WebRTC-Sitzung zwischen ihnen erstellt, über die der Videostream vom Roboter an den Benutzer und Steuersignale an den Roboter übertragen werden. Ferner sendet der Roboter Steuersignale an seinen lokalen Host, wo ein anderer Dienst sie verarbeitet und an den GPIO ausgibt, um die Motoren zu steuern. Alles scheint einfach. Folgendes haben wir zu diesem Zeitpunkt erhalten:  





Als nächstes werden wir uns näher damit befassen.





Komponenten

, . , . , .





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