开源推荐:碰撞检测算法fcl实现python-fcl
大家好,今天下午写技术规划PPT,其中提到了如何解决机械臂的在空间中避障的问题,所以就把之前使用的pyhton-fcl库重新来讲讲。
本节主要介绍下FCL以及Python-FCL的安装和基本使用。
1.FCL介绍
FCL是一个非常灵活的碰撞检测库,主要用于对几何模型执行接近和碰撞的查询检测。
FCL非常有名,著名机械臂控制框架moveit、OpenRave等所使用的碰撞检测库就是它,有C++和Python两个版本的代码。
作者集成了几种快速准确的碰撞检测和距离计算库,提供离散碰撞检测、连续的碰撞检测、距离计算、穿透深度估算四种功能。
python-fcl提供三种计算:
- 碰撞检测:检测两个模型是否重叠(以及可选的位置)。
- 距离计算:计算一对模型之间的最小距离。
- 连续碰撞检测:检测两个模型在运动过程中是否重叠(以及可选的接触时间)。
关于模型的形状也有非常多的选择:TriangleP、Box、Sphere、Ellipsoid、Capsule、 Cone、 Cylinder、Half-Space、 Plane、 Mesh、OcTree
开源地址:https://github.com/flexible-collision-library/fcl
Python版本开源地址:https://github.com/BerkeleyAutomation/python-fcl
文档地址:https://flexible-collision-library.github.io/
论文名称:FCL: A General Purpose Library for Collision and Proximity Queries(小鱼发在qq交流群:139707339)
2.Python-FCL安装
python-fcl是基于fcl官方的C++版本库进行的二次封装,这样我们如果使用python做算法开发时就可以很方便的调用到。
2.1 安装
sudo apt install liboctomap-dev libfcl-dev python3-pip
sudo pip3 install python-fcl
可以看到fcl是依赖与numpy的,安装fcl库,numpy也会自动安装。
3.基本使用
3.1 概念辨析
在正式使用fcl之前要搞清楚两个概念,第一个概念是碰撞对象,第二个概念是碰撞操作。
碰撞对象
要想检测两个物体之间有没有碰撞,我们肯定要告知fcl这两体的形状和位置,fcl根据我们的描述来判断两个物体之间的距离,从而判断是否发生碰撞,所以碰撞对象就是由对象几何形状和对象位姿两者组成的。
在fcl中对应名称如下:
- 碰撞对象:CollisionObject
- 几何形状:CollisionGeometry
- 位姿:Transform
碰撞操作
碰撞操作就是对我们定义的碰撞对象执行一些查询操作,目前支持的有三种:1.碰撞检测、2.距离计算、3.连续碰撞检测
接着小鱼用程序在jupyter-notebook中来体验下。
3.2 导入fcl
同时把numpy也导入下
import fcl
import numpy as np
3.3 构造碰撞对象
# 定义两个形状
box = fcl.Box(1, 1, 1) # 三边长度1, 1, 1 定义与坐标轴轴对齐的box
sphere = fcl.Sphere(1) # 半径1 定义Sphere# 定义两个位姿,并使其保持一致
T = np.array([1.0, 2.0, 3.0]) # 平移矩阵表示位置
q = np.array([0.707, 0.0, 0.0, 0.707]) # 四元数,表示姿态
box_tf = fcl.Transform(q, T) # 四元数旋转与平移
sphere_tf = fcl.Transform(tf) # 也可以用另一个Transform初始化# 通过形状和位置,生成碰撞对象
box_obj = fcl.CollisionObject(box,box_tf)
sphere_obj = fcl.CollisionObject(sphere,sphere_tf)
3.4 碰撞检测
结果为True
# 碰撞检测
request = fcl.CollisionRequest()
result = fcl.CollisionResult()
ret = fcl.collide(box_obj, sphere_obj, request, result)
print("箱子和球是否发生了碰撞",result.is_collision)
3.5 距离检测
直接输出两者之间最小距离。
# 距离检测
request = fcl.DistanceRequest()
result = fcl.DistanceResult()
ret = fcl.distance(box_obj, sphere_obj, request, result)
print("两者之间最小距离",result.min_distance)
3.6 连续碰撞检测
request = fcl.ContinuousCollisionRequest()
result = fcl.ContinuousCollisionResult()
ret = fcl.continuousCollide(sphere_obj, sphere_tf, box_obj, box_tf, request, result)
print("是否连续碰撞",result.is_collide)
3.7 对比
修改两个TransForm的T的数值,再次运行程序,可以看到对比。
4.总结
今天正式的使用了以下python版本的fcl库,还是非常的方便的,后面打算探索以下三维点云与物体之间的碰撞如何做。
今天就到这里,希望你有所收获~
开源推荐:碰撞检测算法fcl实现python-fcl相关推荐
- 基于微软开源深度学习算法,用 Python 实现图像和视频修复
作者 | 李秋键 编辑 | 夕颜 出品 | AI科技大本营(ID:rgznai100) 图像修复是计算机视觉领域的一个重要任务,在数字艺术品修复.公安刑侦面部修复等种种实际场景中被广泛应用.图像 ...
- ROS(二)FCL碰撞检测算法实现过程
碰撞检测是在特定时刻使用碰撞检测算法对两个刚体进行检测,判断当前位置是否可以运动. FCL 开源检测库提供了物体碰撞检测以及物体接近距离的计算[51]. FCL 能够检测 传统的三角平面和包括球体,方 ...
- php推荐引擎算法,推荐系统,第 2 部分: 开源引擎简介
问题导读: 1.简单的推荐生态系统是怎么样的? 2.常见的推荐算法有哪些? 3.怎么用restful服务构建推荐系统? 上一篇: 推荐系统,第 1 部分: 方法和算法简介 http://www.abo ...
- python矩形碰撞检测算法_矩形的碰撞检测(模仿俄罗斯方块)
原博文 2016-11-20 16:11 − 以前一直以为玄之又玄的碰撞检测算法,其实也不过是一些加减法.看来还是写的太少,大多时候只是停留在望而止步的层次. 矩形的碰撞检测原理就是两个矩形的x值+宽 ...
- python碰撞检测算法_GJK碰撞检测算法
现实世界里我们对于是否碰撞的判断可以说极其容易而且准确,比如下图.在二进制的世界里,一切就没这么直观了. GJK(Gilbert-Johnson-Keerthi Distance Algorithm) ...
- RetinaFace,最强开源人脸检测算法
作者 | CV君 来源 | 我爱计算机视觉(ID:aicvmlaicvmlaicvml) 人脸检测为目标检测的特例,是商业化最早的目标检测算法,也是目前几乎各大 CV 方向 AI 公司的必争之地. W ...
- 清华大学开源迁移学习算法库:基于PyTorch实现已有算法
点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:机器之心 AI博士笔记系列推荐 周志华<机器学习> ...
- 经典算法书籍推荐以及算法书排行【算法四库全书】
经典算法书籍推荐以及算法书排行[算法四库全书] 作者:霞落满天 https://linuxstyle.blog.csdn.net/ https://blog.csdn.net/21aspne ...
- 关于python的一些好的书籍推荐-推荐几本关于的Python好书
不可错过的十本Python好书,分别适合入门.进阶到精深三个不同阶段的人来阅读,感兴趣的小伙伴们可以参考一下 以往的文章中小编已经给大家陆续推荐了很多的Python书籍,可以说品种齐全.本本经典了,不 ...
最新文章
- 【工具类】遍历扫描目录下全部文件并列出
- r语言和python-R语言和Python一块学习会弄混吗
- Struts2教程1:第一个Struts2程序
- 【PAT】A1063 Set Similarity
- c++ vlc读取摄像头_Qt音视频开发1-vlc解码播放
- Mybatis MySQL批量更新
- 微课|《Python编程基础与案例集锦(中学版)》第3章(1)
- “通配符的匹配很全面, 但无法找到元素 ‘utillist‘ 的声明”的问题
- MySQL单列索引和组合索引的创建及区别介绍
- ZMQ中线程之间发送命令
- 4亿线上用户性能保证:Linked Redliner架构解密
- Keil μVision4软件简介
- 百度迁徙数据爬取 生成excel数据
- Java8流List转Map
- cocos creator 全局变量的几种方法
- Mi2上装的应用们,大家也可以分享下好的应用
- Anonympy——使用Python进行数据匿名化
- 如何正确理解开漏输出和推挽输出
- 关于网易云音乐代码音乐播放器单曲和歌单的调用
- 程序员的时间管理计划