Partage
  • Partager sur Facebook
  • Partager sur Twitter

Arduino, Raspberry Robot

    1 avril 2019 à 8:29:21

    Bonjour a vous,

    Je dois réaliser un robot pour un projet d'école d'ingénieur. Ainsi, celui ci disposerait de 2 cartes, une carte arduino pour contrôler les différents moteurs et une Raspberry pour la caméra frontale. 

    Ma question vient alors de comment est ce que je peut centraliser les informations hors des cartes.

    En effet, actuellement j'ai ma Raspberry qui diffuse un flux video sur une page HTML a l'aide d'un code python et un programme Unity qui peut théoriquement contrôler les moteurs a distance.

    J'aimerais donc savoir si mon programme Unity pouvait récupérer mon flux vidéo émit par ce code :

     
    import io
    import picamera
    import logging
    import socketserver
    from threading import Condition
    from http import server
    
    PAGE="""\
    <html>
    <head>
    <SCRIPT LANGUAGE="JavaScript" SRC="keyboard.js"></SCRIPT>
    <title>Raspberry Pi - Surveillance Camera</title>
    </head>
    <body>
    <center><h1>Camera du robot</h1></center>
    <center><img src="stream.mjpg" width="640" height="480"></center>
    <script language="javascript"> document.onkeydown = applyKey; </script>
    </body>
    </html>
    """
    
    class StreamingOutput(object):
        def __init__(self):
            self.frame = None
            self.buffer = io.BytesIO()
            self.condition = Condition()
    
        def write(self, buf):
            if buf.startswith(b'\xff\xd8'):
                # New frame, copy the existing buffer's content and notify all
                # clients it's available
                self.buffer.truncate()
                with self.condition:
                    self.frame = self.buffer.getvalue()
                    self.condition.notify_all()
                self.buffer.seek(0)
            return self.buffer.write(buf)
    
    class StreamingHandler(server.BaseHTTPRequestHandler):
        def do_GET(self):
            if self.path == '/':
                self.send_response(301)
                self.send_header('Location', '/index.html')
                self.end_headers()
            elif self.path == '/index.html':
                content = PAGE.encode('utf-8')
                self.send_response(200)
                self.send_header('Content-Type', 'text/html')
                self.send_header('Content-Length', len(content))
                self.end_headers()
                self.wfile.write(content)
            elif self.path == '/stream.mjpg':
                self.send_response(200)
                self.send_header('Age', 0)
                self.send_header('Cache-Control', 'no-cache, private')
                self.send_header('Pragma', 'no-cache')
                self.send_header('Content-Type', 'multipart/x-mixed-replace; boundary=FRAME')
                self.end_headers()
                try:
                    while True:
                        with output.condition:
                            output.condition.wait()
                            frame = output.frame
                        self.wfile.write(b'--FRAME\r\n')
                        self.send_header('Content-Type', 'image/jpeg')
                        self.send_header('Content-Length', len(frame))
                        self.end_headers()
                        self.wfile.write(frame)
                        self.wfile.write(b'\r\n')
                except Exception as e:
                    logging.warning(
                        'Removed streaming client %s: %s',
                        self.client_address, str(e))
            else:
                self.send_error(404)
                self.end_headers()
    
    class StreamingServer(socketserver.ThreadingMixIn, server.HTTPServer):
        allow_reuse_address = True
        daemon_threads = True
    
    with picamera.PiCamera(resolution='640x480', framerate=24) as camera:
        output = StreamingOutput()
        #Uncomment the next line to change your Pi's Camera rotation (in degrees)
        #camera.rotation = 90
        camera.start_recording(output, format='mjpeg')
        try:
            address = ('', 8000)
            server = StreamingServer(address, StreamingHandler)
            server.serve_forever()
        finally:
            camera.stop_recording()

    Sinon est-il possible de partir de ce code pour faire une page html qui réagit aux appuis sur le clavier ? PS : oui en effet j'ai déjà essayé quelque chose dans cette direction avec le keyboard.js

    Je vous remercie sincérement

    -
    Edité par Mechaick 1 avril 2019 à 8:30:32

    • Partager sur Facebook
    • Partager sur Twitter

    Arduino, Raspberry Robot

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown