aloam学习笔记(一)

开始学习aloam框架,记录一下最开始运行aloam中出现的各种问题以及解决方式。

1.aloam地址

GitHub - HKUST-Aerial-Robotics/A-LOAM: Advanced implementation of LOAM

2.安装aloam的一些依赖

主要是两个ceres和pcl库

2.1安装ceres

ceres官方地址:Installation — Ceres Solver

ceres库地址:https://ceres-solver.googlesource.com/ceres-solver

在ceres库地址中选择自己想要的版本,我最开始选的是默认的版本,是最新的2.1.0。然后发现carkin_make的时候报错误,再网上一搜显示是说ceres版本太新了,有一些依赖项目没有更新。最后只好删除了2.1.0版本,重新安装了2.0.0版本。这里有几个点需要注意一下:

一、ceres的安装步骤:

tar zxf ceres-solver-2.1.0.tar.gz
mkdir ceres-bin
cd ceres-bin
cmake ../ceres-solver-2.0.0
make -j4
make test
# Optionally install Ceres, it can also be exported using CMake which
# allows Ceres to be used without requiring installation, see the documentation
# for the EXPORT_BUILD_DIR option for more information.
make install

源码安装,最好单独设立一个文件夹,里面全部是第三方源码库的安装文件。值得注意的是,当敲下最后一行命令:

sudo make install

在系统路径:/usr/local/include中就会出现ceres的库文件。表明ceres安装到系统中去了,之后在调用ceres的时候,find_package就会在系统的路径中搜索ceres库文件。

二、关于查找ceres的版本

查找ceres的版本就只需要在安装ceres源码版本的文件ceres-solver-2.0.0中打开package.xml文件里面有现实安装的版本号:
aloam学习笔记(一)_第1张图片

三、删除ceres

因为最开始下载安装的是最新版本的ceres,不能够运行aloam,所以需要安装之前版本的软件。这里就需要进行删除之前下载安装的版本。
ceres库的头文件安装在"/usr/local/include/ceres/"目录下,库文件安装在"/usr/local/lib/"目录,所以删除了这两个文件夹下的CERES文件就行了,具体命令如下:

sudo rm -rf /usr/local/include/ceres /usr/local/lib/libceres.a

关于ceres值得注意的部分就是这些。

2.2安装pcl

因为有ros,所以之前就安装了pcl。因为是ubuntu18.04,安装的是ros-melodic版本,所以melodic的pcl应该自带的是1.8版本的?我之前担心不太能用,所以又安装了一个1.12版本的。

以下是一些值得注意的点:

一、安装pcl:

主要是跟着一个视频来的:
05-PCL教程-基础应用-在兼容POSIX的(如Ubuntu)系统中编译PCL源码并安装卸载_哔哩哔哩_bilibili

讲的很全面。

官方链接在这里:

Compiling PCL from source on POSIX compliant systems — Point Cloud Library 0.0 documentation

跟着上面一步一步的走,应该不会有很多的问题。

最后在网上找的一个测试源码,证明安装好了。

CMakeLists.txt内容:

cmake_minimum_required(VERSION 2.6)
project(pcl_test)

find_package(PCL 1.12 REQUIRED)

include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})

add_executable(pcl_test pcl_test.cpp)

target_link_libraries (pcl_test ${PCL_LIBRARIES})

install(TARGETS pcl_test RUNTIME DESTINATION bin)

 源码部分:

#include 
#include 
#include 
#include 
#include 
#include 
 
 
int main(int argc, char **argv) {
    std::cout << "Test PCL !!!" << std::endl;
    
    pcl::PointCloud::Ptr point_cloud_ptr (new pcl::PointCloud);
    uint8_t r(255), g(15), b(15);
    for (float z(-1.0); z <= 1.0; z += 0.05)
    {
      for (float angle(0.0); angle <= 360.0; angle += 5.0)
      {
	pcl::PointXYZRGB point;
	point.x = 0.5 * cosf (pcl::deg2rad(angle));
	point.y = sinf (pcl::deg2rad(angle));
	point.z = z;
	uint32_t rgb = (static_cast(r) << 16 |
		static_cast(g) << 8 | static_cast(b));
	point.rgb = *reinterpret_cast(&rgb);
	point_cloud_ptr->points.push_back (point);
      }
      if (z < 0.0)
      {
	r -= 12;
	g += 12;
      }
      else
      {
	g -= 12;
	b += 12;
      }
    }
    point_cloud_ptr->width = (int) point_cloud_ptr->points.size ();
    point_cloud_ptr->height = 1;
    
    pcl::visualization::CloudViewer viewer ("test");
    viewer.showCloud(point_cloud_ptr);
    while (!viewer.wasStopped()){ };
    return 0;
}

 显示结果:
aloam学习笔记(一)_第2张图片

证明安装完成。

二、选择制定版本的pcl

一般是有两个不同的pcl,一个是ros自带的pcl,一个是自己安装的源码版本的pcl。

如果想要使用ros自带的pcl,在项目的CMakeLists.txt中find_package语句前添加:

set(PCL_DIR "/usr/lib/x86_64-linux-gnu/cmake/pcl")   #该路径中存放*.cmake文件
find_package(PCL 1.8 REQUIRED)

如果想要使用自己安装的源码版本的pcl,同理在项目的CMakeLists.txt中find_package语句前添加:

set(PCL_DIR "/usr/local/share/pcl-1.12")   #该路径中存放*.cmake文件
find_package(PCL 1.12 REQUIRED)

这里还有一个message的命令可以用来测试是否指定的是自己需要版本的pcl库。

message("pcl_direction: " ${PCL_DIR})

 然后在cmake ..之后查看输出的消息就可以了。

可以看到如果人为set命令指定使用ros自带版本的pcl就会优先使用自己安装版本的pcl库。

还是pcl1.8版本太久远了,指定它进行测试的时候会出现一些库无定义问题。

3.安装运行aloam

直接根据官网的步骤来:

    cd ~/catkin_ws/src
    git clone https://github.com/HKUST-Aerial-Robotics/A-LOAM.git
    cd ../
    catkin_make
    source ~/catkin_ws/devel/setup.bash

这里有几个问题需要注意一下:

3.1关于pcl版本的问题

看aloam源码中docker部分写的是pcl用1.8的版本,然后我就直接在CMakeLists.txt里面指定了原ros自带的pcl版本,但直接报错不能编译通过。后来指定了自己安装的1.12版本的pcl就可以成功运行了,估计还是ros自带pcl库存在问题。

3.2关于roslaunch文件的问题

编译通过后,运行roslaunch文件出现了问题,按常规应该是

roslaunch A-LOAM aloam_velodyne_VLP_16.launch

但显示是无A-LOAM文件。

最后是在官方主页上看到了应该运行

 roslaunch aloam_velodyne aloam_velodyne_VLP_16.launch

有点奇怪,不知道为什么。。。

最后成功运行。

aloam学习笔记(一)_第3张图片

 

你可能感兴趣的:(slam,学习)