自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(70)
  • 收藏
  • 关注

原创 Cartographer使用3D激光雷达建立2D导航图(概率栅格地图)

Cartographer使用3d激光雷达建2d图1.尝试过的方法1.1 参考官方demo_backpack_3d.launch文件,直接建图1.2在线或离线生成pbstream文件,再转成pgm,yaml文件2.最终方案!使用3d点云数据直接在rviz上生成2d图(导航图,栅格图)引言:确切说应该是使用3d激光雷达建立概率栅格地图,一开始我使用了官方demo_backpack_3d.launch经过修改一些参数,但在rviz中显示的图,只有黑色和灰色,也就是代表的障碍物体和未知区域,缺少白色区域就是已知区

2020-09-25 09:17:39 12162 27

原创 数据的IO和复用

poll()函数的机制与select()类似,管理多个描述符也是进行轮询,根据描述符的状态进行处理,但是poll()没有最大文件描述符数量的限制(但是数量过大后性能也是会下降)。对于send()函数和write()函数之间的差别是表示发送方式的flag,当flag为0时,send()函数和write()函数完全一致。Linux操作系统中的IO函数主要有read()、write()、recv()、send()、recvmsg()、sendmsg()、readv()、writev()。

2023-06-09 13:32:40 1274

原创 本地进程间通信

在使用socket()函数创建套接字时,当需要在本地进程间进行通信而不涉及网络传输时,可以使用AF_UNIX或AF_LOCAL作为domain参数的取值。使用Unix域套接字时,可以通过指定文件系统中的一个路径作为套接字的地址,不同进程可以通过该路径来进行通信。常见的应用场景包括在同一台计算机上的进程间通信、服务器进程与其它进程间的通信等。总结来说,当需要在本地进程间进行通信,不涉及网络传输时,可以使用AF_UNIX或AF_LOCAL作为domain参数的取值,并使用Unix域套接字来实现进程间通信。

2023-05-18 15:01:58 860

原创 常用的设计模式之二(行为型模式)

这个示例中,Subject 定义了主题类的接口,包括添加、删除观察者和通知观察者的方法, ConcreteSubject 继承了 Subject,并实现了具体的主题类,其中 setState 方法改变主题的状态,并调用 notify 方法通知所有观察者;然后定义一个模板方法,其中包含了一个算法的骨架,它通过调用基类中的方法来实现算法的各个步骤。模板模式的优点在于它使得算法的框架和具体实现分离,降低了实现算法的难度和维护成本,并且可以在不改变算法结构的情况下,方便地扩展和修改算法的具体实现。

2023-05-04 15:35:47 803

原创 基于UDP协议的接受和发送

UDP协议(User Daagram Protocol)是无连接的,不可靠的网络协议。本章将介绍如何使用UDP协议进行程序设计,对UDP编程的基本框架进行介绍并给出程序设计的例子。

2023-04-14 09:24:04 174

原创 TCP网络编程基础

TCP协议(Transmission Control Protocol)是TCP/IP协议中很重要的一个协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议。它是一种端到端的协议,即它只在通信的两个端点之间起作用,并且不保证数据包的交付。TCP协议是一种可靠的协议,它通过确认和重传机制来保证数据传输的可靠性。

2023-04-11 09:48:46 285

原创 主机字节序和网络字节序

网络字节序采用大端字节序,即高位字节存放在内存的低地址端,低位字节存放在内存的高地址端。但由于网络的特点是将Internet上不同的网络设备和主机进行连接和通信,这决定了使用网络进行开发的程序要兼容于各式各样的设备,同一个数据在不同的设备上要有唯一的含义。例如,对于十六进制数0x12345678,大端字节序将其存储为0x12 0x34 0x56 0x78,而小端字节序将其存储为0x78 0x56 0x34 0x124。字节序是计算机存储多字节数据的方式,目前主流的方式有两种:大端字节序和小端字节序。

2023-04-10 20:04:40 483

原创 opencv入门知识略讲

【代码】opencv入门知识略讲。

2023-03-31 11:11:09 123

原创 深入浅出 Fast DDS网络协议(入门篇)

