<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Limiao_123的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Limiao_123</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Limiao_123]]></copyright><item><title><![CDATA[Loam流程分析以及源码解析]]></title><link>https://blog.youkuaiyun.com/Limiao_123/article/details/115916764</link><guid>https://blog.youkuaiyun.com/Limiao_123/article/details/115916764</guid><author>Limiao_123</author><pubDate>Tue, 20 Apr 2021 22:51:32 +0800</pubDate><description><![CDATA[前一阵看网课讲解Loam的视频，觉得十分简单而且直观。然而纸上得来终觉浅，最近结合网上前人的解析加以自己的理解，希望能得到新的深一些的理解。写下做一下记录，方便将来回忆复习。
贴上参考的资料：

github上用中文注释的一个代码，十分清晰，配合着其他讲解，理解Loam的源码很有帮助：源码加中文注释
知乎密斯特李的专栏文章，将Loam源码的四个node分开解析，清晰明了：知乎文章1
知乎晓伟Liu的解析，在看mapping部分的时候给我帮助较大知乎文章2
csdn博主Nksjc的文章csdn文章

感谢前人]]></description><category></category></item><item><title><![CDATA[用案例来展示g2o优化库的使用]]></title><link>https://blog.youkuaiyun.com/Limiao_123/article/details/115741027</link><guid>https://blog.youkuaiyun.com/Limiao_123/article/details/115741027</guid><author>Limiao_123</author><pubDate>Sun, 18 Apr 2021 23:44:22 +0800</pubDate><description><![CDATA[之前看高博的slam十四讲时候用过g2o，然而后来一直没有用项目来练手已经忘得差不多了，还是得多动手实践呀，加强记忆。写个博客记录一下，下次要用回忆更快一些。
g2o介绍
它是基于图优化的一个开源库，使用非线性优化算法和图论结合的理论。在g2o中，将待优化的变量看成图的顶点，将误差项看成图的边。这么说可能比较难以理解，这里有一篇非常简单的案例用来说明：案例
在我看来，很多问题是很天然的可以用图优化描述的，比如接下去的案例二。而且相对ceres，我觉得g2o在解决变量数目非常多的情况，更加来得自然和简单。
不]]></description><category></category></item><item><title><![CDATA[ICP的不同解法：SVD分解，高斯牛顿法。代码实现]]></title><link>https://blog.youkuaiyun.com/Limiao_123/article/details/115662199</link><guid>https://blog.youkuaiyun.com/Limiao_123/article/details/115662199</guid><author>Limiao_123</author><pubDate>Tue, 13 Apr 2021 14:30:57 +0800</pubDate><description><![CDATA[ICP  （Iterative Closest Point，最近迭代）是点云配准中的一个很重要的算法。假设有两个点云P和Q，想要找到一个变换T，使得P=TQ，那么就需要使用到这个算法。
1.最近邻查找
这一步是为Q中的点Qi找到Q中相对应的点。
这个要分情况讨论：比如在RGBD-slam中，特征点的匹配已经为我们找到了P、Q中点的对应关系，那么这一步其实是已经完成了。但是对于两坨点云，没有点和点的对应关系，我们只好先做这样一个假设：离Qi最近的P中的点Pi就是它对应的点，显然这个是不准确的，但是我们可以通过]]></description><category></category></item><item><title><![CDATA[移动机器人学习1： a*算法的理解]]></title><link>https://blog.youkuaiyun.com/Limiao_123/article/details/114885478</link><guid>https://blog.youkuaiyun.com/Limiao_123/article/details/114885478</guid><author>Limiao_123</author><pubDate>Tue, 16 Mar 2021 16:59:54 +0800</pubDate><description><![CDATA[感谢路径规划之a*这篇文章的步步引导，在此基础上，记下自己对a*算法的理解，以及启发式函数的理解。

