This project is intended to install and use NLP Ipopt in the ubuntu ros environment. The programming language is C++ and VSCode. After this, you can run the official example in /Ipopt/examples/hs071_cpp.
-
Getting System Packages (Compilers,...)
sudo apt-get install gcc g++ gfortran git patch wget pkg-config liblapack-dev libmetis-dev -
DownLoad BLAS and LAPACK
sudo apt-get install libblas-dev liblapack-dev -
DownLoad HSL
- Go to http://hsl.rl.ac.uk/ipopt.
- Register and login, choose to order 'HSL Academic Licence', after one working day, you will receive a download link in your email.
- Download 'coinhsl-2023.05.26.zip' (only 1MB). And extract. Change the folder name as
coinhsl. Now in my PC, the path isboren@boren:~/Downloads$. -
Please pay attention! Please change the path
mkdir ThirdParty mv coinhsl ThirdParty/ mkdir ThirdParty/coinhsl/build sudo apt-get install meson cd ThirdParty/coinhsl/build/home/borento your own account name for the following code.meson setup --buildtype=release --prefix=/home/boren/Downloads/ThirdParty/ .. ninja ninja install cd ~/Downloads/ThirdParty ls # After this, ThirdParty should has other two folders as 'include' and 'lib'. - Move HSL files (header files .h and library .so) to
usr/local, one is include_directories asusr/local/include, another is target_link_directoriesusr/local/lib. Please pay attention to these two paths where our Ipopt will also be installed.Now in the 'include_directories'sudo mv lib/x86_64-linux-gnu/libcoinhsl.so /usr/local/lib cd ~/Downloads/ThirdParty sudo mv include hsl # change hsl header folder name to 'hsl' sudo mv hsl /usr/local/include # move hsl header files to /usr/local/include/ cd /usr/local/lib sudo mv libcoinhsl.so libhsl.so # the Ipopt find hsl library named 'libhsl.so', so change the name./usr/local/include, you will see folder namedhslcontaining hsl header files, and in 'target_link_directories'/usr/local/lib, you will seelibhsl.sofile. We will costumize CMakeLists.txt according these two paths later.
- Install Ipopt
Now in 'include_directories'
cd ~/Downloads git clone https://github.com/coin-or/Ipopt.git cd Ipopt mkdir build ./configure make make test sudo make install/usr/local/includeyou can seecoin-orfolder, which contains the header files of Ipopt, and 'target_link_directories'/usr/local/lib, you can see Ipopt library files.
-
Build ros working space. In the path you like, in my case is home path, build ros work space (Please refer to Build ROS WorkSpace, from section 1 to 4.
-
Copy examples. Copy examples in
/home/boren/Ipopt/examples/(hs071_main.cpp,hs071_nlp.cpp,hs071_nlp.hpp), to ros packages src, in my case isopt_ws/src/opt_pack/src, where 'op_ws' is ros working space and 'opt_pack' is ros package. -
CMakeLists.txt. Add following codes to CMakeList.txt
include_directories( ${catkin_INCLUDE_DIRS} "/usr/local/include/coin-or" ) add_executable(OPT src/hs071_main.cpp src/hs071_nlp.cpp) target_link_libraries(OPT ${catkin_LIBRARIES} "/usr/local/lib/libipopt.so" )In VSCode terminal,
source ./devel/setup.bash echo $LD_LIBRARY_PATH export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH -
Finally,
Ctrl + Shift + Bcompile the package, and you can runrosrun opt_pack OPTVSCode terminal and see the results. -
In VSCode, you may see red wavy underline for
#include "IpIpoptApplication.hpp".etc, in this case, simply write as#include "coin-or/IpIpoptApplication.hpp"will be fine.