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

ros-noetic-teb-local-planner does not build #266

Open
muellerbernd opened this issue Jun 2, 2023 · 7 comments
Open

ros-noetic-teb-local-planner does not build #266

muellerbernd opened this issue Jun 2, 2023 · 7 comments

Comments

@muellerbernd
Copy link
Contributor

Hello. I am currently trying to convert my Archlinux ros noetic setup into the nix world. Everything works fine but I don't get the teb-local-planner to work. On Arch everything works fine.
When I build the teb-local-planner it crashes with the following error:

> CMake Error at cmake_modules/FindSUITESPARSE.cmake:131 (MESSAGE):
>   Unable to find SuiteSparse
> Call Stack (most recent call first):
>   CMakeLists.txt:35 (find_package)

As far as I know Suitesparse is a dependency of g2o, which gets build with the ros-noetic-libg2o package, which itself is already a dependency of teb-local-planner.
You can reproduce my setup with the config given in my fork of this package.

@wentasah
Copy link
Contributor

wentasah commented Jun 2, 2023

Hi! There seems to be at least two problems.

First, teb-local-planner doesn't declare dependency on suitesparse in package.xml and therefore, the dependency is missing also in .nix files.

Second, even if the dependency is added manually to the .nix files, cmake in teb-local-planner does not find it. I guess this is because teb-local-planner hardcodes locations where to search for the library and this does not work for nix. I guess the referenced file would have to be patched to work with Nix.

Unfortunately, I won't have time for it in the upcoming days.

@muellerbernd
Copy link
Contributor Author

muellerbernd commented Jun 2, 2023

@wentasah could you give me a hint on how this should look like?
edit: suitesparse is a dependency of libg2o

@wentasah
Copy link
Contributor

wentasah commented Jun 2, 2023

Usually the FindXXX.cmake files allow to specify the location of the library via some variable, e.g., SUITESPARSE_ROOT. It doesn't work here, because the file uses FIND_PATH instead of FIND_LIBRARY to find the libraries. But I've found a hack to find it even without modification:

diff --git a/distros/noetic/teb-local-planner/default.nix b/distros/noetic/teb-local-planner/default.nix
index e61d2dc3a..37c1711b3 100644
--- a/distros/noetic/teb-local-planner/default.nix
+++ b/distros/noetic/teb-local-planner/default.nix
@@ -4,3 +4,3 @@
 
