- 博客(43)
- 收藏
- 关注
原创 kd tree学习
目前在看apollo的高精地图的实现。里面有一些关于kdtree的实现。参考文档:https://zhuanlan.zhihu.com/p/112246942 https://blog.youkuaiyun.com/silangquan/article/details/41483689简介kdtree 是k-dimensional tree的简称,就是k维树,是一种分割k维数据空间的数据结构。主要应用于多维空间关键数据的搜索(如:范围搜索和最近邻搜索)。比如激光雷达...
2021-04-15 15:34:20
393
原创 windows安装双系统ubuntu
1.配置 购买的是华为honor hunter cpu:i7-10750 内存:32G 硬盘:1T2.安装流程2.1查看bios方式 win+R然后输入msinfo32现在一般的电脑都是UEFI方式了,所以我下面说的都是该方式的安装情况2.2 查看硬盘情况 右击我的电脑,查看管理通过点击磁盘管理可以查看是一块磁盘还是两块磁盘如下图由于我的磁盘1是U盘,所以我的电脑是一块磁盘。下面介绍的也是以该方式...
2021-01-07 10:15:08
296
原创 ros navigation 局部路径算法dwa解析(一)
继ros里面A*全局规划之后,再解析局部路径算法dwa的整个算法调用过程,至于细节放到后面的章节去写 dwa的整体思路网上有很多相关的资料了https://blog.youkuaiyun.com/heyijia0327/article/details/44983551具体的可以参看这一篇博客 本篇文章的话只要是说navigation包里面的调用过程,不关心整体思路前期将局部路径...
2019-10-06 11:07:48
5329
原创 ros navigation 解析之A*路径规划
最近在看ros的导航规划算法,后面打算一一解析一边,先从global planner的A*算法开始吧。 ros里面的全局规划用的是global_planner而不是navfn包,修改这种选择也比较简单,只需要将move_base参数的global_planner替换为global_planner/GlobalPlanner即可。 然后全局规...
2019-09-30 09:27:53
8725
21
原创 算法(一)
最近想看看关于算法的东西,所以开了这一系列的博文,如果有问题,希望大家留言。如果写的比较杂乱,也希望看的人不要介怀。 1.在网上面找到了斯坦福之前的一个课程准备照着这个慢慢看 https://web.stanford.edu/class/cs97si/ 2.代数 幂的和 上面两个结果记住即...
2019-09-11 08:24:56
178
原创 关于舵轮AGV 的数学模型
最近在搞舵轮agv的控制。在网上看到了乡下老农写的模型,看起来很直观也很清楚。链接:https://www.cnblogs.com/agvcfy/p/9498556.html最关键的就是w1=w2=w可以得到v1 = v*(R1/R);v2=v*(R2/R)...
2019-08-29 15:16:24
5212
11
原创 ros navigation 安装编译问题
1. unable to find SuiteSparsesudo apt-get install libsuitesparse-dev2. could not find libg2osudo apt-get install ros-kinetic-libg2o
2019-07-23 08:13:20
2199
1
原创 ros基础介绍(1)
我们跳过ros系统的安装和运行过程,直接进入理论部分。ros基础概念ros系统里面的基础框架为:节点、话题、服务和参数话题和服务是节点之间的两种通讯方式。话题模型其组成如图所示:为单向通信一个节点为发布者(publisher),另一个为订阅者(subscriber)。话题主题为(/example),消息类型为(std_msgs/String)话题模型(发...
2019-06-07 21:16:20
856
原创 ros中launch文件的使用
1.launch 文件使用方式roslaunch package_name file.launch2.launch文件格式以及读取方式 launch文件格式XML格式。 roslaunch 读取launch文件的时候,顺序的读取。include标签被,最先处理,其它的标签全都按顺序读取,所以对于同一个参数,如果有重复定义,最后的参数生效。3.标记值的参数设置 ...
2019-01-24 17:10:50
2096
原创 进程管理1
1.进程简介进程事处于执行器的程序。程序本身并不是进程,进程是处于执行期的程序以及相关资源的总称。linux内核中,调用fork来创建进程,fork()实际上是由clone实现的。
2017-12-14 19:15:35
240
原创 getopt,getopt_long函数
1.getopt函数 给函数是为了帮助命令开发者以一致的风格来编写命令行选项。函数原型:int getopt(int argc, char* const argv[], const char* options);extern int optind,opterr, optopt;extern void* optarg;返回值:下一个选项字符,如果所有的选项都被执行了返回-1.
2017-09-30 16:01:06
336
原创 Linux开机引导和启动过程
1.简介linux开机启动的过程可以大致分为两个部分1.引导过程2.启动过程引导过程开始于上电开始结束于内核初始化完成以及systemd进程启动完成启动过程则是接管剩余的工作,直至操作系统启动完成进入可操作状态。2.引导过程 引导过程可以分为BIOS上电自检引导初始化程序内核初始化启动systemd1.BIOS上电自检(POST)就是Basic I/
2017-09-26 10:48:20
2306
1
原创 ubuntu网络配置
ubuntu下面的网络配置文件为/etc/network/interfaces所以如果想要修改网络相关配置,需要进入到该文件下。1.dhcp配置auto eth0 iface eth0 inet dhcp2.静态网络配置auto eth0 iface eth0 inet staticaddress 10.0.0.1netmask 255.255.255.0
2017-04-11 10:36:37
417
原创 标准I/O库
1.简介标准I/O库控制比如缓冲分配和使I/O以最理想的大小操作,从而避免我们担心正确的缓冲大小。2.流和文件对象 当一个文件打开后,文件描述符被返回,而且文件描述符被用来I/O操作。标准I/O库,我们讨论流(streams)。当我们用标准I/O库打开或者创建一个文件,我们就说文件已经和一个流关联了。2.1流的定向(a stream's orientation) AS
2017-03-29 11:33:13
426
原创 futimens,utimensat,utimes函数
1.futimens,utimensat函数原型#includeint futimens(int fd, const struct timespec times[2]);int utimensat(int fd, const char* path, const struct time spec times[2], int flag);成功返回0,失败返回-1.2.futimen
2017-03-23 17:31:46
2019
原创 link,linkat,unlink,unlinkat,remove函数
1.link,linkat函数1.1函数原型#include int link(const char* existingpath, const char* newpath);int linkat(int efd, const char* existingpath, int nfd, const char* newpath,int flag);成功返回0,失败返回-1.1.2
2017-03-22 12:26:58
2201
1
原创 编译时候遇到的杂事
1.编译文件的时候加载失败。可能是库文件所在路径没有加载成功 可以在/etc/ld.so.conf文件中修改,在后面加上库文件所在的路径名,然后退出执行ldconfig即可解决。
2017-03-22 09:43:47
245
原创 文件类型、文件用户ID组ID、文件访问许可
1.文件类型1.文件类型分类a.普通文件:最常见的文件类型,该类文件中包含一个类型的数据。对于UNIX内核来说数据是文本还是二进制文件并没有区别。 所有的普通文件内容的解释都留给应用程序去操作这个文件。一个最大的例外是二进制可执行文件。为了执行一个程序,内核必须知道它的类型。所有的二进制可执行文件遵从一个形式允许 内核识别去哪里装在程序的文本和数据。b.目录:包含其它
2017-03-08 14:59:53
1710
原创 stat函数
1.函数原型#includeint stat(const char* pathname, struct stat* buf);int stat(int fd, struct stat* buf);int stat(const char* pathname, strcut stat* buf);int fstatat(int fd, const char* pathname, s
2017-03-07 09:06:22
471
原创 fcntl函数
1.函数原型#includeint fcntl(int fd, int cmd, .../*int arg*/);返回值:成功依赖于cmd,失败返回-1.该函数能够改变已经打开文件的属性。2.cmd相关的介绍第三个参数通常是根据cmd而来的一个整数。但是后面当我们讨论记录锁的时候,第三个参数时一个指向结构体的指针。fcntl函数有五种作用。1.复制一个存在的
2017-03-06 09:07:11
399
原创 sync,fsync,fdatasync函数
1.写时延迟通常unix系统有buffer cache或者page cache在kernel里面,通过这些磁盘I/O来进行工作。当我们写数据到文件时,数据通常被内核拷贝到cache里面以待以后写到磁盘。这被称为写时延迟。内核最终都会讲写时延迟的数据块写到磁盘中,通常当它需要重新使用buffer的来写到磁盘时。为了保证文件系统和cache内容在磁盘上的一致性,从而有了sync fsy
2017-03-03 15:39:05
436
原创 原子操作
1.原子操作的原因以前的UNIX系统不支持O_APPEND选线,所以程序需要如下编辑if(seek(fd,0L,2) printf("seek error\n");if(write(fd,buf,100)!=100) printf("write error");但是该程序在多进程(线程)里面会有问题。假设两个独立的进程A,B,都有打开同一个文件,但是都没有O_APPEN
2017-03-02 09:52:54
370
原创 文件共享
UNIX系统支持在不同进程之间共享打开文件。下面是关于内核对于所有I/O使用的数据类型1.文件共享简介内核使用三种数据类型来表示打开文件,并且它们之间的关系决定了一个进程在文件共享方面对于另一个进程的影响。1.每一个进程都有一个进程表的入口。在进程表入口里面又一个打开文件的描述符表,文件描述符表里面是所有的文件描述符。和文件描述符相关的是:a.文件描述符标志(the file
2017-02-28 14:57:31
366
原创 read/write函数
read函数1.函数原型#includesize_t read(int fd, void* but, size_t nbytes);返回值:成功返回读到的字节数,如果在文件末尾返回0,失败返回-1.2.如果读到字节数少于需求的字节数的情况1.当读入普通文件的时候,如果在读取出要求的字节数之前到达了文件的末尾。比如:文件里面还有30个字节没有读区,但是我们要求读100
2017-02-27 13:58:46
468
原创 lseek函数
1.函数原型off_t lseek(int fd, off_t offset, int whence);成功返回文件当前偏移量,失败返回-1。每一个文件都有一个相关的当前文件偏移量,通常是一个从文件起始位置计算得到的非负整数。读和写操作都是从文件当前偏移量开始的,并且是文件当前偏移量增加相应的读和写的字节(byte)。一般当文件打开的时候文件偏移量初始化为0,除非O_APPEN
2017-02-23 14:49:15
764
原创 文件I/O
1.文件I/O简介 文件I/O是非缓冲I/O,这意味着我们read/write的时候将会调用系统函数。非缓冲I/O的函数属于POSIX1规范和the Single UNIX Specification,但是不属于ISO C规范。 大多数的文件操作都可以通过5个函数来实现:open,read,write,lseek,close。2.标准I/O的文件描述符POSIX
2017-02-15 19:05:29
305
原创 更改用户id
unix系统里面有很多用户id。如real user id,effective user id,saved set-user id想要修改里面的id需要注意的情况。
2017-01-17 09:43:38
1395
原创 vfork和exit简单介绍
vfork函数和fork函数基本一致。但是它并不拷贝父进程的地址空间。而是在执行exec或exit之前在父进程地址空间执行程序。除此之外,vfork还能够保证子进程先执行,直到它调用了exit或者exec之后父进程才运行。
2017-01-01 10:33:32
447
原创 fork函数
1.函数原型#includepid_t fork(void);返回值为0是子进程,返回值为正数是父进程,-1为错误。2.写时复制fork函数采用写实复制(copy-on-write)技术。fork的时候父子进程共享数据,堆,栈等。当父子进程需要改变其中的量时,才会复制一份。3.关于父子进程相同和不相同的东西。3.1父子进程指向不同的file fd, 但是两个file f
2016-12-30 18:43:37
228
原创 linux/unix关于程序的退出函数
程序退出函数c程序的退出方法有8种:其中5种正常退出的以及3种异常退出的。5种正常退出方式:1.return from main 2.calling exit 3.calling _exit or _Exit 4.return of the last thread from it
2016-12-29 12:25:25
2069
原创 no entry for pthread_cond_wait
man pthread_cond_waitno entry for pthread_cond_wait需要安装sudo apt-get install manages-posix manages-posix-dev
2016-12-28 16:56:57
255
原创 no manual entry for pthread_cond_wait
man pthread_cond_waitno manual entry for pthread_cond_wait你需要安装相应的文件页。sudo apt-get install manages-posix manages-posix-dev
2016-12-28 16:53:24
560
原创 demsg 命令
dmesg 命令:用来打印或者控制(ring buffer)内核环缓冲区,默认的功能是读取(ring buffer)内核环缓冲区内的所有信息。dmesg用法: dmesg [options] dmesg -C:清除ring buffer dmesg -c:打印后清除ring buffer dmesg -d:打印时间戳和两条信息间的时间间隔
2016-09-06 22:48:25
5429
原创 df 命令详解
df命令是用来查看linux系统服务器文件系统的磁盘使用情况。可以用该命令来查看已经使用了多少空间,还有多少空间可用。 df命令格式为 df [选线] [文件名] df命令功能:显示指定磁盘文件的使用情况。如果没有指定文件,则显示所有挂载的文件系统的磁盘使用情况 选项可以有 -a:全部文件系统列表,包含虚拟文件系统
2016-09-01 18:54:29
20404
2
原创 多线程同步问题(1)互斥锁和条件变量
最近一段时间学习了很多关于多线程的东西,同时项目中也多是此类东西,因此记录一下1.多线程的问题在于同步,主要是各个线程的时间片分配,不能总是给一个线程cpu时间,让其他线程没有cpu可用2.多线程同步有很多种方法,目前工作中用到的多是互斥锁,读写锁,条件变量等。3.各种方法的解释:互斥锁:互斥锁的理解很简单,就是当我用了这把锁之后,在我把锁释放之前,都不能够给别人用。int p
2016-07-14 12:33:38
375
原创 apue学习
最近工作以及学习中用到和学到的东西:1.pthread_cond_wait该函数是一个条件变量出发函数。只有当对应的条件触发时才会继续往下运行pthread_cond_waitdtime和上面函数是一样的,只不过有一个等待时间。当超时时就会继续向下运行。2.size用于查看代码段,正文段和bss段的大小
2016-06-01 09:49:24
282
原创 一些简单的linux配置
1.设置高亮显示,设置行号自动换行等。vi ~/.vimrcsyntax onset showmodeset autowriteset numset autoindentset showmatch
2016-05-16 17:51:31
265
原创 编辑交叉编译器
1.安装环境是linux, Ubuntu2.使用的是crosstool-ng 编译交叉工具链3.需要安装一些包 命令:sudo apt-get install grep sed bash cut install make gcc awk bison flex makeinfo automake libtool stat curl cvspatch tar gzip bzip2 lzma
2016-04-01 13:57:22
285
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人