自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

转载 网络中出现TCP、UDP粘包、分包的两点解决办法

粘包产生原因: 先说TCP:由于TCP协议本身的机制(面向连接的可靠地协议-三次握手机制)客户端与服务器会维持一个连接(Channel),数据在连接不断开的情况下,可以持续不断地将多个数据包发往服务器,但是如果发送的网络数据包太小,那么他本身会启用Nagle算法(可配置是否启用)对较小的数据包进行合并(基于此,TCP的网络延迟要UDP的高些)然后再发送(超时或者包大小足够)。那么这样的话,服务器在

2017-08-17 10:55:15 298

转载 vector中的resize()函数 VS reserve()函数

转自http://www.cnblogs.com/biyeymyhjob/archive/2013/05/11/3072893.html C++:vector中的resize()函数 VS reserve()函数 http://www.cplusplus.com/reference/vector/vector/vector/写代码的时候无意错用了这两个函数 导致测试的时候,程序运行崩溃 发现这两

2017-08-14 20:48:46 270

转载 开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别

开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别 首先借用有心人士的一张相当直观清晰的图来划分各种协议:开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别 以下是上述协议的简单介绍: BSD开源协议 BSD开源协议是一个给于使用者很大自由的协议。基本上使用者可以”为所欲为”,可以自由的使用,修改源代码,也可以将修改后的代码作为开源

2017-07-17 17:30:24 525

原创 寻路算法A*和Dijkstra

网上找了很多A*和Dijkstra算法的解析,很多都很难理解,下面这两篇非常清晰。 A*算法http://blog.csdn.net/zgwangbo/article/details/52078338 Dijkstra(迪杰斯特拉)算法http://blog.csdn.net/mu399/article/details/50903876/*****************************

2017-07-05 21:19:24 1310 1

原创 TCP协议相关问题

当多个连接请求同时到达server,会怎么样?1.TCP存在一个连接队列,对于新的连接请求,该TCP监听的端口的连接队列中还有空间则TCP模块对SYN进行确认并完成连接的建立,丢进连接队列。应用层只在三次握手的第三个报文收到后才知道这个新连接。2.对于新的连接请求,连接队列中如果没有空间,TCP将不理会收到的SYN,也不发送RST。3.应用层指明队列大小,积压值。TCP时延确认问题TCP在处理交

2017-07-04 21:14:13 295

转载 epoll源码实现分析[整理]

转自http://www.360doc.com/userhome.aspx?userid=14513665&cid=3 epoll用法回顾先简单回顾下如何使用C库封装的3个epoll相关的系统调用。更详细的用法参见http://www.cnblogs.com/apprentice89/archive/2013/05/06/3063039.htmlint epoll_create(int size)

2017-06-29 20:46:45 335

转载 poll、select和epoll的区别

