-
Notifications
You must be signed in to change notification settings - Fork 0
Simple start ITA
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.
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
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
}
}
}
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.
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)