Skip to content

Commit

Permalink
added enable/disable continuous movement & individual servo command
Browse files Browse the repository at this point in the history
  • Loading branch information
hatomist committed Nov 3, 2024
1 parent 78e5669 commit e7cc8f3
Show file tree
Hide file tree
Showing 5 changed files with 189 additions and 11 deletions.
2 changes: 1 addition & 1 deletion openlch/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
__version__ = "0.8.3"
__version__ = "0.9.0"

from .hal import HAL
35 changes: 31 additions & 4 deletions openlch/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,13 +64,14 @@ def get_positions(ip: str) -> None:
@cli.command()
@click.argument("id", type=int)
@click.argument("position", type=float)
@click.option("--speed", "-s", type=float, default=0, help="Movement speed in degrees per second (0 = max speed)")
@click.argument("ip", default=DEFAULT_IP)
def set_position(id: int, position: float, ip: str) -> None:
def set_position(id: int, position: float, speed: float, ip: str) -> None:
"""Set position for a specific servo."""
hal = HAL(ip)
try:
hal.servo.set_positions([(id, position)])
click.echo(f"Position set for servo {id} to {position}")
hal.servo.set_position(id, position, speed)
click.echo(f"Position set for servo {id} to {position}° at speed {speed if speed > 0 else 'max'} deg/s")
except Exception as e:
click.echo(f"An error occurred: {str(e)}")
finally:
Expand Down Expand Up @@ -281,7 +282,7 @@ def get_imu_data(ip: str) -> None:
click.echo(f" X: {imu_data['gyro']['x']:.2f}")
click.echo(f" Y: {imu_data['gyro']['y']:.2f}")
click.echo(f" Z: {imu_data['gyro']['z']:.2f}")
click.echo("\nAccelerometer (g):")
click.echo("\nAccelerometer (m/s^2):")
click.echo(f" X: {imu_data['accel']['x']:.2f}")
click.echo(f" Y: {imu_data['accel']['y']:.2f}")
click.echo(f" Z: {imu_data['accel']['z']:.2f}")
Expand All @@ -290,5 +291,31 @@ def get_imu_data(ip: str) -> None:
finally:
hal.close()

@cli.command()
@click.argument("ip", default=DEFAULT_IP)
def enable_movement(ip: str) -> None:
"""Enable movement for all servos."""
hal = HAL(ip)
try:
hal.servo.enable_movement()
click.echo("Movement enabled for all servos")
except Exception as e:
click.echo(f"An error occurred: {str(e)}")
finally:
hal.close()

@cli.command()
@click.argument("ip", default=DEFAULT_IP)
def disable_movement(ip: str) -> None:
"""Disable movement for all servos."""
hal = HAL(ip)
try:
hal.servo.disable_movement()
click.echo("Movement disabled for all servos")
except Exception as e:
click.echo(f"An error occurred: {str(e)}")
finally:
hal.close()

if __name__ == "__main__":
cli()
20 changes: 20 additions & 0 deletions openlch/hal.py
Original file line number Diff line number Diff line change
Expand Up @@ -222,6 +222,26 @@ def set_torque_enable(self, enable_settings: List[Tuple[int, bool]]) -> None:
request = hal_pb_pb2.TorqueEnableSettings(settings=settings)
self.__stub.SetTorqueEnable(request)

def enable_movement(self) -> None:
"""Enable continuous movement writes for all servos."""
self.__stub.EnableMovement(hal_pb_pb2.Empty())

def disable_movement(self) -> None:
"""Disable continuous movement writes for all servos."""
self.__stub.DisableMovement(hal_pb_pb2.Empty())

def set_position(self, servo_id: int, position: float, speed: float = 0) -> None:
"""
Set position for a single servo.
Args:
servo_id (int): The ID of the servo to control
position (float): Target position in degrees
speed (float, optional): Movement speed in degrees per second. Defaults to 0 (maximum speed).
"""
request = hal_pb_pb2.JointPosition(id=servo_id, position=position, speed=speed)
self.__stub.SetPosition(request)

class System:
"""Class for system-related operations."""

Expand Down
8 changes: 5 additions & 3 deletions openlch/hal_pb_pb2.py

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit e7cc8f3

Please sign in to comment.