Alexbeast-CN / 3d-surface-planner

0 stars 0 forks source link

三维表面路径规划 #7

Open mia0813 opened 6 months ago

mia0813 commented 6 months ago

实现A*算法在三维表面的路径规划

mia0813 commented 6 months ago

对勺子栅格地图进行了处理,转化成了用于路径规划的路径规划图 1710317198162

mia0813 commented 6 months ago

在勺子地图上实现了简单的A*路径规划,但出现了把勺子当作了一个面无法区分勺子正反面进行路径规划的问题 1710405620749

Alexbeast-CN commented 6 months ago

在 Mesh 里,一般遵循右手定则,即一个 face 的所有顶点的顺序可以决定其法线的方向。

比如:对于一个按P0、P1、P2顺序存储的三角形,其法线方向就是:

image

Alexbeast-CN commented 6 months ago

另外,尝试使用 Open3d 里的 LineSet 绘制路径。

mia0813 commented 6 months ago

使用open3d里的LineSet绘制了路径,基本路线可以正确实现。 正确情况 1710507235220

Alexbeast-CN commented 6 months ago

尝试写一个功能:

用鼠标点两个点,一个是起点一个是终点。

mia0813 commented 6 months ago

实现了起始点和目标点在open3d图中标出 1710671165438

Alexbeast-CN commented 6 months ago

你这里的mesh可视化没有处理好,看一下我的写法。

两个点可以用鼠标交互得到吗?

mia0813 commented 6 months ago

对mesh可视化进行了修正,但是暂未解决鼠标交互问题和路径有点看不清的问题(更换了颜色也没解决看不清的问题) 1710677459981

Alexbeast-CN commented 6 months ago

可以参考 open3d 官方文档实现选点。

https://www.open3d.org/docs/release/tutorial/t_geometry/pointcloud.html

Alexbeast-CN commented 6 months ago

参考 line_width.py 修改把路径变粗

mia0813 commented 6 months ago

使用了mat报错 mat = o3d.visualization.rendering.MaterialRecord() mat.shader = "unlitLine" mat.line_width = 10 path_line_set.material = mat 使用了line_width报错 path_line_set.line_width = 10 均警告AttributeError: open3d.cpu.pybind.geometry.LineSet' object has no attribute暂未解决

mia0813 commented 6 months ago

自己构建了路径规划函数,输出可以正确得到八个邻居节点 1710746303415

mia0813 commented 6 months ago

在linux系统下仍然无法解决AttributeError: open3d.cpu.pybind.geometry.LineSet' object has no attribute的问题,初步推测问题在于open3d的版本,还在解决中,把代码先进行了上传。

Alexbeast-CN commented 6 months ago
image
    o3d.visualization.draw([
        {
            "name": "path_line_set",
            "geometry": path_line_set,
            "material": mat
        },
        {
            "name": "mesh",
            "geometry": mesh,
        },
        {
            "name": "line_set",
            "geometry": line_set,  
        },
        {
            "name": "points",
            "geometry": points,  
        }
    ])
mia0813 commented 5 months ago

将构建路径规划图时的面切割成三角后可以实现八个邻接点,在生成路径时也可以生成斜线,但偶尔会出现一半生成斜线一半仍旧阶梯状的情况,在解决中。 1711004427990 1711004707237

Alexbeast-CN commented 5 months ago

只是三角形的话,好像不是八邻域。可以通过绘制 lineset 的方式可视化点的邻域,方便进行 debug

Alexbeast-CN commented 5 months ago

利用 open3d 的 gui class 开发了一个简易的 app (#9) ,目前可以做到鼠标交互和几何体的渲染:

image

mia0813 commented 5 months ago

实现了双向A,并对其和单向A 的时间进行了对比,可知双向A *效率更高 1711352891604 1711352992863

Alexbeast-CN commented 5 months ago

[想法]

image

在处理 obj 的时候,应该就可以将整个几何体的边界点面点,之类的信息找到。

Alexbeast-CN commented 5 months ago

Screenshot from 2024-03-26 10-52-11

根据两点 vertix normal 的夹角找到外折角,并在构建 graph 的时候将其断开。

Alexbeast-CN commented 5 months ago

https://github.com/Alexbeast-CN/3d-surface-planner/assets/69784031/c17fdd60-8277-4a7c-b227-b9ba12ed85dd

一个简单的集成

mia0813 commented 5 months ago

使用FMM方法实现了路径规划,但是未能解决将面划分为三角形后,怎么得到三角形内部的点并利用三角形区域之间的关系进行路径规划