Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WIP: Add Axis-Aligned Bounding Box option to Plane-Slicer Planner #123

Open
wants to merge 76 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
76 commits
Select commit Hold shift + click to select a range
812f52e
Add Axis-Aligned Bounding Box option to Plane-Slicer Planner
DavidMerzJr Dec 11, 2020
4e32857
Clang fixes and PlaneSlicerConfig Serialization
DavidMerzJr Dec 14, 2020
4e5c022
implemented simple max_edge_segment function
steviedale Dec 9, 2020
a52ac5a
added max_segment_length msg params
steviedale Dec 17, 2020
12181b3
fixed lenth->length typo and made splitSegments turn off for max_segm…
steviedale Dec 18, 2020
40551b3
added generate_extra_rasters capability to the plane slicer raster pl…
drchrislewis Jan 15, 2021
54dffd5
clang format
drchrislewis Jan 15, 2021
7dd640d
Merge pull request #2 from drchrislewis/generate_extra_rasters
DavidMerzJr Jan 19, 2021
0a88246
inprogress, but rebasing
drchrislewis Jan 19, 2021
8693919
first compile of bug fix for raster across holes switching directions…
drchrislewis Jan 22, 2021
08c6a00
Fix plane slicer axes for vertical parts and offsets for first slice
Jan 22, 2021
3ac6cf9
reordered, but now all returned rasters flow in same order. TODO, add…
drchrislewis Jan 25, 2021
308194e
added function to reverse odd rasters, and a config to enable/disable…
drchrislewis Jan 25, 2021
f804f23
clang
drchrislewis Jan 25, 2021
4ffd272
removed some code between if(0)
drchrislewis Jan 25, 2021
14746af
minor changes to catch zero length cases
drchrislewis Jan 26, 2021
acf9da4
minor improvement
drchrislewis Jan 26, 2021
37ccd05
clang
drchrislewis Jan 26, 2021
80d33a4
Merge pull request #3 from drchrislewis/reorder_planeslice_segs
DavidMerzJr Jan 26, 2021
7b03eae
Update cmake_common_scripts to ros_industrial_cmake_boilerplate
Jan 27, 2021
5d0911f
Merge pull request #4 from Levi-Armstrong/feature/axis-aligned-boundi…
DavidMerzJr Jan 28, 2021
c698b1c
fixed bug in utility to add extra raster
Feb 10, 2021
4999eae
first compile no testing yet
drchrislewis Apr 9, 2021
d76613e
implemented segmentByAxes
steviedale Apr 16, 2021
9f8c123
added testing script (should probably delete this before merging)
steviedale Apr 16, 2021
327acf9
addingExtraWaypoints is now working under gtest examples
drchrislewis Apr 20, 2021
f58ccca
updated segmentByAxes with major axis detection
steviedale Apr 22, 2021
2b1527f
added gtest unit test for segmentByAxes, viz not working and needs mo…
steviedale Apr 23, 2021
bf3547d
updated addWaypoints to prefer the original over the shifted. This pr…
drchrislewis Apr 28, 2021
6bee60f
modified prunning to use dot product as method.
drchrislewis Apr 29, 2021
4ccb86a
replaces splitSegements() with segmentByAxes() in edge generators
steviedale Apr 29, 2021
725267d
modified conditions for adding extra waypoints. This should eliminate…
drchrislewis May 4, 2021
d423984
fixed a few bugs in addExtraWaypoints, added a test that loads a mesh…
drchrislewis May 5, 2021
d8ab78e
edge path points are condsidered in a centroid frame to improve behavior
May 6, 2021
e3bc666
removed debug data structure
May 6, 2021
694c15a
Merge pull request #2 from colin-lewis-19/feature/segment_by_axes
steviedale May 6, 2021
510511a
refactored segementByAxes to splitByAxes
steviedale May 6, 2021
2b26ffa
Merge pull request #5 from drchrislewis/addExtraWaypoints
DavidMerzJr May 12, 2021
793fdb4
Reset Value in Utest
DavidMerzJr May 12, 2021
2320237
Merge branch 'feature/axis-aligned-bounding-box' into feature/segment…
DavidMerzJr May 12, 2021
2861348
Fix specification of raster direction to be more consistent
DavidMerzJr May 3, 2021
f28beac
Fix repeated uses causing changes in behavior
DavidMerzJr May 3, 2021
a3bea86
Fix Vector Math
DavidMerzJr May 4, 2021
734f27c
Fix Strange Deflection when Specifying Raster Direction Directly
DavidMerzJr May 12, 2021
f805353
Appease Clang and Fixup Unit Test
DavidMerzJr May 12, 2021
9ef7316
Merge pull request #7 from DavidMerzJr/fix/raster-direction-specifica…
DavidMerzJr May 12, 2021
7b64064
Merge branch 'feature/axis-aligned-bounding-box' into feature/segment…
DavidMerzJr May 12, 2021
d845ba5
removed test node
steviedale May 12, 2021
e9671a0
fixed fail cases
steviedale May 12, 2021
3688fa4
removed unused dependency from CMakeLists.txt
steviedale May 12, 2021
78b6fc2
support for splitting ToolPath objects with multiple ToolPathSegment …
steviedale May 12, 2021
01bec84
Merge pull request #6 from steviedale/feature/segment_by_axes
DavidMerzJr May 20, 2021
ef6fa61
Trying to Correct Malformed Post-Filtering Meshes
DavidMerzJr Oct 25, 2021
49837e1
reinstated a heat_raster interface and made a few minor simplifying c…
drchrislewis May 27, 2021
8cc8584
clang tidy
drchrislewis May 27, 2021
b79f539
added call to smoother and a utility function to generate interleaved…
drchrislewis Jun 28, 2021
6419c78
added search_radius to service so that we average the normals over so…
drchrislewis Jun 29, 2021
ef05d02
fixed quite a few bugs in the plane slicer. These caused crashes. Thi…
drchrislewis Jul 9, 2021
b53758d
added parameters to service call to plane slicer for smoothing, and i…
drchrislewis Jul 13, 2021
8ea64ab
updated utilities to allow normal estimation using MLS
drchrislewis Jul 22, 2021
07e3f7f
updated method for setting x-direction of pose
drchrislewis Jul 23, 2021
caad679
added MLS normal estimation and other utility functions(e.g. compute …
drchrislewis Jul 28, 2021
d6a59f1
removed include file no longer necessary
drchrislewis Jul 29, 2021
189eef2
clang, removed unnecessary and complex if(), renamed a static functio…
drchrislewis Jul 29, 2021
224d6fb
text of error message corrected
drchrislewis Jul 29, 2021
4f0a139
Fixed extra raster_directions param that slipped through on rebase
marrts Feb 1, 2022
fdbf72e
Merge pull request #12 from marrts/smoothing_and_interleaving_rebase
DavidMerzJr Feb 1, 2022
74246a1
Fixed default raster direction to be zero vector rather than unit Y s…
marrts Feb 7, 2022
e41a18e
Merge pull request #13 from marrts/fix/raster_direction_default
DavidMerzJr Feb 8, 2022
5899b4d
Reorganizing and Missing Headers
DavidMerzJr Mar 8, 2022
41a65ae
Sequencer: Guard against disallowed front() back()
DavidMerzJr Mar 11, 2022
e751fc6
Added ability to hop inlets and peninsulas
marrts May 10, 2022
958d584
Clang formatting and renamed variables to be clearer
marrts May 10, 2022
f033397
Clarified param units and better infinite loop check
marrts May 10, 2022
6713141
Ensures monotonically decreasing toolpath sizes
marrts May 10, 2022
0135230
Merge pull request #14 from marrts/feature/peninsula_and_inlet_hopper
DavidMerzJr May 10, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/bionic_build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jobs:
ROS_REPO: main
NOT_TEST_BUILD: true
UPSTREAM_WORKSPACE: 'dependencies_ros1.rosinstall'
ROSDEP_SKIP_KEYS: "iwyu cmake_common_scripts"
ROSDEP_SKIP_KEYS: "iwyu ros_industrial_cmake_boilerplate"
CCACHE_DIR: "/home/runner/work/noether/noether/Bionic-Build/.ccache"
TARGET_CMAKE_ARGS: "-DNURBS_FOUND=TRUE"
DOCKER_IMAGE: "rosindustrial/noether:melodic"
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/focal_build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jobs:
ROS_REPO: main
NOT_TEST_BUILD: true
UPSTREAM_WORKSPACE: 'dependencies_ros1.rosinstall'
ROSDEP_SKIP_KEYS: "iwyu cmake_common_scripts"
ROSDEP_SKIP_KEYS: "iwyu ros_industrial_cmake_boilerplate"
CCACHE_DIR: "/home/runner/work/noether/noether/Focal-Build/.ccache"
TARGET_CMAKE_ARGS: "-DNURBS_FOUND=FALSE"
DOCKER_IMAGE: "rosindustrial/noether:noetic"
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/xenial_build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jobs:
ROS_REPO: main
NOT_TEST_BUILD: true
UPSTREAM_WORKSPACE: 'dependencies_ros1.rosinstall'
ROSDEP_SKIP_KEYS: "iwyu cmake_common_scripts"
ROSDEP_SKIP_KEYS: "iwyu ros_industrial_cmake_boilerplate"
CCACHE_DIR: "/home/runner/work/noether/noether/Xenial-Build/.ccache"
TARGET_CMAKE_ARGS: "-DNURBS_FOUND=TRUE"
DOCKER_IMAGE: "rosindustrial/noether:kinetic"
Expand Down
2 changes: 1 addition & 1 deletion dependencies_ros1.rosinstall
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
# PCL ros tools, this is required because using custom version of PCL and VTK
- git: {local-name: perception_pcl, uri: 'https://github.com/ros-perception/perception_pcl.git', version: 1.7.1}
- git: {local-name: cmake_common_scripts, uri: 'https://github.com/ros-industrial/cmake_common_scripts.git', version: master}
- git: {local-name: ros_industrial_cmake_boilerplate, uri: 'https://github.com/ros-industrial/ros_industrial_cmake_boilerplate.git', version: master}
2 changes: 2 additions & 0 deletions noether/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ find_package(catkin REQUIRED COMPONENTS
pcl_conversions
roscpp
tool_path_planner
smooth_pose_traj
)

find_package(vtk_viewer REQUIRED)
Expand All @@ -52,6 +53,7 @@ catkin_package(
pcl_conversions
roscpp
tool_path_planner
smooth_pose_traj
DEPENDS
VTK
PCL
Expand Down
2 changes: 1 addition & 1 deletion noether/package.xml
Original file line number Diff line number Diff line change
Expand Up @@ -20,5 +20,5 @@
<depend>actionlib</depend>
<depend>noether_conversions</depend>
<depend>noether_filtering</depend>

<depend>smooth_pose_traj</depend>
</package>
19 changes: 17 additions & 2 deletions noether/src/tool_path_planner_server.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#include <tool_path_planner/plane_slicer_raster_generator.h>
#include <tool_path_planner/eigen_value_edge_generator.h>
#include <tool_path_planner/halfedge_edge_generator.h>
#include <smooth_pose_traj/smooth_pose_traj.hpp>

static const double FEEDBACK_PUBLISH_PERIOD = 1.0; // seconds
static const std::string GENERATE_TOOL_PATHS_ACTION = "generate_tool_paths";
Expand Down Expand Up @@ -97,6 +98,7 @@ class TppServer
const noether_msgs::ToolPathConfig& config = goal->path_configs[i];
const shape_msgs::Mesh& mesh = goal->surface_meshes[i];
boost::optional<tool_path_planner::ToolPaths> tool_paths = boost::none;
double pt_spacing, raster_spacing;
ROS_INFO("Planning path");
if (config.type == noether_msgs::ToolPathConfig::SURFACE_WALK_RASTER_GENERATOR)
{
Expand All @@ -105,6 +107,8 @@ class TppServer
tool_path_planner::toSurfaceWalkConfig(path_config, config.surface_walk_generator);
path_gen->setConfiguration(path_config);
generator = path_gen;
pt_spacing = path_config.point_spacing;
raster_spacing = path_config.raster_spacing;
}
else if (config.type == noether_msgs::ToolPathConfig::PLANE_SLICER_RASTER_GENERATOR)
{
Expand All @@ -113,6 +117,9 @@ class TppServer
tool_path_planner::toPlaneSlicerConfig(path_config, config.plane_slicer_generator);
path_gen->setConfiguration(path_config);
generator = path_gen;
pt_spacing = path_config.point_spacing;
raster_spacing = path_config.raster_spacing;
smooth_pose_arrays_ = path_config.smooth_rasters;
}
else if (config.type == noether_msgs::ToolPathConfig::EIGEN_VALUE_EDGE_GENERATOR)
{
Expand All @@ -121,6 +128,7 @@ class TppServer
tool_path_planner::toEigenValueConfig(path_config, config.eigen_value_generator);
path_gen->setConfiguration(path_config);
generator = path_gen;
pt_spacing = path_config.merge_dist;
}
else if (config.type == noether_msgs::ToolPathConfig::HALFEDGE_EDGE_GENERATOR)
{
Expand All @@ -129,6 +137,7 @@ class TppServer
tool_path_planner::toHalfedgeConfig(path_config, config.halfedge_generator);
path_gen->setConfiguration(path_config);
generator = path_gen;
pt_spacing = path_config.point_dist;
}
else
{
Expand All @@ -144,7 +153,6 @@ class TppServer

if (tool_paths.is_initialized())
{
noether_msgs::ToolPaths trp;
for (const auto& tool_path : tool_paths.get())
{
noether_msgs::ToolPath tp;
Expand All @@ -157,9 +165,15 @@ class TppServer
tf::poseEigenToMsg(p, pose);
seg.poses.push_back(pose);
}
if (smooth_pose_arrays_)
{
smooth_pose_traj::SmoothPoseTraj smoother(seg, pt_spacing, true);
smoother.process(seg);
}
tp.segments.push_back(seg);
}
trp.paths.push_back(tp);

result.tool_paths[i].paths.push_back(tp);
}

result.tool_path_validities[i] = true;
Expand Down Expand Up @@ -229,6 +243,7 @@ class TppServer
ros::NodeHandle nh_;
GenPathActionServer as_;
std::mutex goal_process_mutex_;
bool smooth_pose_arrays_;
};

} // namespace tpp_path_gen
Expand Down
1 change: 1 addition & 0 deletions noether_filtering/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ list(FIND CMAKE_CXX_COMPILE_FEATURES cxx_std_14 CXX_FEATURE_FOUND)
add_library(${PROJECT_NAME} SHARED
src/filter_group.cpp
src/filter_manager.cpp
src/utils.cpp
)
target_link_libraries(${PROJECT_NAME} PUBLIC
${Boost_LIBRARIES}
Expand Down
18 changes: 16 additions & 2 deletions noether_filtering/include/noether_filtering/utils.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,14 @@
#ifndef INCLUDE_NOETHER_FILTERING_UTILS_H_
#define INCLUDE_NOETHER_FILTERING_UTILS_H_

#include <typeinfo>
#include <cxxabi.h>
#include <memory>
#include <string>
#include <cxxabi.h>
#include <typeinfo>

#include <pcl/PolygonMesh.h>
#include <vtkPolyData.h>
#include <vtkSmartPointer.h>

namespace noether_filtering
{
Expand All @@ -28,6 +32,16 @@ static std::string getClassName()
return (status == 0) ? res.get() : mangled_name;
}

/**
* @brief vtk2TriangleMesh - pcl's vtk2mesh function can produce a PolygonMesh containing 1-point
* or 2-point 'polygons', as well as squares and so on. Many applications assume a mesh containing
* only triangles. This function converts the output to only include triangles.
* @param poly_data - input - the VTK mesh
* @param mesh - output - the resulting pcl polygonmesh containing only triangles
* @return - number of points contained in pcl::PolygonMesh, as vtk2mesh does.
*/
int vtk2TriangleMesh(const vtkSmartPointer<vtkPolyData>& poly_data, pcl::PolygonMesh& mesh);

} // namespace utils
} // namespace noether_filtering

