Pink的13种任务全家福:FrameTask、PostureTask与ComTask如何选怎么用 Pink的13种任务全家福FrameTask、PostureTask与ComTask如何选怎么用【免费下载链接】pinkPython inverse kinematics using Pinocchio and QP solvers项目地址: https://gitcode.com/gh_mirrors/pink1/pinkPink 是一个基于 Pinocchio 和 QP 求解器的Python 逆运动学库它的核心思想是把机器人控制拆成一组任务Task每个任务定义一个要驱动到零的误差加权合并成一个二次规划问题统一求解。Pink 一共提供13 种任务类涵盖末端定位、姿态正则、质心控制、关节耦合、全向轮约束等场景。本文带你 30 秒看懂 13 种任务并掌握 FrameTask、PostureTask、ComTask 三大主角的选择方法与调参技巧。一、30 秒理解Pink 任务如何工作在 Pink 中每个任务定义一个误差函数 e(q)目标是把它驱动到零。多个任务同时存在时Pink 通过cost代价权重把不同单位米、弧度的误差归一化到统一量纲再交给 QP 求解器求出一组速度概念含义新手要点误差 e(q)当前状态与目标的差距驱动到零即完成cost归一化权重数值越大优先级越高target任务目标值通过set_target()设置solve_ik求解入口自动处理位置/速度限位一句话总结任务管做什么cost 管多重要solve_ik 管怎么动。二、13 种任务全家福一览表 Pink 的 13 种任务都在 pink/tasks/ 目录下实现全部从抽象基类 pink/tasks/task.py 派生#任务类一句话功能典型场景源文件1Task抽象基类定义误差/雅可比接口自定义任务的起点pink/tasks/task.py2FrameTask让某坐标系的位姿位置朝向跟踪世界系目标末端执行器定位最常用pink/tasks/frame_task.py3RelativeFrameTask让某坐标系相对另一个坐标系保持目标位姿手持相机、双手机器人协作pink/tasks/relative_frame_task.py4ComTask让机器人质心跟踪目标位置人形机器人平衡控制pink/tasks/com_task.py5PostureTask把关节角拉向偏好姿态不碰浮动基座姿态正则化防奇异pink/tasks/posture_task.py6JointVelocityTask跟踪给定的关节速度参考值速度级伺服控制pink/tasks/joint_velocity_task.py7DampingTask最小化关节速度JointVelocityTask 的特例目标为零减少多余运动pink/tasks/damping_task.py8LowAccelerationTask最小化当前速度与上一拍速度的差让动作更平滑pink/tasks/low_acceleration_task.py9ManipulabilityTask最大化操作度指标远离奇异位形pink/tasks/manipulability_task.py10LinearHolonomicTask施加线性完整约束 ∑aⱼ·qⱼ b自定义关节间线性关系pink/tasks/linear_holonomic_task.py11JointCouplingTask按固定比例耦合两个旋转关节如 q₁−q₂0双驱动同步关节pink/tasks/joint_coupling_task.py12RollingTask轮子无滑滚动约束轮式机器人、Upkie 滚动pink/tasks/rolling_task.py13OmniwheelTask麦轮/全向轮的非完整约束全向移动底盘pink/tasks/omniwheel_task.py 记忆口诀定位看 Frame、姿态看 Posture、平衡看 Com、平滑看 LowAcceleration、避奇异看 Manipulability、轮子看 Rolling/Omniwheel。三、三大主角怎么选怎么用3.1 FrameTask末端定位的瑞士军刀 FrameTask 是绝大多数场景的第一选择——只要你需要让某个连杆到达某个位姿就用它。它可以分别设置位置代价和朝向代价且都支持各向异性不同轴不同权重tasks[base] FrameTask( base, position_cost1.0, # [cost]/[m]标量 各向同性 orientation_cost1.0, # [cost]/[rad] )怎么选只关心位置不关心朝向如脚底接触面→orientation_cost0.0位置代价可用向量[0.1, 0.0, 0.1]只约束前后左右目标要挂在另一个移动坐标系下而非世界系→ 换用RelativeFrameTask目标可用set_target(transform)直接给齐次变换矩阵或用set_target_from_configuration()把当前位姿冻结为目标详见 pink/tasks/frame_task.py。3.2 PostureTask几乎必加的压舱石 ⚖️PostureTask 把各关节角拉向一个偏好姿态常用机器人中立位典型代价设得很小1e-3 量级起正则化作用主任务接近奇异时如腿部伸直、雅可比降秩它会自动把膝关节拉回偏好角度避免软脚浮动基座坐标不受它影响不会干扰位姿任务怎么选主任务 PostureTask 是 Pink 最经典的黄金组合。几乎每个全身控制示例双足、四足都带着它代价一般取主任务的 1/100 左右。3.3 ComTask平衡控制的核心 ComTask 把机器人质心拉向目标点3 维位置误差、3 维代价com_task ComTask(cost1.0) com_task.set_target(target_com) # 世界系下的目标质心位置怎么选人形/四足做原地平衡、CoM 轨迹跟踪 → ComTask只需姿态别乱晃而不需要精确质心轨迹 → 通常不必加PostureTask 就够了质心目标也可用set_target_from_configuration()从某个构型自动计算。四、5 秒决策我该用哪个任务按你的控制目标对号入座末端/连杆去某个世界系位姿→FrameTaskA 连杆相对 B 连杆保持位姿→RelativeFrameTask质心到某个点→ComTask关节别偏离偏好姿态太遠→PostureTask低代价动作太抖、希望更柔和→ 加LowAccelerationTask或给任务调小gain卡在奇异位形附近→ 加ManipulabilityTask两个关节要联动/同步→JointCouplingTask轮子不能打滑 / 全向轮→RollingTask/OmniwheelTask关节速度要跟踪参考值→JointVelocityTask只想能慢就慢 →DampingTask五、cost 调参任务之间如何分蛋糕所有任务的误差单位不同米 vs 弧度Pink 用 cost 把它们换算成统一的归一化代价。代价是相对概念任务 A 位置代价 1.0任务 B 代价 0.1 → 同样 1cm 误差A 的痛感是 B 的 10 倍求解器会优先满足 A位置代价单位 [cost]/[m]朝向代价单位 [cost]/[rad]标量即各向同性向量按帧坐标轴分量分别加权调参经验值人形双足示例任务位置代价朝向代价基座 base主任务1.01.0左/右接触点次任务[0.1, 0.0, 0.1]0.0PostureTask正则—1e-3另外两个通用旋钮gain0~1越小响应越平滑类似低通滤波和lm_damping目标不可达时的 Levenberg-Marquardt 阻尼抖动大时适当调高。六、上手三步走从定义到求解完整工作流只有三步详见 README.md 与 doc/tasks.rstdt 6e-3 for t in np.arange(0.0, 42.0, dt): velocity solve_ik(configuration, tasks.values(), dt) # ① 求解速度 configuration.integrate_inplace(velocity, dt) # ② 积分到构型 time.sleep(dt) # ③ 下一拍每个任务先设 cost、再set_target(...)设定目标才能加入求解solve_ik会自动读取机器人模型中的位置限位与速度限位无需手写约束目标持续更新 → 机器人持续跟踪目标静止 → 收敛到稳态构型七、新手常见疑问 FAQQ1Pink 能解全局逆运动学吗Pink 是微分局部方法收敛到代价函数的最近极值点若目标不可达可能卡在某处可加ManipulabilityTask或调低gain缓解。Q2任务数量有上限吗没有硬性上限但任务越多 QP 越大、越容易互相冲突——用 cost 明确优先级即可。Q3想实现自己的任务怎么办继承 pink/tasks/task.py 中的Task实现compute_error()和compute_jacobian()两个抽象方法QP 目标会自动构建。参考 tests/ 目录下的各任务单测写法。Q4更多实际案例在哪看examples/ 目录收录了 UR5/Panda 机械臂、双足 Upkie 滚动、四足 Go2 蹲姿、人形 Draco3 等丰富示例碰撞避免类任务可结合 pink/barriers/ 中的屏障使用。结语Pink 的 13 种任务各司其职FrameTask 管定位、PostureTask 管姿态、ComTask 管平衡其余任务按需拼装。记住任务定义目标、cost 分配优先级、solve_ik 统一求解这条主线你就能从容应对从机械臂到双足人形的各种逆运动学挑战了。【免费下载链接】pinkPython inverse kinematics using Pinocchio and QP solvers项目地址: https://gitcode.com/gh_mirrors/pink1/pink创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考