尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
如何让机器人躲开自己:Pink控制屏障函数(CBF)防自碰撞实战教程
如何让机器人躲开自己Pink控制屏障函数CBF防自碰撞实战教程【免费下载链接】pinkPython inverse kinematics using Pinocchio and QP solvers项目地址: https://gitcode.com/gh_mirrors/pink1/pinkPink是一个基于 Pinocchio 的 Python 逆运动学库通过 QP二次规划求解器实现多任务控制。它内置的控制屏障函数CBF模块可以强制机器人保持关节空间中的安全约束——最典型的应用就是自碰撞避免让机械臂在运动中自动躲开自己的胳膊而不需要在任务层面手动规划避障轨迹。本文面向机器人控制新手带你从零理解 CBF 屏障的原理到在 Pink 中配置自碰撞屏障的完整流程。1. 为什么逆运动学需要屏障传统的微分逆运动学只处理任务task让末端到达目标位置、让姿态趋于参考构型等。任务之间发生冲突时靠加权 QP 求解。但安全约束比如关节不能越界、连杆之间不能碰撞不能只靠成本表达——目标越难达到机器人越可能撞到自己。Pink 的解法是把安全约束建模为屏障函数h(q)并要求机器人始终停留在安全集合{q : h(q) ≥ 0}内。以自碰撞为例屏障函数就是两连杆间的最近距离与安全阈值的差距离越小屏障值越小QP 求解器会自动把速度方向调整到往安全区域走的一侧 ️屏障的数学形式定义在 pink/barriers/barrier.py屏障值h(q)负值代表进入危险区CBF 条件∂h/∂q · q̇ α(h(q)) ≥ 0保证屏障值不继续恶化额外还带一个安全备份位移项让机器人在危险时平滑回撤2. 快速安装 Pink安装只需一行命令。推荐 Conda性能最佳conda install -c conda-forge pink或使用 PyPIpip install pin-pink自碰撞屏障依赖 Pinocchio 的 hpp-fcl 碰撞检测后端官方发行版已包含无需额外编译。3. Pink 提供的三类屏障函数Pink 在 pink/barriers/ 目录下提供 4 个屏障类新手最常接触的是后两个屏障类作用适用场景PositionBarrier末端位置不越出虚拟边界工作空间限位BodySphericalBarrier两个坐标系如双臂末端保持最小距离简化自碰撞防护SelfCollisionBarrier基于真实碰撞几何的全局自碰撞避免整机自碰撞避免3.1 BodySphericalBarrier轻量级球形缓冲在 pink/barriers/body_spherical_barrier.py 中它把两个 frame 各想象成半径d_min/2的球屏障函数为两球心距离平方减去d_min²。计算极快适合只关心末端别打架的双臂机器人官方示例 examples/barriers/yumi_self_collision.py 就用它保护 Yumi 双臂的末端。3.2 SelfCollisionBarrier全身碰撞几何级防护SelfCollisionBarrierpink/barriers/self_collision_barrier.py基于 hpp-fcl 计算真实碰撞几何的最近距离对每个碰撞对给出屏障值。三个关键参数n_collision_pairs实际参与优化的碰撞对数量。可以小于模型中的全部碰撞对——屏障只会挑选距离最近的 N 对参与 QP这是控制计算量的关键技巧 ⚡d_min最小安全距离默认 0.02 m相当于给所有连杆套了一层软气垫gain屏障增益越大碰撞约束越强硬但任务执行越保守注意它要求碰撞几何是光滑凸体例如用球体或椭球体近似非光滑几何下行为未定义。4. 实战双臂 Iiwa 全身自碰撞避免官方示例 examples/barriers/kukas_self_collision.py 展示了完整用法两条 Iiwa 14 手臂做大幅交叉运动末端轨迹几乎不可行但没有屏障时必然互撞加上SelfCollisionBarrier后手臂会自动绕开彼此。核心流程只有四步① 加载带球体碰撞几何的模型——示例使用球体近似碰撞模型的 URDFexamples/barriers/iiwa14_spheres_collision.srdf 中定义了排除的碰撞对robot pin.RobotWrapper.BuildFromURDF(urdf_path, package_dirs[...])② 处理碰撞对——调用process_collision_pairs一次性建好碰撞数据定义在 pink/utils.pyrobot.collision_data process_collision_pairs( robot.model, robot.collision_model, srdf_path)③ 把碰撞模型挂到 Configuration 上——这是屏障生效的前提configuration pink.Configuration( robot.model, robot.data, q_ref, collision_modelrobot.collision_model, collision_datarobot.collision_data, )④ 创建屏障并传给 solve_ikcollision_barrier SelfCollisionBarrier( n_collision_pairslen(robot.collision_model.collisionPairs), gain20.0, safe_displacement_gain1.0, d_min0.05, ) velocity solve_ik(configuration, tasks, dt, solverosqp, barriers[collision_barrier])就这么简单屏障和任务一起进入 pink/solve_ik.py 的 QP求解器在输出速度时已经绕开了自己。5. 参数调优3 个最常踩的坑机器人卡住不动通常gain太大或d_min太保守任务目标在安全集合外。先调小d_min如 0.02再逐步增大。碰撞检测太慢调小n_collision_pairs只让最近的几对碰撞体参与 QP。末端贴墙虚拟边界时抖动检查是否同时叠加了多个屏障safe_displacement_gain控制回撤力度设为 0 可关闭备份位移项见 pink/barriers/barrier.py。单元测试 tests/test_self_collision_barrier.py 给出了最小可运行的调用范例适合对着代码调试。6. 总结你的需求推荐屏障参考示例末端不进虚拟墙PositionBarrierexamples/barriers/arm_ur5.py双臂末端保持距离BodySphericalBarrierexamples/barriers/yumi_self_collision.py全身自碰撞避免SelfCollisionBarrierexamples/barriers/kukas_self_collision.py底盘高度限制PositionBarrierexamples/barriers/go2_squat.pyPink 的 CBF 模块把安全从后处理的补丁变成了 QP 的一等公民声明屏障、传给求解器机器人就会在完成任务的同时自动躲开自己。更多屏障 API 可查阅 doc/barriers.rst 官方文档。【免费下载链接】pinkPython inverse kinematics using Pinocchio and QP solvers项目地址: https://gitcode.com/gh_mirrors/pink1/pink创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

