主题
升降高度控制
读取当前高度,以当前速度比例向下移动 0.2 m,并等待到位。
运行前提
设备须遵循可靠支撑的机械最低位置启动前提。执行本例时,应已完成设备准备,当前高度至少为 0.2 m,下降路径有足够空间。本例会使能升降,按 SPEED_PERCENT = 100 运行。 每台设备同一时刻只运行一个控制程序。运动前确认工作空间无障碍、人员远离运动区域且硬件急停可用。退出上下文会停止并断开,不自动失能,不保证继续主动保持负载。
公开高度以最低点为 0 m;本例从上端附近执行时,下发 当前高度 - 0.2 m 即下降 20 cm。当前高度不足 0.2 m 时目标超出行程,SDK 会拒绝运动。
运行
安装 SDK 后,在文档与示例目录中执行:
bash
python hw1/05_lift.py下载单文件后,也可在文件所在目录执行 python 05_lift.py。
完整代码
python
"""从当前高度下降 20 cm; 执行时须有至少 0.2 m 下降空间.
机构仍须遵循可靠支撑的机械最低位置启动前提.
高度单位 m, 绝对角速度单位 rad/s; speed_percent 是无单位速度比例.
单次位置与角速度命令见文档中的升降进阶控制; 本例使用自动检查到位的 move_to.
"""
from libark.robot.hw1.lift import Lift
SPEED_PERCENT = 100.0 # 相对允许角速度上限的比例, 不是绝对角速度.
def main() -> None:
with Lift() as lift:
lift.enable()
try:
height = lift.get_height()
if height is None:
raise RuntimeError("升降反馈缺失,请联系技术支持")
target = min(height - 0.2, lift.max_height_m)
print("高度 m:", height)
print("目标高度 m:", target)
print("速度比例 %:", SPEED_PERCENT, ";绝对角速度使用 rad/s")
print("运动完成:", lift.move_to(target, speed_percent=SPEED_PERCENT, timeout_s=100.0))
print("高度 m:", lift.get_height())
# for i in range(20):
# print("第", i, "次")
# print("高度 m:", lift.get_height())
# lift.move_to(1.031587950967, speed_percent=SPEED_PERCENT, timeout_s=100.0)
# time.sleep(1)
# print("高度 m:", lift.get_height())
# lift.move_to(0, speed_percent=SPEED_PERCENT, timeout_s=100.0)
# 烤机测试 0-1.034587950967 之间来回 随机高度
# for i in range(100):
# print("第", i, "次")
# random_height = random.uniform(0, 1.034587950967)
# print("随机高度 m:", random_height)
# lift.move_to(random_height, speed_percent=SPEED_PERCENT, timeout_s=100.0)
# time.sleep(1)
# print("高度 m:", lift.get_height())
except BaseException:
lift.stop()
raise
if __name__ == "__main__":
main()