我正在开发一个FoV应用程序。目标很简单-你有一个车载传感器与特定的FoV形成单独的射线。在车前,我设置了几个障碍物,它们应该调整与障碍物碰撞的每一条射线的长度。此外,当我旋转FoV的一些边缘,我需要光线调整车辆的网格-你的车也可能是一个障碍。
我已经成功地完成了这两种条件(条件1射线长度是由障碍物调整的,但不是由车辆本身调节的;条件2射线是通过与车辆自身网格的碰撞来调整的,而不是由障碍物调整的),使用PyVista的ray_trace,但是我很难将两者结合起来,所以当你旋转传感器(可以在应用程序中使用滑块完成)时,光线由车辆和障碍物进行调整。
开始和结束都是点的数组,它们形成一条射线。然后使用clipped_ends/starts形成调整后的光线。
这是我尝试过的两种方法,imho的潜力最大--我试图将两个数组与numpy.concatenate合并,并比较两条调整后的射线的长度,所以代码使用了较短的射线。
这是我在pyhton的第一个真正的项目,我会很高兴听到每一个建议。提前感谢
[starts, ends] = rays
adjusted_starts = []
clipped_ends = []
for i in range len(starts)):
raystart = starts[i]
rayend = ennds[i]
points, ind = vehicle.ray_trace(sensor_position, rayend, first_point=True)
for obstacle in obstacles:
points_obs, ind_obs= obstacle.ray_trace(raystart, rayend, first_point=True)
if len(points) > 0:
#loop replacing ray ends with points obtained by ray_trace发布于 2022-03-16 17:01:28
OKey,对于任何觉得这很有帮助的人来说,我最终还是解决了这个问题:
正确的方法是比较调整后的射线的长度。您必须小心从ray_trace返回的空值,这表明没有任何交集。我指定了变量dis, dist_obs = 0, 0和- dist_obs -腿的射线与障碍物碰撞,射线与车辆碰撞的长度。
如果您的ray_trace()返回不是空的--,请注意这一步!!:points = points.astpye('float64') --对于points_obs也是如此,否则我得到了一个非数字类型的bcs错误。然后,你可以计算距离,我用np.linalg.norm。
如果它是空的,那么设置距离dist = np.infty,对dist_obs也是一样。
然后比较dist和dist_obs,并使用较短的一个作为射线的端点
希望有人会觉得这很有帮助,如果是的话,谢谢你的阅读和好运。
https://stackoverflow.com/questions/71456628
复制相似问题