1.广度优先搜索与Dijkstra：
设想一下算法在一个地图中寻找另外一点，最简单的方式就是从出发点开始，一圈圈向外膨胀。从起点开始，首先遍历起点周围邻近的点，然后再遍历已经遍历过的点邻近的点，逐步的向外扩散，直到找到终点。这便是广度有限算法bfs。这个过程像在火山的岩浆蔓延，逐渐占满空间直到达到目标点。然后从目标点回溯，得到最短路径。
在网格中移动，移动都周围的格子的代价都是走一步，是相同的。但是很多情况]]></description><category></category></item><item><title><![CDATA[C++ 中map / unorder_map的emplace函数操作]]></title><link>https://blog.youkuaiyun.com/Limiao_123/article/details/112556698</link><guid>https://blog.youkuaiyun.com/Limiao_123/article/details/112556698</guid><author>Limiao_123</author><pubDate>Wed, 13 Jan 2021 11:49:14 +0800</pubDate><description><![CDATA[今天看别人的代码，出现了以下的代码，十分不解，现在弄懂了作一个记录：
unordered_map&lt;int， PoseBlock&gt; Frame;
void AddPose(int id, const Sophus::SE3d&amp; frame_T_wb) {
      Frame.emplace(std::piecewise_construct,
      					  std::forward_as_tuple(id),
                          std::fo]]></description><category></category></item><item><title><![CDATA[联想拯救者R7000 安装 ubuntu20记录]]></title><link>https://blog.youkuaiyun.com/Limiao_123/article/details/112414755</link><guid>https://blog.youkuaiyun.com/Limiao_123/article/details/112414755</guid><author>Limiao_123</author><pubDate>Sat, 09 Jan 2021 23:28:29 +0800</pubDate><description><![CDATA[1. 安装install ubuntu 出现黑屏并带彩色bug条纹：按e进入修改界面，在linux那行最后加上：acpi=off
2. 安装失败后，在windows下要彻底清除ubuntu，包括格式化对应的硬盘空间，按下面链接中教程删除ubuntu添加到efi的文件https://blog.youkuaiyun.com/xyt723916/article/details/106317594 否则可能出现安装不上，在安装过程中出现grub_install failed，然后安装崩溃
3. 显卡安装按照链接：https:/]]></description><category></category></item><item><title><![CDATA[cuda 原子锁&多线程操作&通用原子操作]]></title><link>https://blog.youkuaiyun.com/Limiao_123/article/details/111197531</link><guid>https://blog.youkuaiyun.com/Limiao_123/article/details/111197531</guid><author>Limiao_123</author><pubDate>Tue, 15 Dec 2020 15:24:43 +0800</pubDate><description><![CDATA[经历了很多奇奇怪怪的bug，整理一下。先描述要做的事情以及怎么做：
在项目中，空间中有200w+的点，需要映射到一个grid_map的600*600的网格中，落入到同一个格子的点需要进行一些计算获得一个值。对于格子与格子之间是并行的，但格子之中的点需要设计为串行。所以在计算某个格子中的点时，需要将格子的值保护起来，只允许一个线程（点）计算并改变。
这里就用到了cuda的通用原子操作。也许有人会问，cuda提供了一些原子操作函数，能不能直接用呢？cuda提供的原子函数适用于简单的单一变量判断加减，而对于需要复]]></description><category></category></item><item><title><![CDATA[ubuntu18.04安装cuda10.2记录]]></title><link>https://blog.youkuaiyun.com/Limiao_123/article/details/109524921</link><guid>https://blog.youkuaiyun.com/Limiao_123/article/details/109524921</guid><author>Limiao_123</author><pubDate>Fri, 06 Nov 2020 09:28:13 +0800</pubDate><description><![CDATA[本篇文章属于个人安装成功的经验记录。
参考博客为：https://blog.youkuaiyun.com/qq_34906039/article/details/104175802
总结
在按着上面的教程走一遍，其中还是遇到了一些问题
1.显卡驱动的安装方式：
至少我按博客中的方式并未安装成功，所以我采取的是连接https://blog.youkuaiyun.com/Limiao_123/article/details/96355247中的这个方式。
2.显卡驱动版本问题
一开始我也是按着教程中安装390那个版本，但是后来在跑cu]]></description><category></category></item><item><title><![CDATA[ROS学习之action]]></title><link>https://blog.youkuaiyun.com/Limiao_123/article/details/109379482</link><guid>https://blog.youkuaiyun.com/Limiao_123/article/details/109379482</guid><author>Limiao_123</author><pubDate>Fri, 30 Oct 2020 10:53:20 +0800</pubDate><description><![CDATA[背景
action可以看做升级版的service，它主要可以实现某些特定的情况，比如：客户端发送指令之后，服务端操作处理时间太久，不知道服务端到底是还在处理还是已经挂了，或者客户端发送目标之后，觉得不行，想取消任务。所以很好理解的，我们需要服务端做出反馈，所以诞生了action。
过程：action_client发送一个目标，action_server接收到这个目标后，执行期间会不断给客户端发送进度反馈，如果客户端没有终止任务的话，这个反馈会一直存在直到结束。客户端也可以随时结束任务。
本篇文章参考了参考博]]></description><category></category></item><item><title><![CDATA[多线程以及线程锁的学习笔记]]></title><link>https://blog.youkuaiyun.com/Limiao_123/article/details/109352983</link><guid>https://blog.youkuaiyun.com/Limiao_123/article/details/109352983</guid><author>Limiao_123</author><pubDate>Thu, 29 Oct 2020 10:58:40 +0800</pubDate><description><![CDATA[C++ 多线程 Thread（C++11）和线程锁的知识

