Code Monkey home page Code Monkey logo

passive-gripper's Introduction

Computational Design of Passive Grippers

REUSE status

Public code release for "Computational Design of Passive Grippers", presented at SIGGRAPH 2022 and authored by Milin Kodnongbua, Ian Good, Yu Lou, Jeffrey Lipton, and Adriana Schulz.

You are permitted to use the code only for noncommercial purposes. See the license section for details.

Installation

git clone https://github.com/milmillin/passive-gripper.git
cd passive-gripper
git submodule update --init --recursive

Dependencies

We use vcpkg to handle dependencies. Install the following packages:

vcpkg install embree3:x64-[windows|linux]
vcpkg install qhull:x64-[windows|linux]
vcpkg install cgal:x64-[windows|linux]
vcpkg install nlopt:x64-[windows|linux]

We use our fork of ToPy library for topology optimization.

Compilation

The compilation is done using the standard cmake routine. Inside the root project directory, run:

mkdir build
cd build
cmake .. -DCMAKE_TOOLCHAIN_FILE=[path to vcpkg]/scripts/buildsystems/vcpkg.cmake
cmake --build -j .

Usage passive-gripper

You can begin by running ./build/passive-gripper. A viewer should appear.

initial

This user interface allows you to optimize for a passive gripper and an insert trajectory given an input mesh and related settings. The "Tools" panel selects different functionalities of the program.

overview

Following subsections will guide you to through the required steps:

  • Import and manipulate mesh
  • Specfify initial robot pose, object positioning, and related settings
  • Generate grasp configurations (GCs).
  • Optimize for an insert trajectory.
  • Export .tpd Topy configuration.
  • Load topology optimization result and refine for the final gripper design.

Importing and Manipulating Mesh

You can start by clicking "Load Mesh" to import STL file. This assumes the STL file is in meter unit and Y-axis is up. There are checkbox in case your STL file are in millimeter or Z-axis is up. After loading mesh, you can click on "Mesh Manipulation" to show the mesh-related functions.

mesh manipulation

  • The mesh will be positioned at the default position in front of the robot arm in its default initial position.
  • (Optional) You can reposition the mesh using the "Transform" pane and click apply. Note the handle on the object is known to be unusable at the moment
  • (Required) "Merge Mesh" merges the disjoint component
  • (Optional) "Remesh" processes the mesh so that it has roughly equal edge length.

Specifying Initial Robot Pose

To specify the robot pose, click on the "Trajectory" button in the "Tools" pane.

trajectory

  • Initially, you will have one keyframe which is the keyframe where the gripper touches the object. Note that the keyframe order here is reversed from what is described in the paper.
  • You can move to different keyframes by clicking "Goto" and you can delete the keyframe by clicking "X". Note that you cannot delete the last keyframe.
  • To edit the keyframe, click ">>" on the keyframe you want to edit.
    • Then use the handle on the robot arm to move it to the desired position.
    • You can toggle between translation and rotation handle by clicking "Trans" or "Rot" under the "Manipulation Mode" pane on the left.
    • You can expand the "Forward Kinematics" or "Inverse Kinematics" to manually enter the parameters.
  • To manually add a new keyframe, click ">>" besides the "New Keyframe" label. Move the robot to the desired configuration, and then click ">> New Keyframe"
  • You do not need to add/edit keyframes other than the first because later stages will reinitialize the rest of the trajectory. You do not need to do anything if you want the robot in its default position.

Grasp Configuration Generation

You can click on the "Contact Point" under the "Tools" pane.

contact point

Options

  • "Friction Coeff" is the base friction coefficient.
  • "Cone Resolution" is the number of sides for the polyhedral cones used to approximate the friction cones.
  • "Contact Floor" is the Y-coordinate of the floor. Points below this value will not be selected.
  • "Max Angle" is the maximum angle the instantaneous motion heuristics has to follow (See theta_max in Section 4.2)
  • "Finger Joints" is the number of joints per finger.
  • "# Candidates" is the number of GCs to be considered before ranking.
  • "# Seeds" is the number of individual contact points to be considered.

Operations

  • Click on "Generate Candidates". This will generate a ranked list of GCs.
    • Note that this may take a while
    • In case the console reports "Low success rate", consider lowering the "Contact Floor" or increasing the "Max Angle".
  • A list of candidate will appear, and you click "Select" to load the GC to visualization.
  • The skeleton will automatically be generated and shown in red, and the contact cones are shown in green.
  • The trajectory will also be automatically generated and shown in yellow. You can check it using the "Trajectory" tool.
  • (Optional) You can manually pick the contact points by pressing Ctrl and left clicking on the mesh.
  • (Optional) You can delete individual contact point by clicking "Delete C#".
  • (Optional) You can save the GC candidates by clicking "Save Candidates (.cpx)" which you can load them later..

Insert Trajectory Optimization

You can click on the "Optimization" under the "Tools" pane.

optimization

Options

  • "Trajectory Wiggle" is how much the trajectory can deviate from the initial values.
  • "Finger Wiggle" is how much the joint positions can deviate from the initial values.
  • "Max Runtime" is the maximum runtime for the optimizer. Setting this value to zero permits unlimited time.
  • "Max Iters" is the maximum number of iterations for the optimizer. Setting this value to zeros allow unlimited iterations.
  • "Tolerance" is the threshold where the optimization terminates if the cost function goes below this value.
  • "Algorithm" is the optimization algorithm provided by the NLOpt library.
  • "Population" is the size of the population need by the optimizer. (See NLOpt documentation for more details).
  • "Floor" is the Y-coordinate of the floor to determine the collision with the floor. This value has to be below the "Contact Floor".
  • "Finger Subdivision" is the number of subdivision for the gripper energy (i.e., the number of subdivisions along the trajectory).
  • "Trajectory Subdivision" is the number of subdivision for the trajectory energy (i.e., the number of subdivisions along the skeleton).
  • "Subdivision" is the distance between subdivisions (for adaptive subdivision)
  • "Linearity" is the linearity tolerance when linearizing the trajectory.
  • "Inner Contrib" is the contribution of the inner distance.
  • "Geodesic Contrib" is the contribution of the wrap-around distance.
  • "Gripper Energy" is the contribution of the gripper energy term.
  • "Trajectory Energy" is the contribution of the trajectory energy term.
  • "Use Adaptive Subdivision". When checked, use adaptive subdivisions with distance "Subdivisions". The "Finger Subdivision" and "Trajectory Subdivision" will be ignored.
  • "Debug" (for our debugging purpose only).

