Concept
Avez-vous déjà eu une telle chose qu'après avoir quitté la maison, vous ne vous souvenez pas si vous avez éteint le fer? En discutant d'un autre cas de ce genre avec un ami, une idée comique est apparue pour fabriquer un robot pour le contrôle visuel à distance des tâches ménagères. Et en général je voulais faire un robot «espion» contrôlé par une caméra depuis un smartphone sur mes genoux. Cette idée est née chez nous depuis longtemps, mais nous ne l'avons mise la main que maintenant. Et nous sommes immédiatement allés au bar le plus proche pour discuter. Il n'est pas tout à fait correct de l'appeler un robot. Il s'agit plutôt d'une plate-forme autopropulsée avec un contrôle de télémétrie sur Internet. Mais l'article utilisera le terme «robot» simplement parce qu'il est plus familier.
La technologie WebRTC nous convenait parfaitement, car il est assez facile d'organiser le transfert de canaux vidéo, audio et de données entre deux pairs avec un délai de signal minimum. Et nous n'avions aucune expérience avec cette technologie, nous voulions donc vraiment l'essayer.
Un schéma simplifié de l'ensemble du système est présenté sur la figure. Utilisateur - opérateur et robot - Raspberry PI entrent chacun dans leur propre page Web, se connectent au serveur de signaux, après quoi une session WebRTC est créée entre eux à travers laquelle le flux vidéo du robot est transmis à l'utilisateur et les signaux de contrôle sont transmis au robot. En outre, le robot envoie des signaux de commande à son hôte local, où un autre service les traite et les envoie à GPIO pour contrôler les moteurs. Tout semble simple. Voici ce que nous avons à ce stade:
Ensuite, nous traiterons tout cela plus en détail.
Composants
, . , . , .
Raspberry Pi (3b 4), , OS Raspbian. , OpenCV, .. , .
()
- ( ), FPS . Logitech QuickCam Connect Logitech C270 12$. Raspicam, .
— — , -, . . , :
, .
, . .
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 , . :