参考文章：
https://blog.youkuaiyun.com/ouyangfushu/article/details/80199140
https://zhuanlan.zhihu.com/p/91062516
1.普通函数多线程调用：
无参数函数
    #include &lt;thread&gt;
    #include &lt;iostream&gt;
    #include &lt;mutex&gt;
    
    void hello]]></description><category></category></item><item><title><![CDATA[ROS中spin()和spinOnce()的区别和用法以及多线程]]></title><link>https://blog.youkuaiyun.com/Limiao_123/article/details/109341019</link><guid>https://blog.youkuaiyun.com/Limiao_123/article/details/109341019</guid><author>Limiao_123</author><pubDate>Wed, 28 Oct 2020 20:16:36 +0800</pubDate><description><![CDATA[参考这个教程：https://blog.youkuaiyun.com/yaked/article/details/50776224，其中的内容更为详细。以下记录我的学习心得
1.spin()和spinOnce()的区别
常见的用法如下：
spin()：
ros::init(argc, argv, "my_node");
ros::NodeHandle nh;
ros::Subscriber sub = nh.subscribe(...);
...
ros::spin();

spinOnce()：
ros::Rate ]]></description><category></category></item><item><title><![CDATA[tf 学习笔记，翻译]]></title><link>https://blog.youkuaiyun.com/Limiao_123/article/details/109209708</link><guid>https://blog.youkuaiyun.com/Limiao_123/article/details/109209708</guid><author>Limiao_123</author><pubDate>Wed, 21 Oct 2020 21:33:19 +0800</pubDate><description><![CDATA[tf学习

学习完ROS wiki后做个简单的笔记，链接ROS-wiki-tf-learning
以下的每点都是对应着链接中tutorial每个章节，遗忘不解时请翻看
1.tf发布器
tf::TransformBroadcaster br;	//创建一个发布器
tf::Transform transform;	//创建一个变换
//填入变换
tf::Quaternion q;
q.setRPY(0, 0, msg-&gt;theta);
transform.setRotation(q);
transform]]></description><category></category></item><item><title><![CDATA[记录一下所理解RSA算法（更新）]]></title><link>https://blog.youkuaiyun.com/Limiao_123/article/details/108360388</link><guid>https://blog.youkuaiyun.com/Limiao_123/article/details/108360388</guid><author>Limiao_123</author><pubDate>Wed, 02 Sep 2020 14:16:22 +0800</pubDate><description><![CDATA[偶然看到一篇密码学的文章，之前都没有了解过，趁着午休时间，匆匆一瞥被其中的智慧震撼了，随手记录一下，以后有时间再接着补充
一、历史
对称加密算法VS非对称加密算法

在1976年以前，所有的加密方式都是同一种模式：对称加密算法。

