大家好,今天下午写技术规划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相关推荐

  1. 基于微软开源深度学习算法,用 Python 实现图像和视频修复

    ‍‍ 作者 | 李秋键 编辑 | 夕颜 出品 | AI科技大本营(ID:rgznai100) 图像修复是计算机视觉领域的一个重要任务,在数字艺术品修复.公安刑侦面部修复等种种实际场景中被广泛应用.图像 ...

  2. ROS(二)FCL碰撞检测算法实现过程

    碰撞检测是在特定时刻使用碰撞检测算法对两个刚体进行检测,判断当前位置是否可以运动. FCL 开源检测库提供了物体碰撞检测以及物体接近距离的计算[51]. FCL 能够检测 传统的三角平面和包括球体,方 ...

  3. php推荐引擎算法,推荐系统,第 2 部分: 开源引擎简介

    问题导读: 1.简单的推荐生态系统是怎么样的? 2.常见的推荐算法有哪些? 3.怎么用restful服务构建推荐系统? 上一篇: 推荐系统,第 1 部分: 方法和算法简介 http://www.abo ...

  4. python矩形碰撞检测算法_矩形的碰撞检测(模仿俄罗斯方块)

    原博文 2016-11-20 16:11 − 以前一直以为玄之又玄的碰撞检测算法,其实也不过是一些加减法.看来还是写的太少,大多时候只是停留在望而止步的层次. 矩形的碰撞检测原理就是两个矩形的x值+宽 ...

  5. python碰撞检测算法_GJK碰撞检测算法

    现实世界里我们对于是否碰撞的判断可以说极其容易而且准确,比如下图.在二进制的世界里,一切就没这么直观了. GJK(Gilbert-Johnson-Keerthi Distance Algorithm) ...

  6. RetinaFace,最强开源人脸检测算法

    作者 | CV君 来源 | 我爱计算机视觉(ID:aicvmlaicvmlaicvml) 人脸检测为目标检测的特例,是商业化最早的目标检测算法,也是目前几乎各大 CV 方向 AI 公司的必争之地. W ...

  7. 清华大学开源迁移学习算法库:基于PyTorch实现已有算法

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:机器之心 AI博士笔记系列推荐 周志华<机器学习> ...

  8. 经典算法书籍推荐以及算法书排行【算法四库全书】

    经典算法书籍推荐以及算法书排行[算法四库全书] 作者:霞落满天   https://linuxstyle.blog.csdn.net/    https://blog.csdn.net/21aspne ...

  9. 关于python的一些好的书籍推荐-推荐几本关于的Python好书

    不可错过的十本Python好书,分别适合入门.进阶到精深三个不同阶段的人来阅读,感兴趣的小伙伴们可以参考一下 以往的文章中小编已经给大家陆续推荐了很多的Python书籍,可以说品种齐全.本本经典了,不 ...

最新文章

  1. 【工具类】遍历扫描目录下全部文件并列出
  2. r语言和python-R语言和Python一块学习会弄混吗
  3. Struts2教程1:第一个Struts2程序
  4. 【PAT】A1063 Set Similarity
  5. c++ vlc读取摄像头_Qt音视频开发1-vlc解码播放
  6. Mybatis MySQL批量更新
  7. 微课|《Python编程基础与案例集锦(中学版)》第3章(1)
  8. “通配符的匹配很全面, 但无法找到元素 ‘utillist‘ 的声明”的问题
  9. MySQL单列索引和组合索引的创建及区别介绍
  10. ZMQ中线程之间发送命令
  11. 4亿线上用户性能保证:Linked Redliner架构解密
  12. Keil μVision4软件简介
  13. 百度迁徙数据爬取 生成excel数据
  14. Java8流List转Map
  15. cocos creator 全局变量的几种方法
  16. Mi2上装的应用们,大家也可以分享下好的应用
  17. Anonympy——使用Python进行数据匿名化
  18. 如何正确理解开漏输出和推挽输出
  19. 关于网易云音乐代码音乐播放器单曲和歌单的调用
  20. 程序员的时间管理计划

热门文章

  1. WLAN配置二层直连隧道转发示例
  2. 某卡验证码获取识别登录
  3. 淘宝获取sku具体详情的方法
  4. SQL中使用的运算符号详解
  5. 打开xlsx文件时自动打开personal.xlsb表格文件
  6. 云筑网认证_云筑网供应商常见问题
  7. nvidia control panel is not found drive/nvidia控制面板打不开/win10应用商店无法下载
  8. Android开发--调用系统邮件
  9. python的判断语句练习
  10. 图片放大镜详细教程(简单易懂、注释清晰明了)