如果你是机器人领域的学者,那一定听说过ROS1和ROS2,但这两个有什么区别呢?ROS1作为一个通信中间件,在两两节点建立TCP/UDP连接之前,通过发布者和订阅者通过xmlRPC和master进行数据交换和查询,待匹配到相同的需求(topic)时,Master向订阅者提供发布者的地址和信息,然后两者再通过xmlRPC进行建立TCP/UDP的连接。但是,在ROS1在工业领域并不能满足实时、安全、认证、可靠。所以在ROS2中引入了FastDDS网络协议。

2023-03-30 12:14:47 1723 2

原创 CMake项目实战指令详细分析

CMake是一个跨平台的自动化构建系统,可以用简单的语句来描述所有平台的编译过程。CMake可以输出各种各样的编译文件,如Makefile、VisualStudio等。CMake主要是编写CMakeLists.txt文件,然后用cmake命令将CMakeLists.txt文件转化为make所需要的makefile文件,最后用make命令编译源码生成可执行程序或共享库(so (shared object))。

2023-03-29 12:35:28 358

原创 C++并发编程之五 高级线程管理

线程池是一种管理多个线程的技术,它可以减少线程的创建和销毁的开销,提高并发性能。线程池中有一定数量的空闲线程,当有新的任务到来时,就从池中分配一个线程来执行任务,当任务完成后,线程返回池中等待下一个任务。这样可以避免频繁地创建和销毁线程,节省资源和时间。在前面我们引入了线程的通信和同步手段,那么为什么还要引入线程池呢?

2023-03-16 22:04:05 467 1

原创 C++编程之 可变参数模板

在这个函数中,我们使用展开语句来展开args参数包,将参数包中的每个元素展开成一个独立的语句std::cout

2023-03-16 21:25:33 523 1

原创 C++17编程之 折叠表达式

折叠表达式是一种新的语言特性,它使得可以对包含若干个参数的可变参数模板进行操作,同时将其所有参数合并成一个值。比如,如果你用减法或除法作为一元右折叠的操作符,那么你得到的结果可能和你预期的不一样。(4)当一元折叠表达式中的参数包为空时,只有三个运算符(&& || 以及逗号)有缺省值,其中&&的缺省值为true,||的缺省值为false,逗号的缺省值为void()。(3)初始值在右边的为右折叠,展开之后从右边开始折叠。折叠表达式共有四种语法形式,分别为一元的左折叠和右折叠,以及二元的左折叠和右折叠。

2023-03-16 21:17:19 821

原创 C++编程之 std::forward

当向wrapper里面传入1的时候,wrapper推导认为T是一个右值引用int&& ,通过引用折叠原则,int && + && =int&& ,相当于wrapper(int&& arg),同时我们知道了T推导为int&&,那么在向func传递的时候,就是func(std::forward<int&&>(arg)),那么func会以左值引用的形式func(int&& x)调用arg。对于一个模板函数或类模板,当传递一个参数时,如果该参数是左值,那么传递的就是一个左值引用;

2023-03-16 12:12:24 6261 1

原创 C++编程之 万能引用

万能引用是一种可以同时接受左值或右值的引用,它的形式是T&&,其中T是一个模板参数。万能引用不是C++的一个新特性,而是利用了模板类型推导和引用折叠的规则来实现的功能。你可以看到,在调用g时,t既可以绑定到左值上也可以绑定到右值上,并且保持了原来实参的属性。这就实现了万能引用。模板类型推导是指在调用一个模板函数时,编译器会根据传入的实参来推导出模板参数的类型。结合这两个规则,我们就可以理解万能引用的工作原理。

2023-03-16 11:03:08 999 1

原创 C++并发编程之四 内存模型和原子操作

这样会浪费时间和空间。需要注意的是,在test_and_set()和clear()方法中,我们都使用了内存序参数std::memory_order_acquire和std::memory_order_release,这是为了确保对内存的访问是有序的。除此之外,std::atomic<>泛化模板还支持一些其他的操作,如fetch_add、fetch_sub、fetch_and、fetch_or、fetch_xor等,这些操作可以原子地执行加法、减法、按位与、按位或和按位异或等运算,并返回操作前的值。

2023-03-15 17:36:03 1448

原创 C++并发编程之三 并发操作的同步

C++并发编程实战三

2023-03-09 22:46:58 1468 3

原创 C++并发编程之二 在线程间共享数据

C++并发之探索编程二实战

2023-03-07 22:36:24 1611 4

