内容描述:
作者最近入坑无人机探索相关的内容研究,之前搞过一个RACER的环境配置教学,那个是多无人机的一个方案,而且RACER的多机是基于FUEL的单机探索实现的。为此,本人决定先从FUEL入手,下载了github上的开源代码,但是代码是以Ubuntu16.04、18.04编写的,其中PCL库、nlopt库在Ubuntu20.04下都会报错。
本文记录了我在Ubuntu20.04环境下,编译该代码以及解决error的过程,仅供需要的朋友参考。RACER多机探索的代码Ubuntu20.04编译写在这里啦。
RACER环境配置https://blog.csdn.net/weixin_65657501/article/details/138961685
扩展库下载:
这里需要额外下载的库是nlopt库。
github上给出的是直接(别用这句)
sudo apt-get install libarmadillo-dev ros-melodic-nlopt
这里有的人想直接把melodic 改为noetic就好啦,但是经过实践验证ros-noetic-nlopt与这个代码并不适配,大概率报错。
这里的nlopt库下载采用源代码下载的方式,具体可以参考我下面的这篇在fastplanner中解决nlopt缺失的文章。
Nlopt缺失问题解决https://blog.csdn.net/weixin_65657501/article/details/134938329
在安装完成nlopt库后,运行一下这一句,有的人可能没有下载这个库:
sudo apt-get install libarmadillo-dev
到这里,你的库文件就都安装好啦,接下来就是下载代码修改一下配置文件啦。
这里给提供一下我修改后的代码,你只要保证安装好以上库,就可以直接编译啦。鉴于CSDN不能直接放文件,想要的直接评论或私信吧。
建议按照过程走一遍吧。
代码下载与配置:
在自己的工作空间内,创建一个FUEL的工作空间吗,下载代码
mkdir -p FUEL_ws/src
cd FUEL/src
git clone git@github.com:HKUST-Aerial-Robotics/FUEL.git
或者直接下载压缩包,将下图所示文件放在src下。
这里在FUEL_ws下进行编译catkin_make,会出现如下报错:
这里的原因在于,代码中是引用的ros下的nlopt,而我们的版本里并没有这个库,因此需要将配置文件修改为寻找我们的源代码下载的库,具体方法为:
将bspline_opt的CMakeLists修改,使得bspline_opt不在去调用ros-noetic-nlopt,代码附上如下:
cmake_minimum_required(VERSION 2.8.3)
project(bspline_opt)
set(CMAKE_CXX_STANDARD 14)
find_package(NLopt REQUIRED)
set(NLopt_INCLUDE_DIRS ${NLOPT_INCLUDE_DIR})
set(CMAKE_BUILD_TYPE "Release")
set(CMAKE_CXX_FLAGS "-std=c++11")
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -Wall")
find_package(Eigen3 REQUIRED)
find_package(PCL 1.7 REQUIRED)
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
visualization_msgs
active_perception
cv_bridge
plan_env
)
catkin_package(
INCLUDE_DIRS include
LIBRARIES bspline_opt
CATKIN_DEPENDS plan_env active_perception
# DEPENDS system_lib
)
include_directories(
SYSTEM
include
${catkin_INCLUDE_DIRS}
${Eigen3_INCLUDE_DIRS}
${PCL_INCLUDE_DIRS}
${NLOPT_INCLUDE_DIR}
)
add_library( bspline_opt
src/bspline_optimizer.cpp
)
target_link_libraries( bspline_opt
${catkin_LIBRARIES}
${NLOPT_LIBRARIES}
# /usr/local/lib/libnlopt.so
)
随后编译会遇到这是catkin_make会遇到PCL报错,因为20.04需要用到c++14,在涉及报错的bag中的CMakeLists文件中加入
set(CMAKE_CXX_STANDARD 14)
这里需要对所有bag里的都加入一遍,你可以根据自己的报错再去找位置加。
这样修改之后,再次进行catkin_make,则编译成功:
运行效果:
在编译完成后,运行一下代码提供的demo文件。
运行如下代码:
source devel/setup.bash && roslaunch exploration_manager rviz.launch
source devel/setup.bash && roslaunch exploration_manager exploration.launch
得到初始化地图下图:
运行后,可能出现如下报错
需要去Fast-Planner/uav_simulator/Utils/odom_visualization/src/odom_visualization.cpp中把/world前面的/去掉,ubuntu20.04对/敏感。
这个问题的解决方法参考fastplanner代码去除bug的文章。深入解读Fast-Planner算法看这一篇就够!(含Ubuntu20.04 + Ros noetic 环境下 Fast-planner 算法仿真环境的配置与真机效果演示。)
进一步要到/Fast-Planner/fast_planner/path_searching/src/kinodynamic_astar.cpp里搜KinodynamicAstar::timeToIndex函数,可以看到函数返回值是int,但是函数体没有return,修改完如下:
int KinodynamicAstar::timeToIndex(double time)
{
int idx = floor((time - time_origin_) * inv_time_resolution_);
return idx;
}
解决以上两个问题后,在rviz中通过2D goal进行触发后,无人机开始环境探索。
先赞后看养成习惯,阿尼亚!
后续继续更新代码解读。