SLAM——相关资料文集

1、资料链接

      1-1 SlamCN

             可以完全按照SlamCN上的教程进行学习。

      1-2-1 SLAM资料整理

      1-2-2 SLAM论文阅读和分类整理

      1-3 ROS包navigation学习:

     https://blog.csdn.net/sonictl/article/details/51518492

      1-4 特别全的slam资料

2、相关算法知识

       2-1 路径规划、SLAM、卡尔曼滤波等算法

       2-2 梯度下降法、牛顿法等优化算法:

            2-2-1 梯度下降和牛顿法以及变种

            2-2-2 详细介绍线性最小二乘和非线性最小二乘算法

            个人总结:对于下面的最小二乘问题,若F(x)是线性函数,可以直接另其一阶导数为0,求出最优参数。若误差函数是非线性的,一般要使用迭代方法来寻求最优解。

             x= argminF(x)=argmin\frac{1}{2}\left \| f(x) \right \|_{2}^{2}     

             非线性函数求解最小二乘步骤:

              1)选择一个合理的初值x^{0},选择的好的话迭代次数会少;

              2)使用各种方法比如:梯度下降、牛顿、高斯牛顿、LM等方法,求得\Delta x

              3)若\Delta x足够小、或者超过迭代次数,则停止;否则到2)步,一直迭代。

               这里的各种方法其实就是将非线性函数在当前x状态下近似为线性的方法,求得的\Delta x是该线性函数的。具体来说:

               梯度下降法:对F(x)在x^{_{i}}处进行一阶泰勒展开,将系统在x^{_{i}}处近似为线性系统,有F(x)\approx F(x^{_{i}})+J(x^{_{i}})\Delta x,J是F(x)关于x的雅克比矩阵,那么只要取\Delta x=-J(x^{_{i}}),让x向梯度的反方向走,就能达F(x)到最小地方。该方法优点是一直寻找F(x)变化最大的地方行进。

              牛顿法:牛顿法是为了求解非线性函数G(x)根点(与x轴的交点)的方法。因为在当时数学家发现对于很多非线性函数(这里指那些确有根点的函数)来说求解G(x)=0是很难的,牛顿发现非线性函数的切线和曲线有一定的联系,甚至在切点附近的一定区域内,切线函数可以近似为曲线函数。并且牛顿发现,切线的根点肯定是向G(x)的根点方向靠近的,那么只要每次求取切线根点,作为下次观测G的输入x^{_{i}},然后在这个新的点(x^{_{i}}G(x^{i}))上再做切线,求该切线根点,然后再更新非线性函数的新的点(x^{_{i+1}}G(x^{i+1})),一直到G逼近到0,最终求得x。对于最小二乘问题,我们可以做个转换,求x= argminF(x),即是求F{}'(x)=0,因为F{}'(x)是非线性函数,所以我们用牛顿法不断迭代更新来求F{}'(x)的根点。具体过程:

               1)已知(x^{_{i}}F{}'(x^{i})),以及此点处的斜率F{}'{}'(x^{i})

               2)那么根据切线公式y=kx+b,有:

                                        \begin{Bmatrix} F{}'(x^{i})=F{}'{}'(x^{i})*x^{i}+b\\ 0=F{}'{}'(x^{i})*x^{i+1}+b\end{Bmatrix}

                    可以很容易求得 x^{i+1}-x^{i}=\Delta x=-\frac{F{}'(x^{i})}{F{}'{}'(x^{i})},然后去迭代更新,最终求得x使F{}'(x)=0

                上式说明更新x需要使用F的一节和二阶导数,J(雅克比矩阵)和H(海森矩阵)。所以我们对F(x)泰勒展开到二阶,如下:

                                      F(x)\approx F(x^{_{i}})+J(x^{_{i}})\Delta x+\frac{1}{2}\Delta x^{T}H(x^{_{i}})\Delta x

                 展开到二阶说明,我们用一个常值+一次函数+二次函数来近似表示F(x),那么对其关于\Delta x求导,F{}'(x)就是一条直线了,也就是求出了我们切线的表达式。我们求这条切线的根点,即H\Delta x=-J^{T}(x^{_{i}}),然后不断迭代。

 

             

 

 

 

     

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值