Buff 系统设计

Buff 系统设计

上一篇讲行为组件的时候,减速组件干了件"甩锅"的事——它自己不管减速持续多久、什么时候消失,而是给目标挂了个 buff,然后就撒手不管了。 ctx.target.addBuff(slow); // 挂上去,剩下的交给buff系统那接锅的 buff 系统…

📅 2026/10/4 13:14:05
从零跑通 Axon Framework 的第一条事件:CQRS 与事件溯源实战入门

从零跑通 Axon Framework 的第一条事件:CQRS 与事件溯源实战入门

从零跑通 Axon Framework 的第一条事件:CQRS 与事件溯源实战入门 【免费下载链接】AxonFramework Framework for Evolutionary Message-Driven Microservices on the JVM 项目地址: https://gitcode.com/gh_mirrors/ax/AxonFramework Axon Framework 是跑在 …

📅 2026/10/16 7:09:45
versionName 的几个作用

versionName 的几个作用

一、开门见山:核心作用总览 versionName 是一个给人看的字符串版本号,它主要有以下几个作用:序号作用面向对象1️⃣向用户展示版本信息普通用户2️⃣应用商店版本标识商店/访客3️⃣团队沟通的依据开发/测试4️⃣客服与问题排查客服/技术支持…

📅 2026/9/30 19:52:03
MORE NEWS

更多资讯

📰

Spring Boot日志治理:Logback脱敏与截取实战指南

日志里蹦出用户的手机号、身份证号、银行卡号,这种事在真实项目里一点都不稀奇。我见过太多团队,功能上线跑得飞快,等到要查线上问题、把日志文件拉下来一看,满屏的敏感信息,当场头皮发麻。更麻烦的是,很多…

📰

t3code:三层架构代码模板的落地实践与避坑指南

1. 先说清楚t3code是个什么东西看到“t3code”这个代号,我第一反应是:这多半是某个项目组内部对“Three-Tier Code”的简称,直译过来就是“三层架构代码规范/代码模板”。这个名字起得挺讨巧,t3听起来像一个特定版本号&#xff0c…

📰

t3code实践:用TypeScript打通全栈类型安全与前后端对接

做了几年全栈,我越来越觉得,大部分项目的复杂度并不是业务本身带来的,而是那一层又一层的手动对接——后端写好了类型,前端不知道;数据库里存的是啥,API返回的是啥,全靠人肉同步。一旦需求改起来…

📰

Easy Dataset:大模型训练数据制作的智能解决方案

1. Easy Dataset项目概述:降低大模型训练数据制作门槛在2023年大模型技术爆发的背景下,一个名为Easy Dataset的开源项目在GitHub上迅速走红,获得了超过13K的Star关注。这个项目直击AI领域的一个关键痛点:高质量训练数据集的制作难…

📰

Kubernetes可视化工具下载与部署指南:Linux环境实操与权限配置

1. 为什么要在 Kubernetes 里折腾可视化工具刚接触 Kubernetes 那会儿,我每天的工作流基本就是三件套:kubectl get pods、kubectl describe、kubectl logs,来回切终端窗口,眼睛盯着密密麻麻的文本输出找异常。集群规模小的时候还行…

📰

t3code:用T3 Stack还清全栈工程债的类型安全脚手架

1. t3code 项目概述:把类型安全全栈应用的“工程债”一次还清先开门见山,t3code 是我最近在团队内部落地的一个全栈脚手架项目。它不只是一个create-next-app的二次封装,也不是网上那种只丢给你一个 README 的模板仓库,而是一套完…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