Platform | CI Status |
---|---|
Ubuntu Focal | |
Ubuntu Jammy | |
Lint (Clang-Format) |
This repository provides software for performing tool path planning on arbitrary mesh surfaces. We define tool path planning as the generation of an ordered set of waypoints for a robotic process (e.g., painting, sanding, inspection, routing, etc.) based on some input geometry. The idea is that the tool of the robot should traverse through this set of waypoints in order to accomplish the desired task.
We think of the tool path planning process as a pipeline consisting of 3 steps:
- Mesh modification
- Often input geometry (specifically meshes) does not actually reflect the surface from which we want to generate tool paths. Usually we want to process the mesh in various ways, such as smoothing, segmentation, or primitive fitting and projection.
- Tool path planning
- This is the generation of waypoints directly from the modified mesh(es). Planners generally create waypoints directly on the surface of the input modified mesh(es).
- Tool path modification
- Many robot processes require application specific changes or additions to a tool path. These include operations like order reorganization, pose offsets, approaches/departures, etc. Instead of building these changes directly into customized tool path planners, we implement them as a separate step in the pipeline.
This project provides a GUI application for use of the provided tool path planning utilities. Load an arbitrary mesh, configure your desired tool path planning pipeline, and experiment with different types of planners and modifiers. The generated tool path can then be saved to a YAML file for use in other applications.
This repository provides three key abstract interfaces to facilitate the tool path planning pipeline:
MeshModifier
- Takes an mesh and returns a vector of modified meshes
- Implementation examples include primitive fitting and projection, region of interest selection, smoothing, hole filling, etc.
ToolPathPlanner
- Takes an input mesh and produces a tool path
- This repository also provides two sub-interfaces for planners with more specific behavior:
- Implementation examples include plane slice raster planner, CAM style planner, mesh half-edge planner
ToolPathModifier
- Takes an tool path and produces a modified tool path
- Implementation examples include order reorganization, orientation smoothing, approach/departure addition, pose offset, etc.
See the noether_tpp
documentation for more details on the architecture of the package.
Custom behavior can be added by providing a class that overrides one of the interface classes.
See the implementations in the mesh_modifiers
, tool_path_planners
, and tool_path_modifiers
for reference.
See the noether_gui
documentation for more details on how to a GUI plugin for a custom implementation of one of the interfaces.
Nominally, this project is ROS-independent, but it is convenient to use the ROS dependency management and build tools to build the repository.
Clone the repository into a workspace, download the dependencies, and build the workspace.
cd <ws>
vcs import src < dependencies.repos
rosdep install --from-paths src -iry
<colcon/catkin> build