Cómo hicimos un robot WebRTC simple en casa

Concepto

¿Has tenido alguna vez algo así que después de salir de casa no recuerdas si apagaste la plancha? Al discutir otro caso similar con un amigo, apareció una idea cómica para hacer un robot para la verificación visual remota de las tareas del hogar. Y, en general, quería hacer un robot "espía" controlado por una cámara desde un teléfono inteligente en mis rodillas. Esta idea fue tramada por nosotros durante mucho tiempo, pero solo ahora la tenemos en nuestras manos. E inmediatamente fuimos al bar más cercano para discutir. No es del todo correcto llamarlo robot. Más bien, es una plataforma autopropulsada con control de telemetría a través de Internet. Pero el artículo utilizará el término "robot" simplemente porque es más familiar. 





La tecnología WebRTC nos convenía perfectamente, ya que es bastante fácil organizar la transferencia de canales de video, audio y datos entre dos pares con un retraso de señal mínimo. Y no teníamos experiencia con esta tecnología, así que realmente queríamos probarla.





En la figura se muestra un diagrama simplificado de todo el sistema. Usuario - operador y robot - Raspberry PI ingresa cada uno a su propia página web, se conecta al servidor de señales, después de lo cual se crea una sesión WebRTC entre ellos a través de la cual el flujo de video del robot se transmite al usuario y las señales de control se transmiten al robot. Además, el robot envía señales de control a su host local donde otro servicio las procesa y las envía a GPIO para controlar los motores. Todo parece sencillo. Esto es lo que tenemos en esta etapa:  





A continuación, trataremos todo esto con más detalle.





Componentes

, . , . , .





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