Franky机器人库实现键盘实时控制末端执行器运动的技术解析
概述
Franky是一个用于控制工业机器人的Python库,提供了丰富的运动控制接口。本文将详细介绍如何使用Franky库实现通过键盘实时控制机器人末端执行器的运动,包括位置控制和速度控制两种模式。
运动控制模式对比
Franky提供了两种主要的运动控制方式:
- 位置控制模式:通过
CartesianMotion或JointMotion指定目标位置,机器人规划轨迹并移动到该位置 - 速度控制模式:通过
CartesianVelocityMotion指定末端执行器的速度,机器人持续以该速度运动直到收到新指令
键盘实时控制实现方案
位置控制方案
初始方案尝试使用位置控制模式实现增量运动:
motion_forward = CartesianMotion(Affine([step, 0.0, 0.0]),
reference_type=ReferenceType.Relative)
robot.move(motion_forward, asynchronous=True)
这种方案存在以下问题:
- 每次运动指令需要200-400ms完成
- 无法实现流畅的连续运动
- 运动速度受步长和动态参数限制
速度控制优化方案
更优的方案是使用速度控制模式:
# 设置较低的动态参数以获得平滑运动
robot.relative_dynamics_factor = 0.1
# 创建速度控制指令
velocity = Twist([x_vel, y_vel, 0.0])
robot.move(CartesianVelocityMotion(velocity), asynchronous=True)
速度控制模式的优势:
- 指令响应更快(约50ms)
- 运动更加平滑连续
- 可通过键盘长按实现持续运动
完整实现代码
以下是结合键盘监听实现末端执行器实时控制的完整示例:
from pynput import keyboard
import time
from franky import *
# 初始化机器人连接
robot = Robot("172.16.0.2")
robot.recover_from_errors()
robot.relative_dynamics_factor = 0.1
# 设置初始位置
robot.move(JointMotion([0.0, 0.0, 0.0, -2.2, 0.0, 2.2, 0.7]))
# 跟踪按键状态
pressed_keys = set()
def on_press(key):
try:
if key.char in ('w','a','s','d'):
pressed_keys.add(key.char)
except: pass
def on_release(key):
try:
if key.char in ('w','a','s','d'):
pressed_keys.discard(key.char)
except: pass
# 启动键盘监听
listener = keyboard.Listener(on_press=on_press, on_release=on_release)
listener.start()
vel = 0.05 # 运动速度(m/s)
while True:
# 根据按键状态计算速度向量
x = (-vel if 'a' in pressed_keys else 0) + (vel if 'd' in pressed_keys else 0)
y = ( vel if 'w' in pressed_keys else 0) + (-vel if 's' in pressed_keys else 0)
# 发送速度指令
robot.move(CartesianVelocityMotion(Twist([x, y, 0.0])), asynchronous=True)
time.sleep(0.05) # 控制指令更新频率
技术要点解析
-
动态参数调整:通过设置
relative_dynamics_factor降低加速度和速度,使运动更加平滑。 -
异步控制:使用
asynchronous=True参数确保控制指令立即返回,不阻塞主线程。 -
速度向量合成:根据多个按键状态合成最终速度向量,实现斜向运动。
-
指令更新频率:保持约20Hz(50ms间隔)的指令更新频率,确保运动连续性。
关节空间控制注意事项
当需要在关节空间实现类似控制时,需要注意:
- 关节空间位置控制响应较慢(约180ms)
- 减小步长可以降低响应时间但会减慢运动速度
- 提高动态参数会导致运动不够平滑
建议在关节空间控制时:
- 优先考虑使用速度控制模式
- 如需位置控制,适当平衡步长和动态参数
- 考虑使用轨迹插值算法生成平滑运动
总结
Franky库提供了灵活的运动控制接口,通过合理选择控制模式和参数调整,可以实现流畅的机器人实时控制。速度控制模式特别适合需要高频更新的交互式应用场景,而位置控制模式则更适合精确的点到点运动。开发者应根据具体应用需求选择合适的控制策略。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



