Aller au contenu


Photo
* * * * * 1 note(s)

[Projet Rover 2WD] Mon robot de surveillance mobile et télécommandé

Arduino Raspberry PI3 MIT Inventor 2 Rover UGV Robot mobile PID

282 réponses à ce sujet

#121 zavatha

zavatha

    Habitué

  • Membres
  • PipPip
  • 233 messages
  • Gender:Male

Posté 26 juin 2017 - 04:27

Ça à l'air pas mal android inventor2... je ne connaissais pas donc je vais me renseigner ^^

Mer i pour l'information!

@+ Zav

#122 Ulysse

Ulysse

    Membre passionné

  • Membres
  • PipPipPip
  • 486 messages
  • Gender:Not Telling

Posté 26 juin 2017 - 06:31

Oui c'est tout bon AI2. C'est ce qu'on fait de mieux si on ne veut pas toucher à Android Studio ou Xamarin.



#123 gerardosamara

gerardosamara

    Membre passionné

  • Membres
  • PipPipPip
  • 374 messages
  • Gender:Male
  • Location:Costa Rica & Bretagne

Posté 29 juin 2017 - 04:54

Pour le test de la  mini API entre le Rpi3 et l'app Android pour la transmission des commands du robot ( AV AR ... ) : 

 

- un ajout de blocks dans l'app android inventor2  pour le test de l'API ( message <TestApi>  envoyé suite click du bouton "Connexion API Rpi3" et attente réception message <Test Api> par l'app android

- un script python est lancé sur le Rpi pour les échanges Rpi3 <-> App android

 

ApiUrl.PNG

Test API inventor.jpg

Screenshot_app android.png

#!/usr/bin/python3.4
# coding: utf-8 # -*-coding:Utf-8 -*

import socket

host = ''
port = 8481

connexion_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
connexion_server.bind((host, port))
connexion_server.listen(5)
print("Le serveur écoute à présent sur le port {}".format(port))

connexion_client, infos_connexion = connexion_server.accept()
print(infos_connexion)

msg_recu = b""
while msg_recu != b"Stop":
    msg_recu = connexion_client.recv(1024)
    if msg_recu:
         # L'instruction ci-dessous peut lever une exception si le message
         # Réceptionné comporte des accents
         print(msg_recu.decode())
         connexion_client.send(b"<Test Api>")
         print("Reponse <Test Api>")
         print(infos_connexion)

print("Fermeture de la connexion")
connexion_client.close()
connexion_server.close()

Pura vida

 

Ma chaine youtube  https://www.youtube....EQ5MTR3A/videos

Tutoriel MIT Inventor2  https://www.robot-ma...e-robot-mobile/


#124 gerardosamara

gerardosamara

    Membre passionné

  • Membres
  • PipPipPip
  • 374 messages
  • Gender:Male
  • Location:Costa Rica & Bretagne

Posté 02 juillet 2017 - 11:20

Test de l'API ....  Le message de test est bien recu par le script python du Raspberry mais la réponse envoyée par le Rpi  n'est pas recu par l'app android , le texte "Connexion Api Rpi3 OK" ne s'affichant pas.

 

Test api .PNG


Pura vida

 

Ma chaine youtube  https://www.youtube....EQ5MTR3A/videos

Tutoriel MIT Inventor2  https://www.robot-ma...e-robot-mobile/


#125 arobasseb

arobasseb

    Membre chevronné

  • Administrateur
  • PipPipPipPip
  • 737 messages
  • Gender:Male
  • Location:BORDEAUX (33)

Posté 02 juillet 2017 - 02:35

tu as essayé de remplacer 

 

connexion_client.send(b"<Test Api>")

 

par : 

 

msg = "<Test Api>"

connexion_client.send(msg.encode())



#126 gerardosamara

gerardosamara

    Membre passionné

  • Membres
  • PipPipPip
  • 374 messages
  • Gender:Male
  • Location:Costa Rica & Bretagne

Posté 02 juillet 2017 - 08:44

Merci pour la proposition.

 

La modification du script python ne résouds pas le pb.

Je vais tracer les messages RPI3 <-> Android App  avec Wireshark .


Pura vida

 

Ma chaine youtube  https://www.youtube....EQ5MTR3A/videos

Tutoriel MIT Inventor2  https://www.robot-ma...e-robot-mobile/


#127 arobasseb

arobasseb

    Membre chevronné

  • Administrateur
  • PipPipPipPip
  • 737 messages
  • Gender:Male
  • Location:BORDEAUX (33)

Posté 03 juillet 2017 - 06:59

Sinon côté Android, dans le block when web3.gottext avant le if met un print , pour valider que l' évènement est bien levé. Si ça se trouve la chaine reçu est différente de ce que tu attends.

#128 gerardosamara

gerardosamara

    Membre passionné

  • Membres
  • PipPipPip
  • 374 messages
  • Gender:Male
  • Location:Costa Rica & Bretagne

Posté 12 juillet 2017 - 08:59

@arobasseb ,

 

J'ai ajouté un "print" dans le block "when web3.gottext avant le if mais pas de trace editée dans le label du bouton de l'app android , donc à priori la réponse du RPI3 n'arrive pas à l'app android

 

screenshot app ugv1 test api rpi3.PNG

 

Donc il va falloir tracer les messages HTTP échangés entre le RPI3 et l'APP Android  avec Wireshark ou Tcpdump , mais je ne sais pas si l'interface wifi du RPI3 peut passer en mode "promiscuous" pour "sniffer" à partir d'un PC.


Pura vida

 

Ma chaine youtube  https://www.youtube....EQ5MTR3A/videos

Tutoriel MIT Inventor2  https://www.robot-ma...e-robot-mobile/


#129 arobasseb

arobasseb

    Membre chevronné

  • Administrateur
  • PipPipPipPip
  • 737 messages
  • Gender:Male
  • Location:BORDEAUX (33)

Posté 12 juillet 2017 - 09:31

Avec les informations que tu as fourni je ne vois pas ce qui peut bloquer. Effectivement tracer les packets reste une bonne solution. Sinon tu peux faire un petit client python voir si le code marche bien en local.



#130 gerardosamara

gerardosamara

    Membre passionné

  • Membres
  • PipPipPip
  • 374 messages
  • Gender:Male
  • Location:Costa Rica & Bretagne

Posté 12 juillet 2017 - 03:52

La prise de trace par Wireshark est possible en installant le client python sur un PC comme l'interface wifi du RPI3 ne supporte pas le mode "promiscuous"

Le client python sur PC attend une saisie clavier avec ">"  par exemple "<Test Api>" et le serveur python sur le RPi3 va renvoyer "<Test Api>".

 

+++++++++++++++++++++++++++

Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 17:54:52) [MSC v.1900 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>>
=========== RESTART: D:\Personnel\Robotique\test client python.py ===========
Connexion établie avec le serveur sur le port 8481
> <Test Api>
<Test Api>
>

+++++++++++++++++++++++++++++

 

==> Résultat OK de l'échange ci-dessous avec la trace wireshark ( port serveur = 8481 ) mais qui montre que la réponse TCP+ Data n'est pas compatible avec  l'app android qui utilise des requètes HTTP POST + DATA

 

=> Requette Http POST recue de l'app android coté serveur en test réel

 

http post app android.PNG

 

 

==> Traces Wireshark du client python de test

 

 

Screenshot client python.PNG

 

==> Client Python

import socket
host = "192.168.0.150"
port = 8481
connexion_avec_serveur = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
connexion_avec_serveur.connect((host, port))
print("Connexion établie avec le serveur sur le port {}".format(port))
msg_a_envoyer = b""
while msg_a_envoyer != b"fin":
    msg_a_envoyer = input("> ")
    msg_a_envoyer = msg_a_envoyer.encode()
    # message client vers serveur RPI3
    connexion_avec_serveur.send(msg_a_envoyer)
    msg_recu = connexion_avec_serveur.recv(1024)
	# message réponse serveur RPI3 vers client
    print(msg_recu.decode()) 
print("Fermeture de la connexion")
connexion_avec_serveur.close()

Pura vida

 

Ma chaine youtube  https://www.youtube....EQ5MTR3A/videos

Tutoriel MIT Inventor2  https://www.robot-ma...e-robot-mobile/


#131 arobasseb

arobasseb

    Membre chevronné

  • Administrateur
  • PipPipPipPip
  • 737 messages
  • Gender:Male
  • Location:BORDEAUX (33)

Posté 12 juillet 2017 - 05:55

Du coup tu va faire comment ? Tu va remplacer les sockets du code python par des requête html?

#132 gerardosamara

gerardosamara

    Membre passionné

  • Membres
  • PipPipPip
  • 374 messages
  • Gender:Male
  • Location:Costa Rica & Bretagne

Posté 13 juillet 2017 - 11:00

L'idée est de garder , au niveau du script python coté serveur , les sockets TCP  mais en renvoyant une réponse HTTP/1.1 200 OK avec les headers qui vont bien et non plus le renvoi du message recu "<Test Api>".

 

Ca devrait marcher !


Pura vida

 

Ma chaine youtube  https://www.youtube....EQ5MTR3A/videos

Tutoriel MIT Inventor2  https://www.robot-ma...e-robot-mobile/


#133 gerardosamara

gerardosamara

    Membre passionné

  • Membres
  • PipPipPip
  • 374 messages
  • Gender:Male
  • Location:Costa Rica & Bretagne

Posté 14 juillet 2017 - 09:08

Ca marche si le serveur réponds un HTTP/1.1 200 OK à l'app Android

 

La prochaine étape sera de tester la connexion app android <-> Arduino connecté en USB derrière le RPI3

 

 

python server test api.PNG

 

app android test api rpi3.jpg

 

Script de test python installlé sur le RPI3

#!/usr/bin/python3.4
# coding: utf-8 # -*-coding:Utf-8 -*

import socket

host = ''
port = 8481

connexion_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
connexion_server.bind((host, port))
connexion_server.listen(5)
print("Le serveur écoute à présent sur le port {}".format(port))

connexion_client, infos_connexion = connexion_server.accept()
print(infos_connexion)

msg_recu = b""
# header response code 200
h = 'HTTP/1.1 200 OK\n'
h += 'Server: Simple-Python-HTTP-Server\n'
h += 'Content-Length: 0\n'
h += 'Connection: keep-alive\n\n'
# Boucle  
while msg_recu != b"Stop":
    msg_recu = connexion_client.recv(1024)
    if msg_recu:
         print(msg_recu.decode())
         connexion_client.send(h.encode())
         print(h) # response code 200
         print(infos_connexion)
 
print("Fermeture de la connexion")
connexion_client.close()
connexion_server.close()



Pura vida

 

Ma chaine youtube  https://www.youtube....EQ5MTR3A/videos

Tutoriel MIT Inventor2  https://www.robot-ma...e-robot-mobile/


#134 gerardosamara

gerardosamara

    Membre passionné

  • Membres
  • PipPipPip
  • 374 messages
  • Gender:Male
  • Location:Costa Rica & Bretagne

Posté 10 septembre 2017 - 12:32

Il restait à tester la connexion app android <-> Arduino connecté en USB derrière le RPI3 , avant de poursuivre sur les commandes du robot .

 

La séquence du dialogue entre l'app android , le script python du RPI et le sketch de l'Arduino est plus ou moins bien décrite dans les traces du screenshot pris sur le PI .

 

- Envoi "Arduino Ready"  en boucle au Rpi par le sketch Arduino dans le bloc setup

- Configuration port USB par le Rpi  ( ser = serial.Serial("/dev/ttyACM0", 9600)

- Réception "Arduino Ready" par le RPi

- Envoi "RPI ready" par le Rpi à l'Arduino

- Réponse "Rpi Ready" de l'Arduino au Rpi

- Connexion du serveur socket dans le Rpi

- Connection du client socket Android dans le Rpi

- Envoi message"<Test Android Arduino<" par l'app Android ( bouton "Connexion Arduino")

- Réponde du Rpi " http 200 OK" à l'app Android

- Affichage "Connexion Arduino OK" sur l'app android

 

 

Screenshot test andriod arduino.PNG

 

Screenshot_ app.png

 

 

La prochaine étape sera de creer un nouvel écran sur l'app android  pour les commandes du robot et le retour video


Pura vida

 

Ma chaine youtube  https://www.youtube....EQ5MTR3A/videos

Tutoriel MIT Inventor2  https://www.robot-ma...e-robot-mobile/


#135 gerardosamara

gerardosamara

    Membre passionné

  • Membres
  • PipPipPip
  • 374 messages
  • Gender:Male
  • Location:Costa Rica & Bretagne

Posté 11 septembre 2017 - 10:17

Finalement j'ai rajouté une page d'accueil sur l'app Android afin de naviguer entre les pages :

 

- Page d'accueil ( screenshot ci-dessous)

- Page de test de connexions(disponible)  entre l'app Android , le Rpi et son script API en python , la caméra USB du Rpi et l'Arduino et son sketch du robot

- Page de controle ( demain !) du robot à partir de l'app Android sur smartphone

- Page de controle ( futur lointain) du robot à partir du logiciel domotique

-

 

Screenshot_ecran home app.png


Pura vida

 

Ma chaine youtube  https://www.youtube....EQ5MTR3A/videos

Tutoriel MIT Inventor2  https://www.robot-ma...e-robot-mobile/


#136 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 769 messages
  • Gender:Male

Posté 12 septembre 2017 - 05:54

C'est super ce que tu fais !

#137 gerardosamara

gerardosamara

    Membre passionné

  • Membres
  • PipPipPip
  • 374 messages
  • Gender:Male
  • Location:Costa Rica & Bretagne

Posté 12 septembre 2017 - 07:29

Muchas gracias @Oracid

 

Voici la page de controle  du robot à partir de l'app Android sur smartphone avec le retour vidéo.

 

En ce qui concerne l'ergonomie des boutons de controle du robor , je ne sais pas si on peut faire mieux .

 

 

 

Screenshot_retour video.png


Pura vida

 

Ma chaine youtube  https://www.youtube....EQ5MTR3A/videos

Tutoriel MIT Inventor2  https://www.robot-ma...e-robot-mobile/


#138 gerardosamara

gerardosamara

    Membre passionné

  • Membres
  • PipPipPip
  • 374 messages
  • Gender:Male
  • Location:Costa Rica & Bretagne

Posté 13 septembre 2017 - 04:47

Début des tests à partir de l'app Android :

 

- L'action sur le bouton "Start"  doit lancer la partie "Setup" du sketch Arduino suite relai du script python du Rpi

- Le message "Start" est bien envoyé par l'app Android vers le Rpi qui l'a envoyé vers l'Arduino , selon les traces coté Rpi ci-dessus

- Ce message n'est pas arrivé coté Arduino , , va falloir regarder le code des 2 cotés (Rpi et Arduino )

 

Ps: Deux champs ont été rajoutés coté app Android pour visualiser le message envoyé et la réponse

 

msg start app rpi vers arduino.PNG

Screenshot_envoi start parapp.png


Pura vida

 

Ma chaine youtube  https://www.youtube....EQ5MTR3A/videos

Tutoriel MIT Inventor2  https://www.robot-ma...e-robot-mobile/


#139 R1D1

R1D1

    Modérateur et Membre passionné

  • Modérateur
  • PipPipPipPipPip
  • 1 211 messages
  • Gender:Male
  • Location:Autriche

Posté 13 septembre 2017 - 07:33

Random guess : la partie setup est lancée dès que l'arduino est mise sous tension ; donc si ton arduino est branchée, et à moins de ré-uploader son code, au moment où tu tentes de communiquer avec, elle est déjà dans la loop.

À l'inverse, si setup n'a pas encore été appelé, il est possible que le port série ne soit pas encore initialisé (réponse sans vérifier tous les détails de ton architecture, si tu utilises un shield le comportement est peut-être différent). Je ne sais pas comment se comporterait un Serial.begin() en dehors de ces fonctions (théoriquement, il serait juste appelé dans le main du programme, mais peut-être que le placer dans le setup garantit une bonne initialisation de la carte?).

 

Au passage, bravo pour ton projet, je fais habituellement partie de la masse silencieuse des lecteurs mais c'est l'occasion de le dire :)


R1D1 - Calculo Sed Ergo Sum -- en ce moment, M.A.R.C.E.L.
Avatar tiré du site bottlebot

#140 gerardosamara

gerardosamara

    Membre passionné

  • Membres
  • PipPipPip
  • 374 messages
  • Gender:Male
  • Location:Costa Rica & Bretagne

Posté 13 septembre 2017 - 11:50

Merci @R1D1 pur la contribution

 

Le "random guess"  s'est transformé en "good catch" car effectivemen c'est bien le problème que j'avais contourné pour réaliser les premiers essais entre Rpi e Arduino , en faisant un téléversement Arduino  après le lancement du script python coté Rpi pour  que le Rpi puisse recevoir un message envoyé au niveau du setup du sketch Arduino. (solution palliative).

 

Je croyais naivement que sur ouverture du port Usb par le Rpi , la carte Arduino faisait un reset..

 

//------------- SETUP---------------
void setup()
{
 SerialSetup();      // Init serial communication
 if (DEBUG) {
   Serial.print("-----  Setup : start time =");
   Serial.println(millis()); }
 Connect_Rpi();       // Test to USB connection Rpi
 LcdSetup();         // Init Lcd screen
 VoltageAccuSetup(); // Init battery voltage measurement
 SRF05Setup();       // Init Ultrason sensor
 ServoSetup();       // Init camera servomotor
 MotorsSetup();      // init 2 CC motors
 if (DEBUG) {
   Serial.print("-----  Setup : end time =");
   Serial.println(millis()); }
}

 

//----------------------------

 

1) Cette séquence "Connect_Rpi();  " est à déplacer du bloc setup au bloc loop dans le sketch Arduino.

 

2) Non réception du message <start> envoyé par Rpi/python par le sketch Arduino

 

Il faut que je relise le code de réception sur l'interface USB coté  Arduino


Pura vida

 

Ma chaine youtube  https://www.youtube....EQ5MTR3A/videos

Tutoriel MIT Inventor2  https://www.robot-ma...e-robot-mobile/




Répondre à ce sujet



  



Aussi étiqueté avec au moins un de ces mots-clés : Arduino, Raspberry PI3, MIT Inventor 2, Rover, UGV, Robot mobile, PID

0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users