# Examples ## Prerequisites ```bash pip install protobuf protoc --python_out=. proto/asimov_command.proto ``` ## Scripts | Script | What it does | |--------|--------------| | stand_up.py | Make the robot stand | | walk_forward.py | Walk in a direction | | read_telemetry.py | Print sensor data | ## Running ```bash # Change ROBOT_IP in the script, then: python3 stand_up.py ``` ## Common Pattern All scripts follow the same structure: ```python import socket import time from asimov_command_pb2 import RobotCommand, ControlMode ROBOT_IP = '192.168.1.100' ROBOT_PORT = 8888 sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) def send(mode, vx=0, vy=0, vyaw=0): cmd = RobotCommand() cmd.mode = mode cmd.vx, cmd.vy, cmd.vyaw = vx, vy, vyaw cmd.enable = True cmd.timestamp_us = int(time.time() * 1e6) sock.sendto(cmd.SerializeToString(), (ROBOT_IP, ROBOT_PORT)) # Your control logic here send(ControlMode.CONTROL_MODE_STAND) ``` ## Stand Up ```python #!/usr/bin/env python3 """Make the robot stand up.""" import socket import time from asimov_command_pb2 import RobotCommand, ControlMode ROBOT_IP = '192.168.1.100' ROBOT_PORT = 8888 sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) def send(mode, vx=0, vy=0, vyaw=0): cmd = RobotCommand() cmd.mode = mode cmd.vx, cmd.vy, cmd.vyaw = vx, vy, vyaw cmd.enable = True cmd.timestamp_us = int(time.time() * 1e6) sock.sendto(cmd.SerializeToString(), (ROBOT_IP, ROBOT_PORT)) # Enable motors (soft) print("Enabling motors...") send(ControlMode.CONTROL_MODE_DAMP) time.sleep(0.5) # Stand up print("Standing up...") send(ControlMode.CONTROL_MODE_STAND) time.sleep(2.5) print("Done!") ``` ## Walk Forward ```python #!/usr/bin/env python3 """Walk forward for 5 seconds.""" import socket import time from asimov_command_pb2 import RobotCommand, ControlMode ROBOT_IP = '192.168.1.100' ROBOT_PORT = 8888 sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) def send(mode, vx=0, vy=0, vyaw=0): cmd = RobotCommand() cmd.mode = mode cmd.vx, cmd.vy, cmd.vyaw = vx, vy, vyaw cmd.enable = True cmd.timestamp_us = int(time.time() * 1e6) sock.sendto(cmd.SerializeToString(), (ROBOT_IP, ROBOT_PORT)) # Stand up sequence print("Standing up...") send(ControlMode.CONTROL_MODE_STAND) time.sleep(2.5) print("Starting balance...") send(ControlMode.CONTROL_MODE_START) time.sleep(0.5) # Walk forward at 0.3 m/s for 5 seconds print("Walking forward...") for _ in range(250): # 5 seconds at 50 Hz send(ControlMode.CONTROL_MODE_MOVE, vx=0.3) time.sleep(0.02) # Stop print("Stopping...") send(ControlMode.CONTROL_MODE_DAMP) ``` ## Read Telemetry ```python #!/usr/bin/env python3 """Print telemetry data.""" import socket from asimov_command_pb2 import RobotState sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.bind(('0.0.0.0', 9999)) sock.settimeout(5.0) print("Waiting for telemetry...") try: while True: data, addr = sock.recvfrom(512) state = RobotState() state.ParseFromString(data) print(f"Mode: {state.current_mode} | " f"Battery: {state.battery_percent}% | " f"Motors: {'ON' if state.motors_enabled else 'OFF'}") except KeyboardInterrupt: print("\nDone") except socket.timeout: print("No telemetry received - is the robot running?") ```