slam开发常用配置及第三方库


slam工程涉及诸多算法知识和开发基础,记录下学习slam时用到轮子配置,不定时补充更新。
容易遇到的神坑:

  • 电脑配置低,内存小,make编译过程中随机卡死,需要在编译前临时修改swap分区
  • yaml-cpp源码编译安装的版本与ROS中的yaml-cpp冲突,导致编译出错“undefined reference to `vtable for YAML::BadConversion’……”
  • git clone 下载大型源码的时候,网速不给力,可以直接在国内的码云上在线复制一份,然后基于gitee下载,速度神快!

ubuntu 进入高性能模式

ubuntu下cpu默认运行在节能模式下,会比较慢,可以通过以下方式进行设定

sudo apt-get install cpufrequtils
cpufreq-info	// 查看当前cpu的状态
sudo cpufreq-set -g performance	// 设置为performace模式

为了能够有可视化的看到当前模式

sudo apt-get install indicator-cpufreq

重启电脑后,屏幕右上角出现一个类似SD卡形状的图标,鼠标点击既可以看到当前模式
在这里插入图片描述

拼音输入法

安装以下依赖项:
sudo apt-get install fcitx fcitx-googlepinyin fcitx-module-cloudpinyin fcitx-sunpinyin

  • 在language support里面将keyboard input method system设置为fcitx3
  • 重启
  • 打开fcitx configuration,搜索google-pinyin,并添加(注意要取消Only show current language前面的对勾,不然可能搜索不到)
  • 最后便可以Ctrl+Space组合按键进行切换

远程桌面及ssh

有屏幕的话直接开发很爽快,但是如果经常需要在windows & ubuntu上切换工作的话,最便捷的方法是:windows利用vncviewer网络登录查看图像界面,不需要图形界面的话,直接ssh登录即可;windows上的文件利用sftp上传更新至ubuntu即可。
远程桌面配置
在这里插入图片描述
安装vncserver

sudo apt-get install xrdp vnc4server xbase-clients dconf-editor

安装dconf-editor

sudo apt-get install dconf-editor

打开dconf-editor, 依次展开org->gnome->desktop->remote-access,并取消勾选 “require-encryption”。

找到“设置”-“共享”-“屏幕共享”,进行如下设置,密码自己定义即可
在这里插入图片描述

Windows端直接使用vncviewer输入ubuntu的IP地址即可登录。(前提是两个系统在同一个网段下)

在没有屏幕的情况下,ssh可以起到临时登录操作的作用,配合sftp,可以在windows下写代码然后传输至ubuntu端

sudo apt-get install openssh-server

启动ssh服务
sudo ps -e | grep ssh" --> 回车 --> 有 sshd,说明 ssh 服务已经启动,如果没有启动,执行下面命令:

sudo service ssh start

查看ip地址后,使用putty登录即可

设置开机启动:

sudo vi /etc/rc.local

在exit 0语句前加入

/etc/init.d/ssh start

在这里插入图片描述
在这里插入图片描述

修改ubuntu swap分区大小(临时,重启失效)

对于低配置的PC或者ARM板卡,如果要编译安装的库比较大,而系统内存不够的话,容易出现编译过程中卡死的情况,因此有必要预先修改swap大小。
查看内存及swap空间的大小

free -h

在这里插入图片描述
修改步骤如下
(其中of=是指创建的文件名称,创建4G(bs*count)的swap)
(vm.swappiness 越大,使用率越高 0~100范围内)

cd /
sudo dd if=/dev/zero of=/swapfile bs=1M count=4k
sudo mkswap swapfile
sudo swapon swapfile
sudo sysctl vm.swappiness=60

修改完毕后,再次使用free -h命令查看内存及swap分区大小
在这里插入图片描述

Eigen

开源线性代数库,基于C++实现,提供了快速的有关矩阵的线性代数运算。

sudo apt-get install libeigen3-dev

安装位置在 “/usr/include/eigen3/”中,因此在使用过程中需要在CMakeLists.txt里指定Eigen的头文件目录

include_directories("/usr/include/eigen3")

在使用时,尤其需要注意的是
如果STL容器中的元素是Eigen库数据结构,例如这里定义一个vector容器,元素是Matrix4d ,如:

vector<Eigen::Matrix4d>;

编译不会出错,只有在运行push_back()的时候出错。解决的方法很简单,定义改成下面的方式:

vector<Eigen::Matrix4d,Eigen::aligned_allocator<Eigen::Matrix4d>>;

其实上述的这段代码才是标准的定义容器方法,只是一般情况下定义容器的元素都是C++中的类型,所以可以省略,这是因为在C++11标准中,aligned_allocator管理C++中的各种数据类型的内存方法是一样的,可以不需要着重写出来。但是在Eigen管理内存和C++11中的方法是不一样的,所以需要单独强调元素的内存分配和管理。

Sophus

李代数运算库

git clone https://github.com/strasdat/Sophus.git
cd Sophus
git checkout a621ff
mkdir build
cd build
cmake ..
make
sudo make install

在make时,发生错误。提示错误如下:

Sophus/sophus/so2.cpp:33:26:error: lvalue required as left operand of assignment
unit_complex_.real() = 1.;
Sophus/sophus/so2.cpp:33:26:error: lvalue required as left operand of assignment
unit_complex_.imag() = 1.;*

此时需要修改Sophus/sophus/so2.cpp文件,将33行的

 SO2::SO2() 
{ 
 unit_complex_.real() = 1.; 
 unit_complex_.imag() = 0.; 
 }

修改为

 SO2::SO2() 
{ 
   unit_complex_.real(1.); 
   unit_complex_.imag(0.); 
}

https://blog.csdn.net/haxiongha/article/details/82464148

CMakeLists.txt写法

find_package( Sophus REQUIRED )
include_directories( ${Sophus_INCLUDE_DIRS} )
target_link_libraries( joinMap ${Sophus_LIBRARIES} )

vtk

VTK,全称是Visualization Toolkit,即可视化工具包。是一个开源、跨平台、可自由获取、支持并行处理的图形应用函数库。
如果不需要源码的话,可以直接用以下命令安装:

sudo apt-get install libvtk7-dev

若需要源码的话,下载源代码

wget https://www.vtk.org/files/release/8.2/VTK-8.2.0.zip

解压

unzip VTK-8.2.0.zip

编译安装

cd VTK-8.2.0
make build && cd build
cmake ..
make -j2
sudo make install

Opencv

如果项目中需要opencv和VTK一起编译,则需要先依照上一小节安装VTK,如果不需要源码的话,可以直接用以下命令安装:

sudo apt-get install libvtk7-dev

开源图像算法库,从源代码编译安装:
安装一些依赖库

sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

下载代码

cd ~/<my_working_directory>
git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git

切换到目标版本,本文只利用3.4.5版本

cd opencv
git checkout 3.4.5
cd opencv_contrib
git checkout 3.4.5

利用cmake设置编译选项

cd opencv
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DOPENCV_GENERATE_PKGCONFIG=YES -DENABLE_CXX11=ON -DCMAKE_INSTALL_PREFIX=/usr/local -DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules ..

开始编译&安装
编译过程中,如果出现 缺少boostdesc_bgm.i文件的问题,下载
链接: https://pan.baidu.com/s/1oX5-umwpiMkjntBmpCobvw 提取码: ee9v
把下列压缩包解压到目录opencv_contrib/modules/xfeatures2d/src/下即可

make -j2
sudo make install

CMakeLists.txt写法

find_package( OpenCV REQUIRED )
include_directories( ${OpenCV_INCLUDE_DIRS} )
target_link_libraries( joinMap ${OpenCV_LIBS} )

如果在ubuntu16.04中使用ROS kinetic,kinetic自带的opencv版本与自定义编译的epencv版本不一致,需要在CMakeLists.txt中指定opencv的路径

set(OpenCV_DIR /usr/local/lib)

boost

Boost 库通过加入一些在实践中非常有用的函数对 C++ 标准进行了补充, 在c++ 编程中有时候要用到 Boost 库

sudo apt-get install libboost-all-dev

pcl

大型跨平台开源C++编程库,它实现了大量点云相关的通用算法和高效数据结构,涉及到点云获取、滤波、分割、配准、检索、特征提取、识别、追踪、曲面重建、可视化等。
下载pcl源码:

git clone https://github.com/PointCloudLibrary/pcl.git

切换到指定版本

git checkout 1.9.1
sudo apt-get update  
sudo apt-get install git build-essential linux-libc-dev  
sudo apt-get install cmake cmake-gui   
sudo apt-get install libusb-1.0-0-dev libusb-dev libudev-dev  
sudo apt-get install mpi-default-dev openmpi-bin openmpi-common    
sudo apt-get install libflann1.8 libflann-dev  
sudo apt-get install libeigen3-dev  
sudo apt-get install libboost-all-dev  
sudo apt-get install libvtk5.10-qt4 libvtk5.10 libvtk5-dev  
sudo apt-get install libqhull* libgtest-dev  
sudo apt-get install freeglut3-dev pkg-config  
sudo apt-get install libxmu-dev libxi-dev   
sudo apt-get install mono-complete  
sudo apt-get install qt-sdk openjdk-8-jdk openjdk-8-jre 

执行编译安装

cd pcl
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j2
sudo make install

CMakeLists.txt写法

find_package( PCL REQUIRED COMPONENT common io )
include_directories( ${PCL_INCLUDE_DIRS} )
add_definitions( ${PCL_DEFINITIONS} )
target_link_libraries( joinMap ${PCL_LIBRARIES} )

ROS

一个机器人软件平台,它能为异质计算机集群提供类似操作系统的功能,可以方便的开发并维护各个模块,安装教程参考ROS wiki

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
sudo apt-get update
sudo apt-get install ros-kinetic-desktop-full
sudo rosdep init
rosdep update
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc

yaml-cpp

yaml-cpp可以方便的用来读取yawl文件中的参数,slam工程的yaml文件多用以记录相机内外参、IMU噪声参数等,供程序运行时获取。
获取源程序

git clone https://github.com/jbeder/yaml-cpp.git

编译安装

mkdir build
cd build
cmake -DBUILD_SHARED_LIBS=ON ..    # ON 设置生成共享库
sudo make install

验证

pkg-config --modversion yaml-cpp

CMakeLists.txt写法
一般情况下,直接加targe_link_libraries就可以了

target_link_libraries(你的可执行文件名称 ${catkin_LIBRARIES} yaml-cpp)

但是,之前系统中安装的软件包(如旧版本的ROS)可能也会包含旧版本的yaml-cpp,按上述CMakeLists.txt的写法可能链接到旧版本的yaml-cpp上,编译会出现莫名其妙的问题,如

undefined reference to `vtable for YAML::BadConversion'……

最简单暴力的解决办法是直接写绝对路径进行链接,即

target_link_libraries(你的可执行文件名称 /usr/local/lib/libyaml-cpp.so)

anaconda 虚拟环境(不同python版本切换)

安装玩anaconda后,默认的python为3.7版本
但是在开发过程中,发现不少包是用python3.6做的,特别是opencv
解决办法:
创建基于python3.6的虚拟环境

conda create -n py36 python=3.6 anaconda

该命令指定python版本为3.6,会自动安装最新python版本
(py36是新建的虚拟环境的名字)

若要同时安装必要的包

conda create -n py36 numpy matplotlib python=2.7

切换不同的虚拟环境

conda activate your_env_name(虚拟环境名称)

关闭当前虚拟环境:

conda deactivate

删除虚拟环境:

conda remove -n your_env_name(虚拟环境名称) --all

当ROS kinetic与python3不兼容的时候,提示

ImportError: /opt/ros/kinetic/lib/python2.7/dist-packages/cv2.so: undefined symbol: PyCObject_Type

解决方法为:

import sys
sys.path.remove('/opt/ros/kinetic/lib/python2.7/dist-packages')
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值