You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用python-fcl实现八叉树点云碰撞检测遇错求助

解决python-fcl八叉树点云碰撞检测的错误问题

错误原因

你代码里的链式调用fcl.OcTree(0.1).insertPointCloud(points=x)是问题核心:insertPointCloud方法是原地修改OcTree对象,它的返回值是None,导致object1和object2实际是None,传给CollisionObject时触发参数错误。另外,fcl.distance函数需要传入的是CollisionObject实例,而非原始的OcTree对象。

修正后的代码

import numpy as np
import fcl

# 生成随机点云
x = np.random.random([5, 3])
y = np.random.random([5, 3])

# 正确创建并填充八叉树:先实例化,再调用insertPointCloud
octree1 = fcl.OcTree(0.1)
octree1.insertPointCloud(points=x)

octree2 = fcl.OcTree(0.1)
octree2.insertPointCloud(points=y)

# 创建碰撞对象
t1 = fcl.Transform()
o1 = fcl.CollisionObject(octree1, t1)

t2 = fcl.Transform()
o2 = fcl.CollisionObject(octree2, t2)

# 计算距离(碰撞检测可以用fcl.collide)
request = fcl.DistanceRequest()
result = fcl.DistanceResult()

# 传入CollisionObject实例
ret = fcl.distance(o1, o2, request, result)

# 输出结果
print(f"距离计算结果: {ret}")
print(f"最近点对距离: {result.min_distance}")

额外说明

  • 如果要做碰撞检测(判断是否相交),可以替换为fcl.collide(o1, o2, collision_request, collision_result),用法和distance类似。
  • 确保python-fcl版本是兼容的,建议使用最新稳定版,避免API差异问题。

内容的提问来源于stack exchange,提问作者KKKmelody

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 05:15:34