简介
FCL是一个用于碰撞检测和碰撞可能性估计的开源库,经常和SLAM中的八叉树地图Octomap一起在路径规划中使用。
下载
FCL官网提供了多种下载的方式,第一种是下载ros中的FCL库,但是fuerte对应的是Ubuntu12.04,而我尝试着下载melodic版本的FCL,却被告知没有找到软件源。因此建议使用第二种方式,也即在github上下载。github的地址:https://github.com/flexible-collision-library/fcl
值得注意的是,github网站上有FCL库的多个版本,从0.3.0到0.7.0,而从0.6.0开始FCL的开发者对FCL库的目录、代码等都做了修改,导致有点面目全非。有些路径规划的源代码用的就是FCL库的历史版本,如果使用新版本编译,就会报错,诸如头文件目录不对、函数参数列表不正确等等的错误。
如果想要下载历史版本,可以点击网页右边的releases,进去后选择历史版本的assets,便可以下载zip或者tar.gz的压缩包。如下图:
目前FCL库的历史版本只能下载压缩包,无法使用git clone -b version来下载。如果想下载最新版本,则直接键入:
git clone https://github.com/flexible-collision-library/fcl.git
安装
FCL库的安装步骤较为简单,只需执行以下步骤:
cd fcl
mkdir build
cd build
cmake ..
make
sudo make install
最后一步值得注意,它会把FCL的静态库文件放到usr文件夹中。
链接FCL库
主要是CMakeLists.txt中的引用比较麻烦。一开始以为按部就班三部曲:find_package、include_directories、target_link_libraries即可。但是在生成可执行文件时,总是报“xx函数未定义的引用”的错。网上也说了这是识别不了函数实现的cpp文件的原因。但是具体怎么写还是不清楚。最后摸索出来只需要多一步link_libraries,直接给编译器指定静态库绝对路径。因此FCL库的引用如下:
find_package(FCL REQUIRED)
include_directories(${FCL_INCLUDE_DIRS})
link_libraries("/usr/local/lib/libfcl.so.0.5.0" "/usr/local/lib/libfcl.so.7" "/usr/local/lib/libfcl.so")
这里指定了绝对路径后target_link_libraries中可以不用写。link_libraries中的路径可以在刚才执行sudo make install时看到:
至此FCL库链接完毕。