源码链接:
https://github.com/USE-jx/NMPC_CASADI_CPP?tab=readme-ov-file
#这是NMPC的 里面有Fast-Planner,但编译可能缺少东西,所以再放一个Fast-Planner的,可以装装缺少的库
https://github.com/HKUST-Aerial-Robotics/Fast-Planner #这是Fast-Planner的代码
简洁一下:第一个链接到代码是别人添加了模块的,包含自己搭建的Gazebo环境+小车,以及NMPC控制和局部规划。第二个项目是FastPlanner本身项目,第一个里也包含。
下面配置第一个:
sudo apt-get install ros-noetic-tf2-sensor-msgs
sudo apt-get install libarmadillo-dev
sudo apt-get install libarmadillo-dev ros-noetic-nlopt(这里不建议用ros的nlopt,使用C++源码编译的)
sudo apt-get install ros-noetic-openslam-gmapping
先删除mpc_tracking模块编译,不然显示确实bspline库,等Fast-planner编译完后在编译MPC模块
源码安装casadi求解器:
git clone https://github.com/casadi/casadi
安装必要的库: sudo apt-get install gcc g++ gfortran git cmake liblapack-dev pkg-config --install-recommends
cd casadi
mkdir build
cd build
cmake .. -DWITH_IPOPT=ON -DWITH_EXAMPLES=OFF
make -j4
sudo make install
make时候报错 没有makefile,发现上一步 cmake … -DWITH_IPOPT=ON -DWITH_EXAMPLES=OFF报错:
Could NOT find Ipopt (missing: Ipopt_DIR),于是其安装Ipopt
安装后再次 cd build 执行cmake … -DWITH_IPOPT=ON -DWITH_EXAMPLES=OFF 若还有错,从上下载casadi的zip,再cd casadi
- 解决EIGEN头文件报错:
在mpc_tracking的CmakeList.txt里添加 find_package(Eigen3 REQUIRED)
${EIGEN3_INCLUDE_DIRS} 注意大小写一致
- 显示找不到bspline报错
注意Fast-Planner里面文件夹结构,这两个文件夹里面才是ros的pkg,发现fast-planner里有bspline包,于是先单独编译bspline包,然后单独编译fast-planner里的每个包:因为依赖关系。总之:要在mpc_tracking包编译之前,把Fast-Planner里所有的包都编译了
- 编译bspine-opt包时,显示找不到nlopt路径,但之前sudo apt-get install libarmadillo-dev ros-noetic-nlopt(这里不建议用ros的nlopt,使用C++源码编译的)我下载了,不使用ROS自带的nlopt库 下载sudo apt-get install libnlopt-dev 后编译成功。
他还是显示找不到nlop.hpp,我直接在opt/ros/noetic/include/nlopt下,用全局路径写到cpp里