Operations

  • Click on the "Optimize" button and the optimization should start.
  • A small panel will appear above the "Tools" panel allowing you to pause the optimization and load the current best parameters.

Topology Optimization

You can click on the "Topo Opt" under the "Tools" pane.

topo opt

Options

  • "Topo Res" is the size of voxels for topology optimization in meters.
  • "Neg Vol Res" is the size of voxels for the negative swept volume.
  • "Attachment Size" is the diameter of the circular disk that mounts the gripper to the robot
  • "Contact Pt Size" is the diameter of the sphere around the contact point when refining the gripper.
  • "Base Thickness" is the thickness of the mounting circular disk.

Operations

  • (Required) Click on "Init Gripper Bound". This will appropriately finds the working area for the gripper shown in blue. You can manually adjust using the "Lower-" and "Upper bound" on the left.
  • (Required) Click on "Compute Neg Vol". This may take a while and the negative volume should appear.
  • (Required) Click on "Generate Topy Config". This will prompt you to save a .tpd file.
  • (Required) Refer to ToPy documentation on how to perform topology optimization. You will need to run python scripts/optimise.py whatever.tpd output-dir.

Loading Topology Optimization Result

After topology optimization, a .bin file should be generated. Staying on the "Topo Opt" tool, click on "Load Result Bin" and browse to the .bin file.

topo opt with gripper

This should load the gripper mesh. Then click on "Refine Result" to add the mounting disk and refine the geometry around the contact points. You can select "Save Gripper STL" to export the gripper shape.

Saving and Loading Configurations

You can save all the settings and parameters using the "Save PSG" button. This will prompt you to save a .psg file which contains the mesh, the contact points, the skeleton, the trajectory, and all the settings. You can hit "Load PSG" to load the saved configurations.

View Options

You can hide and unhide some components on the viewport by expanding the "View" panel.

view panel

Here the four checkboxes are:

  • Visibility
  • Line Visibility
  • Face Visibility
  • Face-based shading

You can also check "Robot Viz" to show UR5 model but this will affect the viewing performance.

License

Most of the code is licensed under the Computational Design of Passive Grippers Non-commercial License. See LICENSES/LicenseRef-UW-Non-Commercial.txt for the license text. Please note that some part of the code is protected by patents, including a pending patent by the University of Washington. The license does NOT release the rights related to the patents.

We use the REUSE standard to mark some codes and assets that come with different licences. The license information is contained in each file's header, in .reuse/dep5, or in a seperate license file. License texts are planced under the LICENSES/ folder, with the license identifier as file name.

Here is a list of files that contains a license other than LicenseRef-UW-Non-Commercial (Updated 2022-07-11):

'Apache-2.0' found in:
* external/ikfast/

'BSD-3-Clause' found in:
* assets/

'CC-BY-4.0' found in:
* data/

'CC-BY-SA-4.0' found in:
* README.md
* docs/

'CC0-1.0' found in:
* .clang-format
* .gitignore
* .gitmodules

'GCC-exception-3.1' found in:
* external/lapack/libgcc_s_sjlj-1.dll
* external/lapack/libgfortran-3.dll
* external/lapack/libquadmath-0.dll

'GPL-3.0-or-later' found in:
* external/lapack/libgcc_s_sjlj-1.dll
* external/lapack/libgfortran-3.dll
* external/lapack/libquadmath-0.dll
* external/libigl/

'LicenseRef-LAPACK-Modified-BSD' found in:
* external/lapack/lapack-config-version.cmake
* external/lapack/lapack-config.cmake
* external/lapack/libblas.dll
* external/lapack/libblas.exp
* external/lapack/libblas.lib
* external/lapack/liblapack.dll
* external/lapack/liblapack.lib

'LicenseRef-Qhull' found in:
* include/passive-gripper/GeometryUtils.cpp
* include/passive-gripper/GeometryUtils.h

'LicenseRef-UC-Berkeley-Copyright-and-Disclaimer-Notice' found in:
* include/passive-gripper/QualityMetric.cpp
* include/passive-gripper/QualityMetric.h

'MIT' found in:
* external/autodiff/
* external/swept-volumes/
* include/passive-gripper/Constants.h
* include/passive-gripper/SweptVolume.cpp
* include/passive-gripper/SweptVolume.h

'MPL-2.0' found in:
* cmake/FindLIBIGL.cmake
* external/libigl/
* include/passive-gripper/GeometryUtils.cpp
* include/passive-gripper/GeometryUtils.h

Citation