Expand Down
2 changes: 1 addition & 1 deletion noether_filtering/src/mesh/clean_data.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ bool CleanData::filter(const pcl::PolygonMesh& mesh_in, pcl::PolygonMesh& mesh_o
mesh_data = cleanPolyData->GetOutput();
std::size_t num_end_points = mesh_data->GetNumberOfPoints();
CONSOLE_BRIDGE_logInform("Removed duplicate points, retained %lu points from %lu", num_end_points, num_start_points);
VTKUtils::vtk2mesh(mesh_data, mesh_out);
utils::vtk2TriangleMesh(mesh_data, mesh_out);
return true;
}

Expand Down
2 changes: 1 addition & 1 deletion noether_filtering/src/mesh/fill_holes.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ bool FillHoles::filter(const pcl::PolygonMesh& mesh_in, pcl::PolygonMesh& mesh_o
mesh_data = normals_rectifier->GetOutput();
std::size_t end_num_polys = mesh_data->GetNumberOfPolys();
CONSOLE_BRIDGE_logInform("Filled %lu polygons", start_num_polys - end_num_polys);
VTKUtils::vtk2mesh(mesh_data, mesh_out);
utils::vtk2TriangleMesh(mesh_data, mesh_out);
return true;
}

Expand Down
2 changes: 1 addition & 1 deletion noether_filtering/src/mesh/windowed_sinc_smoothing.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ bool WindowedSincSmoothing::filter(const pcl::PolygonMesh& mesh_in, pcl::Polygon
smoother->Update();

mesh_data = smoother->GetOutput();
VTKUtils::vtk2mesh(mesh_data, mesh_out);
utils::vtk2TriangleMesh(mesh_data, mesh_out);
return true;
}

