Skip to content

Simple start ITA

vellons edited this page Apr 20, 2021 · 1 revision

L'obbiettivo di questa libreria è poter controllare da remoto il movimento dei motori di un robot.

Tramite questa libreria è possibile scrivere programmi che sono indipendenti dall'hardware del robot, sarà infatti tuo compito inviare ai motori i comandi di movimento. La libreria ti consentirà di gestire la velocità dei motori e la loro coordinazione. Tramite il pannello web è possibile: muovere i motori, monitorare il loro movimento e leggere i valori dei sensori.

Puoi utilizzare questa libreria su qualsiasi sistema operativo con Python 3.5 o superiore.

Pannello di controllo

Setup

La libreria verrà installata all'interno di un virtual environment di Python.

python3 -m venv env
source ./env/bin/activate
pip install wheel
pip install git+https://github.com/vellons/SimplePYBotSDK.git@main
mkdir log

Configurazione motori

I motori sono configurabili tramire un file JSON, quello sotto è un esemio di file per controllare un motore. Ogni motore ha: una direzione, un angolo di partenza (offset), degli angoli limite e un tipo. Il tipo serve per specificare la sua velocità di movimenti in gradi/secondo.

{
  "id": "example_robot",
  "version": "1",
  "name": "Example robot",
  "motors": {
    "head_z": {
      "id": "1",
      "offset": 90.0,
      "type": "virtual-servo",
      "angle_limit": [
        -75,
        75
      ],
      "orientation": "direct"
    }
  },
  "motors_type": {
    "virtual-servo": {
      "angle_speed": 60
    }
  },
  "sensors": {
    "gyroscope_x": {
      "id": "gyroscope_x",
      "offset": 0.0
    },
    "gyroscope_y": {
      "id": "gyroscope_y",
      "offset": 0.0
    },
    "gyroscope_z": {
      "id": "gyroscope_z",
      "offset": 0.0
    }
  },
  "poses": {
    "standby": {
      "head_z": 0
    }
  }
}

Programma di esempio

Questo semplice programma inizializza la libreria e i motori configurati nel file JSON.

import simplepybotsdk

robot = simplepybotsdk.RobotRESTSDK(
    config_path="robot_configuration.json",
    socket_host="localhost",
    socket_port=65432,
    rest_host="localhost",
    rest_port=8000,
    robot_speed=1
)
robot.rest_configure()
robot.rest_serve_forever()  # This start an independent thread

k = ""
while k != "stop":
    k = input("Type 'stop' to stop: ")

Il pannello di controllo è disponibile a questo indirizzo: https://vellons.github.io/SimplePYBotDashboard/

Tramite il pannello potrai modificare la posizione dei motori che si muoveranno in base alla velocità impostata.

Esempio per controllare direttamente i tuoi motori

from time import sleep
import threading
import simplepybotsdk


class MyRobot(simplepybotsdk.RobotRESTSDK):
    def __init__(
            self,
            config_path="robot_configuration.json",
            socket_host="0.0.0.0",
            socket_port=65432,
            rest_host="0.0.0.0",
            rest_port=8000,
            robot_speed=1,
            motors_check_per_second=20,
            motors_point_to_point_check_per_second=20,
            socket_send_per_second=20):
        super().__init__(config_path, socket_host, socket_port, rest_host, rest_port,
                         robot_speed, motors_check_per_second, motors_point_to_point_check_per_second,
                         socket_send_per_second)
        self.rest_configure()
        self.rest_serve_forever()

        # Questo thread serve per gestire la tua implementazione a livello hardware dei motori
        motor_handler_thread = threading.Thread(target=self.motor_handler, args=())
        motor_handler_thread.daemon = True
        motor_handler_thread.start()

    def motor_handler(self):
        while True:
            for motor in self.motors:
                # Qui puoi implementare il movimento dei motori sul tuo robot
                print("New position for {} is {}".format(motor.key , motor.get_current_angle()))
            sleep(2)  # Diminuisci lo sleep per controllare i motori in realtime


if __name__ == "__main__":
    robot = MyRobot()

    try:
        sleep(2)
        print("Waiting for commands...")

        k = ""
        while k != "stop":
            k = input("Type 'stop' to stop: ")

    except KeyboardInterrupt:
        print("\nStopping...")
        exit(0)
Clone this wiki locally