13. Télécommande sur page Web

Objectif: Contrôler le rover à partir d’un site web.

Âge

10 à 18 ans

Notions abordées

Site web

Objectifs pédagogiques

Serveur web, page HTML

Durée

2 heures

Dispositif pédagogiques

Par groupe de 2

Matériel

Un MarsCambot, Un laptop/tablette par groupe de 2, avec connexion à Internet

Prérequis

1. Avoir construit le MarsCamBot et s’y être connecté avec VNC viewer (voir Activité 5 - Construction du rover). 2. Connaissances de bases de Python pour contrôler le robot (voir Activité 7 - Contrôle d’un rover avec Python)

13.1. Aperçu

L’activité consiste à contrôler les déplacements du rover depuis un site Web.

13.2. Code

# Import the Time library
import motor_control

# For receiving images from the camera
import cv2

# For the Web server
import flask  
# Set motor speed
motor_speed=0.5
# Display the video
def display_video():
    
    camera_object = cv2.VideoCapture(0)
    
    while True:
    
        ret, picture = camera_object.read()
        picture_rgb = cv2.cvtColor(picture, cv2.COLOR_BGR2RGB)
    
        ret, jpeg = cv2.imencode('.jpg', picture_rgb)
        pic = jpeg.tobytes()
        
        #Flask streaming
        yield (b'--frame\r\n'
               b'Content-Type: image/jpeg\r\n\r\n' + pic + b'\r\n\r\n')
# Start Flask app (Web server)
app = flask.Flask("Remote control")
# Define the control as a function of the URL
@app.route('/')
def index():
    return flask.render_template("index.html")

@app.route('/video_feed')
def video_feed():
    return flask.Response(display_video(),
                    mimetype='multipart/x-mixed-replace; boundary=frame')

@app.route('/forward')
def button_forward():
    motor_control.forward(speed=motor_speed, duration=1)
    return ""
    
@app.route('/backward')
def button_backward():
    motor_control.backward(speed=motor_speed, duration=1)
    return ""
    
@app.route('/left')
def button_left():
    motor_control.turn_left(speed=motor_speed, duration=1)
    return ""
    
@app.route('/right')
def button_right():
    motor_control.turn_right(speed=motor_speed, duration=1)
    return ""
# Start Web server
app.run(host='0.0.0.0', port=2204, threaded=True, debug=False)