-{ lib, buildRosPackage, fetchurl, base-local-planner, catkin, cmake-modules, costmap-2d, costmap-converter, dynamic-reconfigure, geometry-msgs, interactive-markers, libg2o, mbf-costmap-core, mbf-msgs, message-generation, message-runtime, nav-core, nav-msgs, pluginlib, roscpp, std-msgs, tf2, tf2-eigen, tf2-geometry-msgs, tf2-ros, visualization-msgs }:
+{ lib, buildRosPackage, fetchurl, base-local-planner, catkin, cmake-modules, costmap-2d, costmap-converter, dynamic-reconfigure, geometry-msgs, interactive-markers, libg2o, mbf-costmap-core, mbf-msgs, message-generation, message-runtime, nav-core, nav-msgs, pluginlib, roscpp, std-msgs, tf2, tf2-eigen, tf2-geometry-msgs, tf2-ros, visualization-msgs, suitesparse }:
 buildRosPackage {
@@ -16,5 +16,8 @@ buildRosPackage {
   buildType = "catkin";
-  buildInputs = [ catkin cmake-modules message-generation tf2-eigen tf2-geometry-msgs ];
+  buildInputs = [ catkin cmake-modules message-generation tf2-eigen tf2-geometry-msgs suitesparse ];
   propagatedBuildInputs = [ base-local-planner costmap-2d costmap-converter dynamic-reconfigure geometry-msgs interactive-markers libg2o mbf-costmap-core mbf-msgs message-runtime nav-core nav-msgs pluginlib roscpp std-msgs tf2 tf2-ros visualization-msgs ];
   nativeBuildInputs = [ catkin ];
+  cmakeFlags = [
+    "-DCMAKE_INCLUDE_PATH=${suitesparse}/lib"
+  ];
 

If you do this, you end up with another problem:

-- Searching for g2o ...
-- Found g2o headers in: /nix/store/9dwfgpbqh35whq5fpjx9d64lk21hp61p-ros-noetic-libg2o-2020.5.3-r1/include/g2o
CMake Error at cmake_modules/FindG2O.cmake:85 (message):
  Could not find libg2o!
Call Stack (most recent call first):
  CMakeLists.txt:36 (find_package)

g2o is available, as can be seen from found headers, but two if its several libraries are missing.

@wentasah
Copy link
Contributor

wentasah commented Jun 2, 2023

The above problem can be solved by adding openblas as libg2o build input:

diff --git a/distros/noetic/libg2o/default.nix b/distros/noetic/libg2o/default.nix
index 03ab711b1..8ff4b572d 100644
--- a/distros/noetic/libg2o/default.nix
+++ b/distros/noetic/libg2o/default.nix
@@ -4,3 +4,3 @@
 
-{ lib, buildRosPackage, fetchurl, boost, catkin, cmake, eigen, libGL, libGLU, suitesparse }:
+{ lib, buildRosPackage, fetchurl, boost, catkin, cmake, eigen, libGL, libGLU, suitesparse, openblas }:
 buildRosPackage {
@@ -17,3 +17,3 @@ buildRosPackage {
   buildInputs = [ cmake ];
-  propagatedBuildInputs = [ boost catkin eigen libGL libGLU suitesparse ];
+  propagatedBuildInputs = [ boost catkin eigen libGL libGLU suitesparse openblas ];
   nativeBuildInputs = [ cmake ];
diff --git a/distros/noetic/teb-local-planner/default.nix b/distros/noetic/teb-local-planner/default.nix
index e61d2dc3a..37c1711b3 100644
--- a/distros/noetic/teb-local-planner/default.nix
+++ b/distros/noetic/teb-local-planner/default.nix
@@ -4,3 +4,3 @@
 
-{ lib, buildRosPackage, fetchurl, base-local-planner, catkin, cmake-modules, costmap-2d, costmap-converter, dynamic-reconfigure, geometry-msgs, interactive-markers, libg2o, mbf-costmap-core, mbf-msgs, message-generation, message-runtime, nav-core, nav-msgs, pluginlib, roscpp, std-msgs, tf2, tf2-eigen, tf2-geometry-msgs, tf2-ros, visualization-msgs }:
+{ lib, buildRosPackage, fetchurl, base-local-planner, catkin, cmake-modules, costmap-2d, costmap-converter, dynamic-reconfigure, geometry-msgs, interactive-markers, libg2o, mbf-costmap-core, mbf-msgs, message-generation, message-runtime, nav-core, nav-msgs, pluginlib, roscpp, std-msgs, tf2, tf2-eigen, tf2-geometry-msgs, tf2-ros, visualization-msgs, suitesparse }:
 buildRosPackage {
@@ -16,5 +16,8 @@ buildRosPackage {
   buildType = "catkin";
-  buildInputs = [ catkin cmake-modules message-generation tf2-eigen tf2-geometry-msgs ];
+  buildInputs = [ catkin cmake-modules message-generation tf2-eigen tf2-geometry-msgs suitesparse ];
   propagatedBuildInputs = [ base-local-planner costmap-2d costmap-converter dynamic-reconfigure geometry-msgs interactive-markers libg2o mbf-costmap-core mbf-msgs message-runtime nav-core nav-msgs pluginlib roscpp std-msgs tf2 tf2-ros visualization-msgs ];
   nativeBuildInputs = [ catkin ];
+  cmakeFlags = [
+    "-DCMAKE_INCLUDE_PATH=${suitesparse}/lib"
+  ];

Then it compiles, but the final link fails with:

/nix/store/22p5nv7fbxhm06mfkwwnibv1nsz06x4b-binutils-2.40/bin/ld: devel/lib/libteb_local_planner.so: undefined reference to `int boost::math::sign<double>(double const&)'

@muellerbernd
Copy link
Contributor Author

nice thanks. For that problem I already have a patch because I had the same problem on arch.

diff --color -Naur teb_local_planner-release-release-noetic-teb_local_planner/include/teb_local_planner/h_signature.h teb_local_planner-release-release-noetic-teb_local_planner_new/include/teb_local_planner/h_signature.h
--- A/include/teb_local_planner/h_signature.h   2020-05-29 18:12:46.000000000 +0200
+++ B/include/teb_local_planner/h_signature.h   2023-01-20 19:56:56.259209108 +0100
@@ -51,6 +51,7 @@
 #include <functional>
 #include <vector>
 #include <iterator>
+#include <boost/math/special_functions/sign.hpp>


 namespace teb_local_planner

@muellerbernd
Copy link
Contributor Author

It now compiles and everything seems to work fine. I am running a Simulation and the simulated robot uses teb as local planner. Pathplanning works and the interaction with move_base also works. Huge thanks @wentasah

@kjeremy
Copy link
Contributor

kjeremy commented Jun 5, 2023

Can you file an issue upstream at https://github.com/rst-tu-dortmund/teb_local_planner

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants