月度归档: 2018年5月

欧拉积分、中点积分与龙格-库塔积分

在 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...