mirror of
https://github.com/dragonpilot/dragonpilot.git
synced 2026-08-21 16:23:50 +08:00
[commabody] Add new body teleop ui (#29119)
* add new ui * move body tele op ui to new dir * fix codespell errors * resolve mediablackhole pylint error * fix import error * style fixes * use logging, not print * fix js styling * resolve comments
This commit is contained in:
@@ -1,78 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
import time
|
||||
import threading
|
||||
from flask import Flask
|
||||
|
||||
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">
|
||||
// Set up gamepad handlers
|
||||
let gamepad = null;
|
||||
window.addEventListener("gamepadconnected", function(e) {
|
||||
gamepad = e.gamepad;
|
||||
});
|
||||
window.addEventListener("gamepaddisconnected", function(e) {
|
||||
gamepad = null;
|
||||
});
|
||||
// Create JoyStick object into the DIV 'joyDiv'
|
||||
var joy = new JoyStick('joyDiv');
|
||||
setInterval(function(){
|
||||
var x = -joy.GetX()/100;
|
||||
var y = joy.GetY()/100;
|
||||
if (x === 0 && y === 0 && gamepad !== null) {
|
||||
let gamepadstate = navigator.getGamepads()[gamepad.index];
|
||||
x = -gamepadstate.axes[0];
|
||||
y = -gamepadstate.axes[1];
|
||||
}
|
||||
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.monotonic()
|
||||
@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.monotonic()
|
||||
return ""
|
||||
|
||||
def handle_timeout():
|
||||
while 1:
|
||||
this_time = time.monotonic()
|
||||
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)
|
||||
|
||||
def main():
|
||||
threading.Thread(target=handle_timeout, daemon=True).start()
|
||||
app.run(host="0.0.0.0")
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Reference in New Issue
Block a user