bebop_autonomy icon indicating copy to clipboard operation
bebop_autonomy copied to clipboard

CMake install rules

Open adynathos opened this issue 7 years ago • 6 comments

Added rules to copy files necessary for running the module with "make install".

I need to put the module in a Docker container and therefore determine the files that need to be copied.

adynathos avatar Sep 07 '16 16:09 adynathos

Thanks for the PR. Could you please rebase your changes on top of the new changes in indigo-devel and also make sure that all CI tests are green?

mani-monaj avatar Oct 02 '16 01:10 mani-monaj

Thank you for your reply, the rebase is now ready.

adynathos avatar Oct 02 '16 09:10 adynathos

@adynathos Would it be possible to modify/rebase your changes on top of the current indigo-devel. The driver now does not build the SDK inline anymore: #75

mani-monaj avatar Nov 03 '16 06:11 mani-monaj

Ok so I have updated it to remove the references to ARSDK binaries.

But when I did catkin_make install and copied the relevant directories to a docker container, the program failed to launch, complaining that it can't load libarcontroller.so, which is obviously false, because the parrot_arsdk package was installed with apt-get.

[ERROR] [1479314212.605687907]: Failed to load nodelet [/bebop/bebop_driver] of type [bebop_driver/BebopDriverNodelet] even after refreshing the cache: Failed to load library /opt/ros/kinetic/lib//libbebop_driver_nodelet.so. Make sure that you are calling the PLUGINLIB_EXPORT_CLASS macro in the library code, and that names are consistent between this macro and your XML. Error string: Could not load library (Poco exception = libarcontroller.so: cannot open shared object file: No such file or directory)
ros_1 | [ERROR] [1479314212.605731564]: The error before refreshing the cache was: Failed to load library /opt/ros/kinetic/lib//libbebop_driver_nodelet.so. Make sure that you are calling the PLUGINLIB_EXPORT_CLASS macro in the library code, and that names are consistent between this macro and your XML. Error string: Could not load library (Poco exception = libarcontroller.so: cannot open shared object file: No such file or directory)
ros_1 | [FATAL] [1479314212.605768290]: bebop_driver nodelet failed to load.

I solved this by symlinking all .so from /opt/ros/kinetic/lib/parrot_arsdk to /opt/ros/kinetic/lib in my container. When the symlinks are in /opt/ros/kinetic/lib it can find the libraries. I am not experienced with ROS library discovery mechanism to know why that is.

adynathos avatar Nov 16 '16 16:11 adynathos

@adynathos

Thanks for rebasing your changes and your efforts on debugging it.

The problem might be on my side since the install rules for ardronelib (as you correctly figured out) install the shared libraries into a sub-folder of /opt/ros/kinetic/lib. The main rationale behind that decision was not to pollute the default ROS libraries folder with custom libcurl and liblibressl that is compiled as part of arsdk. I will look into this issue more this weekend.

mani-monaj avatar Dec 07 '16 04:12 mani-monaj

@adynathos I think I've found a workaround for runtime discovery of parrot_arsdk libraries:

https://github.com/AutonomyLab/bebop_autonomy/commit/aef8a5d7127a59298668343942cfbebc84ec5330

Could you please test this solution? The change is applied on top of your proposed changes in the following branch:

https://github.com/AutonomyLab/bebop_autonomy/tree/adynathos-indigo-devel

Could you also please clarify what the commit 0464832c29f8cb1ccd1c77d6863c429b8e7a71b4 does?

mani-monaj avatar Dec 29 '16 23:12 mani-monaj