ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Pink实战:用FrameTask实现末端跟踪与机械臂控制的2个经典案例

Pink实战:用FrameTask实现末端跟踪与机械臂控制的2个经典案例 Pink实战用FrameTask实现末端跟踪与机械臂控制的2个经典案例【免费下载链接】pinkPython inverse kinematics using Pinocchio and QP solvers项目地址: https://gitcode.com/gh_mirrors/pink1/pinkPink 是一个基于 Pinocchio 与 QP 求解器的 Python 逆运动学IK工具箱核心用法是把让机械臂末端到达指定位姿这类需求描述为加权任务自动构建并求解二次规划问题。本文选取项目中最具代表性的2 个经典案例UR5 机械臂实时跟踪运动目标以及 UR10 机械臂迭代求解固定位姿带你快速掌握FrameTask实现末端跟踪与机械臂控制的完整套路。FrameTask 是什么末端跟踪的核心任务FrameTask是 Pink 中使用频率最高的任务pink/tasks/frame_task.py用于控制机器人上某个坐标系通常是末端法兰或工具座在世界坐标系中的位姿。它只需 4 个参数参数作用直觉理解frame要控制的坐标系名称如tool0UR5 末端position_cost位置误差权重[cost]/[m]越大越在乎位置orientation_cost姿态误差权重[cost]/[rad]越大越在乎朝向lm_dampingLevenberg-Marquardt 阻尼提升数值稳定性它还提供两个便捷方法set_target(transform)直接指定目标位姿set_target_from_configuration(configuration)用机器人当前位姿初始化目标是实时跟踪的常用起手式。 小技巧position_cost/orientation_cost也可以是 3 维向量实现对各轴的各向异性加权——比如只关心 x/y 平面位置时写成[1.0, 1.0, 0.0]。逆运动学三步循环从任务到关节速度Pink 求解的是微分逆运动学每步计算一个速度v并积分到下一个构型。核心入口是 pink/solve_ik.py 中的solve_ik它会自动读取机器人模型中的构型限位与速度限位作为约束velocity solve_ik(configuration, tasks, dt, solverquadprog) configuration.integrate_inplace(velocity, dt)整个控制流程就三件事定义任务 → 更新目标 → 求解并积分。下面的两个案例都是在这个循环上展开的。案例一UR5 机械臂实时跟踪正弦运动目标 完整示例见 examples/arm_ur5.py效果是 UR5 的末端tool0平滑地跟随一个在 Y 轴做正弦运动的目标框。1. 定义任务end_effector_task FrameTask( tool0, position_cost1.0, # [cost] / [m] orientation_cost1.0, # [cost] / [rad] lm_damping1.0, # 针对该场景调参 ) posture_task PostureTask(cost1e-3) # 低权重正则化 tasks [end_effector_task, posture_task]2. 用当前构型初始化目标configuration pink.Configuration(robot.model, robot.data, q_ref) for task in tasks: task.set_target_from_configuration(configuration)3. 200 Hz 主循环中更新目标并求解while True: target end_effector_task.transform_target_to_world target.translation[1] 0.5 0.1 * np.sin(2.0 * t) # 目标沿 Y 轴往复 target.translation[2] 0.2 velocity solve_ik(configuration, tasks, dt, solversolver) configuration.integrate_inplace(velocity, dt) t dt案例要点目标连续移动 → 无静止解Pink 会持续以最优方式跟踪每个瞬时目标这正是实时末端跟踪的原理⚖️任务权重冲突自动消解末端跟踪权重 1.0与姿态任务1e-3量纲不同QP 求解器会把它们归一化后权衡末端优先、姿态只做找最近构型的正则化️lm_damping1.0是该场景调出的稳定值阻尼过大会让跟踪变迟钝。示例通过 MeshCat 可视化目标坐标系与末端坐标系的实时重合效果可直接用uv run examples/arm_ur5.py体验。案例二UR10 迭代收敛求解固定位姿离线 IK完整示例见 examples/inverse_kinematics_ur10.py。与案例一的实时跟踪不同这里演示如何用同一套微分 IK 机制离线求解一次性位姿给定随机可达的末端位姿让构型从初始值迭代逼近。核心思路迭代到误差足够小ee_task FrameTask(ee_frame, [1.0, 1.0, 1.0], [1.0, 1.0, 1.0]) ee_task.set_target(target_pose) while error_norm 1e-8: dv pink.solve_ik(configuration, [ee_task], dt1e-2, damping1e-8) q_out pin.integrate(model, configuration.q, dv * dt) error_norm np.linalg.norm(ee_task.compute_error(configuration))实际运行输出Starting from error_norm 2.4 Desired precision is error_norm 1e-08 Terminated after 141 steps with error_norm 1.1e-09案例要点✅无需解析逆解7 自由度及以上机械臂的逆解既繁琐又存在多解Pink 用一步速度 迭代的方式 141 步即收敛到 1e-8 精度✅compute_error提供收敛判据误差是一个 6 维量3 位置 3 姿态其范数就是天然的停止条件⚠️微分 IK 是局部方法Pink 不保证全局最优可能收敛到局部极小或被构型限位卡住详见 examples/one_dof_configuration_limit.py。如果初始构型离目标太远或目标不可达需要自行处理NoSolutionFound异常。实战调参速查表症状建议调整末端抖动调大lm_damping或降低任务gain做低通滤波跟踪速度跟不上调高position_cost检查速度限位是否过紧多任务互相打架统一用[cost]/[m]、[cost]/[rad]量纲归一后比较权重只关心位置不关心朝向orientation_cost0.0或姿态分量置 0求解器报无解确认目标可达、构型在限位内safety_breakTrue会快速暴露问题延伸阅读任务源码pink/tasks/frame_task.py、基类 pink/tasks/task.py求解器入口pink/solve_ik.py交互式调试成本参数Viser 滑杆examples/arm_panda.py含避障屏障barrier的 UR5 案例examples/barriers/arm_ur5.py更多示例总览examples/README.md安装 Pink 只需一行命令conda 性能最佳pip 亦可conda install -c conda-forge pink pip install pin-pink两个案例覆盖了实时跟踪与离线求解两大典型场景——理解了FrameTasksolve_ik的组合方式双臂、人形、移动底盘等更复杂的机械臂控制可参考 examples/flying_dual_arm_ur3.py 与 examples/mobile_stretch.py都只是任务的叠加而已。【免费下载链接】pinkPython inverse kinematics using Pinocchio and QP solvers项目地址: https://gitcode.com/gh_mirrors/pink1/pink创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表