Update
This commit is contained in:
parent
2495be7778
commit
0edfc29ce6
58
odrive_server_main.py
Normal file
58
odrive_server_main.py
Normal file
@ -0,0 +1,58 @@
|
||||
import odrive
|
||||
from odrive.enums import *
|
||||
import time
|
||||
|
||||
class Odrive:
|
||||
def __init__(self) -> None:
|
||||
self.drive = odrive.find_any()
|
||||
time.sleep(1)
|
||||
self.init_odrive()
|
||||
self.set_zero()
|
||||
self.set_closed_loop()
|
||||
|
||||
def init_odrive(self) -> None:
|
||||
self.drive.axis0.controller.config.input_mode = 1
|
||||
self.drive.axis1.controller.config.input_mode = 1
|
||||
self.drive.axis0.motor.config.current_lim = 70
|
||||
self.drive.axis1.motor.config.current_lim = 70
|
||||
self.drive.axis0.motor.config.current_lim_margin = 30
|
||||
self.drive.axis1.motor.config.current_lim_margin = 30
|
||||
|
||||
def set_zero(self) -> None:
|
||||
self.drive.axis0.encoder.set_linear_count(0)
|
||||
self.drive.axis1.encoder.set_linear_count(0)
|
||||
|
||||
def set_idle(self) -> None:
|
||||
self.drive.axis0.requested_state = AXIS_STATE_IDLE
|
||||
self.drive.axis1.requested_state = AXIS_STATE_IDLE
|
||||
|
||||
def set_closed_loop(self) -> None:
|
||||
self.drive.axis0.requested_state = AXIS_STATE_CLOSED_LOOP_CONTROL
|
||||
self.drive.axis1.requested_state = AXIS_STATE_CLOSED_LOOP_CONTROL
|
||||
time.sleep(1)
|
||||
|
||||
def goto_raw(self, mot_0, mot_1) -> None:
|
||||
self.drive.axis0.controller.input_pos = mot_0
|
||||
self.drive.axis1.controller.input_pos = mot_1
|
||||
|
||||
class Server:
|
||||
def __init__(self) -> None:
|
||||
self.x_offset = 0
|
||||
self.x_multiplier = 1
|
||||
self.y_offset = 0
|
||||
self.y_multiplier = 1
|
||||
|
||||
def init_odrive(self):
|
||||
self.drive = Odrive()
|
||||
|
||||
def calculate_angles(self, target_pos_x, target_pos_y):
|
||||
x = (target_pos_x + self.x_offset) * self.x_multiplier
|
||||
y = (target_pos_y + self.y_offset) * self.y_multiplier
|
||||
pi = 3.142
|
||||
pulley_diameter = 10.0 # cm
|
||||
distance_per_revolution = pi * pulley_diameter
|
||||
|
||||
target_angle_0 = (y / distance_per_revolution) - (x / distance_per_revolution)
|
||||
target_angle_1 = (y / distance_per_revolution) + (x / distance_per_revolution)
|
||||
|
||||
return target_angle_0, target_angle_1
|
||||
Loading…
Reference in New Issue
Block a user