Franky机器人库实现键盘实时控制末端执行器运动的技术解析

Franky机器人库实现键盘实时控制末端执行器运动的技术解析

概述

Franky是一个用于控制工业机器人的Python库,提供了丰富的运动控制接口。本文将详细介绍如何使用Franky库实现通过键盘实时控制机器人末端执行器的运动,包括位置控制和速度控制两种模式。

运动控制模式对比

Franky提供了两种主要的运动控制方式:

  1. 位置控制模式:通过CartesianMotionJointMotion指定目标位置,机器人规划轨迹并移动到该位置
  2. 速度控制模式:通过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)  # 控制指令更新频率

技术要点解析

  1. 动态参数调整:通过设置relative_dynamics_factor降低加速度和速度,使运动更加平滑。

  2. 异步控制:使用asynchronous=True参数确保控制指令立即返回,不阻塞主线程。

  3. 速度向量合成:根据多个按键状态合成最终速度向量,实现斜向运动。

  4. 指令更新频率:保持约20Hz(50ms间隔)的指令更新频率,确保运动连续性。

关节空间控制注意事项

当需要在关节空间实现类似控制时,需要注意:

  1. 关节空间位置控制响应较慢(约180ms)
  2. 减小步长可以降低响应时间但会减慢运动速度
  3. 提高动态参数会导致运动不够平滑

建议在关节空间控制时:

  • 优先考虑使用速度控制模式
  • 如需位置控制,适当平衡步长和动态参数
  • 考虑使用轨迹插值算法生成平滑运动

总结

Franky库提供了灵活的运动控制接口,通过合理选择控制模式和参数调整,可以实现流畅的机器人实时控制。速度控制模式特别适合需要高频更新的交互式应用场景,而位置控制模式则更适合精确的点到点运动。开发者应根据具体应用需求选择合适的控制策略。

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值