我简单举个栗子：小明写了个小纸条打算传递 i love you（也就是信息）这句话给他的女朋友小红，但是老师们防早恋抓得比较紧，所以他打算对这句话加密，让老师截获小纸条也不知道想表达什么。所以小明使用一个简单加密规则：所有字母使用字母表顺序后二位字母代替。
然后 i love y]]></description><category></category></item><item><title><![CDATA[VTK各种demo]]></title><link>https://blog.youkuaiyun.com/Limiao_123/article/details/108144248</link><guid>https://blog.youkuaiyun.com/Limiao_123/article/details/108144248</guid><author>Limiao_123</author><pubDate>Fri, 21 Aug 2020 11:44:57 +0800</pubDate><description><![CDATA[VTK各种demo的网站
https://lorensen.github.io/VTKExamples/site/Cxx/Qt/BorderWidgetQt/
链接链接

]]></description><category></category></item><item><title><![CDATA[C++三大特性之“多态”，静态多态和动态多态 --   解答学习中的疑惑点]]></title><link>https://blog.youkuaiyun.com/Limiao_123/article/details/108006761</link><guid>https://blog.youkuaiyun.com/Limiao_123/article/details/108006761</guid><author>Limiao_123</author><pubDate>Fri, 14 Aug 2020 17:06:41 +0800</pubDate><description><![CDATA[在这个博文的基础上，进一步分类解答遇到的疑惑和新增理解，依旧惯例，十分感谢前人的分享，贴上链接：链接
C++的三大特性分别是：封装、继承、多态。这里将详细讲解多态
其实学习C++还是要学习C++中的思想，学习解决问题的思想，学习这种解决问题背后的根本。先将我们带回到没有多态的那个时期，考虑一下我们怎么解决以下问题：
加法：+
对于int型1/2/6/9这种，1+2=3很简单
对于double型1.11+1.12=2.23也很简单
但是我们在使用加号+的时候怎么没有去考虑，程序怎么知道我们带到加号左右的是什么]]></description><category></category></item><item><title><![CDATA[设计模式系列——工厂模式浅析]]></title><link>https://blog.youkuaiyun.com/Limiao_123/article/details/107913706</link><guid>https://blog.youkuaiyun.com/Limiao_123/article/details/107913706</guid><author>Limiao_123</author><pubDate>Mon, 10 Aug 2020 16:18:14 +0800</pubDate><description><![CDATA[最近在学习设计模式，在学了了很多的大佬的分享之后，想写一点自己的理解。主要参考了知乎上一篇文章：参考文章
学习一个新的知识点，都可以先问问自己两个问题，1，没有这个方法将会有什么不好的地方  2，有了这个方法之后会变得怎么更好。带着这两个问题，我们开始学习工厂模式。
首先我们看一下没有工厂模式的时候会怎么样：
那水果举例子，我们要获得苹果，就得知道苹果的制造方法，想要获得香蕉就得知道香蕉的制造方法。如果我们不知道工厂模式，我们会怎么做呢？我们得知道苹果的生产方式和香蕉的生产方式
class user{
	F]]></description><category></category></item><item><title><![CDATA[安装opencv_contrib踩坑记录]]></title><link>https://blog.youkuaiyun.com/Limiao_123/article/details/107298132</link><guid>https://blog.youkuaiyun.com/Limiao_123/article/details/107298132</guid><author>Limiao_123</author><pubDate>Sun, 12 Jul 2020 13:20:43 +0800</pubDate><description><![CDATA[之前一直ubuntu下耍opencv，最近因为课题另外一个模块的需要，就回到windows平台下继续开发。
搞了大半天，参考了很多博客，终于把opencv_contrib安装好了。随手记录下踩过的坑。
我参考的博客主要是这篇：  一篇很详细的博客，写得很详细很详细。在看下面内容之前，强烈建议先把这个篇看完。本篇文章是对其几点说明而已（也是它评论中其他人遇到的问题的解释）


关于几个文件下载不下来的问题；

我安装过程中这一步遇到4个文件不能下载，首先找log文件中找到文件需要放置的位置，删除掉0k的文件，]]></description><category></category></item><item><title><![CDATA[解决source和换成zsh后不能使用ros命令的方法记录]]></title><link>https://blog.youkuaiyun.com/Limiao_123/article/details/97809143</link><guid>https://blog.youkuaiyun.com/Limiao_123/article/details/97809143</guid><author>Limiao_123</author><pubDate>Tue, 30 Jul 2019 18:47:09 +0800</pubDate><description><![CDATA[2019-0.7-30记录
解决每次都要 source ./devel/setup.bsah 的问题：
解决方法：

终端输入：gedit ~/.bashrc
文件打开后直接翻到最后面
在底部添加source ~/catkin_ws/devel/setup.bash
保存退出即可
这个方法是在bash下的方法。

如果已经安装了zsh后，都要换。首先，在换成zsh后，原来的ros的命令将失效，原因...]]></description><category></category></item><item><title><![CDATA[ubuntu重复循环登录解决]]></title><link>https://blog.youkuaiyun.com/Limiao_123/article/details/97789884</link><guid>https://blog.youkuaiyun.com/Limiao_123/article/details/97789884</guid><author>Limiao_123</author><pubDate>Tue, 30 Jul 2019 15:49:10 +0800</pubDate><description><![CDATA[记录：一般都是显卡驱动出现问题，所以重装显卡驱动。在登录界面按ctrl+alt+f1进入到命令行界面，然后重装驱动
可以先查看还有无显卡驱动，省下一些步骤

...]]></description><category></category></item><item><title><![CDATA[ros和安卓设备通讯的记录]]></title><link>https://blog.youkuaiyun.com/Limiao_123/article/details/97769478</link><guid>https://blog.youkuaiyun.com/Limiao_123/article/details/97769478</guid><author>Limiao_123</author><pubDate>Tue, 30 Jul 2019 12:20:00 +0800</pubDate><description><![CDATA[记录关于ros和android通信的步骤：android设备订阅pc发布的topic并显示在屏幕上
1，	确保ROS安装正确，kinetic，创建好了catkin_ws
2，	进入链接中的教程 http://wiki.ros.org/rocon_interactions/Tutorials ，选择indigo（里面只有这个版本，要换成kinetic的命令和包）
3，	直接看第六点Android i...]]></description><category></category></item></channel></rss>