wip
Browse files
app.py
CHANGED
|
@@ -291,9 +291,9 @@ def create_app():
|
|
| 291 |
|
| 292 |
# Head pose slider handlers - individual handlers like in working control panel
|
| 293 |
def create_pose_handler(key):
|
| 294 |
-
return
|
| 295 |
async (value) => {{
|
| 296 |
-
if (!window.reachyApi.connected) return;
|
| 297 |
if (window.reachyApi.isRefreshing) return;
|
| 298 |
window.reachyApi.controlling = true;
|
| 299 |
window.reachyApi.currentHeadPose.{key} = value;
|
|
@@ -307,23 +307,23 @@ def create_app():
|
|
| 307 |
console.error('Set target error:', error);
|
| 308 |
}}
|
| 309 |
}}
|
| 310 |
-
"""
|
| 311 |
|
| 312 |
-
head_x.
|
| 313 |
-
head_y.
|
| 314 |
-
head_z.
|
| 315 |
-
head_roll.
|
| 316 |
-
head_pitch.
|
| 317 |
-
head_yaw.
|
| 318 |
|
| 319 |
# Body yaw handler
|
| 320 |
-
body_yaw.
|
| 321 |
fn=None,
|
| 322 |
inputs=[body_yaw],
|
| 323 |
outputs=[],
|
| 324 |
-
js=
|
| 325 |
async (value) => {
|
| 326 |
-
if (!window.reachyApi.connected) return;
|
| 327 |
if (window.reachyApi.isRefreshing) return;
|
| 328 |
window.reachyApi.controlling = true;
|
| 329 |
window.reachyApi.currentBodyYaw = value;
|
|
@@ -337,17 +337,17 @@ def create_app():
|
|
| 337 |
console.error('Set target error:', error);
|
| 338 |
}
|
| 339 |
}
|
| 340 |
-
"""
|
| 341 |
)
|
| 342 |
|
| 343 |
# Antenna handlers
|
| 344 |
-
antenna_left.
|
| 345 |
fn=None,
|
| 346 |
inputs=[antenna_left],
|
| 347 |
outputs=[],
|
| 348 |
-
js=
|
| 349 |
async (value) => {
|
| 350 |
-
if (!window.reachyApi.connected) return;
|
| 351 |
if (window.reachyApi.isRefreshing) return;
|
| 352 |
window.reachyApi.controlling = true;
|
| 353 |
window.reachyApi.currentAntennas[0] = value;
|
|
@@ -361,16 +361,16 @@ def create_app():
|
|
| 361 |
console.error('Set target error:', error);
|
| 362 |
}
|
| 363 |
}
|
| 364 |
-
"""
|
| 365 |
)
|
| 366 |
|
| 367 |
-
antenna_right.
|
| 368 |
fn=None,
|
| 369 |
inputs=[antenna_right],
|
| 370 |
outputs=[],
|
| 371 |
-
js=
|
| 372 |
async (value) => {
|
| 373 |
-
if (!window.reachyApi.connected) return;
|
| 374 |
if (window.reachyApi.isRefreshing) return;
|
| 375 |
window.reachyApi.controlling = true;
|
| 376 |
window.reachyApi.currentAntennas[1] = value;
|
|
@@ -384,7 +384,7 @@ def create_app():
|
|
| 384 |
console.error('Set target error:', error);
|
| 385 |
}
|
| 386 |
}
|
| 387 |
-
"""
|
| 388 |
)
|
| 389 |
|
| 390 |
# Release handler to stop controlling
|
|
@@ -394,7 +394,7 @@ def create_app():
|
|
| 394 |
fn=None,
|
| 395 |
inputs=[],
|
| 396 |
outputs=[],
|
| 397 |
-
js=
|
| 398 |
)
|
| 399 |
|
| 400 |
# Polling timer - updates state at 5Hz (every 200ms)
|
|
|
|
| 291 |
|
| 292 |
# Head pose slider handlers - individual handlers like in working control panel
|
| 293 |
def create_pose_handler(key):
|
| 294 |
+
return f"""
|
| 295 |
async (value) => {{
|
| 296 |
+
if (!window.reachyApi || !window.reachyApi.connected) return;
|
| 297 |
if (window.reachyApi.isRefreshing) return;
|
| 298 |
window.reachyApi.controlling = true;
|
| 299 |
window.reachyApi.currentHeadPose.{key} = value;
|
|
|
|
| 307 |
console.error('Set target error:', error);
|
| 308 |
}}
|
| 309 |
}}
|
| 310 |
+
"""
|
| 311 |
|
| 312 |
+
head_x.change(fn=None, inputs=[head_x], outputs=[], js=create_pose_handler('x'))
|
| 313 |
+
head_y.change(fn=None, inputs=[head_y], outputs=[], js=create_pose_handler('y'))
|
| 314 |
+
head_z.change(fn=None, inputs=[head_z], outputs=[], js=create_pose_handler('z'))
|
| 315 |
+
head_roll.change(fn=None, inputs=[head_roll], outputs=[], js=create_pose_handler('roll'))
|
| 316 |
+
head_pitch.change(fn=None, inputs=[head_pitch], outputs=[], js=create_pose_handler('pitch'))
|
| 317 |
+
head_yaw.change(fn=None, inputs=[head_yaw], outputs=[], js=create_pose_handler('yaw'))
|
| 318 |
|
| 319 |
# Body yaw handler
|
| 320 |
+
body_yaw.change(
|
| 321 |
fn=None,
|
| 322 |
inputs=[body_yaw],
|
| 323 |
outputs=[],
|
| 324 |
+
js="""
|
| 325 |
async (value) => {
|
| 326 |
+
if (!window.reachyApi || !window.reachyApi.connected) return;
|
| 327 |
if (window.reachyApi.isRefreshing) return;
|
| 328 |
window.reachyApi.controlling = true;
|
| 329 |
window.reachyApi.currentBodyYaw = value;
|
|
|
|
| 337 |
console.error('Set target error:', error);
|
| 338 |
}
|
| 339 |
}
|
| 340 |
+
"""
|
| 341 |
)
|
| 342 |
|
| 343 |
# Antenna handlers
|
| 344 |
+
antenna_left.change(
|
| 345 |
fn=None,
|
| 346 |
inputs=[antenna_left],
|
| 347 |
outputs=[],
|
| 348 |
+
js="""
|
| 349 |
async (value) => {
|
| 350 |
+
if (!window.reachyApi || !window.reachyApi.connected) return;
|
| 351 |
if (window.reachyApi.isRefreshing) return;
|
| 352 |
window.reachyApi.controlling = true;
|
| 353 |
window.reachyApi.currentAntennas[0] = value;
|
|
|
|
| 361 |
console.error('Set target error:', error);
|
| 362 |
}
|
| 363 |
}
|
| 364 |
+
"""
|
| 365 |
)
|
| 366 |
|
| 367 |
+
antenna_right.change(
|
| 368 |
fn=None,
|
| 369 |
inputs=[antenna_right],
|
| 370 |
outputs=[],
|
| 371 |
+
js="""
|
| 372 |
async (value) => {
|
| 373 |
+
if (!window.reachyApi || !window.reachyApi.connected) return;
|
| 374 |
if (window.reachyApi.isRefreshing) return;
|
| 375 |
window.reachyApi.controlling = true;
|
| 376 |
window.reachyApi.currentAntennas[1] = value;
|
|
|
|
| 384 |
console.error('Set target error:', error);
|
| 385 |
}
|
| 386 |
}
|
| 387 |
+
"""
|
| 388 |
)
|
| 389 |
|
| 390 |
# Release handler to stop controlling
|
|
|
|
| 394 |
fn=None,
|
| 395 |
inputs=[],
|
| 396 |
outputs=[],
|
| 397 |
+
js="async () => { if (window.reachyApi) window.reachyApi.controlling = false; }"
|
| 398 |
)
|
| 399 |
|
| 400 |
# Polling timer - updates state at 5Hz (every 200ms)
|