Skip to content

Commit e7cc8f3

Browse files
committed
added enable/disable continuous movement & individual servo command
1 parent 78e5669 commit e7cc8f3

File tree

5 files changed

+189
-11
lines changed

5 files changed

+189
-11
lines changed

openlch/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
__version__ = "0.8.3"
1+
__version__ = "0.9.0"
22

33
from .hal import HAL

openlch/cli.py

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,14 @@ def get_positions(ip: str) -> None:
6464
@cli.command()
6565
@click.argument("id", type=int)
6666
@click.argument("position", type=float)
67+
@click.option("--speed", "-s", type=float, default=0, help="Movement speed in degrees per second (0 = max speed)")
6768
@click.argument("ip", default=DEFAULT_IP)
68-
def set_position(id: int, position: float, ip: str) -> None:
69+
def set_position(id: int, position: float, speed: float, ip: str) -> None:
6970
"""Set position for a specific servo."""
7071
hal = HAL(ip)
7172
try:
72-
hal.servo.set_positions([(id, position)])
73-
click.echo(f"Position set for servo {id} to {position}")
73+
hal.servo.set_position(id, position, speed)
74+
click.echo(f"Position set for servo {id} to {position}° at speed {speed if speed > 0 else 'max'} deg/s")
7475
except Exception as e:
7576
click.echo(f"An error occurred: {str(e)}")
7677
finally:
@@ -281,7 +282,7 @@ def get_imu_data(ip: str) -> None:
281282
click.echo(f" X: {imu_data['gyro']['x']:.2f}")
282283
click.echo(f" Y: {imu_data['gyro']['y']:.2f}")
283284
click.echo(f" Z: {imu_data['gyro']['z']:.2f}")
284-
click.echo("\nAccelerometer (g):")
285+
click.echo("\nAccelerometer (m/s^2):")
285286
click.echo(f" X: {imu_data['accel']['x']:.2f}")
286287
click.echo(f" Y: {imu_data['accel']['y']:.2f}")
287288
click.echo(f" Z: {imu_data['accel']['z']:.2f}")
@@ -290,5 +291,31 @@ def get_imu_data(ip: str) -> None:
290291
finally:
291292
hal.close()
292293

294+
@cli.command()
295+
@click.argument("ip", default=DEFAULT_IP)
296+
def enable_movement(ip: str) -> None:
297+
"""Enable movement for all servos."""
298+
hal = HAL(ip)
299+
try:
300+
hal.servo.enable_movement()
301+
click.echo("Movement enabled for all servos")
302+
except Exception as e:
303+
click.echo(f"An error occurred: {str(e)}")
304+
finally:
305+
hal.close()
306+
307+
@cli.command()
308+
@click.argument("ip", default=DEFAULT_IP)
309+
def disable_movement(ip: str) -> None:
310+
"""Disable movement for all servos."""
311+
hal = HAL(ip)
312+
try:
313+
hal.servo.disable_movement()
314+
click.echo("Movement disabled for all servos")
315+
except Exception as e:
316+
click.echo(f"An error occurred: {str(e)}")
317+
finally:
318+
hal.close()
319+
293320
if __name__ == "__main__":
294321
cli()

openlch/hal.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,26 @@ def set_torque_enable(self, enable_settings: List[Tuple[int, bool]]) -> None:
222222
request = hal_pb_pb2.TorqueEnableSettings(settings=settings)
223223
self.__stub.SetTorqueEnable(request)
224224

225+
def enable_movement(self) -> None:
226+
"""Enable continuous movement writes for all servos."""
227+
self.__stub.EnableMovement(hal_pb_pb2.Empty())
228+
229+
def disable_movement(self) -> None:
230+
"""Disable continuous movement writes for all servos."""
231+
self.__stub.DisableMovement(hal_pb_pb2.Empty())
232+
233+
def set_position(self, servo_id: int, position: float, speed: float = 0) -> None:
234+
"""
235+
Set position for a single servo.
236+
237+
Args:
238+
servo_id (int): The ID of the servo to control
239+
position (float): Target position in degrees
240+
speed (float, optional): Movement speed in degrees per second. Defaults to 0 (maximum speed).
241+
"""
242+
request = hal_pb_pb2.JointPosition(id=servo_id, position=position, speed=speed)
243+
self.__stub.SetPosition(request)
244+
225245
class System:
226246
"""Class for system-related operations."""
227247

openlch/hal_pb_pb2.py

Lines changed: 5 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)