import streamlit as st from utils import * from client import CobotController st.title("MyCobot280 Pi control demo") st.markdown(""" This app is a public demo of remote control of the MyCobot280 Pi through the MQTT Communication Protocol. """) cobot_stream_url = "https://www.youtube.com/live/fF4zEp6LSkg?si=wS0yuA-7dlhLk9ZD" st.video( cobot_stream_url # Optionally enable autoplay which requires muting as browsers don't allow autoplay of unmuted video # muted=True, # autoplay=True ) render_log_window() user_id = get_user_id() user, passwd, host, endpoint, port = get_credentials(False) client = CobotController(user, passwd, host, port, endpoint, user_id) # refresh_once() st.markdown("## Commands") commands = [ "query/angles", "query/coords", "query/gripper", "query/camera", "control/angles", "control/coords", "control/gripper" ] selected = st.selectbox("Select command: ", commands, key="selected_command", disabled=False) args = {} command = None with st.form("mqtt_form"): if st.session_state.selected_command == "query/angles": command = client.get_angles elif st.session_state.selected_command == "query/coords": command = client.get_coords elif st.session_state.selected_command == "query/gripper": command = client.get_gripper_value elif st.session_state.selected_command == "query/camera": quality = st.slider("Image quality", 1, 100, 100) command = client.get_camera args = {"quality": quality} elif st.session_state.selected_command == "control/angles": angle_1 = st.number_input("Angle 1", format="%.2f", step=5.0) angle_2 = st.number_input("Angle 2", format="%.2f", step=5.0) angle_3 = st.number_input("Angle 3", format="%.2f", step=5.0) angle_4 = st.number_input("Angle 4", format="%.2f", step=5.0) angle_5 = st.number_input("Angle 5", format="%.2f", step=5.0) angle_6 = st.number_input("Angle 6", format="%.2f", step=5.0) speed = st.slider("Speed", 1, 100, 50) command = client.send_angles args = {"angle_list": [angle_1, angle_2, angle_3, angle_4, angle_5, angle_6], "speed": speed} elif st.session_state.selected_command == "control/coords": x = st.number_input("x", format="%.2f", step=5.0) y = st.number_input("y", format="%.2f", step=5.0) z = st.number_input("z", format="%.2f", step=5.0) rx = st.number_input("rx (Rotation x)", format="%.2f", step=5.0) ry = st.number_input("ry (Rotation y)", format="%.2f", step=5.0) rz = st.number_input("rz (Rotation z)", format="%.2f", step=5.0) speed = st.slider("Speed", 1, 100, 50) command = client.send_coords args = {"coord_list": [x, y, z, rx, ry, rz], "speed": speed} elif st.session_state.selected_command == "control/gripper": gripper_value = st.slider("Gripper value", 1, 100, 50) speed = st.slider("Speed", 1, 100, 50) command = client.send_gripper_value args = {"value": gripper_value, "speed": speed} submitted = st.form_submit_button("Send Command") if submitted: response = command(**args) st.markdown("### Response") if response is not None: if "image" in response: image = response.pop("image") st.write(response) st.image(image, caption="Cobot camera view") else: st.write(response) else: st.write("Timed out waiting for response. Is the on-device server running?")