MotorDaemon

De Wiki INTech
Aller à : navigation, rechercher

MotorDaemon est le daemon de contrôle du robot dans le cadre d'INTechOS. Il ressemble au Bas Niveau d'INTech dans son comportement.
Disponible sur github.com/discord-intech/MotorDaemon

Commande de lancement

./MotorDaemon [-s]
./MotorDaemon [-p host]

-s Lance MotorDaemon en mode serveur

-p Lance MotorDaemon en mode proxy, se connecte à MotorDaemonManager situé au host indiqué sur le port 56990
  Tout système communiquant avec MotorDaemon doit alors se connecter au host exécutant MotorDaemonManager comme s'il s'agisssait de MotorDaemon lui-même.



java -jar MotorDaemonManager.jar [--fallback] [-m <path_to_map>]

--fallback Ordonne un retour à la base, une fois le robot connecté

-m <path_to_map> Donne la map au manager, elle doit être sous forme JSON.

Comment communiquer ?

Une fois connecté en TCP/IP au port 56987 de la carte, vous devez envoyer un buffer d'exactement 12 octets contenant la chaîne "motordaemon" et se concluant par un '\0'.
Ceci permet de confirmer que vous êtes venus parler à MotorDaemon, et qu'il ne s'agit pas d'un appel foireux.
Ensuite, il suffit des buffers de 65536 octets contenant les ordres.
Ces buffers doivent contenir un ordre encodé en ASCII dès le début du buffer, le reste devant être rempli de \0 et ne doit pas contenir de \n ou \r

Liste des ordres

Cette page est actualisée en même temps que la branche master de MotorDaemon.

Ordre à envoyer Description
stop Arrête complètement tout mouvement en cours, le robot s'asservit sur sa position actuelle. Le rayon de courbure n'est pas réinitialisé. Réactive l'asservissement en position.
d <longueur algébrique en mm> Fait avancer le robot du nombre de millimètres demandé.
cr <longueur algébrique en mm> Change le rayon de courbure à celui donné. Positif = vers la gauche
sets <vitesse en ticks/sec> Change la vitesse maximale du robot par celle donnée.
c Renvoie les valeurs des compteurs des codeuses.
p Renvoie la position et l'angle du robot sous la forme "x;y;angle"
sv Renvoie les consignes de vitesse et la vitesse actuelle des moteurs, accompagnés du timestamp de mesure, sous la forme "t;consigne_g;g;consigne_d;d"
k Renvoie les constantes d'asservissement actuelles.
setpos <x> <y> Force la position mesurée par MotorDaemon à être celle envoyée.
setang <rad> Force l'angle mesuré par MotorDaemon à être celui envoyé.
setksg <kp> <ki> <kd> Règle les constantes d'asservissement en vitesse du moteur gauche.
setksd <kp> <ki> <kd> Règle les constantes d'asservissement en vitesse du moteur droit.
setktd <kp> <ki> <kd> Règle les constantes d'asservissement en translation.
setkcd <kp> <ki> <kd> Règle les constantes d'asservissement en rayon de courbure.
exit Fait un appel à stop et coupe la connexion TCP avec le client.
go Désactive l'asservissement en position et fait avancer le robot à sa vitesse maximale configurée vers l'avant.
stop est directement lancé au bout d'une seconde si l'ordre n'est pas renvoyé.
gor Désactive l'asservissement en vitesse et fait avancer le robot à sa vitesse maximale configurée vers l'arrière.
stop est directement lancé au bout d'une seconde si l'ordre n'est pas renvoyé.
followpath <chemin> Fait suivre le robot une trajectoire définie par des points de passage contenant distance parcourue depuis le début du mouvement et courbure à cet instant.

Le chemin est à envoyer de cette manière : dist1:courb1;dist2:courb2;...

sweepL Oriente le rayon de courbure vers la gauche, à la manière d'une télécommande. Va jusqu'au rayon de courbure minimal.
sweepR Oriente le rayon de courbure vers la droite, à la manière d'une télécommande. Va jusqu'au rayon de courbure minimal.
sweepstop Réinitialise le rayon de courbure à l'infini.
status Renvoie de multiples informations sur le robot sous la forme : chargeCPU;tempCPU;ramUsed;ramTotal;vitesseMaxRobot;posX;posY;angle
startcamera <IP_publique_client> Lance le flux UDP-RTP MJPEG de la caméra vers le client indiqué
stopcamera Arrête le flux et la caméra

Ordres spéciaux MotorDaemonManager

Ces ordres sont spécifiques à MotorDaemonManager, seul un robot connecté à travers le manager sera capable d'exécuter ces ordres.

Ordre à envoyer Description
goto <x> <y> <angle> <send_to_robot> Appelle le pathfinding vers la position demandée et ordonne au robot de s'y déplacer. <send_to_robot> doit valoir "1" ou "0", "1" envoyant l'ordre de déplacement au robot, "0" peut être utilisé pour simuler une trajectoire
Il renvie la trajectoire sous forme JSON

{
"type": "path",
[{
x:<valeur réelle>
y:<valeur réelle>
},{
...
}]}

startwebcamera <IP> Lance la camera en mode proxy pour l'interface WEB. L'IP à envoyer est celle du serveur WEB.
motordaemonstatus Renvoie le statut de MotorDeamon, si le robot est connecté ou non (true/false).
newmap Met à jour la map d'obstacles du pathfinding, les obstacles doivent respecter un certain format JSON

Camera

Le flux camera est encodé en Motion-JPEG et envoyé sur le port 56988 en RTP par UDP.
Le flux s'active/désactive avec les ordres startcamera <IP> et stopcamera
startcamera demande l'IP publique du client, MotorDaemon lui envoyant directement le flux UDP afin d'éviter tout problème de NAT.
Le flux est désactivé par défaut.

Table SNMP

Ceci est la table des valeurs SNMP de la MIB de MotorDaemonManager.
Le port SNMP est 56991.


Variable OID
État MotorDaemon (true/false) 1.3.6.1.4.1.56987.1.1
Position X (mm) 1.3.6.1.4.1.56987.2.1
Position Y (mm) 1.3.6.1.4.1.56987.3.1
Orientation (rad) 1.3.6.1.4.1.56987.11.1
Niveau batterie (%) 1.3.6.1.4.1.56987.4.1
État camera (true/false) 1.3.6.1.4.1.56987.5.1
Charge CPU (%) 1.3.6.1.4.1.56987.6.1
Température CPU (°C) 1.3.6.1.4.1.56987.7.1
RAM Utilisée (MB) 1.3.6.1.4.1.56987.8.1
RAM Totale (MB) 1.3.6.1.4.1.56987.9.1
Vitesse réglée (mm/s) 1.3.6.1.4.1.56987.10.1