Como fizemos um robô WebRTC simples em casa

Conceito

Você já experimentou tal coisa que depois de sair de casa não lembra se desligou o ferro? Discutindo outro caso semelhante com um amigo, surgiu uma idéia cômica de fazer um robô para verificação visual remota das tarefas domésticas. E no geral eu queria fazer um robô “espião” controlado por uma câmera de um smartphone sobre meus joelhos. Há muito que temos essa ideia, mas só agora. E imediatamente fomos para o bar mais próximo para discussão. Não é totalmente correto chamá-lo de robô. Em vez disso, é uma plataforma autopropelida com controle de telemetria pela Internet. Mas o artigo usará o termo "robô" simplesmente porque é mais familiar. 





A tecnologia WebRTC nos adequou perfeitamente, pois é muito fácil organizar a transferência de canais de vídeo, áudio e dados entre dois pares com um atraso mínimo de sinal. E não tínhamos experiência com essa tecnologia, então realmente queríamos experimentá-la.





Um diagrama simplificado de todo o sistema é mostrado na figura. Usuário - operador e robô - Raspberry PI cada um entra em sua própria página da web, conecta-se ao servidor de sinal, após o que uma sessão WebRTC é criada entre eles, por meio da qual o fluxo de vídeo do robô é transmitido ao usuário e os sinais de controle são transmitidos ao robô. Além disso, o robô envia sinais de controle para seu host local, onde outro serviço os processa e os envia para o GPIO para controlar os motores. Tudo parece simples. Aqui está o que temos neste estágio:  





A seguir, trataremos de tudo isso com mais detalhes.





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