slam开发常⽤配置及第三⽅库
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即可。
远程桌⾯配置
git常用指令安装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/”中,因此在使⽤过程中需要在⾥指定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 github/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.;*
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论