Semantic SLAM 文章收集
截至目前 Semantic SLAM (注意不是 Semantic Mapping)工作还比较初步,可能很多思路还没有打开,但可以预见未来几年工作会越来越多。语义 SLAM 的难点在于怎样设计误差函数,将 Deep Learning 的检测或者分割结果作为一个观测,融入 SLAM 的优化问题中一起联合优化,同时还要尽可能做到至少 GPU 实时。
这一篇博客我将尽力收集一些有代表性的文章,提供下载和简单思路的理解,但个人精力、能力有限也欢迎大家随时提供更多更好的文章。
1、《Probabilistic Data Association for Semantic SLAM》 ICRA 2017
语义 SLAM 中的概率数据融合,感觉应该算开山鼻祖的一篇了。这篇也获得了 ICRA...
阿里云 MySQL 频繁挂掉的解决方法
阿里云如果使用低配的服务器,随着访问量增大,上面的 MySQL 经常被系统停掉。除了升级内存硬盘等系统资源外,还可以使用如下方法尝试解决下:
1、降低数据库 InnoDB 引擎的缓冲区大小
找到 MySQL 的配置文件,一般在 /etc/mysql/my.cnf 或者 /etc/my.cnf 这种位置。编辑配置文件,修改或添加下列行:
Shell
innodb_buffer_pool_size = 64M
1
innodb_buffer_pool_size = 64M
2、添加 SWAP 分区
阿里云服务器默认不带 SWAP 分区,我们可以自己创建。请在 Shell 中依次执行以下命令:
Shell
dd if=/dev/zero of=/swapfile bs=1M...
欧拉积分、中点积分与龙格-库塔积分
在 SLAM 系统中经常用到各种不同的数值积分方法,工程上最常见的有三种:欧拉积分(Euler method)、中点积分(Midpoint method)和龙格-库塔法积分(Runge–Kutta methods)。他们的区别就是如何用数值方法模拟一个斜率。这里简单总结如下:
一、欧拉积分
设有如下微分方程:
并且 和 时刻的差为 ,则欧拉积分定义为:
也就是说用 t 时刻的斜率作为整个 时刻的导数。
二、中点积分
设有如下微分方程:
并且 和 时刻的差为 ,则显式中点积分定义为:
则隐式中点积分定义为:
也就是说用 时刻的斜率作为整个 时刻的导数。
欧拉积分与中点积分都是一阶近似并没有本质不同,二者只是一阶导数所取位置不同,他们的性能也有差别,如下图所示,作为一阶积分近似方法来讲,中点积分有时会稍好一些(带来更快的收敛速度)。
图示为方程 ...
[C++11] C++11 中的回调
之前写 Java 和 OC 非常羡慕其中的回调机制,之前的博客也介绍了一个使用 fast delegate 回调的 C++ 机制(参见:[C++] 简单高效的 delegate 方法)。现在 C++11 已经普及了,也同样支持了回调,虽然比高阶的语言 Java 和 OC 之类还稍显繁琐,但是基本功能已经都有了,这里简单说明如下。
1、回调基本函数
在 C++11 中使用 std::function 定义回调函数和参数类型,使用 std::bind 绑定回调函数。示例如下:
C++
#include...
GLog & GFlags 的安装
0、系统环境
Ubuntu 16.04
GCC 5.4
1、安装步骤
1)安装 GFlags
运行如下指令:
Shell
git clone https://github.com/gflags/gflags.git
cd gflags
mkdir build && cd build
cmake .. -DGFLAGS_NAMESPACE=google -DCMAKE_CXX_FLAGS=-fPIC ..
make -j4
sudo make install
123456
git clone https://github.com/gflags/gflags.gitcd gflagsmkdir build && cd buildcmake...
VI ORB SLAM2 与 VINS 对比实验
一、实验说明
之前做了一些 VI ORB SLAM2 与 VINS Mono 性能的对比试验,由于 VI ORB SLAM2 并没有官方的版本,我们主要使用王京实现的一个版本(https://github.com/jingpang/LearnVIORB)来做测试(我们加入了双目 VIO 部分,但不论单目还是双目该版本实现与官方版本性能有较大差距)。VINS Mono (https://github.com/HKUST-Aerial-Robotics/VINS-Mono)是港科大开源的一个单目 VIO 算法,速度快而且性能不错,同样受到很大关注。本篇博客我们对二者进行了一些粗浅的实验对比。
说明如下:
1、实验主要指标为 RMSE:
其中:
代表真值, 代表估计值。
2、实验采用 EuRoC 测试集(https://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets)。以下是一些初步的实验结果,做一记录。因为没有深入研究和调试,试验次数也比较有限,不一定具有代表性。如大家有任何改进建议或者疑问欢迎留言。
二、实验结果
1、ORB 与 VI...
Ubuntu 系统安装后的一些常用设置
每次重装 Ubuntu 系统后都有一些配置需要重新做,在这里简单记录下以备后续查阅。
1、开机自动挂载硬盘
一般对于双系统来说,Ubuntu 都是安装在一个独立的分区,然后数据仍然使用原来其他硬盘。设置开机自动挂载硬盘会比较省事。按照以下步骤操作即可:
1)查看 UUID:
运行命令:
Shell
sudo blkid
1
sudo blkid
结果如下:
找到想要挂载的硬盘 PARTUUID 记录下。
2)编辑配置文件:
运行命令:
Shell
sudo gedit /etc/fstab
1
sudo gedit /etc/fstab
最下边加一行:
TeX
UUID=aeaadea6-033d-44c7-a6eb-5a5c275e5e5b /media/skylook/Windows ...
Tmux 虚拟终端使用
在我们进行深度学习训练时,经常需要好几天,这时肯定是不能随便关闭窗口就让会话挂了的。我们可以采用很多方法来让会话后台运行,同样 Tumx 也是一个很方便的会话后台运行工具,我们可以在 Tmux 中更好地实现类似的效果。
1 什么是Tmux?
Tmux 是一个工具,用于在一个终端窗口中运行多个终端会话。不仅如此,你还可以通过 Tmux 使终端会话运行于后台或是按需接入、断开会话。
2 安装 Tmux
在 Ubuntu 上安装使用如下命令:
Shell
sudo apt-get install tmux
1
sudo apt-get install tmux
在 CentOS 上安装使用如下命令:
Shell
sudo yum install tmux
1
sudo yum...
[ROS] 在 Ubuntu 16.04 系统上安装 ROS Kinetic
ROS 的发行版很多,之前的文章中我们介绍过在 Ubuntu 14.04 上安装 indigo。
时光荏苒,Ubuntu 和 ROS 的长期支持版本都已经更新了,对于最新的 Ubuntu 16.04 通常情况下我们更多地使用其稳定版本 Kinetic。这篇文章就讲下 Kinetic 版本在 Ubuntu 下的安装。
0、安装环境
Ubuntu 16.04 LTS
1、配置源
使用 ROS 官方源:
Shell
sudo sh -c 'echo "deb...
使用 evo 工具评测 VI ORB SLAM2 在 EuRoC 上的结果
最近把 ORB SLAM2 作者融合 IMU 版本的算法 《Visual-Inertial Monocular SLAM with Map Reuse》 论文读了一遍,作者没有开放源代码,所以我是使用王京实现的一版开源代码(https://github.com/jingpang/LearnVIORB)进行了一些实验。LearnVIORB 代码有一些崩溃的 bug,在 Mac 上面编译有问题,不过实现了作者文中的基本思想,是非常好的一份实现。
由于只有 EuRoC 测试集有 VIO 的数据,我使用了 EuRoC 测试集进行测试,不过在实际运行中遇到了几个问题。
0、系统环境
macOS Sierra v10.12.6
1、evo...