原创 在STL中emplace_back和push_back的区别

关于stl的一些知识点

2023-03-07 17:03:09 447

原创 C++并发编程之一 初识线程和线程管控

C++并发编程探索

2023-03-06 23:19:12 248

原创 std::bind()函数详解

std::bind()函数详解

2023-03-06 23:14:28 8466

原创 assert()函数解析

调试assert()函数的用法

2023-03-06 21:16:53 892

原创 常用的设计模式之一(创建型模式)

常用设计模式简介

2023-03-05 22:23:55 255

原创 ROS机器人操作系统-简要概述

ROS机器人操作系统的简要概述

2023-03-02 21:14:55 537

原创 Linux网络编程第2章Linux编程环境

文章目录2.1 Linux环境下的编辑器2.1.1 Vim使用简介2.1.2 使用Vim建立文件2.1.3 使用Vim编辑文本2.1.4 Vim的格式设置2.1.5 Vim配置文件.vimrc2.1.6 使用其他编辑器2.2 Linux下的GCC编译器工具集2.2.1 GCC简介2.2.2 编译程序的基本知识2.2.3 单个文件编译成执行文件2.2.4 编译生成目标文件2.2.5 多文件编译2.2.6 预处理2.2.7 编译成汇编语言2.2.8 生成和使用静态链接库2.2.9 生成动态链接库2.2.10 动

2022-05-16 20:46:36 659

原创 Linux网络编程第1章Linux操作系统概述

文章目录1.1 linux的系统架构1.1.1 Linux内核的主要模块1.进程调度SCHED2.内存管理MMU3.虚拟文件系统VFS4.网络接口5.进程间通信1.1.2 Linux的文件结构1.1 linux的系统架构Linux系统从应用角度来看,分为内核空间和用户空间两个部分。内核空间是Linux操作系统的主要部分,但是仅有内核的操作系统是不能完成用户任务的。丰富并且功能强大的应用程序包是一个操作系统成功的必要条件。1.1.1 Linux内核的主要模块Linux的内核主要由5个子系统组成:进程调

2022-05-02 16:01:02 313

原创 整理的C++面经(较全)

C++面试过程中整理的知识点

2022-04-04 09:55:44 80027 39

原创 运行ORBSLAM2时候发生的一些错误解决办法