Expand Down
106 changes: 106 additions & 0 deletions noether_filtering/src/utils.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
#include <noether_filtering/utils.h>

#include <pcl/conversions.h>
#include <pcl/point_cloud.h>
#include <pcl/point_types.h>
#include <pcl/surface/vtk_smoothing/vtk_utils.h>
#include <vtkPointData.h>

namespace noether_filtering
{
namespace utils
{
int vtk2TriangleMesh(const vtkSmartPointer<vtkPolyData>& poly_data, pcl::PolygonMesh& mesh)
{
mesh.polygons.clear();
mesh.cloud.data.clear();
mesh.cloud.width = mesh.cloud.height = 0;
mesh.cloud.is_dense = true;

vtkSmartPointer<vtkPoints> mesh_points = poly_data->GetPoints();
vtkIdType nr_points = mesh_points->GetNumberOfPoints();
vtkIdType nr_polygons = poly_data->GetNumberOfPolys();

if (nr_points == 0)
return 0;

vtkUnsignedCharArray* poly_colors = nullptr;
if (poly_data->GetPointData() != nullptr)
poly_colors = vtkUnsignedCharArray::SafeDownCast(poly_data->GetPointData()->GetScalars("Colors"));

// Some applications do not save the name of scalars (including PCL's native vtk_io)
if (!poly_colors)
poly_colors = vtkUnsignedCharArray::SafeDownCast(poly_data->GetPointData()->GetScalars("scalars"));

// TODO: currently only handles rgb values with 3 components
if (poly_colors && (poly_colors->GetNumberOfComponents() == 3))
{
pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud_temp(new pcl::PointCloud<pcl::PointXYZRGB>());
cloud_temp->points.resize(nr_points);
double point_xyz[3];
unsigned char point_color[3];
for (vtkIdType i = 0; i < mesh_points->GetNumberOfPoints(); ++i)
{
mesh_points->GetPoint(i, &point_xyz[0]);
(*cloud_temp)[i].x = static_cast<float>(point_xyz[0]);
(*cloud_temp)[i].y = static_cast<float>(point_xyz[1]);
(*cloud_temp)[i].z = static_cast<float>(point_xyz[2]);

poly_colors->GetTupleValue(i, &point_color[0]);
(*cloud_temp)[i].r = point_color[0];
(*cloud_temp)[i].g = point_color[1];
(*cloud_temp)[i].b = point_color[2];
}
cloud_temp->width = cloud_temp->size();
cloud_temp->height = 1;
cloud_temp->is_dense = true;

pcl::toPCLPointCloud2(*cloud_temp, mesh.cloud);
}
else // in case points do not have color information:
{
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_temp(new pcl::PointCloud<pcl::PointXYZ>());
cloud_temp->points.resize(nr_points);
double point_xyz[3];
for (vtkIdType i = 0; i < mesh_points->GetNumberOfPoints(); ++i)
{
mesh_points->GetPoint(i, &point_xyz[0]);
(*cloud_temp)[i].x = static_cast<float>(point_xyz[0]);
(*cloud_temp)[i].y = static_cast<float>(point_xyz[1]);
(*cloud_temp)[i].z = static_cast<float>(point_xyz[2]);
}
cloud_temp->width = cloud_temp->size();
cloud_temp->height = 1;
cloud_temp->is_dense = true;

pcl::toPCLPointCloud2(*cloud_temp, mesh.cloud);
}

mesh.polygons.reserve(nr_polygons);
#ifdef VTK_CELL_ARRAY_V2
vtkIdType const* cell_points;
#else
vtkIdType* cell_points;
#endif
vtkIdType nr_cell_points;
vtkCellArray* mesh_polygons = poly_data->GetPolys();
mesh_polygons->InitTraversal();
int id_poly = 0;
while (mesh_polygons->GetNextCell(nr_cell_points, cell_points))
{
if (nr_cell_points == 3 && cell_points[0] != cell_points[1] && cell_points[1] != cell_points[2] &&
cell_points[2] != cell_points[0])
{
mesh.polygons.emplace_back(pcl::Vertices());
mesh.polygons[id_poly].vertices.resize(nr_cell_points);
for (vtkIdType i = 0; i < nr_cell_points; ++i)
mesh.polygons[id_poly].vertices[i] = static_cast<unsigned int>(cell_points[i]);
++id_poly;
}
}

return (static_cast<int>(nr_points));
}

} // namespace utils
} // namespace noether_filtering
1 change: 1 addition & 0 deletions noether_msgs/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ add_message_files(
SurfaceWalkRasterGeneratorConfig.msg
EigenValueEdgeGeneratorConfig.msg
HalfedgeEdgeGeneratorConfig.msg
HeatRasterGeneratorConfig.msg
SegmentationConfig.msg
ToolPathConfig.msg
ToolPath.msg
Expand Down
3 changes: 3 additions & 0 deletions noether_msgs/msg/EigenValueEdgeGeneratorConfig.msg
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,6 @@ int32 max_intersecting_voxels

# Any two consecutive points with a shortest distance smaller than this value are merged
float64 merge_dist

# flag to break edge paths by diagonal axes
bool split_by_axes
6 changes: 6 additions & 0 deletions noether_msgs/msg/HalfedgeEdgeGeneratorConfig.msg
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,9 @@ int32 point_spacing_method

# Point distance parameter used in conjunction with the spacing method
float64 point_dist

# flag to break edge paths by diagonal axes
bool split_by_axes

# Size (meters) of peninsulas or inlets to skip over, default of 0 will not bridge any gaps, effectively off
float64 max_bridge_distance
7 changes: 7 additions & 0 deletions noether_msgs/msg/HeatRasterGeneratorConfig.msg
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
float64 point_spacing # Required spacing between path points
float64 raster_spacing # Offset between two rasters
float64 tool_offset # How far off the surface the tool needs to be
float64 min_hole_size # A path passes over smaller holes breaks into two on larger wholes
float64 min_segment_size # The minimum segment size to allowed
float64 raster_rot_offset # use this angle when no sources are povided
bool generate_extra_rasters # Add extra strokes off the boundaries (NOT YET IMPLEMENTED BY HEAT METHOD)
27 changes: 21 additions & 6 deletions noether_msgs/msg/PlaneSlicerRasterGeneratorConfig.msg
Original file line number Diff line number Diff line change
@@ -1,6 +1,21 @@
float64 raster_spacing # Offset between two rasters
float64 point_spacing # Required spacing between path points
float64 raster_rot_offset # Specifies the direction of the raster path in radians
float64 min_segment_size # The minimum segment size to allow when finding intersections; small segments will be discarded
float64 min_hole_size # A path may pass over holes smaller than this, but must be broken when larger holes are encounterd.
float64 tool_offset # How far off the surface the tool needs to be
float64 raster_spacing # Offset between two rasters
float64 point_spacing # Required spacing between path points
float64 raster_rot_offset # Specifies the direction of the raster path in radians. Rotates about short dimension of bounding box.
float64 min_segment_size # The minimum segment size to allow when finding intersections; small segments will be discarded
float64 min_hole_size # A path may pass over holes smaller than this, but must be broken when larger holes are encounterd.
float64 tool_offset # How far off the surface the tool needs to be
float64 search_radius # radius over which the normals are averaged
bool generate_extra_rasters # Whether an extra raster stroke should be added to the beginning and end of the raster pattern
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This perhaps could be made to be num_of_extra_rasters so that more than one could be added if needed. Zero would be the default case

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a good idea. thanks

bool interleave_rasters # create a second set of rasters interleaved inbetween first set
bool smooth_rasters # post process poses by fitting a cubic b-spline and re-sampling
int32 raster_style # 0,1,2 for mow_style, paint_style and read_style

# When set to TRUE: initial cuts are determined using an axis-aligned bounding box. (global axes)
# When set to FALSE: initial cuts are determined using an object-oriented bounding box and the
# principal axes of the part. (Note that ROS sets message fields to 0/False by default.)
bool raster_wrt_global_axes

# Normal of the cutting planes. Points from the first raster to the second raster, not the
# direction from the first point in one raster to the second point of the same raster. Specified
# in the frame of the input mesh. Overrides raster_wrt_global_axes
geometry_msgs/Vector3 raster_direction
5 changes: 4 additions & 1 deletion noether_msgs/msg/ToolPathConfig.msg
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,13 @@ uint8 PLANE_SLICER_RASTER_GENERATOR=1
uint8 HEAT_RASTER_GENERATOR=2
uint8 EIGEN_VALUE_EDGE_GENERATOR=3 # This does not have a config
uint8 HALFEDGE_EDGE_GENERATOR=4
uint8 PAINT_RASTER_STYLE=0
uint8 MOW_RASTER_STYLE=1
uint8 READ_RASTER_STYLE=2

uint8 type
noether_msgs/SurfaceWalkRasterGeneratorConfig surface_walk_generator
noether_msgs/PlaneSlicerRasterGeneratorConfig plane_slicer_generator
#noether_msgs/HeatRasterPathGeneratorConfig heat_generator
noether_msgs/HeatRasterGeneratorConfig heat_generator
noether_msgs/EigenValueEdgeGeneratorConfig eigen_value_generator
noether_msgs/HalfedgeEdgeGeneratorConfig halfedge_generator
Loading