poll、select和epoll的区别 select原理概述 调用select时,会发生以下事情: 1. 从用户空间拷贝fd_set到内核空间; 2. 注册回调函数__pollwait; 3. 遍历所有fd,对全部指定设备做一次poll(这里的poll是一个文件操作,它有两个参数,一个是文件fd本身,一个是当设备尚未就绪时调用的回调函数__pollwait,这个函数把设备自己

2017-06-28 17:31:44 378

原创 《操作系统真象还原》-阅读笔记(下)

第十一章任意进程的页目录表第0~767个页目录项属于用户空间,指向用户页表。第768~1023个页目录项指向内核页表。每创建一个新的用户进程,就将内核页目录项复制到用户进程的页目录表,其次需要把用户页目录表中最后一个页目录项更新为用户进程自己的页目录表的物理地址。 每个进程有自己单独的位图,存储在进程pcb中的userprog_vaddr中。 LDT 当前运行的任务,其LDT位于LDTR指向的

2017-06-28 16:46:36 1605

原创 《操作系统真象还原》-阅读笔记(中)

第七章操作系统是由中断驱动的。 中断分为外部中断和内部中断。 外部中断分为可屏蔽中断和不可屏蔽中断,内部中断分为软中断和异常。 外部中断 来自CPU外部的中断。 可屏蔽中断:通过INTR引脚进入CPU,外部设备如硬盘、网卡、打印机等发出的中断 CPU可以不理会,因为不会宕机。 Linux把中断分为上半部和下半部分开处理,把中断立即需要执行的部分划分到上半部,不紧急的部分划分到下半部。上

2017-06-27 23:07:24 1353

原创 《操作系统真象还原》-阅读笔记(上)

第一章配置bochs,进入bochs simulator后一直是黑屏,原来默认是调试模式,需要输入C(continue)来让调试继续。第二章主讲MBR及进入MBR前的步骤 1.实模式只能访问1MB的内存空间。 2.BIOS在ROM中。 3.开机上电后CS:IP指向内存0xfff0,这里有个跳转语句,转到fe05b才是真正的BIOS程序,之后检测内存,显卡灯,建立数据结构,中断向量表和填写中断例

2017-06-27 16:17:58 1924 1

原创 ROS导航小车无故倒退问题分析

之前用ROS+激光雷达做小车室内导航时,遇到个问题,就是在RVIZ中给定目的地后小车总是会倒退行走,这个行走速度就是base_local_planner_params.yaml里配置的escape_vel逃逸速度,调整了其他参数无用,看看源代码 在trajectory_planner.cpp中 //and finally, if we can't do anything else, we want

2017-06-25 13:33:25 3093 1

转载 linux信号实现机制详解

1 信号本质 软中断信号(signal,又简称为信号)用来通知进程发生了异步事件。在软件层次上是对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是进程间通信机制中唯一的异步通信机制,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。进程之间可以互相通过系统调用kill发送软中断信号。内核也可以因为内部事件

2017-06-21 20:47:18 617

原创 C++四种强制转换

reinterpret_cast/* reinterpret_cast converts any pointer type to any other pointer type, even of unrelated classes. The operation result is a simple binary copy of the value from one pointer to the

2017-06-21 16:04:42 231

转载 C++中虚函数表存放位置

转自http://www.cnblogs.com/laiqun/p/5887372.html我们都知道,虚函数是多态机制的基础,就是在程序在运行期根据调用的对象来判断具体调用哪个函数,现在我们来说说它的具体实现原理,主要说一下我自己的理解,如果有什么不对的地方请指正 在每个包含有虚函数的类的对象的最前面(是指这个对象对象内存布局的最前面,至于为什么是最前面,说来话长,这里就不说了,主要是考虑到效率

2017-06-17 16:48:58 659

转载 字符编码笔记:ASCII,Unicode和UTF-8

转自http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html 1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一

2017-06-09 16:34:27 173

转载 linux线程之pthread_join和pthread_detach

转自http://www.cnblogs.com/chris-cp/p/3510167.html 在任何一个时间点上,线程是可结合的(joinable)或者是分离的(detached)。一个可结合的线程能够被其他线程收回其资源和杀死。在 被其他线程回收之前,它的存储器资源(例如栈)是不释放的。相反,一个分离的线程是不能被其他线程回收或杀死的,它的存储器资源在它终止时由系统自动释放。默认情况下,线程

2017-06-09 15:38:49 410

转载 理解TIME_WAIT

理解TIME_WAIT 转自http://www.firefoxbug.com/index.php/archives/2795/前言TIME_WAIT 是在TCP协议中很模糊的概念,它可能使socke能陷入的一种时间相对比较长的状态,过多的TIME_WAIT会影响新socket的建立。TIME_WAIT为什么会存在?它的作用又是什么?下面我们就来理解下TIME_WAIT。 这张图详细的列出了

2017-06-09 10:13:06 276

转载 TCP慢启动、拥塞避免、快速重传、快速回复

转自:http://blog.csdn.NET/itmacar/article/details/12278769 为了防止网络的拥塞现象,TCP提出了一系列的拥塞控制机制。最初由V. Jacobson在1988年的论文中提出的TCP的拥塞控制由“慢启动(Slow start)”和“拥塞避免(Congestion avoidance)”组成,后来TCP Reno版本中又针对性的加入了“快速重传(Fa

2017-06-08 11:30:42 415

转载 STL源码学习----内存管理

1, allocator SGI STL 的头文件defalloc.h中有一个符合标准的名为allocator的内存分配器,它只是简单地将::operator new 和::operator delete做了一层薄薄的封装。在SGI STL的容器和算法部分从来没有用到这个内存分配器。在此略过。2, STL 的内存分配策略首先简要介绍一下STL中对内存分配的规划当用户用new构造一个对象的时候,

2017-06-07 19:29:44 222

转载 进程的用户栈和内核栈

进程是程序的一次执行过程。用剧本和演出来类比,程序相当于剧本,而进程则相当于剧本的一次演出,舞台、灯光则相当于进程的运行环境。 进程的堆栈 每个进程都有自己的堆栈,内核在创建一个新的进程时,在创建进程控制块task_struct的同时,也为进程创建自己堆栈。一个进程 有2个堆栈,用户堆栈和系统堆栈;用户堆栈的空间指向用户地址空间,内核堆栈的空间指向内核地址空间。当进程在用户态运行时,CPU堆栈指

2017-06-07 11:37:52 1764

转载 IO多路复用之epoll总结

转载自http://www.cnblogs.com/Anker/archive/2013/08/17/3263780.html IO多路复用之epoll总结 1、基本知识  epoll是在2.6内核中提出的,是之前的select和poll的增强版本。相对于select和poll来说,epoll更加灵活,没有描述符限制。epoll使用一个文件描述符管理多个描述符,将用户关系的文件描述符的事件存放到

2017-06-06 16:23:54 477

原创 c++对象的内存布局

以下均为linux64位机器上实验数据,指针大小为8字节 1.空类class N{};N n;sizeof(n) //等于1 编译器会安插一个char字节以保证其每个实例都有唯一的地址 2.无虚函数无继承类class A{public: int a; char b; void func(){};};A a;sizeof(a) //等

2017-06-06 16:05:40 263

原创 激光SLAM导航系列(五)局部路径规划

局部路径规划 局部路径规划简介 机器人在获得目的地信息后,首先经过全局路径规划规划出一条大致可行的路线,然后调用局部路径规划器根据这条路线及costmap的信息规划出机器人在局部时做出具体行动策略,ROS中主要是使用了DWA算法。在ROS中每当move_base处于规划状态就调用DWA算法计算出一条最佳的速度指令,发送给机器人运动底盘执行。DWA算法 DWA算法全称为dynamic wi

2017-06-04 21:05:00 13537 3

原创 什么是大学精神

转载自光明日报   http://epaper.gmw.cn/gmrb/html/2014-10/20/nw.D110000gmrb_20141020_4-07.htm首都师范大学文学院 陶东风   大学文化是普遍的,因为大学秉持的价值和追求的利益具有普遍性,也因为大学文化的核心或曰大学精神,是不同专业和学科都要遵循一些基本原则和共同态度,还因为大学培养的是有教养的公民,是具有明达理性,言谈优

2017-05-31 16:01:25 538

转载 在多线程中使用静态方法是否有线程安全问题

在多线程中使用静态方法是否有线程安全问题 类的成员分为两类,静态成员(static member)和实例成员(instance member)。静态成员属于类,实例成员则属于对象,即类的实例。简单讨论一下在一个类中使用静态字段(static field)和静态方法(static method)是否会有线程安全问题。 我们在知道, 静态字段(static field)和静态方法(static met

2017-05-22 10:11:51 433

转载 Linux虚拟地址空间布局

Linux虚拟地址空间布局 在多任务操作系统中,每个进程都运行在属于自己的内存沙盘中。这个沙盘就是虚拟地址空间(Virtual Address Space),在32位模式下它是一个4GB的内存地址块。在Linux系统中, 内核进程和用户进程所占的虚拟内存比例是1:3,而Windows系统为2:2(通过设置Large-Address-Aware Executables标志也可为1:3)。这并不意味着内

2017-05-09 16:10:04 265

转载 socket函数send和recv函数

socket函数send和recv函数Socket的Send,Recv的长度问题:一个包没有固定长度,以太网限制在46-1500字节,1500就是以太网的MTU,超过这个量,TCP会为IP数据报设置偏移量进行分片传输,现在一般可允许应用层设置8k(NTFS系统)的缓冲区,8k的数据由底层分片,而应用层看来只是一次发送。 windows的缓冲区经验值是4k。 Socket本身分为两种,流(TCP)

2017-05-09 09:32:39 285

转载 linux共享内存原理剖析

linux共享内存原理剖析共享内存区域是被多个进程共享的一部分物理内存。如果多个进程都把该内存区域映射到自己的虚拟地址空间,则这些进程就都可以直接访问该共享内存区域,从而可以通过该区域进行通信。共享内存是进程间共享数据的一种最快的方法,一个进程向共享内存区域写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容。这块共享虚拟内存的页面,出现在每一个共享该页面的进程的页表中。但是它不需要在所有

2017-05-08 16:41:14 1811

转载 操作系统为什么要分用户态和内核态

在CPU的所有指令中,有一些指令是非常危险的,如果错用,将导致整个系统崩溃。比如:清内存、设置时钟等。如果所有的程序都能使用这些指令,那么你的系统一天死机n回就不足为奇了。所以,CPU将指令分为特权指令和非特权指令,对于那些危险的指令,只允许操作系统及其相关模块使用,普通的应用程序只能使用那些不会造成灾难的指令。Intel的CPU将特权级别分为4个级别:RING0,RING1,RING2,RING3

2017-05-08 10:39:20 407

原创 激光SLAM导航系列(四)全局路径规划

全局路径规划简介 机器人移动到目的地需要在做出具体移动策略之前先进行全局路径规划,ROS的navigation中使用global_planner包提供的一系列全局规划的算法接口(包括A*,Dijkstra)。 在本文中我们主要使用A*算法来进行全局路径规划。 A算法* A*(A-Star)算法是一种静态路网中求解最短路径最有效的直接搜索方法,也是解决许多搜索问题的有效算法。算法中的距

2017-05-08 09:25:39 4212 1

转载 IP协议详解

协议森林 我尽力 (IP协议详解)作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢!在粗略了解了IP接力和IP地址后,我们再反过来,看一看IP协议的具体细节和设计哲学。IPv4与IPv6头部的对比我们已经在IP接力中介绍过,一个IP包分为头部(header)和数据(payload/data)两部分。头部是为了实现IP通信必须的附加信息

2017-05-07 23:30:34 238

原创 开始写个纸牌游戏(服务端&客户端)

一直有这个想法好久,和同学打了几年LOL,实在打厌烦了。但有时无聊又没又什么好玩的联机游戏,而且最近实在太忙,需要一些快餐式游戏,就想到了平时常常在图书馆前玩的七王五二三,本想网上搜个这个游戏直接来玩起,无奈搜了大半天也没找到这个纸牌游戏,那好,就自己来写吧。 先想下怎么设计,想了半天什么多线程多进程,发现这游戏就是按玩家顺序轮流来的,感觉就最简单阻塞同步就好了。 下面记录下设计思路,全是草图。

2017-05-07 23:22:46 1525 1

原创 激光SLAM导航系列(三)Costmap(代价地图)(下)

costmap程序架构 接上一期,通过阅读indigo版本的costmap源码包,简单整理了下costmap的程序架构。 在move_base刚启动时就建立了两个costmap,而这两个costmap都加载了三个Layer插件,它们的初始化过程如上图所示。 StaticLayer主要为处理gmapping或者amcl等产生的静态地图。 ObstacLayer主要处理机器人移动过程

2017-05-06 16:17:06 3791 1

原创 激光SLAM导航系列(三)Costmap(代价地图)(上)

Costmap(代价地图)(上) Costmap是机器人收集传感器信息建立和更新的二维或三维地图,可以从下图简要了解。 上图中,红色部分代表costmap中的障碍物,蓝色部分表示通过机器人内切圆半径膨胀出的障碍,红色多边形是footprint(机器人轮廓的垂直投影)。为了避免碰撞,footprint不应该和红色部分有交叉,机器人中心不应该与蓝色部分有交叉。 ROS的代价地图(cos

2017-05-04 19:13:30 9814 2

原创 激光SLAM导航系列(二)SLAM与导航系统框架

激光SLAM系统框架在激光SLAM系统中,Gmapping获取扫描的激光雷达信息以及里程计数据可动态的生成2D栅格地图。导航包则利用这个栅格地图,里程计数据和激光雷达数据做出适合的路径规划和定位,最后转换为机器人的速度指令。

2017-05-04 10:12:55 11125

原创 激光SLAM导航系列(一)SLAM与导航基本原理

激光SLAM基本原理基本原理

2017-05-04 10:01:47 35107

原创 激光SLAM系列之启程

现在开始陆续更新最近在ROS下利用激光雷达进行SLAM建图,并用ROS提供的move_base和amcl等包进行导航的研究。主要是对SLAM和导航的源代码的剖析,以及一些平时调试的心得和案例。^  ^

2017-05-03 23:02:38 1623

翻译 条件变量pthread_cond_signal、pthread_cond_wait

pthread_cond_signal函数的作用是发送一个信号给另外一个正在处于阻塞等待状态的线程,使其脱离阻塞状态,继续执行.如果没有线程处在阻塞等待状态,pthread_cond_signal也会成功返回。但使用pthread_cond_signal不会有“惊群现象”产生,他最多只给一个线程发信号。假如有多个线程正在阻塞等待着这个条件变量的话,那么是根据各等待线程优先级的高低确定哪个线

2017-05-03 15:45:44 357

转载 二分查找

转自:http://blog.csdn.net/int64ago/article/details/7425727 你真的会二分查找吗?       看到这个标题无论你是处于怎样的心理进来看了,我觉得都是值得的。因为这个问题太简单,任何一个开始接触“真正”算法基本都是从二分查找开始的。至于二分查找都不知道是什么的可以先去找别的资料看下,再来看这篇文章。既然很简单,

2017-03-08 19:48:19 220

转载 windows下多线程通信方法

转载自richerg85 http://blog.csdn.net/richerg85/article/details/7655840多线程知识简介同一进程中可以包含多个线程,由于进程中的多个线程可以共享进程中的资源,所以使同一进程中的多个线程之间通信相对比较简单。当需要有多个线程来访问一个全局变量时,通常我们会在这个全局变量前加上volatile声明,来告诉编译器这个全局

2016-08-13 11:10:23 309

提示
确定要删除当前文章?
取消 删除