错误一:Gtk-Message: Failed to load module "canberra-gtk-module"解决办法:$ sudo apt-get install libcanberra-gtk-module错误二:运行ORBSLAM_with_pointcloud_map的时候出现了段错误解决办法在CMAKELISTS中取消编译器的一些设置在CMAKELISTS中删除-march=nativeset(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall

2021-12-13 10:58:32 1657 5

原创 ubuntu重装系统记录

文章目录重装系统运行raft的时候报错重装系统运行raft的时候报错cv2.error: OpenCV(3.4.2) /tmp/build/80754af9/opencv-suite_1535558553474/work/modules/highgui/src/window.cpp:632: error: (-2:Unspecified error) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x

2021-12-07 17:52:47 202

原创 Tmux的使用方法

文章目录安装Tmux启动新建会话分离会话列出当前所有会话接入会话杀死会话切换会话重命名会话在tmux窗口中的快捷键使用最简操作流程窗格操作划分上下两个窗格划分左右两个窗口移动光标窗口快捷键安装Tmuxsudo apt-get install tmux启动tmux新建会话tmux new -s <session-name>分离会话tmux detach列出当前所有会话tmux ls接入会话tmux attach -t <session-name>杀死会话tm

2021-08-06 21:23:51 245

原创 Docker使用教程

文章目录docker 查看版本号列出本机所有的image文件删除 image 文件强制删除image文件将image文件从仓库抓取到本地拉取并运行程序对于不会自动终止的容器,必须使用docker container kill命令手动终止交互式运行容器查看系统的当前版本列出当前已经下载好的镜像删除虚悬镜像删除镜像启动一个容器启动已终止容器获取容器的输出信息终止一个运行中的容器查看终止状态下的容器重启容器进入容器导出容器导入容器快照删除容器清理所有处于终止状态的容器在官方仓库中搜索镜像docker 查看版本号

2021-08-06 21:22:56 162

转载 C++中四种cast转换

文章目录1.const_cast2.static_cast使用方法:static_cast详解基本类型数据转换举例如下:类上行和下行转换:3.dynamic_cast转换方式:指针类型引用类型4.reinterpret_cast5.为什么不使用C的强制转换?参考链接C++中四种类型转换是:static_cast, dynamic_cast, const_cast, reinterpret_cast1.const_cast用于将const变量转为非const2.static_cast用于各种隐式转换

2021-05-21 11:04:06 2208

转载 static关键字的作用

文章目录1.全局静态变量2.局部静态变量3.静态函数4.类的静态成员5.类的静态函数1.全局静态变量在全局变量前加上关键字static,全局变量就定义成一个全局静态变量.静态存储区,在整个程序运行期间一直存在。初始化:未经初始化的全局静态变量会被自动初始化为0(自动对象的值是任意的,除非他被显式初始化);作用域:全局静态变量在声明他的文件之外是不可见的,准确地说是从定义之处开始,到文件结尾。2.局部静态变量在局部变量之前加上关键字static,局部变量就成为一个局部静态变量。内存中的位置:静

2021-05-21 11:00:05 156

原创 图解HTTP第一章笔记

文章目录第一章网络基础TCP/IP1.应用层2.传输层3.网络层(又名网络互连层)4.链路层(又名数据链路层,网络接口层)TCP/IP通信传输流与HTTP关系密切的协议:IP ,TCP ,DNS1.负责传输的IP协议2.使用ARP协议凭借MAC地址进行通信3.确保可靠性的TCP协议4.负责域名解析的DNS服务5.各种协议与HTTP协议之间的关系第一章HTTP:超文本传输协议。客户端:通过发送请求获取服务器资源的Web浏览器等,都可称为客户端。网络基础TCP/IPTCP/IP协议族按层次分为以下4层

2021-05-19 15:10:52 222

原创 C++ Primer Plus阅读笔记第四章数组,字符串和指针

文章目录第四章 符合类型4.1 数组4.2 字符串4.3 字符串输入1.面向行的输入:getline()2.面向行的输入:get()3.混合输入字符串和数字出现的问题4.string类简介string对字符串的处理和c-风格的字符串之间的对比:5.string类型的变量进行面向行的输入4.4 结构简介1.创建结构分为两步:定义结构和创建结构变量2.作用域3.其他结构属性4.结构数组4.5 共用体1.使用共用体的场景4.6 指针和自由存储空间1.指针2.声明和初始化指针3.指针和数字4.使用new来分配内存5

2021-05-19 14:54:37 242

原创 OJ在线编程常见输入输出练习(C++)

第十题题目多个测试用例,每个测试用例一行。每行通过,隔开,有n个字符,n<100输出描述:对于每组用例输出一行排序后的字符串,用’,'隔开,无结尾空格示例1输入a,c,bbf,ddddnowcoder输出a,bb,cdddd,fnowcoder题解#include <iostream>#include <string>#include <algorithm>#include <vector>#include <

2021-05-16 15:14:10 1076

原创 C++中int *p[]和int (*p)[]的区别

int *p[n] 详细讲解int * p[2]是一个指向int型的指针数组,即:p是包含两个元素的指针数组,指针指向的是int型。也就是说p[0],p[1]是各指向一个一维数组的指针,指针指向的是int型。试例:#include <iostream>using namespace std;int main(){ int arr[2] = { 1,2 }; int arr1[3] = { 10,2,3 }; int* p[2]; p[0] = arr; p[1] = a

2021-03-14 11:34:59 4304 2

原创 error: ‘usleep’ was not declared in this scope

报错error: ‘usleep’ was not declared in this scope解决办法在出错程序的头文件中加入即可#include <unistd.h>

2021-03-06 14:48:36 1010

原创 git clone git@github.com失败

报错当我使用git clone git@github.com:…的时候,报错:Permission denied (publickey).fatal: Could not read from remote repository.Please make sure you have the correct access rightsand the repository exists.解决办法1.本地生成ssh key$ ssh-keygen -t rsa -C “youremail@example

2020-11-26 22:06:21 2925 2

原创 catkin:未找到命令

when i run$ catkin init error happened:catkin:未找到命令解决办法$ sudo apt-get update$ sudo apt-get install python-catkin-tools

2020-11-26 21:25:58 3336 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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