@article{Kodnongbua_2022,
	doi = {10.1145/3528223.3530162},
	url = {https://doi.org/10.1145%2F3528223.3530162},
	year = 2022,
	month = {jul},
	publisher = {Association for Computing Machinery ({ACM})},
	volume = {41},
	number = {4},
	pages = {2--12},
	author = {Milin Kodnongbua and Ian Good and Yu Lou and Jeffrey Lipton and Adriana Schulz},
	title = {Computational design of passive grippers},
	journal = {{ACM} Transactions on Graphics}
}

passive-gripper's People

Contributors

milmillin avatar louyu2015 avatar

Stargazers

Jeff Carpenter avatar  avatar GP Wang avatar Felix avatar Oscar Jin avatar  avatar SamSAM avatar  avatar  avatar Oliver Ulerich avatar Ünver Çiftçi avatar Lionel Birglen avatar Zhehao Li  avatar Haisen Zhao avatar  avatar  avatar Max Kueng avatar liaok avatar Hammad Bashir avatar Davil Su avatar Haowei Wen avatar  avatar Nick Largent avatar  avatar  Jiahui Zhu avatar

Watchers

GP Wang avatar  avatar  avatar

passive-gripper's Issues

What's your CGAL version?

When I ran the command cmake --build -j .

there is a bug.

Unknown argument .
Usage: cmake --build <dir>             [options] [-- [native-options]]
       cmake --build --preset <preset> [options] [-- [native-options]]
Options:
  <dir>          = Project binary directory to be built.
  --preset <preset>, --preset=<preset>
                 = Specify a build preset.
  --list-presets
                 = List available build presets.
  --parallel [<jobs>], -j [<jobs>]
                 = Build in parallel using the given number of jobs. 
                   If <jobs> is omitted the native build tool's 
                   default number is used.
                   The CMAKE_BUILD_PARALLEL_LEVEL environment variable
                   specifies a default parallel level when this option
                   is not given.
  --target <tgt>..., -t <tgt>... 
                 = Build <tgt> instead of default targets.
  --config <cfg> = For multi-configuration tools, choose <cfg>.
  --clean-first  = Build target 'clean' first, then build.
                   (To clean only, use --target 'clean'.)
  --resolve-package-references={on|only|off}
                 = Restore/resolve package references during build.
  --verbose, -v  = Enable verbose output - if supported - including
                   the build commands to be executed. 
  --             = Pass remaining options to the native tool.

When I ran the command cmake --build .

There also a bug.

-- Build type: Release
-- Copying assets
-- Using header-only CGAL
-- Targetting Unix Makefiles
-- Using /usr/bin/c++ compiler.
-- Found Boost: /home/pi/Desktop/RL_learning/PassiveGrippers/passive-gripper/vcpkg/installed/x64-linux/include (found suitable version "1.79.0", minimum required is "1.48")  
-- Boost include dirs: /home/pi/Desktop/RL_learning/PassiveGrippers/passive-gripper/vcpkg/installed/x64-linux/include
-- Boost libraries:    
-- Using gcc version 4 or later. Adding -frounding-math
-- Found Boost: /home/pi/Desktop/RL_learning/PassiveGrippers/passive-gripper/vcpkg/installed/x64-linux/include (found version "1.79.0") found components: system filesystem 
-- Found libigl:/home/pi/Desktop/RL_learning/PassiveGrippers/passive-gripper/external/libigl/include
-- Creating target: igl::core (igl)
-- Creating target: igl::cgal (igl_cgal)
CMake Deprecation Warning at external/libigl/external/embree/CMakeLists.txt:64 (cmake_policy):
  The OLD behavior for policy CMP0072 will be removed from a future version
  of CMake.

  The cmake-policies(7) manual explains that the OLD behaviors of all
  policies are deprecated and that a policy should be set to OLD only under
  specific short-term circumstances.  Projects should be ported to the NEW
  behavior and not rely on setting a policy to OLD.


-- Detecting default ISA...
-- Detected default ISA: SSE2
-- Creating target: igl::embree (igl_embree)
-- Creating target: igl::opengl (igl_opengl)
-- Creating target: igl::opengl_glfw (igl_opengl_glfw)
-- Using X11 for window creation
-- Creating target: igl::opengl_glfw_imgui (igl_opengl_glfw_imgui)
-- Creating target: igl::png (igl_png)
-- Configuring done
-- Generating done
-- Build files have been written to: /home/pi/Desktop/RL_learning/PassiveGrippers/passive-gripper/build
Consolidate compiler generated dependencies of target glfw
[ 11%] Built target glfw
Consolidate compiler generated dependencies of target glad
[ 12%] Built target glad
Consolidate compiler generated dependencies of target imgui
[ 17%] Built target imgui
Consolidate compiler generated dependencies of target imguizmo
[ 19%] Built target imguizmo
Consolidate compiler generated dependencies of target swept-volume
[ 25%] Built target swept-volume
Consolidate compiler generated dependencies of target ikfast
[ 26%] Built target ikfast
Consolidate compiler generated dependencies of target igl_stb_image
[ 28%] Built target igl_stb_image
Consolidate compiler generated dependencies of target sys
[ 35%] Built target sys
Consolidate compiler generated dependencies of target math
[ 36%] Built target math
Consolidate compiler generated dependencies of target simd
[ 37%] Built target simd
Consolidate compiler generated dependencies of target lexers
[ 39%] Built target lexers
Consolidate compiler generated dependencies of target tasking
[ 41%] Built target tasking
Consolidate compiler generated dependencies of target algorithms
[ 47%] Built target algorithms
Consolidate compiler generated dependencies of target embree
[ 83%] Built target embree
Consolidate compiler generated dependencies of target psg-core
[ 84%] Building CXX object CMakeFiles/psg-core.dir/include/passive-gripper/CostFunctions.cpp.o
/home/pi/Desktop/RL_learning/PassiveGrippers/passive-gripper/include/passive-gripper/CostFunctions.cpp: In function ‘double psg::MinDistance(const psg::GripperParams&, const psg::GripperSettings&, const psg::MeshDependentResource&)’:
/home/pi/Desktop/RL_learning/PassiveGrippers/passive-gripper/include/passive-gripper/CostFunctions.cpp:49:26: warning: comparison of integer expressions of different signedness: ‘size_t’ {aka ‘long unsigned int’} and ‘Eigen::Index’ {aka ‘long int’} [-Wsign-compare]
   49 |     for (size_t j = 1; j < fingers[i].rows(); j++) {
      |                        ~~^~~~~~~~~~~~~~~~~~~
/home/pi/Desktop/RL_learning/PassiveGrippers/passive-gripper/include/passive-gripper/CostFunctions.cpp:52:14: warning: unused variable ‘iters’ [-Wunused-variable]
   52 |       size_t iters = subs;
      |              ^~~~~
/home/pi/Desktop/RL_learning/PassiveGrippers/passive-gripper/include/passive-gripper/CostFunctions.cpp:62:27: warning: comparison of integer expressions of different signedness: ‘long long int’ and ‘std::vector<Eigen::Matrix<double, 3, 1> >::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
   62 |   for (long long i = 0; i < d_fingers.size(); i++) {
      |                         ~~^~~~~~~~~~~~~~~~~~
/home/pi/Desktop/RL_learning/PassiveGrippers/passive-gripper/include/passive-gripper/CostFunctions.cpp: In function ‘double psg::ComputeFloorCost(Eigen::RowVector3d, Eigen::RowVector3d, double)’:
/home/pi/Desktop/RL_learning/PassiveGrippers/passive-gripper/include/passive-gripper/CostFunctions.cpp:247:14: warning: suggest parentheses around comparison in operand of ‘!=’ [-Wparentheses]
  247 |   if (p0.y() < floor != p1.y() < floor) {
      |       ~~~~~~~^~~~~~~
/home/pi/Desktop/RL_learning/PassiveGrippers/passive-gripper/include/passive-gripper/CostFunctions.cpp: In lambda function:
/home/pi/Desktop/RL_learning/PassiveGrippers/passive-gripper/include/passive-gripper/CostFunctions.cpp:301:28: warning: comparison of integer expressions of different signedness: ‘size_t’ {aka ‘long unsigned int’} and ‘Eigen::Index’ {aka ‘long int’} [-Wsign-compare]
  301 |       for (size_t j = 0; j < fingers[i].rows() - 1; j++) {
      |                          ~~^~~~~~~~~~~~~~~~~~~~~~~
/home/pi/Desktop/RL_learning/PassiveGrippers/passive-gripper/include/passive-gripper/CostFunctions.cpp: In function ‘double psg::ComputeCost_SP(const psg::GripperParams&, const psg::GripperParams&, const psg::GripperSettings&, const psg::MeshDependentResource&, const psg::CostContext&)’:
/home/pi/Desktop/RL_learning/PassiveGrippers/passive-gripper/include/passive-gripper/CostFunctions.cpp:324:27: warning: comparison of integer expressions of different signedness: ‘long long int’ and ‘std::vector<Eigen::Array<double, 6, 1> >::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
  324 |   for (long long i = 0; i < new_trajectory.size(); i++) {
      |                         ~~^~~~~~~~~~~~~~~~~~~~~~~
/home/pi/Desktop/RL_learning/PassiveGrippers/passive-gripper/include/passive-gripper/CostFunctions.cpp:341:29: warning: comparison of integer expressions of different signedness: ‘long long int’ and ‘size_t’ {aka ‘long unsigned int’} [-Wsign-compare]
  341 |     for (long long i = 0; i < n_trajectory - 1; i++) {
      |                           ~~^~~~~~~~~~~~~~~~~~
/home/pi/Desktop/RL_learning/PassiveGrippers/passive-gripper/include/passive-gripper/CostFunctions.cpp:362:29: warning: comparison of integer expressions of different signedness: ‘long long int’ and ‘size_t’ {aka ‘long unsigned int’} [-Wsign-compare]
  362 |     for (long long i = 0; i < n_trajectory - 1; i++) {
      |                           ~~^~~~~~~~~~~~~~~~~~
/home/pi/Desktop/RL_learning/PassiveGrippers/passive-gripper/include/passive-gripper/CostFunctions.cpp:365:13: warning: comparison of integer expressions of different signedness: ‘long long int’ and ‘size_t’ {aka ‘long unsigned int’} [-Wsign-compare]
  365 |       if (i == n_trajectory - 2) iters++;
      |           ~~^~~~~~~~~~~~~~~~~~~
/home/pi/Desktop/RL_learning/PassiveGrippers/passive-gripper/include/passive-gripper/CostFunctions.cpp:366:31: warning: comparison of integer expressions of different signedness: ‘long long int’ and ‘size_t’ {aka ‘long unsigned int’} [-Wsign-compare]
  366 |       for (long long j = 0; j < iters; j++) {
      |                             ~~^~~~~~~
/home/pi/Desktop/RL_learning/PassiveGrippers/passive-gripper/include/passive-gripper/CostFunctions.cpp:398:28: warning: comparison of integer expressions of different signedness: ‘size_t’ {aka ‘long unsigned int’} and ‘Eigen::Index’ {aka ‘long int’} [-Wsign-compare]
  398 |       for (size_t j = 1; j < fingers[i].rows(); j++) {
      |                          ~~^~~~~~~~~~~~~~~~~~~
/home/pi/Desktop/RL_learning/PassiveGrippers/passive-gripper/include/passive-gripper/CostFunctions.cpp:406:28: warning: comparison of integer expressions of different signedness: ‘size_t’ {aka ‘long unsigned int’} and ‘Eigen::Index’ {aka ‘long int’} [-Wsign-compare]
  406 |       for (size_t j = 1; j < fingers[i].rows(); j++) {
      |                          ~~^~~~~~~~~~~~~~~~~~~
/home/pi/Desktop/RL_learning/PassiveGrippers/passive-gripper/include/passive-gripper/CostFunctions.cpp:410:16: warning: unused variable ‘iters’ [-Wunused-variable]
  410 |         size_t iters = subs;
      |                ^~~~~
/home/pi/Desktop/RL_learning/PassiveGrippers/passive-gripper/include/passive-gripper/CostFunctions.cpp:425:31: warning: comparison of integer expressions of different signedness: ‘long long int’ and ‘std::vector<Eigen::Matrix<double, 3, 1> >::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
  425 |       for (long long j = 0; j < d_fingers.size(); j++) {
      |                             ~~^~~~~~~~~~~~~~~~~~
[ 85%] Building CXX object CMakeFiles/psg-core.dir/include/passive-gripper/GeometryUtils.cpp.o
/home/pi/Desktop/RL_learning/PassiveGrippers/passive-gripper/include/passive-gripper/GeometryUtils.cpp: In function ‘bool psg::ComputeConvexHull(const MatrixXd&, std::vector<long unsigned int>&, std::vector<std::vector<long unsigned int> >&)’:
/home/pi/Desktop/RL_learning/PassiveGrippers/passive-gripper/include/passive-gripper/GeometryUtils.cpp:262:24: warning: comparison of integer expressions of different signedness: ‘size_t’ {aka ‘long unsigned int’} and ‘Eigen::Index’ {aka ‘long int’} [-Wsign-compare]
  262 |   for (size_t i = 0; i < points.rows(); i++) {
      |                      ~~^~~~~~~~~~~~~~~
/home/pi/Desktop/RL_learning/PassiveGrippers/passive-gripper/include/passive-gripper/GeometryUtils.cpp: In function ‘Eigen::Vector3d psg::CenterOfMass(const MatrixXd&, const MatrixXi&)’:
/home/pi/Desktop/RL_learning/PassiveGrippers/passive-gripper/include/passive-gripper/GeometryUtils.cpp:402:24: warning: comparison of integer expressions of different signedness: ‘size_t’ {aka ‘long unsigned int’} and ‘Eigen::Index’ {aka ‘long int’} [-Wsign-compare]
  402 |   for (size_t i = 0; i < F.rows(); i++) {
      |                      ~~^~~~~~~~~~
/home/pi/Desktop/RL_learning/PassiveGrippers/passive-gripper/include/passive-gripper/GeometryUtils.cpp: In function ‘void psg::ComputeConnectivityFrom(const psg::MeshDependentResource&, const Vector3d&, std::vector<double>&, std::vector<int>&)’:
/home/pi/Desktop/RL_learning/PassiveGrippers/passive-gripper/include/passive-gripper/GeometryUtils.cpp:439:24: warning: comparison of integer expressions of different signedness: ‘size_t’ {aka ‘long unsigned int’} and ‘Eigen::Index’ {aka ‘long int’} [-Wsign-compare]
  439 |   for (size_t i = 0; i < mdr.V.rows(); i++) {
      |                      ~~^~~~~~~~~~~~~~
/home/pi/Desktop/RL_learning/PassiveGrippers/passive-gripper/include/passive-gripper/GeometryUtils.cpp:450:24: warning: comparison of integer expressions of different signedness: ‘size_t’ {aka ‘long unsigned int’} and ‘Eigen::Index’ {aka ‘long int’} [-Wsign-compare]
  450 |   for (size_t i = 0; i < mdr.F.rows(); i++) {
      |                      ~~^~~~~~~~~~~~~~
In file included from /home/pi/Desktop/RL_learning/PassiveGrippers/passive-gripper/vcpkg/installed/x64-linux/include/CGAL/Polygon_mesh_processing/remesh.h:20,
                 from /home/pi/Desktop/RL_learning/PassiveGrippers/passive-gripper/include/passive-gripper/GeometryUtils.cpp:7:
/home/pi/Desktop/RL_learning/PassiveGrippers/passive-gripper/vcpkg/installed/x64-linux/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h: In instantiation of ‘void CGAL::Polygon_mesh_processing::internal::Incremental_remesher<PolygonMesh, VertexPointMap, GeomTraits, EdgeIsConstrainedMap, VertexIsConstrainedMap, FacePatchMap, FaceIndexMap>::tangential_relaxation(bool, unsigned int) [with PolygonMesh = CGAL::Polyhedron_3<CGAL::Epick>; VertexPointMap = CGAL::internal::Point_accessor<CGAL::internal::In_place_list_iterator<CGAL::HalfedgeDS_in_place_list_vertex<CGAL::I_Polyhedron_vertex<CGAL::HalfedgeDS_vertex_base<CGAL::HalfedgeDS_list_types<CGAL::Epick, CGAL::I_Polyhedron_derived_items_3<CGAL::Polyhedron_items_3>, std::allocator<int> >, CGAL::Boolean_tag<true>, CGAL::Point_3<CGAL::Epick> > > >, std::allocator<CGAL::HalfedgeDS_in_place_list_vertex<CGAL::I_Polyhedron_vertex<CGAL::HalfedgeDS_vertex_base<CGAL::HalfedgeDS_list_types<CGAL::Epick, CGAL::I_Polyhedron_derived_items_3<CGAL::Polyhedron_items_3>, std::allocator<int> >, CGAL::Boolean_tag<true>, CGAL::Point_3<CGAL::Epick> > > > > >, CGAL::Point_3<CGAL::Epick>, CGAL::Point_3<CGAL::Epick>&, false>; GeomTraits = CGAL::Epick; EdgeIsConstrainedMap = CGAL::Static_boolean_property_map<CGAL::internal::HDS_edge<CGAL::internal::In_place_list_iterator<CGAL::HalfedgeDS_in_place_list_halfedge<CGAL::I_Polyhedron_halfedge<CGAL::HalfedgeDS_halfedge_base<CGAL::HalfedgeDS_list_types<CGAL::Epick, CGAL::I_Polyhedron_derived_items_3<CGAL::Polyhedron_items_3>, std::allocator<int> >, CGAL::Boolean_tag<true>, CGAL::Boolean_tag<true>, CGAL::Boolean_tag<true> > > >, std::allocator<CGAL::HalfedgeDS_in_place_list_halfedge<CGAL::I_Polyhedron_halfedge<CGAL::HalfedgeDS_halfedge_base<CGAL::HalfedgeDS_list_types<CGAL::Epick, CGAL::I_Polyhedron_derived_items_3<CGAL::Polyhedron_items_3>, std::allocator<int> >, CGAL::Boolean_tag<true>, CGAL::Boolean_tag<true>, CGAL::Boolean_tag<true> > > > > > >, false>; VertexIsConstrainedMap = CGAL::Static_boolean_property_map<CGAL::internal::In_place_list_iterator<CGAL::HalfedgeDS_in_place_list_vertex<CGAL::I_Polyhedron_vertex<CGAL::HalfedgeDS_vertex_base<CGAL::HalfedgeDS_list_types<CGAL::Epick, CGAL::I_Polyhedron_derived_items_3<CGAL::Polyhedron_items_3>, std::allocator<int> >, CGAL::Boolean_tag<true>, CGAL::Point_3<CGAL::Epick> > > >, std::allocator<CGAL::HalfedgeDS_in_place_list_vertex<CGAL::I_Polyhedron_vertex<CGAL::HalfedgeDS_vertex_base<CGAL::HalfedgeDS_list_types<CGAL::Epick, CGAL::I_Polyhedron_derived_items_3<CGAL::Polyhedron_items_3>, std::allocator<int> >, CGAL::Boolean_tag<true>, CGAL::Point_3<CGAL::Epick> > > > > >, false>; FacePatchMap = CGAL::Polygon_mesh_processing::internal::Connected_components_pmap<CGAL::Polyhedron_3<CGAL::Epick>, CGAL::internal::Dynamic_property_map<CGAL::internal::In_place_list_iterator<CGAL::HalfedgeDS_in_place_list_face<CGAL::I_Polyhedron_facet<CGAL::HalfedgeDS_face_base<CGAL::HalfedgeDS_list_types<CGAL::Epick, CGAL::I_Polyhedron_derived_items_3<CGAL::Polyhedron_items_3>, std::allocator<int> >, CGAL::Boolean_tag<true>, CGAL::Plane_3<CGAL::Epick> > > >, std::allocator<CGAL::HalfedgeDS_in_place_list_face<CGAL::I_Polyhedron_facet<CGAL::HalfedgeDS_face_base<CGAL::HalfedgeDS_list_types<CGAL::Epick, CGAL::I_Polyhedron_derived_items_3<CGAL::Polyhedron_items_3>, std::allocator<int> >, CGAL::Boolean_tag<true>, CGAL::Plane_3<CGAL::Epick> > > > > >, long unsigned int> >; FaceIndexMap = CGAL::internal::Dynamic_property_map<CGAL::internal::In_place_list_iterator<CGAL::HalfedgeDS_in_place_list_face<CGAL::I_Polyhedron_facet<CGAL::HalfedgeDS_face_base<CGAL::HalfedgeDS_list_types<CGAL::Epick, CGAL::I_Polyhedron_derived_items_3<CGAL::Polyhedron_items_3>, std::allocator<int> >, CGAL::Boolean_tag<true>, CGAL::Plane_3<CGAL::Epick> > > >, std::allocator<CGAL::HalfedgeDS_in_place_list_face<CGAL::I_Polyhedron_facet<CGAL::HalfedgeDS_face_base<CGAL::HalfedgeDS_list_types<CGAL::Epick, CGAL::I_Polyhedron_derived_items_3<CGAL::Polyhedron_items_3>, std::allocator<int> >, CGAL::Boolean_tag<true>, CGAL::Plane_3<CGAL::Epick> > > > > >, long unsigned int>]’:
/home/pi/Desktop/RL_learning/PassiveGrippers/passive-gripper/vcpkg/installed/x64-linux/include/CGAL/Polygon_mesh_processing/remesh.h:324:5:   required from ‘void CGAL::Polygon_mesh_processing::isotropic_remeshing(const FaceRange&, const double&, PolygonMesh&, const NamedParameters&) [with PolygonMesh = CGAL::Polyhedron_3<CGAL::Epick>; FaceRange = CGAL::Iterator_range<CGAL::Prevent_deref<CGAL::internal::In_place_list_iterator<CGAL::HalfedgeDS_in_place_list_face<CGAL::I_Polyhedron_facet<CGAL::HalfedgeDS_face_base<CGAL::HalfedgeDS_list_types<CGAL::Epick, CGAL::I_Polyhedron_derived_items_3<CGAL::Polyhedron_items_3>, std::allocator<int> >, CGAL::Boolean_tag<true>, CGAL::Plane_3<CGAL::Epick> > > >, std::allocator<CGAL::HalfedgeDS_in_place_list_face<CGAL::I_Polyhedron_facet<CGAL::HalfedgeDS_face_base<CGAL::HalfedgeDS_list_types<CGAL::Epick, CGAL::I_Polyhedron_derived_items_3<CGAL::Polyhedron_items_3>, std::allocator<int> >, CGAL::Boolean_tag<true>, CGAL::Plane_3<CGAL::Epick> > > > > > > >; NamedParameters = CGAL::Named_function_parameters<long unsigned int, CGAL::internal_np::number_of_iterations_t, CGAL::internal_np::No_property>]’
/home/pi/Desktop/RL_learning/PassiveGrippers/passive-gripper/include/passive-gripper/GeometryUtils.cpp:230:74:   required from here
/home/pi/Desktop/RL_learning/PassiveGrippers/passive-gripper/vcpkg/installed/x64-linux/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h:1055:65: error: no matching function for call to ‘midpoint(CGAL::Polygon_mesh_processing::internal::Incremental_remesher<CGAL::Polyhedron_3<CGAL::Epick>, CGAL::internal::Point_accessor<CGAL::internal::In_place_list_iterator<CGAL::HalfedgeDS_in_place_list_vertex<CGAL::I_Polyhedron_vertex<CGAL::HalfedgeDS_vertex_base<CGAL::HalfedgeDS_list_types<CGAL::Epick, CGAL::I_Polyhedron_derived_items_3<CGAL::Polyhedron_items_3>, std::allocator<int> >, CGAL::Boolean_tag<true>, CGAL::Point_3<CGAL::Epick> > > >, std::allocator<CGAL::HalfedgeDS_in_place_list_vertex<CGAL::I_Polyhedron_vertex<CGAL::HalfedgeDS_vertex_base<CGAL::HalfedgeDS_list_types<CGAL::Epick, CGAL::I_Polyhedron_derived_items_3<CGAL::Polyhedron_items_3>, std::allocator<int> >, CGAL::Boolean_tag<true>, CGAL::Point_3<CGAL::Epick> > > > > >, CGAL::Point_3<CGAL::Epick>, CGAL::Point_3<CGAL::Epick>&, false>, CGAL::Epick, CGAL::Static_boolean_property_map<CGAL::internal::HDS_edge<CGAL::internal::In_place_list_iterator<CGAL::HalfedgeDS_in_place_list_halfedge<CGAL::I_Polyhedron_halfedge<CGAL::HalfedgeDS_halfedge_base<CGAL::HalfedgeDS_list_types<CGAL::Epick, CGAL::I_Polyhedron_derived_items_3<CGAL::Polyhedron_items_3>, std::allocator<int> >, CGAL::Boolean_tag<true>, CGAL::Boolean_tag<true>, CGAL::Boolean_tag<true> > > >, std::allocator<CGAL::HalfedgeDS_in_place_list_halfedge<CGAL::I_Polyhedron_halfedge<CGAL::HalfedgeDS_halfedge_base<CGAL::HalfedgeDS_list_types<CGAL::Epick, CGAL::I_Polyhedron_derived_items_3<CGAL::Polyhedron_items_3>, std::allocator<int> >, CGAL::Boolean_tag<true>, CGAL::Boolean_tag<true>, CGAL::Boolean_tag<true> > > > > > >, false>, CGAL::Static_boolean_property_map<CGAL::internal::In_place_list_iterator<CGAL::HalfedgeDS_in_place_list_vertex<CGAL::I_Polyhedron_vertex<CGAL::HalfedgeDS_vertex_base<CGAL::HalfedgeDS_list_types<CGAL::Epick, CGAL::I_Polyhedron_derived_items_3<CGAL::Polyhedron_items_3>, std::allocator<int> >, CGAL::Boolean_tag<true>, CGAL::Point_3<CGAL::Epick> > > >, std::allocator<CGAL::HalfedgeDS_in_place_list_vertex<CGAL::I_Polyhedron_vertex<CGAL::HalfedgeDS_vertex_base<CGAL::HalfedgeDS_list_types<CGAL::Epick, CGAL::I_Polyhedron_derived_items_3<CGAL::Polyhedron_items_3>, std::allocator<int> >, CGAL::Boolean_tag<true>, CGAL::Point_3<CGAL::Epick> > > > > >, false>, CGAL::Polygon_mesh_processing::internal::Connected_components_pmap<CGAL::Polyhedron_3<CGAL::Epick>, CGAL::internal::Dynamic_property_map<CGAL::internal::In_place_list_iterator<CGAL::HalfedgeDS_in_place_list_face<CGAL::I_Polyhedron_facet<CGAL::HalfedgeDS_face_base<CGAL::HalfedgeDS_list_types<CGAL::Epick, CGAL::I_Polyhedron_derived_items_3<CGAL::Polyhedron_items_3>, std::allocator<int> >, CGAL::Boolean_tag<true>, CGAL::Plane_3<CGAL::Epick> > > >, std::allocator<CGAL::HalfedgeDS_in_place_list_face<CGAL::I_Polyhedron_facet<CGAL::HalfedgeDS_face_base<CGAL::HalfedgeDS_list_types<CGAL::Epick, CGAL::I_Polyhedron_derived_items_3<CGAL::Polyhedron_items_3>, std::allocator<int> >, CGAL::Boolean_tag<true>, CGAL::Plane_3<CGAL::Epick> > > > > >, long unsigned int> >, CGAL::internal::Dynamic_property_map<CGAL::internal::In_place_list_iterator<CGAL::HalfedgeDS_in_place_list_face<CGAL::I_Polyhedron_facet<CGAL::HalfedgeDS_face_base<CGAL::HalfedgeDS_list_types<CGAL::Epick, CGAL::I_Polyhedron_derived_items_3<CGAL::Polyhedron_items_3>, std::allocator<int> >, CGAL::Boolean_tag<true>, CGAL::Plane_3<CGAL::Epick> > > >, std::allocator<CGAL::HalfedgeDS_in_place_list_face<CGAL::I_Polyhedron_facet<CGAL::HalfedgeDS_face_base<CGAL::HalfedgeDS_list_types<CGAL::Epick, CGAL::I_Polyhedron_derived_items_3<CGAL::Polyhedron_items_3>, std::allocator<int> >, CGAL::Boolean_tag<true>, CGAL::Plane_3<CGAL::Epick> > > > > >, long unsigned int> >::Point, CGAL::Polygon_mesh_processing::internal::Incremental_remesher<CGAL::Polyhedron_3<CGAL::Epick>, CGAL::internal::Point_accessor<CGAL::internal::In_place_list_iterator<CGAL::HalfedgeDS_in_place_list_vertex<CGAL::I_Polyhedron_vertex<CGAL::HalfedgeDS_vertex_base<CGAL::HalfedgeDS_list_types<CGAL::Epick, CGAL::I_Polyhedron_derived_items_3<CGAL::Polyhedron_items_3>, std::allocator<int> >, CGAL::Boolean_tag<true>, CGAL::Point_3<CGAL::Epick> > > >, std::allocator<CGAL::HalfedgeDS_in_place_list_vertex<CGAL::I_Polyhedron_vertex<CGAL::HalfedgeDS_vertex_base<CGAL::HalfedgeDS_list_types<CGAL::Epick, CGAL::I_Polyhedron_derived_items_3<CGAL::Polyhedron_items_3>, std::allocator<int> >, CGAL::Boolean_tag<true>, CGAL::Point_3<CGAL::Epick> > > > > >, CGAL::Point_3<CGAL::Epick>, CGAL::Point_3<CGAL::Epick>&, false>, CGAL::Epick, CGAL::Static_boolean_property_map<CGAL::internal::HDS_edge<CGAL::internal::In_place_list_iterator<CGAL::HalfedgeDS_in_place_list_halfedge<CGAL::I_Polyhedron_halfedge<CGAL::HalfedgeDS_halfedge_base<CGAL::HalfedgeDS_list_types<CGAL::Epick, CGAL::I_Polyhedron_derived_items_3<CGAL::Polyhedron_items_3>, std::allocator<int> >, CGAL::Boolean_tag<true>, CGAL::Boolean_tag<true>, CGAL::Boolean_tag<true> > > >, std::allocator<CGAL::HalfedgeDS_in_place_list_halfedge<CGAL::I_Polyhedron_halfedge<CGAL::HalfedgeDS_halfedge_base<CGAL::HalfedgeDS_list_types<CGAL::Epick, CGAL::I_Polyhedron_derived_items_3<CGAL::Polyhedron_items_3>, std::allocator<int> >, CGAL::Boolean_tag<true>, CGAL::Boolean_tag<true>, CGAL::Boolean_tag<true> > > > > > >, false>, CGAL::Static_boolean_property_map<CGAL::internal::In_place_list_iterator<CGAL::HalfedgeDS_in_place_list_vertex<CGAL::I_Polyhedron_vertex<CGAL::HalfedgeDS_vertex_base<CGAL::HalfedgeDS_list_types<CGAL::Epick, CGAL::I_Polyhedron_derived_items_3<CGAL::Polyhedron_items_3>, std::allocator<int> >, CGAL::Boolean_tag<true>, CGAL::Point_3<CGAL::Epick> > > >, std::allocator<CGAL::HalfedgeDS_in_place_list_vertex<CGAL::I_Polyhedron_vertex<CGAL::HalfedgeDS_vertex_base<CGAL::HalfedgeDS_list_types<CGAL::Epick, CGAL::I_Polyhedron_derived_items_3<CGAL::Polyhedron_items_3>, std::allocator<int> >, CGAL::Boolean_tag<true>, CGAL::Point_3<CGAL::Epick> > > > > >, false>, CGAL::Polygon_mesh_processing::internal::Connected_components_pmap<CGAL::Polyhedron_3<CGAL::Epick>, CGAL::internal::Dynamic_property_map<CGAL::internal::In_place_list_iterator<CGAL::HalfedgeDS_in_place_list_face<CGAL::I_Polyhedron_facet<CGAL::HalfedgeDS_face_base<CGAL::HalfedgeDS_list_types<CGAL::Epick, CGAL::I_Polyhedron_derived_items_3<CGAL::Polyhedron_items_3>, std::allocator<int> >, CGAL::Boolean_tag<true>, CGAL::Plane_3<CGAL::Epick> > > >, std::allocator<CGAL::HalfedgeDS_in_place_list_face<CGAL::I_Polyhedron_facet<CGAL::HalfedgeDS_face_base<CGAL::HalfedgeDS_list_types<CGAL::Epick, CGAL::I_Polyhedron_derived_items_3<CGAL::Polyhedron_items_3>, std::allocator<int> >, CGAL::Boolean_tag<true>, CGAL::Plane_3<CGAL::Epick> > > > > >, long unsigned int> >, CGAL::internal::Dynamic_property_map<CGAL::internal::In_place_list_iterator<CGAL::HalfedgeDS_in_place_list_face<CGAL::I_Polyhedron_facet<CGAL::HalfedgeDS_face_base<CGAL::HalfedgeDS_list_types<CGAL::Epick, CGAL::I_Polyhedron_derived_items_3<CGAL::Polyhedron_items_3>, std::allocator<int> >, CGAL::Boolean_tag<true>, CGAL::Plane_3<CGAL::Epick> > > >, std::allocator<CGAL::HalfedgeDS_in_place_list_face<CGAL::I_Polyhedron_facet<CGAL::HalfedgeDS_face_base<CGAL::HalfedgeDS_list_types<CGAL::Epick, CGAL::I_Polyhedron_derived_items_3<CGAL::Polyhedron_items_3>, std::allocator<int> >, CGAL::Boolean_tag<true>, CGAL::Plane_3<CGAL::Epick> > > > > >, long unsigned int> >::Point)’
 1055 |                 barycenters.push_back( VNP(v, vn, CGAL::midpoint(midpoint(border_halfedges[0]),
      |                                                   ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 1056 |                                                                  midpoint(border_halfedges[1]))) );
      |                                                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

I think the main problem is that CGAL doesn't match your project.

My CGAL is 5.4.1
I ran your code in ubuntu20.04

TYpeError when using topy

I generated the tpd file and use the topy to process it. But it keeps throwing the error:

python scripts/optimise.py /mnt/study/mengjun/end-effector/passive-gripper/build/test1

ToPy problem definition (TPD) file successfully parsed.
TPD file name: /mnt/study/mengjun/end-effector/passive-gripper/build/test1 (v2007)

Domain discretisation (NUM_ELEM_X x NUM_ELEM_Y x NUM_ELEM_Z) = 60 x 77 x 66
Element type (ELEM_K) = H8
Filter radius (FILT_RAD) = 1.8
Number of iterations (NUM_ITER) = 50
Problem type (PROB_TYPE) = comp
Problem name (PROB_NAME) = test1
Damping factor (ETA) = 0.40
Passive elements (PASV_ELEM) specified
No active elements (ACTV_ELEM) specified

Iter | Obj. func. | Vol. | Change | P_FAC | Q_FAC | Ave ETA | S-V frac.

ToPy: Solution for FEA converged after 537 iterations.
Traceback (most recent call last):
File "scripts/optimise.py", line 20, in
optimise(argv[1])
File "scripts/optimise.py", line 16, in optimise
topy.optimise(t)
File "/home/niux/anaconda3/envs/topy/lib/python2.7/site-packages/topy/optimisation.py", line 67, in optimise
_optimise(topology)
File "/home/niux/anaconda3/envs/topy/lib/python2.7/site-packages/topy/optimisation.py", line 23, in _optimise
t.update_desvars_oc()
File "/home/niux/anaconda3/envs/topy/lib/python2.7/site-packages/topy/topology.py", line 535, in update_desvars_oc
pasv = np.take(idx, self.pasv) # new indices
File "/home/niux/anaconda3/envs/topy/lib/python2.7/site-packages/numpy/core/fromnumeric.py", line 189, in take
return _wrapfunc(a, 'take', indices, axis=axis, out=out, mode=mode)
File "/home/niux/anaconda3/envs/topy/lib/python2.7/site-packages/numpy/core/fromnumeric.py", line 66, in _wrapfunc
return _wrapit(obj, method, *args, **kwds)
File "/home/niux/anaconda3/envs/topy/lib/python2.7/site-packages/numpy/core/fromnumeric.py", line 46, in _wrapit
result = getattr(asarray(obj), method)(*args, **kwds)
TypeError: Cannot cast array data from dtype('float64') to dtype('int64') according to the rule 'safe'

bin file

After topology optimization, a .bin file should be generated. Staying on the "Topo Opt" tool, click on "Load Result Bin" and browse to the .bin file. AFter I run the topy, just generate vtk file while no .bin file. I manually convert vtk to bin, but it keeps give me error!!!

GtkDialog mapped without a transient parent. This is discouraged.
passive-gripper: /mnt/study/mengjun/end-effector/passive-gripper/external/libigl/external/eigen/Eigen/src/Core/PlainObjectBase.h:285: void Eigen::PlainObjectBase::resize(Eigen::Index, Eigen::Index) [with Derived = Eigen::Matrix<double, -1, 1>; Eigen::Index = long int]: Assertion `(!(RowsAtCompileTime!=Dynamic) || (rows==RowsAtCompileTime)) && (!(ColsAtCompileTime!=Dynamic) || (cols==ColsAtCompileTime)) && (!(RowsAtCompileTime==Dynamic && MaxRowsAtCompileTime!=Dynamic) || (rows<=MaxRowsAtCompileTime)) && (!(ColsAtCompileTime==Dynamic && MaxColsAtCompileTime!=Dynamic) || (cols<=MaxColsAtCompileTime)) && rows>=0 && cols>=0 && "Invalid sizes when resizing a matrix or array."' failed.
Aborted (core dumped)

Additional dependancies

It seems I also need to run
vcpkg install boost

Please let me know if there are other dependencies to run this code from a bare windows container

Importing stl and transforming the mesh is slow

I am facing the issue that importing an stl file and transforming the imported mesh is really slow. (as well as other operations, which require lots of computations).
For example, when I try to import the example stl file A4.stl, which has only 5KB, it takes around 40min until the mesh is fully imported.
Furthermore, CPU is constantly at 100% and the application window says that there is no response.

I am using:
Windows
Intel i7-11800H
32 GB RAM

I also tried it with a much better PC (Windows, 32 core CPU and 128 GB RAM) and it still takes ~40mins to import the file.

My questions:
Have you faced similar issues or is it normal that this takes so long?
For which computers is the application designed?

Passive-gripper-noResponse

Size error

Hello, no matter what stl file I imported, whether the millimeter check box checked or not, it keeps giving me the error:

GtkDialog mapped without a transient parent. This is discouraged.
passive-gripper: passive-gripper/external/libigl/external/eigen/Eigen/src/Core/PlainObjectBase.h:285: void Eigen::PlainObjectBase::resize(Eigen::Index, Eigen::Index) [with Derived = Eigen::Matrix<double, 3, 1>; Eigen::Index = long int]: Assertion `(!(RowsAtCompileTime!=Dynamic) || (rows==RowsAtCompileTime)) && (!(ColsAtCompileTime!=Dynamic) || (cols==ColsAtCompileTime)) && (!(RowsAtCompileTime==Dynamic && MaxRowsAtCompileTime!=Dynamic) || (rows<=MaxRowsAtCompileTime)) && (!(ColsAtCompileTime==Dynamic && MaxColsAtCompileTime!=Dynamic) || (cols<=MaxColsAtCompileTime)) && rows>=0 && cols>=0 && "Invalid sizes when resizing a matrix or array."' failed.
Aborted (core dumped)

DO you have any idea or suggestions? Thank you very much

cmake error

cmake --build -j . when I run this line, it shows no this instruction. So I changed to cmake --build . But it keeps giving me an error:
when 100%:
/end-effector/passive-gripper/src-batch/main.cpp:7:10: fatal error: filesystem: No such file or directory
#include
^~~~~~~~~~~~
compilation terminated.
CMakeFiles/psg-batch.dir/build.make:107: recipe for target 'CMakeFiles/psg-batch.dir/src-batch/main.cpp.o' failed
make[2]: *** [CMakeFiles/psg-batch.dir/src-batch/main.cpp.o] Error 1
CMakeFiles/Makefile2:557: recipe for target 'CMakeFiles/psg-batch.dir/all' failed
make[1]: *** [CMakeFiles/psg-batch.dir/all] Error 2
Makefile:170: recipe for target 'all' failed
make: *** [all] Error 2

Could you provide any suggestions to solve it? Thanks very much!!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.