openpilot is an open source driver assistance system. openpilot performs the functions of Automated Lane Centering and Adaptive Cruise Control for over 200 supported car makes and models.

63 lines
1.5 KiB

#!/usr/bin/env python3
from flask import Flask
import time
import threading
import cereal.messaging as messaging
app = Flask(__name__)
pm = messaging.PubMaster(['testJoystick'])
index = """
<html>
<head>
<script src="https://github.com/bobboteck/JoyStick/releases/download/v1.1.6/joy.min.js"></script>
</head>
<body>
<div id="joyDiv" style="width:100%;height:100%"></div>
<script type="text/javascript">
// Create JoyStick object into the DIV 'joyDiv'
var joy = new JoyStick('joyDiv');
setInterval(function(){
var x = -joy.GetX()/100;
var y = joy.GetY()/100;
let xhr = new XMLHttpRequest();
xhr.open("GET", "/control/"+x+"/"+y);
xhr.send();
}, 50);
</script>
"""
@app.route("/")
def hello_world():
return index
last_send_time = time.time()
@app.route("/control/<x>/<y>")
def control(x, y):
global last_send_time
x,y = float(x), float(y)
x = max(-1, min(1, x))
y = max(-1, min(1, y))
dat = messaging.new_message('testJoystick')
dat.testJoystick.axes = [y,x]
dat.testJoystick.buttons = [False]
pm.send('testJoystick', dat)
last_send_time = time.time()
return ""
def handle_timeout():
while 1:
this_time = time.time()
if (last_send_time+0.5) < this_time:
print("timeout, no web in %.2f s" % (this_time-last_send_time))
dat = messaging.new_message('testJoystick')
dat.testJoystick.axes = [0,0]
dat.testJoystick.buttons = [False]
pm.send('testJoystick', dat)
time.sleep(0.1)
if __name__ == '__main__':
threading.Thread(target=handle_timeout, daemon=True).start()
app.run(host="0.0.0.0")